Lines 15-27
Link Here
|
15 |
|
15 |
|
16 |
import java.io.File; |
16 |
import java.io.File; |
17 |
import java.io.IOException; |
17 |
import java.io.IOException; |
18 |
import java.io.InputStream; |
|
|
19 |
import java.lang.ref.Reference; |
18 |
import java.lang.ref.Reference; |
20 |
import java.lang.ref.WeakReference; |
19 |
import java.lang.ref.WeakReference; |
21 |
import java.util.ArrayList; |
20 |
import java.util.ArrayList; |
22 |
import java.util.HashMap; |
21 |
import java.util.HashMap; |
|
|
22 |
import java.util.HashSet; |
23 |
import java.util.Iterator; |
23 |
import java.util.Iterator; |
|
|
24 |
import java.util.List; |
24 |
import java.util.Map; |
25 |
import java.util.Map; |
|
|
26 |
import java.util.Set; |
25 |
import java.util.WeakHashMap; |
27 |
import java.util.WeakHashMap; |
26 |
import org.netbeans.api.project.Project; |
28 |
import org.netbeans.api.project.Project; |
27 |
import org.netbeans.spi.project.ProjectFactory; |
29 |
import org.netbeans.spi.project.ProjectFactory; |
Lines 55-60
Link Here
|
55 |
|
57 |
|
56 |
private static final Map/*<Project,Reference<AntProjectHelper>>*/ project2Helper = new WeakHashMap(); |
58 |
private static final Map/*<Project,Reference<AntProjectHelper>>*/ project2Helper = new WeakHashMap(); |
57 |
private static final Map/*<AntProjectHelper,Reference<Project>>*/ helper2Project = new WeakHashMap(); |
59 |
private static final Map/*<AntProjectHelper,Reference<Project>>*/ helper2Project = new WeakHashMap(); |
|
|
60 |
private static final Map/*<AntBasedProjectType, List<Reference<AntProjectHelper>>>*/ type2Projects = new HashMap(); //for second part of #42738 |
58 |
private static final Lookup.Result/*<AntBasedProjectType>*/ antBasedProjectTypes; |
61 |
private static final Lookup.Result/*<AntBasedProjectType>*/ antBasedProjectTypes; |
59 |
private static Map/*<String,AntBasedProjectType>*/ antBasedProjectTypesByType = null; |
62 |
private static Map/*<String,AntBasedProjectType>*/ antBasedProjectTypesByType = null; |
60 |
static { |
63 |
static { |
Lines 62-73
Link Here
|
62 |
antBasedProjectTypes.addLookupListener(new LookupListener() { |
65 |
antBasedProjectTypes.addLookupListener(new LookupListener() { |
63 |
public void resultChanged(LookupEvent ev) { |
66 |
public void resultChanged(LookupEvent ev) { |
64 |
synchronized (AntBasedProjectFactorySingleton.class) { |
67 |
synchronized (AntBasedProjectFactorySingleton.class) { |
|
|
68 |
Set/*<AntBasedProjectType>*/ oldTypes = type2Projects.keySet(); |
69 |
Set/*<AntBasedProjectType>*/ removed = new HashSet(oldTypes); |
70 |
|
71 |
removed.removeAll(antBasedProjectTypes.allInstances()); |
72 |
|
73 |
antBasedProjectTypesRemoved(removed); |
74 |
|
65 |
antBasedProjectTypesByType = null; |
75 |
antBasedProjectTypesByType = null; |
66 |
} |
76 |
} |
67 |
} |
77 |
} |
68 |
}); |
78 |
}); |
69 |
} |
79 |
} |
70 |
|
80 |
|
|
|
81 |
private static void antBasedProjectTypesRemoved(Set/*<AntBasedProjectType>*/ removed) { |
82 |
for (Iterator/*<AntBasedProjectType>*/ i = removed.iterator(); i.hasNext(); ){ |
83 |
AntBasedProjectType type = (AntBasedProjectType) i.next(); |
84 |
List/*<Reference<AntProjectHelper>>*/ projects = (List/*<Reference<AntProjectHelper>>*/) type2Projects.get(type); |
85 |
|
86 |
if (projects != null) { |
87 |
for (Iterator/*<Reference<AntProjectHelper>>*/ prjs = projects.iterator(); prjs.hasNext(); ) { |
88 |
Reference/*<AntProjectHelper>*/ r = (Reference/*<AntProjectHelper>*/) prjs.next(); |
89 |
Object instance = r.get(); |
90 |
|
91 |
if (instance != null) { |
92 |
AntProjectHelper helper = (AntProjectHelper) instance; |
93 |
|
94 |
helper.notifyDeleted(); |
95 |
} |
96 |
} |
97 |
} |
98 |
|
99 |
type2Projects.remove(type); |
100 |
} |
101 |
} |
102 |
|
71 |
private static synchronized AntBasedProjectType findAntBasedProjectType(String type) { |
103 |
private static synchronized AntBasedProjectType findAntBasedProjectType(String type) { |
72 |
if (antBasedProjectTypesByType == null) { |
104 |
if (antBasedProjectTypesByType == null) { |
73 |
Iterator it = new ArrayList(antBasedProjectTypes.allInstances()).iterator(); |
105 |
Iterator it = new ArrayList(antBasedProjectTypes.allInstances()).iterator(); |
Lines 133-138
Link Here
|
133 |
Project project = provider.createProject(helper); |
165 |
Project project = provider.createProject(helper); |
134 |
project2Helper.put(project, new WeakReference(helper)); |
166 |
project2Helper.put(project, new WeakReference(helper)); |
135 |
helper2Project.put(helper, new WeakReference(project)); |
167 |
helper2Project.put(helper, new WeakReference(project)); |
|
|
168 |
List/*<Reference<AntProjectHelper>>*/ l = (List/*<Reference<AntProjectHelper>>*/) type2Projects.get(provider); |
169 |
|
170 |
if (l == null) { |
171 |
type2Projects.put(provider, l = new ArrayList/*<Reference<AntProjectHelper>>*/()); |
172 |
} |
173 |
|
174 |
l.add(new WeakReference(helper)); |
175 |
|
136 |
return project; |
176 |
return project; |
137 |
} |
177 |
} |
138 |
|
178 |
|