final Integer exportVm()

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;
    }