in boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java [91:171]
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
final Messager msg = processingEnv.getMessager();
for (Element e : roundEnv.getElementsAnnotatedWith(JavaScriptBody.class)) {
if (e.getKind() != ElementKind.METHOD && e.getKind() != ElementKind.CONSTRUCTOR) {
continue;
}
ExecutableElement ee = (ExecutableElement)e;
List<? extends VariableElement> params = ee.getParameters();
JavaScriptBody jsb = e.getAnnotation(JavaScriptBody.class);
if (jsb == null) {
continue;
} else {
Set<TypeElement> classes = this.bodies.get(findPkg(e));
if (classes == null) {
classes = new HashSet<>();
bodies.put(findPkg(e), classes);
}
Element t = e.getEnclosingElement();
while (!t.getKind().isClass() && !t.getKind().isInterface()) {
t = t.getEnclosingElement();
}
classes.add((TypeElement)t);
}
String[] arr = jsb.args();
if (params.size() != arr.length) {
msg.printMessage(Diagnostic.Kind.ERROR, "Number of args arguments does not match real arguments!", e);
}
for (int i = 0; i < arr.length; i++) {
if (!params.get(i).getSimpleName().toString().equals(arr[i])) {
msg.printMessage(Diagnostic.Kind.WARNING, "Actual method parameter names and args ones " + Arrays.toString(arr) + " differ", e);
}
}
if (!jsb.wait4js() && ee.getReturnType().getKind() != TypeKind.VOID) {
msg.printMessage(Diagnostic.Kind.ERROR, "Methods that don't wait for JavaScript to finish must return void!", e);
}
if (!jsb.javacall() && jsb.body().contains(".@")) {
msg.printMessage(Diagnostic.Kind.WARNING, "Usage of .@ usually requires javacall=true", e);
}
if (ee.getReturnType().getKind() == TypeKind.ARRAY) {
ArrayType at = (ArrayType) ee.getReturnType();
TypeMirror objectType = processingEnv.getElementUtils().getTypeElement("java.lang.Object").asType();
final TypeMirror componentType = at.getComponentType();
if (!processingEnv.getTypeUtils().isSameType(objectType, componentType)) {
wrongArrayError(componentType, e);
}
}
if (jsb.javacall()) {
JsCallback verify = new VerifyCallback(e);
try {
verify.parse(jsb.body(), !jsb.wait4java());
} catch (IllegalStateException ex) {
msg.printMessage(Diagnostic.Kind.ERROR, ex.getLocalizedMessage(), e);
}
}
}
for (Element e : roundEnv.getElementsAnnotatedWith(JavaScriptResource.class)) {
JavaScriptResource r = e.getAnnotation(JavaScriptResource.class);
if (r == null) {
continue;
}
checkJavaScriptBody(r, e, msg);
}
for (Element e : roundEnv.getElementsAnnotatedWith(JavaScriptResource.Group.class)) {
JavaScriptResource.Group g = e.getAnnotation(JavaScriptResource.Group.class);
if (g == null) {
continue;
}
for (JavaScriptResource r : g.value()) {
checkJavaScriptBody(r, e, msg);
}
}
if (roundEnv.processingOver()) {
generateCallbackClass(javacalls);
generateJavaScriptBodyList(bodies);
javacalls.clear();
}
return true;
}