/** * Returns whether the invoked method is a static interface method. */ public boolean invokesStaticInterfaceMethod() { // We assume unknown classes are not interfaces. return invokedReferenceKind == ClassConstants.REF_invokeStatic && referencedInvokedClass != null && (referencedInvokedClass.getAccessFlags() & ClassConstants.ACC_INTERFACE) != 0; }
/** * Returns whether the invoked method is a static interface method. */ public boolean invokesStaticInterfaceMethod() { // We assume unknown classes are not interfaces. return invokedReferenceKind == ClassConstants.REF_invokeStatic && referencedInvokedClass != null && (referencedInvokedClass.getAccessFlags() & ClassConstants.ACC_INTERFACE) != 0; }
/** * Returns whether the invoked method is a static interface method. */ public boolean invokesStaticInterfaceMethod() { // We assume unknown classes are not interfaces. return invokedReferenceKind == ClassConstants.REF_invokeStatic && referencedInvokedClass != null && (referencedInvokedClass.getAccessFlags() & ClassConstants.ACC_INTERFACE) != 0; }
public void visitAnyClass(Clazz clazz) { if ((clazz.getAccessFlags() & ClassConstants.ACC_PUBLIC) == 0) { setInvokesPackageVisibleMembers(referencingClass); } }
public void visitAnyClass(Clazz clazz) { int accessFlags = clazz.getAccessFlags(); if ((accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) == 0) { setAccessesPackageCode(invokingMethod); } }
public void visitAnyClass(Clazz clazz) { if ((clazz.getAccessFlags() & ClassConstants.ACC_PUBLIC) == 0) { setInvokesPackageVisibleMembers(referencingClass); } }
public void visitAnyClass(Clazz clazz) { int accessFlags = clazz.getAccessFlags(); if ((accessFlags & ClassConstants.ACC_PUBLIC) == 0) { setAccessesPackageCode(invokingMethod); } }
public void visitAnyClass(Clazz clazz) { int accessFlags = clazz.getAccessFlags(); if ((accessFlags & ClassConstants.ACC_PUBLIC) == 0) { setAccessesPackageCode(invokingMethod); } }
public void visitAnyClass(Clazz clazz) { int accessFlags = clazz.getAccessFlags(); if ((accessFlags & ClassConstants.ACC_PUBLIC) == 0) { setAccessesPackageCode(invokingMethod); } }
public void visitAnyClass(Clazz clazz) { if ((clazz.getAccessFlags() & ClassConstants.ACC_PUBLIC) == 0) { setInvokesPackageVisibleMembers(referencingClass); } }
public void visitClassConstant(Clazz clazz, ClassConstant classConstant) { // Check if this class entry is an array type. if (ClassUtil.isInternalArrayType(classConstant.getName(clazz))) { isInterfaceMethod = false; } else { // Check if this class entry refers to an interface class. Clazz referencedClass = classConstant.referencedClass; if (referencedClass != null) { isInterfaceMethod = (referencedClass.getAccessFlags() & ClassConstants.INTERNAL_ACC_INTERFACE) != 0; } } }
public void visitClassConstant(Clazz clazz, ClassConstant classConstant) { // Check if this class entry is an array type. if (ClassUtil.isInternalArrayType(classConstant.getName(clazz))) { isInterfaceMethod = false; } else { // Check if this class entry refers to an interface class. Clazz referencedClass = classConstant.referencedClass; if (referencedClass != null) { isInterfaceMethod = (referencedClass.getAccessFlags() & ClassConstants.ACC_INTERFACE) != 0; } } }
public void visitClassConstant(Clazz clazz, ClassConstant classConstant) { // Check if this class entry is an array type. if (ClassUtil.isInternalArrayType(classConstant.getName(clazz))) { isInterfaceMethod = false; } else { // Check if this class entry refers to an interface class. Clazz referencedClass = classConstant.referencedClass; if (referencedClass != null) { isInterfaceMethod = (referencedClass.getAccessFlags() & ClassConstants.ACC_INTERFACE) != 0; } } }
public void visitClassConstant(Clazz clazz, ClassConstant classConstant) { // Check if this class entry is an array type. if (ClassUtil.isInternalArrayType(classConstant.getName(clazz))) { isInterfaceMethod = false; } else { // Check if this class entry refers to an interface class. Clazz referencedClass = classConstant.referencedClass; if (referencedClass != null) { isInterfaceMethod = (referencedClass.getAccessFlags() & ClassConstants.ACC_INTERFACE) != 0; } } }
private void debug(Clazz clazz, Method method, int offset, ConstantInstruction constantInstruction, Instruction replacementInstruction) { System.out.println("MethodInvocationFixer:"); System.out.println(" Class = "+clazz.getName()); System.out.println(" Method = "+method.getName(clazz)+method.getDescriptor(clazz)); System.out.println(" Instruction = "+constantInstruction.toString(offset)); System.out.println(" -> Class = "+referencedClass); System.out.println(" Method = "+referencedMethod); if ((referencedClass.getAccessFlags() & ClassConstants.INTERNAL_ACC_INTERFACE) != 0) { System.out.println(" Parameter size = "+(ClassUtil.internalMethodParameterSize(referencedMethod.getDescriptor(referencedMethodClass), false))); } System.out.println(" Replacement instruction = "+replacementInstruction.toString(offset)); } }
public void visitAnyClass(Clazz clazz) { // Check the class itself. if ((clazz.getAccessFlags() & ClassConstants.ACC_PUBLIC) == 0) { setPackageVisibleMembers(clazz); } else { // Check the members. clazz.fieldsAccept(this); clazz.methodsAccept(this); } }
public void visitAnyClass(Clazz clazz) { // Check the class itself. if ((clazz.getAccessFlags() & ClassConstants.ACC_PUBLIC) == 0) { setPackageVisibleMembers(clazz); } else { // Check the members. clazz.fieldsAccept(this); clazz.methodsAccept(this); } }
public void visitAnyClass(Clazz clazz) { // Check the class itself. if ((clazz.getAccessFlags() & ClassConstants.ACC_PUBLIC) == 0) { setPackageVisibleMembers(clazz); } else { // Check the members. clazz.fieldsAccept(this); clazz.methodsAccept(this); } }
public void visitAnyRefConstant(Clazz clazz, RefConstant refConstant) { Clazz referencedClass = refConstant.referencedClass; if (referencedClass != null && (referencedClass.getAccessFlags() & ClassConstants.INTERNAL_ACC_PUBLIC) == 0) { setInvokesPackageVisibleMembers(clazz); } Member referencedMember = refConstant.referencedMember; if (referencedMember != null && (referencedMember.getAccessFlags() & (ClassConstants.INTERNAL_ACC_PUBLIC | ClassConstants.INTERNAL_ACC_PRIVATE)) == 0) { setInvokesPackageVisibleMembers(clazz); } }
private boolean isFunctionalInterface(Clazz clazz) { // Is it an interface? if ((clazz.getAccessFlags() & ClassConstants.ACC_INTERFACE) == 0) { return false; } // Count the abstract methods in the interface hierarchy. // Subtract any corresponding default methods, since only abstract // methods that don't have a default implementation count. // TODO: Find a better way to count default methods, since there may be more of them for a single abstract method, or we can find one via different paths. MemberCounter abstractMethodCounter = new MemberCounter(); MemberCounter defaultMethodCounter = new MemberCounter(); clazz.hierarchyAccept(true, false, true, false, new AllMethodVisitor( new MemberAccessFilter(ClassConstants.ACC_ABSTRACT, 0, new MultiMemberVisitor( abstractMethodCounter, new SimilarMemberVisitor(clazz, true, false, true, false, new MemberAccessFilter(0, ClassConstants.ACC_ABSTRACT, defaultMethodCounter)) )))); return abstractMethodCounter.getCount() - defaultMethodCounter.getCount() == 1; } }