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)); } }
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) { innerClassAccessFlags = AccessUtil.replaceAccessFlags(innerClassAccessFlags, programClass.u2accessFlags); } }
private boolean accepted(Clazz clazz, int memberAccessFlags) { int accessLevel = AccessUtil.accessLevel(memberAccessFlags); return (accessLevel >= AccessUtil.PUBLIC ) || (accessLevel >= AccessUtil.PRIVATE && referencingClass.equals(clazz) ) || (accessLevel >= AccessUtil.PACKAGE_VISIBLE && (ClassUtil.internalPackageName(referencingClass.getName()).equals( ClassUtil.internalPackageName(clazz.getName())))) || (accessLevel >= AccessUtil.PROTECTED && (referencingClass.extends_(clazz) || referencingClass.extendsOrImplements(clazz)) ); } }
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) { innerClassAccessFlags = AccessUtil.replaceAccessFlags(innerClassAccessFlags, programClass.u2accessFlags); } }
private boolean accepted(Clazz clazz, int memberAccessFlags) { int accessLevel = AccessUtil.accessLevel(memberAccessFlags); return (accessLevel >= AccessUtil.PUBLIC ) || (accessLevel >= AccessUtil.PRIVATE && referencingClass.equals(clazz) ) || (accessLevel >= AccessUtil.PACKAGE_VISIBLE && (ClassUtil.internalPackageName(referencingClass.getName()).equals( ClassUtil.internalPackageName(clazz.getName())))) || (accessLevel >= AccessUtil.PROTECTED && (referencingClass.extends_(clazz) || referencingClass.extendsOrImplements(clazz)) ); } }
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); }
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) { innerClassAccessFlags = AccessUtil.replaceAccessFlags(innerClassAccessFlags, programClass.u2accessFlags); } }
private boolean accepted(Clazz clazz, int memberAccessFlags) { int accessLevel = AccessUtil.accessLevel(memberAccessFlags); return (accessLevel >= AccessUtil.PUBLIC ) || (accessLevel >= AccessUtil.PRIVATE && referencingClass.equals(clazz) ) || (accessLevel >= AccessUtil.PACKAGE_VISIBLE && (ClassUtil.internalPackageName(referencingClass.getName()).equals( ClassUtil.internalPackageName(clazz.getName())))) || (accessLevel >= AccessUtil.PROTECTED && (referencingClass.extends_(clazz) || referencingClass.extendsOrImplements(clazz)) ); } }
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 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); } } }
private boolean accepted(Clazz clazz, int memberAccessFlags) { int accessLevel = AccessUtil.accessLevel(memberAccessFlags); return (accessLevel >= AccessUtil.PUBLIC ) || (accessLevel >= AccessUtil.PRIVATE && referencingClass.equals(clazz) ) || (accessLevel >= AccessUtil.PACKAGE_VISIBLE && (ClassUtil.internalPackageName(referencingClass.getName()).equals( ClassUtil.internalPackageName(clazz.getName())))) || (accessLevel >= AccessUtil.PROTECTED && (referencingClass.extends_(clazz) || referencingClass.extendsOrImplements(clazz)) ); } }
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 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); } } }
AccessUtil.accessLevel(libraryClass.getAccessFlags()) < AccessUtil.PUBLIC) if (AccessUtil.accessLevel(field.getAccessFlags()) >= (skipNonPublicClassMembers ? AccessUtil.PROTECTED : AccessUtil.PACKAGE_VISIBLE)) if (AccessUtil.accessLevel(method.getAccessFlags()) >= (skipNonPublicClassMembers ? AccessUtil.PROTECTED : AccessUtil.PACKAGE_VISIBLE))
int currentAccessLevel = AccessUtil.accessLevel(currentAccessFlags); if (currentAccessLevel < AccessUtil.PUBLIC) AccessUtil.replaceAccessFlags(currentAccessFlags, AccessUtil.accessFlags(requiredAccessLevel));
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); } } }
AccessUtil.accessLevel(libraryClass.getAccessFlags()) < AccessUtil.PUBLIC) if (AccessUtil.accessLevel(field.getAccessFlags()) >= (skipNonPublicClassMembers ? AccessUtil.PROTECTED : AccessUtil.PACKAGE_VISIBLE)) if (AccessUtil.accessLevel(method.getAccessFlags()) >= (skipNonPublicClassMembers ? AccessUtil.PROTECTED : AccessUtil.PACKAGE_VISIBLE))