case ByteOps.INVOKESPECIAL: { /* * Determine whether the opcode should be * INVOKE_DIRECT or INVOKE_SUPER. See vmspec-2 section 6 * on "invokespecial" as well as section 4.8.2 (7th * bullet point) for the gory details. */ CstMethodRef ref = (CstMethodRef) cst; if (ref.isInstanceInit() || (ref.getDefiningClass() == method.getDefiningClass()) || !method.getAccSuper()) { return RegOps.INVOKE_DIRECT; } return RegOps.INVOKE_SUPER;
(ref.getDefiningClass() == method.getDefiningClass()) || !method.getAccSuper()) { return RegOps.INVOKE_DIRECT;
"invoking a %s interface method %s.%s strictly requires " + "--min-sdk-version >= %d (experimental at current API level %d)", invokeKind, callee.getDefiningClass().toHuman(), callee.getNat().toHuman(), DexFormat.API_INVOKE_INTERFACE_METHODS, dexOptions.minSdkVersion); warn(reason); "invoking a %s interface method %s.%s strictly requires " + "--min-sdk-version >= %d (blocked at current API level %d)", invokeKind, callee.getDefiningClass().toHuman(), callee.getNat().toHuman(), DexFormat.API_INVOKE_INTERFACE_METHODS, dexOptions.minSdkVersion); fail(reason);
private static CstMethodRef makePolymorphicMethod(final CstMethodRef callSiteMethod) { CstType definingClass= callSiteMethod.getDefiningClass(); CstString cstMethodName = callSiteMethod.getNat().getName(); String methodName = callSiteMethod.getNat().getName().getString();
if (ref.getDefiningClass().equals(method.getDefiningClass())) { for (int i = 0; i < methods.size(); ++i) { final Method m = methods.get(i); (ref.getDefiningClass().equals(method.getDefiningClass())) || !method.getAccSuper()) { return RegOps.INVOKE_DIRECT;
if (ref.getDefiningClass().equals(method.getDefiningClass())) { for (int i = 0; i < methods.size(); ++i) { final Method m = methods.get(i); (ref.getDefiningClass().equals(method.getDefiningClass())) || !method.getAccSuper()) { return RegOps.INVOKE_DIRECT;
if (ref.getDefiningClass().equals(method.getDefiningClass())) { for (int i = 0; i < methods.size(); ++i) { final Method m = methods.get(i); (ref.getDefiningClass().equals(method.getDefiningClass()))) { return RegOps.INVOKE_DIRECT;
if (ref.getDefiningClass().equals(method.getDefiningClass())) { for (int i = 0; i < methods.size(); ++i) { final Method m = methods.get(i); if (ref.isInstanceInit()) { return RegOps.INVOKE_DIRECT; } else if (ref.getDefiningClass().equals(method.getDefiningClass())) { for (int i = 0; i < methods.size(); ++i) { final Method m = methods.get(i);