From f47620ece492d9bf5269e11731341f9ec3db93da Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 19 Aug 2010 22:27:39 +0400 Subject: [PATCH] support for references in "target" attribute for "ant" task target resolve algorithm updated: targets from top-level file always override imported ones --- .../lang/ant/dom/AntDomTargetReference.java | 15 +++++++++++++-- .../lang/ant/dom/PropertyProviderFinder.java | 10 +++------- plugins/ant/tests/data/highlighting/sanity2.xml | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/plugins/ant/src/com/intellij/lang/ant/dom/AntDomTargetReference.java b/plugins/ant/src/com/intellij/lang/ant/dom/AntDomTargetReference.java index d23be7501970..23fe3fa89816 100644 --- a/plugins/ant/src/com/intellij/lang/ant/dom/AntDomTargetReference.java +++ b/plugins/ant/src/com/intellij/lang/ant/dom/AntDomTargetReference.java @@ -71,12 +71,23 @@ class AntDomTargetReference extends AntDomReferenceBase implements BindablePsiRe final TargetResolver.Result result = doResolve(null); if (result != null) { final Map variants = result.getVariants(); + String newName = null; for (Map.Entry entry : variants.entrySet()) { if (pointingToTarget.equals(entry.getValue())) { - handleElementRename(entry.getKey()); - break; + final String candidate = entry.getKey(); + if (newName == null) { + newName = candidate; + } + else { + if (candidate.length() < newName.length()) { + newName = candidate; // prefer shorter names + } + } } } + if (newName != null) { + handleElementRename(newName); + } } } } diff --git a/plugins/ant/src/com/intellij/lang/ant/dom/PropertyProviderFinder.java b/plugins/ant/src/com/intellij/lang/ant/dom/PropertyProviderFinder.java index 934e5c63b784..331520f4a234 100644 --- a/plugins/ant/src/com/intellij/lang/ant/dom/PropertyProviderFinder.java +++ b/plugins/ant/src/com/intellij/lang/ant/dom/PropertyProviderFinder.java @@ -16,6 +16,7 @@ package com.intellij.lang.ant.dom; import com.intellij.lang.ant.AntSupport; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileSystemItem; @@ -116,17 +117,12 @@ public abstract class PropertyProviderFinder extends AntDomRecursiveVisitor { break; default: - if (!myTargetsResolveMap.containsKey(declaredTargetName)) { - effectiveTargetName = declaredTargetName; - } - else { - duplicateTargetFound(myTargetsResolveMap.get(declaredTargetName), target, declaredTargetName); - } + effectiveTargetName = declaredTargetName; break; } if (effectiveTargetName != null) { final AntDomTarget existingTarget = myTargetsResolveMap.get(effectiveTargetName); - if (existingTarget != null) { + if (existingTarget != null && Comparing.equal(existingTarget.getAntProject(), target.getAntProject())) { duplicateTargetFound(existingTarget, target, effectiveTargetName); } else { diff --git a/plugins/ant/tests/data/highlighting/sanity2.xml b/plugins/ant/tests/data/highlighting/sanity2.xml index efdab75154dd..ca5e0b838a22 100644 --- a/plugins/ant/tests/data/highlighting/sanity2.xml +++ b/plugins/ant/tests/data/highlighting/sanity2.xml @@ -1,6 +1,6 @@ - +