|
org.netbeans.modules.projectapi/1 1.45 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT | |||||||||
@Retention(value=SOURCE)
@Target(value={TYPE,METHOD})
public @interface ProjectServiceProvider
Like LookupProvider but registers a single object into a project's lookup.
An annotated class must have one public constructor, which may take Project and/or Lookup parameters.
An annotated factory method must have similar parameters.
public final class TestAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.err.println("===> running action");
for (Project p : OpenProjects.getDefault().getOpenProjects()) {
Service s = p.getLookup().lookup(Service.class);
if (s != null) {
System.err.println("===> got a service: " + s.m());
} else {
System.err.println("===> nothing for " + p);
}
}
}
public static abstract class Service {
static {
System.err.println("===> loading Service");
}
public abstract String m();
}
@ProjectServiceProvider(service=Service.class,
projectType="org-netbeans-modules-java-j2seproject")
public static class ServiceImpl extends Service {
static {
System.err.println("===> loading ServiceImpl");
}
private final Project p;
public ServiceImpl(Project p) {
this.p = p;
System.err.println("===> new ServiceImpl on " + p);
}
public String m() {
return ProjectUtils.getInformation(p).getDisplayName();
}
}
}
To avoid deadlocks, stack overflows, and the like, an implementation
accepting a Project in its constructor (or factory method) may not
examine that project's lookup inside the constructor. It is fine to use the
project lookup from other service methods called later, typically to find
"sister" services (such as ProjectInformation in the example above).
It is also safe to accept a Lookup in the constructor
and examine its contents, since this is the "base lookup" supplied to
LookupProviderSupport.createCompositeLookup(org.openide.util.Lookup, java.lang.String), which will not have
other declaratively registered services anyway.
LookupProviderSupport.createCompositeLookup(org.openide.util.Lookup, java.lang.String)| Required Element Summary | |
|---|---|
Class<?>[] |
service
Service class(es) to be registered. |
| Optional Element Summary | |
|---|---|
String[] |
projectType
Token(s) denoting one or more project types, e.g. |
LookupProvider.Registration.ProjectType[] |
projectTypes
Alternate registration of project types with positions. |
| Element Detail |
|---|
public abstract Class<?>[] service
public abstract String[] projectType
"org-netbeans-modules-java-j2seproject"
LookupProviderSupport.createCompositeLookup(org.openide.util.Lookup, java.lang.String) may be used with the path Projects/TYPE/Lookup.
public abstract LookupProvider.Registration.ProjectType[] projectTypes
projectType() (or both).
|
org.netbeans.modules.projectapi/1 1.45 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT | |||||||||