< prev index next >
src/jdk.jextract/share/classes/com/sun/tools/jextract/JavaSourceBuilderExt.java
Print this page
*** 203,256 ****
}
// emit static forwarder method of a function
protected void emitStaticForwarder(FunctionTree funcTree, JType.Function fn, String libraryField) {
check();
incrAlign();
indent();
sb.append("public static ");
sb.append(fn.returnType.getSourceSignature(false));
sb.append(' ');
sb.append(funcTree.name());
sb.append('(');
! final int arg_cnt = funcTree.numParams();
! final List<String> argNames = new ArrayList<>();
! for (int i = 0; i < fn.args.length; i++) {
! sb.append(fn.args[i].getSourceSignature(false));
sb.append(' ');
! String pname = funcTree.paramName(i);
! pname = pname == null || pname.isEmpty()? ("$arg" + i) : pname;
! argNames.add(pname);
! sb.append(pname);
! if (fn.isVarArgs || i != arg_cnt - 1) {
sb.append(", ");
}
}
- if (fn.isVarArgs) {
- sb.append("Object... ");
- String pname = funcTree.paramName(arg_cnt - 1);
- pname = pname == null || pname.isEmpty()? "$args" : pname;
- argNames.add(pname);
- sb.append(pname);
- }
-
sb.append(") {\n");
incrAlign();
indent();
if (fn.returnType != JType.Void) {
sb.append("return ");
}
sb.append(libraryField);
sb.append('.');
sb.append(funcTree.name());
sb.append('(');
! int size = argNames.size();
! int j = 0;
! for (String an : argNames) {
! sb.append(an);
! if (j != size - 1) sb.append(", ");
! j++;
}
sb.append(");\n");
decrAlign();
indent();
sb.append("}\n\n");
--- 203,249 ----
}
// emit static forwarder method of a function
protected void emitStaticForwarder(FunctionTree funcTree, JType.Function fn, String libraryField) {
check();
+
+ final int numArgs = fn.isVarArgs? fn.args.length + 1 : fn.args.length;
+ final String[] argTypes = new String[numArgs];
+ final String[] argNames = new String[numArgs];
+ fillArgTypes(fn, argTypes);
+ fillArgNames(fn, funcTree, argNames);
+
incrAlign();
indent();
sb.append("public static ");
sb.append(fn.returnType.getSourceSignature(false));
sb.append(' ');
sb.append(funcTree.name());
sb.append('(');
! for (int i = 0; i < numArgs; i++) {
! sb.append(argTypes[i]);
sb.append(' ');
! sb.append(argNames[i]);
! if (i != numArgs - 1) {
sb.append(", ");
}
}
sb.append(") {\n");
incrAlign();
indent();
if (fn.returnType != JType.Void) {
sb.append("return ");
}
sb.append(libraryField);
sb.append('.');
sb.append(funcTree.name());
sb.append('(');
! for (int j = 0; j < numArgs; j++) {
! sb.append(argNames[j]);
! if (j != numArgs - 1) {
! sb.append(", ");
! }
}
sb.append(");\n");
decrAlign();
indent();
sb.append("}\n\n");
< prev index next >