1 21 package proguard.classfile.visitor; 22 23 import proguard.classfile.*; 24 25 26 38 public class MemberAccessFilter 39 implements MemberVisitor 40 { 41 private static final int ACCESS_MASK = 45 ClassConstants.INTERNAL_ACC_PUBLIC | 46 ClassConstants.INTERNAL_ACC_PRIVATE | 47 ClassConstants.INTERNAL_ACC_PROTECTED; 48 49 private int requiredSetAccessFlags; 50 private int requiredUnsetAccessFlags; 51 private int requiredOneSetAccessFlags; 52 private MemberVisitor memberVisitor; 53 54 55 64 public MemberAccessFilter(int requiredSetAccessFlags, 65 int requiredUnsetAccessFlags, 66 MemberVisitor memberVisitor) 67 { 68 this.requiredSetAccessFlags = requiredSetAccessFlags & ~ACCESS_MASK; 69 this.requiredUnsetAccessFlags = requiredUnsetAccessFlags; 70 this.requiredOneSetAccessFlags = requiredSetAccessFlags & ACCESS_MASK; 71 this.memberVisitor = memberVisitor; 72 } 73 74 75 77 public void visitProgramField(ProgramClass programClass, ProgramField programField) 78 { 79 if (accepted(programField.getAccessFlags())) 80 { 81 memberVisitor.visitProgramField(programClass, programField); 82 } 83 } 84 85 86 public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) 87 { 88 if (accepted(programMethod.getAccessFlags())) 89 { 90 memberVisitor.visitProgramMethod(programClass, programMethod); 91 } 92 } 93 94 95 public void visitLibraryField(LibraryClass libraryClass, LibraryField libraryField) 96 { 97 if (accepted(libraryField.getAccessFlags())) 98 { 99 memberVisitor.visitLibraryField(libraryClass, libraryField); 100 } 101 } 102 103 104 public void visitLibraryMethod(LibraryClass libraryClass, LibraryMethod libraryMethod) 105 { 106 if (accepted(libraryMethod.getAccessFlags())) 107 { 108 memberVisitor.visitLibraryMethod(libraryClass, libraryMethod); 109 } 110 } 111 112 113 115 private boolean accepted(int accessFlags) 116 { 117 return (requiredSetAccessFlags & ~accessFlags) == 0 && 118 (requiredUnsetAccessFlags & accessFlags) == 0 && 119 (requiredOneSetAccessFlags == 0 || 120 (requiredOneSetAccessFlags & accessFlags) != 0); 121 } 122 } 123 | Popular Tags |