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 99cf1e82073b..aa7469e0851a 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 @@ -17,14 +17,15 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.lang.java.JavaLanguage; import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author Dennis.Ushakov */ -public class JavaAnchorProvider implements SmartPointerAnchorProvider { +public class JavaAnchorProvider extends SmartPointerAnchorProvider { @Override - public PsiElement getAnchor(PsiElement element) { + public PsiElement getAnchor(@NotNull PsiElement element) { if (!element.getLanguage().isKindOf(JavaLanguage.INSTANCE)) { return null; } @@ -45,7 +46,7 @@ public class JavaAnchorProvider implements SmartPointerAnchorProvider { @Nullable @Override - public PsiElement getElement(PsiElement anchor) { + public PsiElement getElement(@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/AnchorElementInfoFactory.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfoFactory.java index d14e4869b0e4..efdc031f1beb 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 @@ -53,7 +53,7 @@ public class AnchorElementInfoFactory implements SmartPointerElementInfoFactory } @Nullable - static PsiElement getAnchor(PsiElement element) { + static PsiElement getAnchor(@NotNull PsiElement element) { PsiUtilCore.ensureValid(element); PsiElement anchor = null; for (SmartPointerAnchorProvider provider : SmartPointerAnchorProvider.EP_NAME.getExtensions()) { 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 d32aaa44fe9f..412a8be49177 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 @@ -17,17 +17,28 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** + * Allows SmartPointer that points to stubbed psi element to survive stub-to-AST switch + * * @author Dennis.Ushakov */ -public interface SmartPointerAnchorProvider { - ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.smartPointer.anchorProvider"); +public abstract class SmartPointerAnchorProvider { + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.smartPointer.anchorProvider"); + /** + * @param element + * @return anchor to be used when restoring element after stub-to-AST switch + */ @Nullable - PsiElement getAnchor(PsiElement element); + public abstract PsiElement getAnchor(@NotNull PsiElement element); + /** + * @param anchor + * @return restored original element using anchor + */ @Nullable - PsiElement getElement(PsiElement anchor); + public abstract PsiElement getElement(@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 ed05e1dd47ab..10d35944ebab 100644 --- a/xml/impl/src/com/intellij/psi/impl/smartPointers/XmlAnchorProvider.java +++ b/xml/impl/src/com/intellij/psi/impl/smartPointers/XmlAnchorProvider.java @@ -20,15 +20,16 @@ import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlToken; import com.intellij.psi.xml.XmlTokenType; import com.intellij.xml.util.XmlTagUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author Dennis.Ushakov */ -public class XmlAnchorProvider implements SmartPointerAnchorProvider { +public class XmlAnchorProvider extends SmartPointerAnchorProvider { @Nullable @Override - public PsiElement getAnchor(PsiElement element) { + public PsiElement getAnchor(@NotNull PsiElement element) { if (element instanceof XmlTag) { return XmlTagUtil.getStartTagNameElement((XmlTag)element); } @@ -37,7 +38,7 @@ public class XmlAnchorProvider implements SmartPointerAnchorProvider { @Nullable @Override - public PsiElement getElement(PsiElement anchor) { + public PsiElement getElement(@NotNull PsiElement anchor) { if (anchor instanceof XmlToken) { XmlToken token = (XmlToken)anchor; return token.getTokenType() == XmlTokenType.XML_NAME ? token.getParent() : null;