public void visitProgramClass(ProgramClass programClass) { innerClassAccessFlags = AccessUtil.replaceAccessFlags(innerClassAccessFlags, programClass.u2accessFlags); } }
public void visitProgramClass(ProgramClass programClass) { innerClassAccessFlags = AccessUtil.replaceAccessFlags(innerClassAccessFlags, programClass.u2accessFlags); } }
public void visitProgramClass(ProgramClass programClass) { innerClassAccessFlags = AccessUtil.replaceAccessFlags(innerClassAccessFlags, programClass.u2accessFlags); } }
public void visitProgramField(ProgramClass programClass, ProgramField programField) { // Is the field unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programField)) { // Make the field private. programField.u2accessFlags = AccessUtil.replaceAccessFlags(programField.u2accessFlags, ClassConstants.ACC_PRIVATE); // Visit the field, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramField(programClass, programField); } } }
public void visitProgramField(ProgramClass programClass, ProgramField programField) { // Is the field unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programField)) { // Make the field private. programField.u2accessFlags = AccessUtil.replaceAccessFlags(programField.u2accessFlags, ClassConstants.ACC_PRIVATE); // Visit the field, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramField(programClass, programField); } } }
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) { // Is the method unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programMethod)) { // Make the method private. programMethod.u2accessFlags = AccessUtil.replaceAccessFlags(programMethod.u2accessFlags, ClassConstants.INTERNAL_ACC_PRIVATE); // Visit the method, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramMethod(programClass, programMethod); } } } }
public void visitProgramField(ProgramClass programClass, ProgramField programField) { // Is the field unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programField)) { // Make the field private. programField.u2accessFlags = AccessUtil.replaceAccessFlags(programField.u2accessFlags, ClassConstants.INTERNAL_ACC_PRIVATE); // Visit the field, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramField(programClass, programField); } } }
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) { // Is the method unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programMethod)) { // Make the method private and no longer final. programMethod.u2accessFlags = AccessUtil.replaceAccessFlags(programMethod.u2accessFlags, ClassConstants.ACC_PRIVATE); // Visit the method, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramMethod(programClass, programMethod); } } } }
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) { // Is the method unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programMethod)) { // Make the method private and no longer final. programMethod.u2accessFlags = AccessUtil.replaceAccessFlags(programMethod.u2accessFlags, ClassConstants.ACC_PRIVATE); // Visit the method, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramMethod(programClass, programMethod); } } } }
public void visitProgramField(ProgramClass programClass, ProgramField programField) { // Is the field unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programField)) { // Make the field private. programField.u2accessFlags = AccessUtil.replaceAccessFlags(programField.u2accessFlags, ClassConstants.ACC_PRIVATE); // Visit the field, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramField(programClass, programField); } } }
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) { // Is the method unmarked? if (NonPrivateMemberMarker.canBeMadePrivate(programMethod)) { // Make the method private and no longer final. programMethod.u2accessFlags = AccessUtil.replaceAccessFlags(programMethod.u2accessFlags, ClassConstants.ACC_PRIVATE); // Visit the method, if required. if (extraMemberVisitor != null) { extraMemberVisitor.visitProgramMethod(programClass, programMethod); } } } }
private void fixAccessFlags(LambdaExpression lambdaExpression) { // If the invoked method is private, we can make it package-private // to be able to access it from the lambda class. Otherwise we would // need to add an additional accessor method. if (lambdaExpression.referencedInvokedMethod instanceof ProgramMethod) { ProgramMethod invokedProgramMethod = (ProgramMethod) lambdaExpression.referencedInvokedMethod; int currentAccessFlags = invokedProgramMethod.getAccessFlags(); if ((currentAccessFlags & ClassConstants.ACC_PRIVATE) != 0) { invokedProgramMethod.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(AccessUtil.PACKAGE_VISIBLE)); // In case of instance-capturing lambdas or method references to private // methods the reference kind is invokeSpecial. After fixing the // access flags we need to update the reference kind as well. if (lambdaExpression.invokedReferenceKind == ClassConstants.REF_invokeSpecial) { lambdaExpression.invokedReferenceKind = ClassConstants.REF_invokeVirtual; } } } }
private void fixAccessFlags(LambdaExpression lambdaExpression) { // If the invoked method is private, we can make it package-private // to be able to access it from the lambda class. Otherwise we would // need to add an additional accessor method. if (lambdaExpression.referencedInvokedMethod instanceof ProgramMethod) { ProgramMethod invokedProgramMethod = (ProgramMethod) lambdaExpression.referencedInvokedMethod; int currentAccessFlags = invokedProgramMethod.getAccessFlags(); if ((currentAccessFlags & ClassConstants.ACC_PRIVATE) != 0) { invokedProgramMethod.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(AccessUtil.PACKAGE_VISIBLE)); // In case of instance-capturing lambdas or method references to private // methods the reference kind is invokeSpecial. After fixing the // access flags we need to update the reference kind as well. if (lambdaExpression.invokedReferenceKind == ClassConstants.REF_invokeSpecial) { lambdaExpression.invokedReferenceKind = ClassConstants.REF_invokeVirtual; } } } }
private void fixAccessFlags(LambdaExpression lambdaExpression) { // If the invoked method is private, we can make it package-private // to be able to access it from the lambda class. Otherwise we would // need to add an additional accessor method. if (lambdaExpression.referencedInvokedMethod instanceof ProgramMethod) { ProgramMethod invokedProgramMethod = (ProgramMethod) lambdaExpression.referencedInvokedMethod; int currentAccessFlags = invokedProgramMethod.getAccessFlags(); if ((currentAccessFlags & ClassConstants.ACC_PRIVATE) != 0) { invokedProgramMethod.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(AccessUtil.PACKAGE_VISIBLE)); // In case of instance-capturing lambdas or method references to private // methods the reference kind is invokeSpecial. After fixing the // access flags we need to update the reference kind as well. if (lambdaExpression.invokedReferenceKind == ClassConstants.REF_invokeSpecial) { lambdaExpression.invokedReferenceKind = ClassConstants.REF_invokeVirtual; } } } }
public void visitProgramClass(ProgramClass programClass) { int currentAccessFlags = programClass.getAccessFlags(); int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); // Compute the required access level. Clazz referencingClass = this.referencingClass; int requiredAccessLevel = inSamePackage(programClass, referencingClass) ? AccessUtil.PACKAGE_VISIBLE : AccessUtil.PUBLIC; // Fix the class access flags if necessary. if (currentAccessLevel < requiredAccessLevel) { programClass.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel)); } }
public void visitProgramClass(ProgramClass programClass) { // Do we need to update the access flags? int currentAccessFlags = programClass.getAccessFlags(); int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); if (currentAccessLevel < AccessUtil.PUBLIC) { // Compute the required access level. int requiredAccessLevel = inSamePackage(programClass, referencingClass) ? AccessUtil.PACKAGE_VISIBLE : AccessUtil.PUBLIC; // Fix the class access flags if necessary. if (currentAccessLevel < requiredAccessLevel) { programClass.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel)); } } // Also check the InnerClasses attribute, if any. programClass.attributesAccept(this); }
public void visitProgramClass(ProgramClass programClass) { // Do we need to update the access flags? int currentAccessFlags = programClass.getAccessFlags(); int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); if (currentAccessLevel < AccessUtil.PUBLIC) { // Compute the required access level. int requiredAccessLevel = inSamePackage(programClass, referencingClass) ? AccessUtil.PACKAGE_VISIBLE : AccessUtil.PUBLIC; // Fix the class access flags if necessary. if (currentAccessLevel < requiredAccessLevel) { programClass.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel)); } } // Also check the InnerClasses attribute, if any. programClass.attributesAccept(this); }
public void visitProgramClass(ProgramClass programClass) { // Do we need to update the access flags? int currentAccessFlags = programClass.getAccessFlags(); int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); if (currentAccessLevel < AccessUtil.PUBLIC) { // Compute the required access level. int requiredAccessLevel = inSamePackage(programClass, referencingClass) ? AccessUtil.PACKAGE_VISIBLE : AccessUtil.PUBLIC; // Fix the class access flags if necessary. if (currentAccessLevel < requiredAccessLevel) { programClass.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel)); } } // Also check the InnerClasses attribute, if any. programClass.attributesAccept(this); }
public void visitProgramMember(ProgramClass programClass, ProgramMember programMember) { int currentAccessFlags = programMember.getAccessFlags(); int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); // Compute the required access level. int requiredAccessLevel = programClass.equals(referencingClass) ? AccessUtil.PRIVATE : inSamePackage(programClass, referencingClass) ? AccessUtil.PACKAGE_VISIBLE : referencedClass.extends_(referencingClass) && referencingClass.extends_(programClass) ? AccessUtil.PROTECTED : AccessUtil.PUBLIC; // Fix the class member access flags if necessary. if (currentAccessLevel < requiredAccessLevel) { programMember.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel)); } }
public void visitProgramMember(ProgramClass programClass, ProgramMember programMember) { // Do we need to update the access flags? int currentAccessFlags = programMember.getAccessFlags(); int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); if (currentAccessLevel < AccessUtil.PUBLIC) { // Compute the required access level. // For protected access, the referencing method may not be // static. We're also taking into account the class in the // invocation and the class that actually contains the member. int requiredAccessLevel = programClass.equals(referencingClass) ? AccessUtil.PRIVATE : inSamePackage(programClass, referencingClass) ? AccessUtil.PACKAGE_VISIBLE : (referencingMethodAccessFlags & ClassConstants.ACC_STATIC) == 0 && (referencedClass == null || referencingClass.extends_(referencedClass)) && referencingClass.extends_(programClass) ? AccessUtil.PROTECTED : AccessUtil.PUBLIC; // Fix the class member access flags if necessary. if (currentAccessLevel < requiredAccessLevel) { programMember.u2accessFlags = AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel)); } } } }