diff --git a/java/java-impl/src/com/intellij/psi/impl/smartPointers/JavaAnchorProvider.java b/java/java-impl/src/com/intellij/psi/impl/smartPointers/JavaAnchorProvider.java index aa7469e0851a..17cb0d52175a 100644 --- a/java/java-impl/src/com/intellij/psi/impl/smartPointers/JavaAnchorProvider.java +++ b/java/java-impl/src/com/intellij/psi/impl/smartPointers/JavaAnchorProvider.java @@ -46,7 +46,7 @@ public class JavaAnchorProvider extends SmartPointerAnchorProvider { @Nullable @Override - public PsiElement getElement(@NotNull PsiElement anchor) { + public PsiElement restoreElement(@NotNull PsiElement anchor) { if (anchor instanceof PsiIdentifier) { PsiElement parent = anchor.getParent(); if (parent instanceof PsiJavaCodeReferenceElement) { // anonymous class, type diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java index e0558afcf0c5..b5116870e649 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java @@ -73,7 +73,7 @@ class AnchorElementInfo extends SelfElementInfo { if (range.getStartOffset() != getSyncStartOffset() || range.getEndOffset() != getSyncEndOffset()) return null; for (SmartPointerAnchorProvider provider : SmartPointerAnchorProvider.EP_NAME.getExtensions()) { - final PsiElement element = provider.getElement(anchor); + final PsiElement element = provider.restoreElement(anchor); if (element != null) return element; } return null; diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfoFactory.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfoFactory.java index efdc031f1beb..a06b41044aee 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfoFactory.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfoFactory.java @@ -58,9 +58,8 @@ public class AnchorElementInfoFactory implements SmartPointerElementInfoFactory PsiElement anchor = null; for (SmartPointerAnchorProvider provider : SmartPointerAnchorProvider.EP_NAME.getExtensions()) { anchor = provider.getAnchor(element); - if (anchor != null) break; + if (anchor != null && anchor.isPhysical()) return anchor; } - if (anchor != null && (!anchor.isPhysical() /*|| anchor.getTextRange()==null*/)) return null; return anchor; } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerAnchorProvider.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerAnchorProvider.java index 412a8be49177..51b76244d0d9 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerAnchorProvider.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerAnchorProvider.java @@ -29,8 +29,10 @@ public abstract class SmartPointerAnchorProvider { public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.smartPointer.anchorProvider"); /** + * Provides anchor used for restoring elements after stub-to-AST switch. + * One can use name identifier (such as tag or method name) as an anchor * @param element - * @return anchor to be used when restoring element after stub-to-AST switch + * @return anchor to be used when restoring element */ @Nullable public abstract PsiElement getAnchor(@NotNull PsiElement element); @@ -40,5 +42,5 @@ public abstract class SmartPointerAnchorProvider { * @return restored original element using anchor */ @Nullable - public abstract PsiElement getElement(@NotNull PsiElement anchor); + public abstract PsiElement restoreElement(@NotNull PsiElement anchor); } diff --git a/xml/impl/src/com/intellij/psi/impl/smartPointers/XmlAnchorProvider.java b/xml/impl/src/com/intellij/psi/impl/smartPointers/XmlAnchorProvider.java index 10d35944ebab..779d49418eeb 100644 --- a/xml/impl/src/com/intellij/psi/impl/smartPointers/XmlAnchorProvider.java +++ b/xml/impl/src/com/intellij/psi/impl/smartPointers/XmlAnchorProvider.java @@ -38,7 +38,7 @@ public class XmlAnchorProvider extends SmartPointerAnchorProvider { @Nullable @Override - public PsiElement getElement(@NotNull PsiElement anchor) { + public PsiElement restoreElement(@NotNull PsiElement anchor) { if (anchor instanceof XmlToken) { XmlToken token = (XmlToken)anchor; return token.getTokenType() == XmlTokenType.XML_NAME ? token.getParent() : null;