From ce997dd45d26429a9af6852562a47c0ebfc933ca Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 1 Jul 2016 11:34:19 +0300 Subject: [PATCH] properties: check that element is property before doing a resolve IDEA-158028 --- .../references/PropertyReferenceBase.java | 16 ++++++++++++++-- .../properties/xml/XmlPropertiesFileImpl.java | 4 +++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java index e8ea30f5dc76..a6674e841470 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java @@ -20,11 +20,13 @@ import com.intellij.lang.properties.IProperty; import com.intellij.lang.properties.PropertiesBundle; import com.intellij.lang.properties.PropertiesImplUtil; import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.lang.properties.xml.XmlPropertiesFileImpl; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; import com.intellij.pom.references.PomService; import com.intellij.psi.*; +import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; @@ -32,7 +34,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; import java.util.Set; @@ -40,7 +41,7 @@ import java.util.Set; * @author nik */ public abstract class PropertyReferenceBase implements PsiPolyVariantReference, EmptyResolveMessageProvider { - private static final Logger LOG = Logger.getInstance("#com.intellij.lang.properties.references.PropertyReferenceBase"); + private static final Logger LOG = Logger.getInstance(PropertyReferenceBase.class); protected final String myKey; protected final PsiElement myElement; protected boolean mySoft; @@ -114,6 +115,7 @@ public abstract class PropertyReferenceBase implements PsiPolyVariantReference, } public boolean isReferenceTo(PsiElement element) { + if (!isProperty(element)) return false; for (ResolveResult result : multiResolve(false)) { final PsiElement el = result.getElement(); if (el != null && el.isEquivalentTo(element)) return true; @@ -181,4 +183,14 @@ public abstract class PropertyReferenceBase implements PsiPolyVariantReference, public Object[] getVariants() { return ArrayUtil.EMPTY_OBJECT_ARRAY; } + + private static boolean isProperty(PsiElement element) { + if (element instanceof IProperty) { + return true; + } + if (element instanceof XmlTag && ((XmlTag)element).getName().equals(XmlPropertiesFileImpl.ENTRY_TAG_NAME)) { + return PropertiesImplUtil.isPropertiesFile(element.getContainingFile()); + } + return false; + } } diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesFileImpl.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesFileImpl.java index 243538ca581e..f1db7c69d264 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesFileImpl.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesFileImpl.java @@ -46,6 +46,8 @@ import java.util.*; * Date: 7/26/11 */ public class XmlPropertiesFileImpl extends XmlPropertiesFile { + public static final String ENTRY_TAG_NAME = "entry"; + private static final Key> KEY = Key.create("xml properties file"); private final XmlFile myFile; @@ -62,7 +64,7 @@ public class XmlPropertiesFileImpl extends XmlPropertiesFile { XmlTag rootTag = myFile.getRootTag(); final List propertiesOrder = new ArrayList(); if (rootTag != null) { - XmlTag[] entries = rootTag.findSubTags("entry"); + XmlTag[] entries = rootTag.findSubTags(ENTRY_TAG_NAME); for (XmlTag entry : entries) { XmlProperty property = new XmlProperty(entry, this); propertiesOrder.add(property);