From b43db1394c13e7e7bb95ab9bcbf350da92de859b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 22 Oct 2014 10:46:59 +0200 Subject: [PATCH] implement ResolvingHint to avoid unnecessary resolve() (via DeprecatedClassUsageInspection) --- .../lang/properties/ResourceBundleReference.java | 9 ++++++++- .../util/xml/impl/GenericDomValueReference.java | 12 ++++++++---- .../psi/impl/source/xml/SchemaPrefixReference.java | 9 ++++++++- .../xml/util/XmlEnumeratedValueReference.java | 11 +++++++++-- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java index 14ac858d9917..2901cf0492f8 100644 --- a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java +++ b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java @@ -25,6 +25,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ReflectionUtil; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,8 @@ import java.util.Set; /** * @author yole */ -public class ResourceBundleReference extends PsiReferenceBase implements PsiPolyVariantReference, BundleNameEvaluator { +public class ResourceBundleReference extends PsiReferenceBase + implements PsiPolyVariantReference, BundleNameEvaluator, ResolvingHint { private static final Function PROPERTIES_FILE_PSI_ELEMENT_FUNCTION = new Function() { @Override @@ -56,6 +58,11 @@ public class ResourceBundleReference extends PsiReferenceBase implem myBundleName = StringUtil.replaceChar(getValue(), '/', '.'); } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(PsiFile.class, elementClass); + } + @Nullable public PsiElement resolve() { ResolveResult[] resolveResults = multiResolve(false); diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java index 18c97c2a839d..2897f83d7cf9 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java @@ -22,15 +22,14 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.PomTarget; import com.intellij.pom.references.PomService; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.*; import com.intellij.psi.impl.PomTargetPsiElementImpl; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ReflectionUtil; import com.intellij.util.xml.*; import com.intellij.xml.util.XmlTagUtil; import org.jetbrains.annotations.NotNull; @@ -42,7 +41,7 @@ import java.util.List; /** * @author peter */ -public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { private final GenericDomValue myGenericValue; public GenericDomValueReference(GenericDomValue domValue) { @@ -52,6 +51,11 @@ public class GenericDomValueReference extends PsiReferenceBase im setRangeInElement(createTextRange()); } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(XmlElement.class, elementClass); + } + protected final PsiManager getPsiManager() { return PsiManager.getInstance(myGenericValue.getManager().getProject()); } diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java index 64b9232075a3..6671301bdf97 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java @@ -18,6 +18,7 @@ package com.intellij.psi.impl.source.xml; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.XmlAttribute; 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.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ReflectionUtil; import com.intellij.xml.XmlExtension; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,7 +34,7 @@ import org.jetbrains.annotations.Nullable; /** * @author Konstantin Bulenkov */ -public class SchemaPrefixReference extends PsiReferenceBase implements PossiblePrefixReference { +public class SchemaPrefixReference extends PsiReferenceBase implements PossiblePrefixReference, ResolvingHint { private final SchemaPrefix myPrefix; @@ -67,6 +69,11 @@ public class SchemaPrefixReference extends PsiReferenceBase implemen return myName; } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(XmlElement.class, elementClass); + } + @Override public SchemaPrefix resolve() { return myPrefix == null ? resolvePrefix(myElement, myName) : myPrefix; diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java index 6b1bdf47bc2f..62741b591d84 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java @@ -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"); * 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.psi.PsiElement; import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; +import com.intellij.util.ReflectionUtil; import com.intellij.xml.impl.XmlEnumerationDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,7 +34,7 @@ import org.jetbrains.annotations.Nullable; * @author Dmitry Avdeev * Date: 16.08.13 */ -public class XmlEnumeratedValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class XmlEnumeratedValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { private final XmlEnumerationDescriptor myDescriptor; public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor) { @@ -45,6 +47,11 @@ public class XmlEnumeratedValueReference extends PsiReferenceBase im myDescriptor = descriptor; } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(XmlElement.class, elementClass); + } + @Nullable @Override public PsiElement resolve() {