in generic/src/main/java/org/netbeans/html/presenters/spi/Generic.java [412:463]
final Integer exportVm(Object vm) {
int jNumber = registerObject(vm, false, null, null);
int vmNumber = COUNTER.getAndIncrement();
StringBuilder sb = new StringBuilder();
sb.append(Strings.fnHead());
for (Method m : vm.getClass().getMethods()) {
if (m.getDeclaringClass() == Object.class) {
continue;
}
final String promisePrefix = "promise$";
boolean promise = m.getName().startsWith(promisePrefix);
final Class<?>[] types = m.getParameterTypes();
boolean instanceMethod =
types.length > 0 &&
m.getName().startsWith(types[0].getName().replace('.', '_') + "$");
int params = instanceMethod ? types.length - 1 : types.length;
sb.append(Strings.fnName(m.getName()));
String sep;
if (instanceMethod) {
sb.append(Strings.fnThiz());
sep = Strings.fnSep();
} else {
sep = "";
}
for (int i = 0; i < params; i++) {
sb.append(sep);
sb.append(Strings.fnParam(i));
sep = Strings.fnSep();
}
sb.append(Strings.fnClose());
if (!instanceMethod) {
sb.append(Strings.fnNoThiz());
}
if (promise) {
sb.append(Strings.fnPromiseBegin(key));
} else {
sb.append(Strings.fnBegin(key));
}
for (int i = 0; i < params; i++) {
sb.append(Strings.fnPPar(i, i == 0 ? "" : ","));
}
if (promise) {
final String rawName = "raw$" + m.getName().substring(promisePrefix.length());
sb.append(Strings.fnPromiseBody(jNumber, rawName, key, evalJS));
} else {
sb.append(Strings.fnBody(jNumber, m.getName(), key, evalJS));
}
}
sb.append(Strings.fnFoot(vmNumber, key));
deferExec(sb);
return vmNumber;
}