bind(ServiceProperty.class)
.to(new AnnotationVisitorFactory() {
public AnnotationVisitor newAnnotationVisitor(BindingContext context) {
String name = context.getFieldNode().name;
ComponentWorkbench workbench = context.getWorkbench();
if (!workbench.getIds().containsKey("provides")) {
// The provides annotation is already computed.
context.getReporter().warn("The component does not provide services, skip ServiceProperty for {}", name);
return null;
} else {
// Get the provides element
Element provides = workbench.getIds().get("provides");
return new FieldPropertyVisitor(name, provides);
}
}
});
bind(ServiceController.class)
.to(new AnnotationVisitorFactory() {
public AnnotationVisitor newAnnotationVisitor(BindingContext context) {
String name = context.getFieldNode().name;
ComponentWorkbench workbench = context.getWorkbench();
if (!workbench.getIds().containsKey("provides")) { // The provides annotation is already computed.
context.getReporter().warn("The component does not provide services, skip @ServiceController for {}", name);
return null;
} else {
// Get the provides element
Element provides = workbench.getIds().get("provides");
return new ServiceControllerVisitor(name, provides);
}
}
});
bind(Property.class)
.when(on(ElementType.FIELD))
.to(new AnnotationVisitorFactory() {
public AnnotationVisitor newAnnotationVisitor(BindingContext context) {
ComponentWorkbench workbench = context.getWorkbench();
Element properties = Elements.getPropertiesElement(workbench);
String name = context.getFieldNode().name;
return new FieldPropertyVisitor(name, properties);
}
})
.when(on(ElementType.METHOD))
.to(new AnnotationVisitorFactory() {
public AnnotationVisitor newAnnotationVisitor(BindingContext context) {
ComponentWorkbench workbench = context.getWorkbench();
// @Property on method parameter
Element properties = Elements.getPropertiesElement(workbench);
String name = context.getMethodNode().name;
return new MethodPropertyVisitor(properties, name);
}
})
.when(on(ElementType.PARAMETER))
.to(new AnnotationVisitorFactory() {
public AnnotationVisitor newAnnotationVisitor(BindingContext context) {
ComponentWorkbench workbench = context.getWorkbench();
// @Property on method parameter
Element properties = Elements.getPropertiesElement(workbench);
MethodNode method = context.getMethodNode();
return new ParameterPropertyVisitor(properties, method, context.getParameterIndex());
}