implement ResolvingHint to avoid unnecessary resolve()

(via DeprecatedClassUsageInspection)
This commit is contained in:
Yann Cébron
2014-10-22 10:46:59 +02:00
parent 843e75bd5f
commit b43db1394c
4 changed files with 33 additions and 8 deletions
@@ -25,6 +25,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*; import com.intellij.psi.*;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.SmartList; import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -37,7 +38,8 @@ import java.util.Set;
/** /**
* @author yole * @author yole
*/ */
public class ResourceBundleReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference, BundleNameEvaluator { public class ResourceBundleReference extends PsiReferenceBase<PsiElement>
implements PsiPolyVariantReference, BundleNameEvaluator, ResolvingHint {
private static final Function<PropertiesFile, PsiElement> PROPERTIES_FILE_PSI_ELEMENT_FUNCTION = private static final Function<PropertiesFile, PsiElement> PROPERTIES_FILE_PSI_ELEMENT_FUNCTION =
new Function<PropertiesFile, PsiElement>() { new Function<PropertiesFile, PsiElement>() {
@Override @Override
@@ -56,6 +58,11 @@ public class ResourceBundleReference extends PsiReferenceBase<PsiElement> implem
myBundleName = StringUtil.replaceChar(getValue(), '/', '.'); myBundleName = StringUtil.replaceChar(getValue(), '/', '.');
} }
@Override
public boolean canResolveTo(Class<? extends PsiElement> elementClass) {
return ReflectionUtil.isAssignable(PsiFile.class, elementClass);
}
@Nullable @Nullable
public PsiElement resolve() { public PsiElement resolve() {
ResolveResult[] resolveResults = multiResolve(false); ResolveResult[] resolveResults = multiResolve(false);
@@ -22,15 +22,14 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.pom.PomTarget; import com.intellij.pom.PomTarget;
import com.intellij.pom.references.PomService; import com.intellij.pom.references.PomService;
import com.intellij.psi.PsiElement; import com.intellij.psi.*;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiReferenceBase;
import com.intellij.psi.impl.PomTargetPsiElementImpl; import com.intellij.psi.impl.PomTargetPsiElementImpl;
import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlAttributeValue;
import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlElement;
import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.xml.*; import com.intellij.util.xml.*;
import com.intellij.xml.util.XmlTagUtil; import com.intellij.xml.util.XmlTagUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -42,7 +41,7 @@ import java.util.List;
/** /**
* @author peter * @author peter
*/ */
public class GenericDomValueReference<T> extends PsiReferenceBase<XmlElement> implements EmptyResolveMessageProvider { public class GenericDomValueReference<T> extends PsiReferenceBase<XmlElement> implements EmptyResolveMessageProvider, ResolvingHint {
private final GenericDomValue<T> myGenericValue; private final GenericDomValue<T> myGenericValue;
public GenericDomValueReference(GenericDomValue<T> domValue) { public GenericDomValueReference(GenericDomValue<T> domValue) {
@@ -52,6 +51,11 @@ public class GenericDomValueReference<T> extends PsiReferenceBase<XmlElement> im
setRangeInElement(createTextRange()); setRangeInElement(createTextRange());
} }
@Override
public boolean canResolveTo(Class<? extends PsiElement> elementClass) {
return ReflectionUtil.isAssignable(XmlElement.class, elementClass);
}
protected final PsiManager getPsiManager() { protected final PsiManager getPsiManager() {
return PsiManager.getInstance(myGenericValue.getManager().getProject()); return PsiManager.getInstance(myGenericValue.getManager().getProject());
} }
@@ -18,6 +18,7 @@ package com.intellij.psi.impl.source.xml;
import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceBase; import com.intellij.psi.PsiReferenceBase;
import com.intellij.psi.ResolvingHint;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlAttributeValue;
@@ -25,6 +26,7 @@ import com.intellij.psi.xml.XmlElement;
import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException; import com.intellij.util.IncorrectOperationException;
import com.intellij.util.ReflectionUtil;
import com.intellij.xml.XmlExtension; import com.intellij.xml.XmlExtension;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -32,7 +34,7 @@ import org.jetbrains.annotations.Nullable;
/** /**
* @author Konstantin Bulenkov * @author Konstantin Bulenkov
*/ */
public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> implements PossiblePrefixReference { public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> implements PossiblePrefixReference, ResolvingHint {
private final SchemaPrefix myPrefix; private final SchemaPrefix myPrefix;
@@ -67,6 +69,11 @@ public class SchemaPrefixReference extends PsiReferenceBase<XmlElement> implemen
return myName; return myName;
} }
@Override
public boolean canResolveTo(Class<? extends PsiElement> elementClass) {
return ReflectionUtil.isAssignable(XmlElement.class, elementClass);
}
@Override @Override
public SchemaPrefix resolve() { public SchemaPrefix resolve() {
return myPrefix == null ? resolvePrefix(myElement, myName) : myPrefix; return myPrefix == null ? resolvePrefix(myElement, myName) : myPrefix;
@@ -1,5 +1,5 @@
/* /*
* Copyright 2000-2013 JetBrains s.r.o. * Copyright 2000-2014 JetBrains s.r.o.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -21,9 +21,11 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceBase; import com.intellij.psi.PsiReferenceBase;
import com.intellij.psi.ResolvingHint;
import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlElement;
import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlTag;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.ReflectionUtil;
import com.intellij.xml.impl.XmlEnumerationDescriptor; import com.intellij.xml.impl.XmlEnumerationDescriptor;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -32,7 +34,7 @@ import org.jetbrains.annotations.Nullable;
* @author Dmitry Avdeev * @author Dmitry Avdeev
* Date: 16.08.13 * Date: 16.08.13
*/ */
public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlElement> implements EmptyResolveMessageProvider { public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlElement> implements EmptyResolveMessageProvider, ResolvingHint {
private final XmlEnumerationDescriptor myDescriptor; private final XmlEnumerationDescriptor myDescriptor;
public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor) { public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor) {
@@ -45,6 +47,11 @@ public class XmlEnumeratedValueReference extends PsiReferenceBase<XmlElement> im
myDescriptor = descriptor; myDescriptor = descriptor;
} }
@Override
public boolean canResolveTo(Class<? extends PsiElement> elementClass) {
return ReflectionUtil.isAssignable(XmlElement.class, elementClass);
}
@Nullable @Nullable
@Override @Override
public PsiElement resolve() { public PsiElement resolve() {