mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-CR-1432
This commit is contained in:
@@ -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
|
||||
|
||||
+1
-1
@@ -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()) {
|
||||
|
||||
+15
-4
@@ -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<SmartPointerAnchorProvider> EP_NAME = ExtensionPointName.create("com.intellij.smartPointer.anchorProvider");
|
||||
public abstract class SmartPointerAnchorProvider {
|
||||
public static final ExtensionPointName<SmartPointerAnchorProvider> 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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user