support for references in "target" attribute for "ant" task

target resolve algorithm updated: targets from top-level file always override imported ones
This commit is contained in:
Eugene Zhuravlev
2010-08-20 11:51:12 +04:00
parent 2a7281473c
commit f47620ece4
3 changed files with 17 additions and 10 deletions
@@ -71,12 +71,23 @@ class AntDomTargetReference extends AntDomReferenceBase implements BindablePsiRe
final TargetResolver.Result result = doResolve(null);
if (result != null) {
final Map<String, AntDomTarget> variants = result.getVariants();
String newName = null;
for (Map.Entry<String, AntDomTarget> 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);
}
}
}
}
@@ -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 {
@@ -1,6 +1,6 @@
<project default="<error>aaa</error>">
<target name="test">
<ant antfile="../<error>test</error>/build.xml" target="all" inheritall="false">
<ant antfile="../<error>test</error>/build.xml" target="<error>all</error>" inheritall="false">
<property name="build.dir" value="${build.dir}/test" />
</ant>
</target>