More robust implementation of #153045; do not show same build.xml multiple times.
1.1 --- a/autoproject.java/manifest.mf Wed Dec 07 14:14:22 2011 -0500
1.2 +++ b/autoproject.java/manifest.mf Fri Dec 09 12:45:32 2011 -0500
1.3 @@ -3,5 +3,5 @@
1.4 OpenIDE-Module: org.netbeans.modules.autoproject.java
1.5 OpenIDE-Module-Layer: org/netbeans/modules/autoproject/java/layer.xml
1.6 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/autoproject/java/Bundle.properties
1.7 -OpenIDE-Module-Specification-Version: 1.38
1.8 +OpenIDE-Module-Specification-Version: 1.39
1.9
2.1 --- a/autoproject.java/src/org/netbeans/modules/autoproject/java/NodeFactoryImpl.java Wed Dec 07 14:14:22 2011 -0500
2.2 +++ b/autoproject.java/src/org/netbeans/modules/autoproject/java/NodeFactoryImpl.java Fri Dec 09 12:45:32 2011 -0500
2.3 @@ -42,8 +42,11 @@
2.4 import java.beans.PropertyChangeEvent;
2.5 import java.beans.PropertyChangeListener;
2.6 import java.util.ArrayList;
2.7 +import java.util.Arrays;
2.8 +import java.util.HashSet;
2.9 import java.util.List;
2.10 import java.util.Map;
2.11 +import java.util.Set;
2.12 import javax.swing.event.ChangeEvent;
2.13 import javax.swing.event.ChangeListener;
2.14 import org.netbeans.api.java.project.JavaProjectConstants;
2.15 @@ -78,13 +81,13 @@
2.16 return new SourceChildren(p);
2.17 }
2.18
2.19 - private class SourceChildren implements NodeList<Object>, ChangeListener, PropertyChangeListener {
2.20 + private static class SourceChildren implements NodeList<Object>, ChangeListener, PropertyChangeListener {
2.21
2.22 private final Project p;
2.23 private final Sources src;
2.24 private final ChangeSupport cs = new ChangeSupport(this);
2.25
2.26 - public SourceChildren(Project p) {
2.27 + SourceChildren(Project p) {
2.28 this.p = p;
2.29 src = ProjectUtils.getSources(p);
2.30 }
2.31 @@ -124,11 +127,9 @@
2.32
2.33 public List<Object> keys() {
2.34 List<Object> keys = new ArrayList<Object>();
2.35 - for (SourceGroup g : src.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA)) {
2.36 - keys.add(g);
2.37 - }
2.38 + keys.addAll(Arrays.asList(src.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA)));
2.39 String actionPrefix = FileUtil.toFile(p.getProjectDirectory()) + Cache.ACTION;
2.40 - boolean foundBuildScript = false;
2.41 + Set<FileObject> buildScripts = new HashSet<FileObject>();
2.42 for (Map.Entry<String,String> entry : Cache.pairs()) {
2.43 if (!entry.getKey().startsWith(actionPrefix)) {
2.44 continue;
2.45 @@ -137,13 +138,12 @@
2.46 String[] protocolScriptAndTargets = binding.split(":", 3);
2.47 if (protocolScriptAndTargets[0].equals("ant")) {
2.48 FileObject script = p.getProjectDirectory().getFileObject(protocolScriptAndTargets[1]); // XXX accept also absolute paths
2.49 - if (script != null) {
2.50 + if (script != null && buildScripts.add(script)) {
2.51 keys.add(script);
2.52 - foundBuildScript = true;
2.53 }
2.54 }
2.55 }
2.56 - if (!foundBuildScript) {
2.57 + if (buildScripts.isEmpty()) {
2.58 FileObject f = p.getProjectDirectory().getFileObject("build.xml");
2.59 if (f != null) {
2.60 keys.add(f);