Lines 15-20
Link Here
|
15 |
|
15 |
|
16 |
import java.beans.PropertyChangeListener; |
16 |
import java.beans.PropertyChangeListener; |
17 |
import java.io.IOException; |
17 |
import java.io.IOException; |
|
|
18 |
import java.lang.ref.WeakReference; |
18 |
import java.util.ArrayList; |
19 |
import java.util.ArrayList; |
19 |
import java.util.Iterator; |
20 |
import java.util.Iterator; |
20 |
import java.util.List; |
21 |
import java.util.List; |
Lines 23-28
Link Here
|
23 |
import org.netbeans.api.project.Project; |
24 |
import org.netbeans.api.project.Project; |
24 |
import org.netbeans.api.project.ProjectInformation; |
25 |
import org.netbeans.api.project.ProjectInformation; |
25 |
import org.netbeans.api.project.ProjectManager; |
26 |
import org.netbeans.api.project.ProjectManager; |
|
|
27 |
import org.netbeans.modules.ant.freeform.spi.LookupMerger; |
26 |
import org.netbeans.modules.ant.freeform.spi.ProjectNature; |
28 |
import org.netbeans.modules.ant.freeform.spi.ProjectNature; |
27 |
import org.netbeans.modules.ant.freeform.spi.support.Util; |
29 |
import org.netbeans.modules.ant.freeform.spi.support.Util; |
28 |
import org.netbeans.modules.ant.freeform.ui.ProjectCustomizerProvider; |
30 |
import org.netbeans.modules.ant.freeform.ui.ProjectCustomizerProvider; |
Lines 31-37
Link Here
|
31 |
import org.netbeans.spi.project.support.ant.AntProjectHelper; |
33 |
import org.netbeans.spi.project.support.ant.AntProjectHelper; |
32 |
import org.netbeans.spi.project.support.ant.PropertyEvaluator; |
34 |
import org.netbeans.spi.project.support.ant.PropertyEvaluator; |
33 |
import org.netbeans.spi.project.support.ant.PropertyUtils; |
35 |
import org.netbeans.spi.project.support.ant.PropertyUtils; |
34 |
import org.netbeans.spi.project.ui.PrivilegedTemplates; |
36 |
import org.openide.ErrorManager; |
35 |
import org.openide.filesystems.FileObject; |
37 |
import org.openide.filesystems.FileObject; |
36 |
import org.openide.util.Lookup; |
38 |
import org.openide.util.Lookup; |
37 |
import org.openide.util.LookupEvent; |
39 |
import org.openide.util.LookupEvent; |
Lines 77-85
Link Here
|
77 |
new ProjectCustomizerProvider(this, helper, eval), // CustomizerProvider |
79 |
new ProjectCustomizerProvider(this, helper, eval), // CustomizerProvider |
78 |
aux, // AuxiliaryConfiguration |
80 |
aux, // AuxiliaryConfiguration |
79 |
helper().createCacheDirectoryProvider(), // CacheDirectoryProvider |
81 |
helper().createCacheDirectoryProvider(), // CacheDirectoryProvider |
80 |
new PrivilegedTemplatesImpl(), // List of templates in New action popup |
|
|
81 |
new Subprojects(this), // SubprojectProvider |
82 |
new Subprojects(this), // SubprojectProvider |
82 |
new ArtifactProvider(this), // AntArtifactProvider |
83 |
new ArtifactProvider(this), // AntArtifactProvider |
|
|
84 |
new LookupMergerImpl(), // LookupMerger |
83 |
}); |
85 |
}); |
84 |
return new FreeformLookup(baseLookup, this, helper, eval, aux); |
86 |
return new FreeformLookup(baseLookup, this, helper, eval, aux); |
85 |
} |
87 |
} |
Lines 140-159
Link Here
|
140 |
|
142 |
|
141 |
} |
143 |
} |
142 |
|
144 |
|
143 |
private static final class PrivilegedTemplatesImpl implements PrivilegedTemplates { |
|
|
144 |
|
145 |
private static final String[] PRIVILEGED_NAMES = new String[] { |
146 |
"Templates/Classes/Class.java", // NOI18N |
147 |
"Templates/Classes/Package", // NOI18N |
148 |
"Templates/Classes/Interface.java", // NOI18N |
149 |
}; |
150 |
|
151 |
public String[] getPrivilegedTemplates() { |
152 |
return PRIVILEGED_NAMES; |
153 |
} |
154 |
|
155 |
} |
156 |
|
157 |
private static final class FreeformLookup extends ProxyLookup implements LookupListener { |
145 |
private static final class FreeformLookup extends ProxyLookup implements LookupListener { |
158 |
|
146 |
|
159 |
private final Lookup baseLookup; |
147 |
private final Lookup baseLookup; |
Lines 161-166
Link Here
|
161 |
private final PropertyEvaluator evaluator; |
149 |
private final PropertyEvaluator evaluator; |
162 |
private final FreeformProject project; |
150 |
private final FreeformProject project; |
163 |
private final AuxiliaryConfiguration aux; |
151 |
private final AuxiliaryConfiguration aux; |
|
|
152 |
private Lookup.Result/*<LookupMerger>*/ mergers; |
153 |
private WeakReference listenerRef; |
164 |
|
154 |
|
165 |
public FreeformLookup(Lookup baseLookup, FreeformProject project, AntProjectHelper helper, PropertyEvaluator evaluator, AuxiliaryConfiguration aux) { |
155 |
public FreeformLookup(Lookup baseLookup, FreeformProject project, AntProjectHelper helper, PropertyEvaluator evaluator, AuxiliaryConfiguration aux) { |
166 |
super(new Lookup[0]); |
156 |
super(new Lookup[0]); |
Lines 185-192
Link Here
|
185 |
ProjectNature pn = (ProjectNature) it.next(); |
175 |
ProjectNature pn = (ProjectNature) it.next(); |
186 |
lookups.add(pn.getLookup(project, helper, evaluator, aux)); |
176 |
lookups.add(pn.getLookup(project, helper, evaluator, aux)); |
187 |
} |
177 |
} |
188 |
setLookups((Lookup[]) lookups.toArray(new Lookup[lookups.size()])); |
178 |
Lookup lkp = new ProxyLookup((Lookup[]) lookups.toArray(new Lookup[lookups.size()])); |
|
|
179 |
|
180 |
//merge: |
181 |
ArrayList filtredClasses = new ArrayList(); |
182 |
ArrayList mergedInstances = new ArrayList(); |
183 |
LookupListener l = listenerRef != null ? (LookupListener)listenerRef.get() : null; |
184 |
if (l != null) { |
185 |
mergers.removeLookupListener(l); |
186 |
} |
187 |
mergers = lkp.lookup(new Lookup.Template(LookupMerger.class)); |
188 |
l = (LookupListener) WeakListeners.create(LookupListener.class, this, mergers); |
189 |
listenerRef = new WeakReference(l); |
190 |
mergers.addLookupListener(l); |
191 |
it = mergers.allInstances().iterator(); |
192 |
while (it.hasNext()) { |
193 |
LookupMerger lm = (LookupMerger)it.next(); |
194 |
Class[] classes = lm.getMergableClasses(); |
195 |
for (int i=0; i<classes.length; i++) { |
196 |
if (filtredClasses.contains(classes[i])) { |
197 |
ErrorManager.getDefault().log(ErrorManager.WARNING, |
198 |
"Two LookupMerger registered for class "+classes[i]+ |
199 |
". Only first one will be used"); // NOI18N |
200 |
continue; |
201 |
} |
202 |
filtredClasses.add(classes[i]); |
203 |
mergedInstances.add(lm.merge(lkp, classes[i])); |
204 |
} |
205 |
} |
206 |
// XXX: after #53058 is implemented uncomment following line: |
207 |
// lkp = Lookups.exclude(lkp, filtredClasses.toArray(new Object[filtredClasses.size()])); |
208 |
Lookup fixed = Lookups.fixed(mergedInstances.toArray(new Object[mergedInstances.size()])); |
209 |
setLookups(new Lookup[]{fixed, lkp}); |
189 |
} |
210 |
} |
|
|
211 |
|
190 |
} |
212 |
} |
191 |
|
213 |
|
192 |
} |
214 |
} |