This commit is contained in:
Alexey Kudravtsev
2012-03-12 13:08:51 +04:00
parent 755a8d9116
commit ff0fd478a5
2 changed files with 22 additions and 8 deletions
@@ -53,7 +53,7 @@ public abstract class SourcePosition implements Navigatable{
public abstract Editor openEditor(boolean requestFocus);
private abstract static class SourcePositionCache extends SourcePosition {
private final @NotNull PsiFile myFile;
@NotNull private final PsiFile myFile;
private long myModificationStamp = -1L;
private PsiElement myPsiElement;
@@ -65,21 +65,26 @@ public abstract class SourcePosition implements Navigatable{
updateData();
}
@Override
@NotNull
public PsiFile getFile() {
return myFile;
}
@Override
public boolean canNavigate() {
return getFile().isValid();
}
@Override
public boolean canNavigateToSource() {
return canNavigate();
}
@Override
public void navigate(final boolean requestFocus) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
if (!canNavigate()) {
return;
@@ -89,6 +94,7 @@ public abstract class SourcePosition implements Navigatable{
});
}
@Override
public Editor openEditor(final boolean requestFocus) {
final PsiFile psiFile = getFile();
final Project project = psiFile.getProject();
@@ -120,12 +126,10 @@ public abstract class SourcePosition implements Navigatable{
return true;
}
final PsiElement psiElement = myPsiElement;
if (psiElement != null && !psiElement.isValid()) {
return true;
}
return false;
return psiElement != null && !psiElement.isValid();
}
@Override
public int getLine() {
updateData();
if (myLine == null) {
@@ -134,6 +138,7 @@ public abstract class SourcePosition implements Navigatable{
return myLine.intValue();
}
@Override
public int getOffset() {
updateData();
if (myOffset == null) {
@@ -142,6 +147,7 @@ public abstract class SourcePosition implements Navigatable{
return myOffset.intValue();
}
@Override
public PsiElement getElementAt() {
updateData();
if (myPsiElement == null) {
@@ -198,8 +204,6 @@ public abstract class SourcePosition implements Navigatable{
return null;
}
PsiElement element;
PsiElement rootElement = psiFile;
List<PsiFile> allFiles = psiFile.getViewProvider().getAllFiles();
@@ -213,6 +217,7 @@ public abstract class SourcePosition implements Navigatable{
}
}
PsiElement element;
while(true) {
final CharSequence charsSequence = document.getCharsSequence();
for (; startOffset < charsSequence.length(); startOffset++) {
@@ -240,6 +245,7 @@ public abstract class SourcePosition implements Navigatable{
public static SourcePosition createFromLineComputable(final PsiFile file, final Computable<Integer> line) {
return new SourcePositionCache(file) {
@Override
protected int calcLine() {
return line.compute();
}
@@ -248,6 +254,7 @@ public abstract class SourcePosition implements Navigatable{
public static SourcePosition createFromLine(final PsiFile file, final int line) {
return new SourcePositionCache(file) {
@Override
protected int calcLine() {
return line;
}
@@ -257,6 +264,7 @@ public abstract class SourcePosition implements Navigatable{
public static SourcePosition createFromOffset(final PsiFile file, final int offset) {
return new SourcePositionCache(file) {
@Override
protected int calcOffset() {
return offset;
}
@@ -273,10 +281,12 @@ public abstract class SourcePosition implements Navigatable{
psiFile = navigationElement.getContainingFile();
}
return new SourcePositionCache(psiFile) {
@Override
protected PsiElement calcPsiElement() {
return navigationElement;
}
@Override
protected int calcOffset() {
return navigationElement.getTextOffset();
}
@@ -285,7 +295,7 @@ public abstract class SourcePosition implements Navigatable{
public boolean equals(Object o) {
if(o instanceof SourcePosition) {
SourcePosition sourcePosition = ((SourcePosition)o);
SourcePosition sourcePosition = (SourcePosition)o;
return Comparing.equal(sourcePosition.getFile(), getFile()) && sourcePosition.getOffset() == getOffset();
}