}
methodVisitor.visitCode();
}
+
+ public LocalVariable getThis(TypeDesc type) {
+ return new LocalVariable(0, type);
+ }
public void loadConstant(boolean value) {
if(value)
public void invokeInterface(String className, String methodName,
TypeDesc ret, TypeDesc[] params) {
checkClassName(className);
+ checkParameters(params);
methodVisitor.visitMethodInsn(Opcodes.INVOKEINTERFACE, className, methodName,
MethodDesc.forArguments(ret, params).getDescriptor(), true);
}
public void invokeVirtual(String className, String methodName,
TypeDesc ret, TypeDesc[] params) {
checkClassName(className);
+ checkParameters(params);
methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, className, methodName,
MethodDesc.forArguments(ret, params).getDescriptor(), false);
}
public void invokeConstructor(String className, TypeDesc[] params) {
checkClassName(className);
+ checkParameters(params);
methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, className, "<init>",
MethodDesc.forArguments(TypeDesc.VOID, params).getDescriptor(), false);
}
public void invokeStatic(String className, String methodName, TypeDesc ret,
TypeDesc[] params) {
checkClassName(className);
+ checkParameters(params);
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, className, methodName,
MethodDesc.forArguments(ret, params).getDescriptor(), false);
}
else
methodVisitor.visitLookupSwitchInsn(defaultLabel, values, labels);
}
+
+ private static void checkParameters(TypeDesc[] params) {
+ for(TypeDesc param : params)
+ if(param.equals(TypeDesc.VOID))
+ throw new IllegalArgumentException();
+ }
}