// generate code for evaluating arguments.
atMethodArgs(args, types, dims, cnames);
- // used by invokeinterface
- int count = bytecode.getStackDepth() - stack + 1;
-
if (found == null)
found = resolver.lookupMethod(targetClass, thisClass, thisMethod,
mname, types, dims, cnames);
}
atMethodCallCore2(targetClass, mname, isStatic, isSpecial,
- aload0pos, count, found);
+ aload0pos, found);
}
private void atMethodCallCore2(CtClass targetClass, String mname,
boolean isStatic, boolean isSpecial,
- int aload0pos, int count,
+ int aload0pos,
MemberResolver.Method found)
throws CompileError
{
|| declClass.isInterface() != targetClass.isInterface())
declClass = targetClass;
- if (declClass.isInterface())
- bytecode.addInvokeinterface(declClass, mname, desc, count);
+ if (declClass.isInterface()) {
+ int nargs = Descriptor.paramSize(desc) + 1;
+ bytecode.addInvokeinterface(declClass, mname, desc, nargs);
+ }
else
if (isStatic)
throw new CompileError(mname + " is not static");
String src = "public void id() { get(); }";
CtMethod make = CtNewMethod.make(src, ctClass);
}
+
+ public void testJIRA242() throws Exception {
+ Boolean ss = new Boolean(2 > 3);
+ ClassPool cp = ClassPool.getDefault();
+ CtClass cc = cp.get("test5.JIRA242$Hello");
+ CtMethod m = cc.getDeclaredMethod("say");
+ m.insertBefore("{ System.out.println(\"Say Hello...\"); }");
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("BOOL_SERIES = createBooleanSeriesStep();");
+ //Below code cause the issue
+ sb.append("BOOL_SERIES.setValue(3>=3);"); //lets comment this and run it will work
+ // Below code snippets will work
+ // this cast into exact class and call the same function
+ sb.append("((test5.JIRA242$BooleanDataSeries)BOOL_SERIES).setValue(3>=3);");
+ // this code snippet will set exact boolean variable to the function.
+ sb.append("boolean var = 3>=3;");
+ sb.append("BOOL_SERIES.setValue(var);");
+
+ m.insertBefore(sb.toString());
+ cc.writeFile();
+ Object obj = make(cc.getName());
+ assertEquals(0, invoke(obj, "say"));
+ }
}