in boot/src/main/java/org/netbeans/html/boot/impl/JavaScriptProcesor.java [596:702]
private void generateMethod(boolean selfObj, boolean promise, final ExecutableElement m, StringBuilder source, final String mangled) {
final boolean isStatic = m.getModifiers().contains(Modifier.STATIC);
final TypeElement selfType = (TypeElement)m.getEnclosingElement();
Types tu = processingEnv.getTypeUtils();
source.append("\n public java.lang.Object ")
.append(mangled)
.append("(");
{
String sep = "";
if (!isStatic) {
source.append("final ");
if (selfObj) {
source.append("java.lang.Object self");
} else {
source.append(selfType.getQualifiedName());
source.append(" self");
}
sep = ", ";
}
int cnt = 0;
for (VariableElement ve : m.getParameters()) {
source.append(sep).append("final ");
++cnt;
TypeMirror t = ve.asType();
if (!t.getKind().isPrimitive() && !"java.lang.String".equals(t.toString())) { // NOI18N
source.append("java.lang.Object");
} else {
source.append(t);
}
source.append(" arg").append(cnt);
sep = ", ";
}
}
source.append(") throws Throwable {\n");
source.append(" final org.netbeans.html.boot.spi.Fn.Presenter p = ref.presenter(); \n");
String newLine = "";
if (promise) {
source.append(" return new org.netbeans.html.boot.spi.Fn.Promise(p) {\n");
source.append(" @Override\n");
source.append(" protected java.lang.Object compute() throws java.lang.Throwable {\n");
newLine = " ";
} else {
if (useTryResources()) {
newLine += " ";
source.append(" try (java.io.Closeable a = org.netbeans.html.boot.spi.Fn.activate(p)) {");
} else {
newLine += " ";
source.append(" java.io.Closeable a = org.netbeans.html.boot.spi.Fn.activate(p); try {");
}
}
newLine = "\n" + newLine;
source.append(newLine);
if (m.getReturnType().getKind() != TypeKind.VOID) {
source.append("java.lang.Object $ret = ");
}
if (isStatic) {
source.append(((TypeElement)m.getEnclosingElement()).getQualifiedName());
source.append('.');
} else {
if (selfObj) {
source.append("cast(p, ");
source.append(selfType.getQualifiedName());
source.append(".class, self).");
} else {
source.append("self.");
}
}
source.append(m.getSimpleName());
source.append("(");
{
int cnt = 0;
String sep = newLine + " ";
for (VariableElement ve : m.getParameters()) {
source.append(sep);
TypeMirror targetType = tu.erasure(ve.asType());
if (targetType.getKind().isPrimitive()) {
targetType = tu.boxedClass((PrimitiveType) targetType).asType();
}
source.append("cast(p, ").append(targetType);
source.append(".class, arg").append(++cnt).append(")");
sep = "," + newLine + " ";
}
}
source.append(");").append(newLine);
if (m.getReturnType().getKind() == TypeKind.VOID) {
source.append("return null;");
} else {
source.append("return toJs(p, $ret);");
}
source.append("\n");
if (promise) {
source.append(" }}.schedule();\n");
} else {
if (useTryResources()) {
source.append(" }\n");
} else {
source.append(" } finally {\n");
source.append(" a.close();\n");
source.append(" }\n");
}
}
source.append(" }\n");
}