From a671fdf9ebc23785b76f9e96d769abd346acc4cd Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Thu, 5 Apr 2012 12:54:27 +0400 Subject: [PATCH] IDEA-53817 (Environment variable is red (not set) despite the fact it is used in profile .) --- .../references/MavenPropertyPsiReference.java | 32 ++++++++++++++++++- ...avenPropertyInActivationSectionTest.groovy | 5 +-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java index ea987636dded..981dd7b3a7e1 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.Navigatable; import com.intellij.psi.*; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.XmlDocument; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; @@ -74,7 +75,12 @@ public class MavenPropertyPsiReference extends MavenPsiReference { @Nullable public PsiElement resolve() { PsiElement result = doResolve(); - if (result == null) return result; + if (result == null) { + if (MavenDomUtil.isMavenFile(getElement())) { + result = tryResolveToActivationSection(); + if (result == null) return null; + } + } if (result instanceof XmlTag) { XmlTagChild[] children = ((XmlTag)result).getValue().getChildren(); @@ -85,6 +91,30 @@ public class MavenPropertyPsiReference extends MavenPsiReference { return result; } + private PsiElement tryResolveToActivationSection() { + XmlTag xmlTag = PsiTreeUtil.getParentOfType(getElement(), XmlTag.class); + while (xmlTag != null) { + if (xmlTag.getName().equals("profile")) { + XmlTag activation = xmlTag.findFirstSubTag("activation"); + if (activation != null) { + for (XmlTag propertyTag : activation.findSubTags("property")) { + XmlTag nameTag = propertyTag.findFirstSubTag("name"); + if (nameTag != null) { + if (nameTag.getValue().getTrimmedText().equals(myText)) { + return nameTag; + } + } + } + } + break; + } + + xmlTag = xmlTag.getParentTag(); + } + + return null; + } + // See org.apache.maven.project.interpolation.AbstractStringBasedModelInterpolator.createValueSources() @Nullable protected PsiElement doResolve() { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyInActivationSectionTest.groovy b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyInActivationSectionTest.groovy index 6017e8a1d164..89af8f0fbd0b 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyInActivationSectionTest.groovy +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyInActivationSectionTest.groovy @@ -49,8 +49,9 @@ class MavenPropertyInActivationSectionTest extends MavenDomTestCase { """); - assert getReference(myProjectPom, "env.GLASSFISH_HOME_123", 1).isSoft() - assert !getReference(myProjectPom, "env.GLASSFISH_HOME_123", 2).isSoft() + + assert getReference(myProjectPom, "env.GLASSFISH_HOME_123", 1).resolve() != null + assert getReference(myProjectPom, "env.GLASSFISH_HOME_123", 2).resolve() == null } }