Method inlining didn't correctly account for category 2 argument types in the descriptor of the method being inlined.
An example that could cause the problem:
public class Test {
public void test(double x, int y, float z) {
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
}
The transformer:
@CTransformer(Test.class)
public class TestTransformer {
@CInline
@CInject(method="test(DIF)V", target=@CTarget("HEAD"), cancellable=true)
public void test(double x, int y, float z, InjectionCallback callback) {
if (x == 1.0) {
System.out.println("It's 1.0.");
callback.setCancelled(true);
}
}
}
The InjectionCallback callback parameter, in this case, is incorrectly referenced as local 20 at callback.setCancelled(true), which in turn will cause a verification error.
Method inlining didn't correctly account for category 2 argument types in the descriptor of the method being inlined.
An example that could cause the problem:
The transformer:
The
InjectionCallback callback
parameter, in this case, is incorrectly referenced as local 20 atcallback.setCancelled(true)
, which in turn will cause a verification error.Also made
gradlew
executable on *nix systems.