1 21 package proguard.optimize.info; 22 23 import proguard.classfile.*; 24 import proguard.classfile.constant.*; 25 import proguard.classfile.constant.visitor.ConstantVisitor; 26 import proguard.classfile.util.SimplifiedVisitor; 27 import proguard.classfile.visitor.*; 28 29 35 public class NonPrivateMemberMarker 36 extends SimplifiedVisitor 37 implements ClassVisitor, 38 ConstantVisitor, 39 MemberVisitor 40 { 41 private MethodImplementationFilter filteredMethodMarker = new MethodImplementationFilter(this); 42 43 44 46 public void visitProgramClass(ProgramClass programClass) 47 { 48 programClass.constantPoolEntriesAccept(this); 50 51 programClass.methodAccept(ClassConstants.INTERNAL_METHOD_NAME_CLINIT, 53 ClassConstants.INTERNAL_METHOD_TYPE_CLINIT, 54 this); 55 56 programClass.methodAccept(ClassConstants.INTERNAL_METHOD_NAME_INIT, 58 ClassConstants.INTERNAL_METHOD_TYPE_INIT, 59 this); 60 61 programClass.methodsAccept(filteredMethodMarker); 63 } 64 65 66 public void visitLibraryClass(LibraryClass libraryClass) 67 { 68 libraryClass.methodsAccept(this); 70 } 71 72 73 75 public void visitAnyConstant(Clazz clazz, Constant constant) {} 76 77 78 public void visitStringConstant(Clazz clazz, StringConstant stringConstant) 79 { 80 Clazz referencedClass = stringConstant.referencedClass; 81 82 if (referencedClass != null && 84 !referencedClass.equals(clazz)) 85 { 86 stringConstant.referencedMemberAccept(this); 88 } 89 } 90 91 92 public void visitAnyRefConstant(Clazz clazz, RefConstant refConstant) 93 { 94 Clazz referencedClass = refConstant.referencedClass; 95 96 if (referencedClass != null && 98 !referencedClass.equals(clazz)) 99 { 100 refConstant.referencedMemberAccept(this); 102 } 103 } 104 105 106 108 public void visitProgramField(ProgramClass programClass, ProgramField programField) 109 { 110 markCanNotBeMadePrivate(programField); 111 } 112 113 114 public void visitLibraryField(LibraryClass libraryClass, LibraryField libraryField) 115 { 116 markCanNotBeMadePrivate(libraryField); 117 } 118 119 120 public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) 121 { 122 markCanNotBeMadePrivate(programMethod); 123 } 124 125 126 public void visitLibraryMethod(LibraryClass libraryClass, LibraryMethod libraryMethod) 127 { 128 markCanNotBeMadePrivate(libraryMethod); 129 } 130 131 132 134 private static void markCanNotBeMadePrivate(Field field) 135 { 136 FieldOptimizationInfo info = FieldOptimizationInfo.getFieldOptimizationInfo(field); 137 if (info != null) 138 { 139 info.setCanNotBeMadePrivate(); 140 } 141 } 142 143 144 public static boolean canBeMadePrivate(Field field) 145 { 146 FieldOptimizationInfo info = FieldOptimizationInfo.getFieldOptimizationInfo(field); 147 return info != null && 148 info.canBeMadePrivate(); 149 } 150 151 152 private static void markCanNotBeMadePrivate(Method method) 153 { 154 MethodOptimizationInfo info = MethodOptimizationInfo.getMethodOptimizationInfo(method); 155 if (info != null) 156 { 157 info.setCanNotBeMadePrivate(); 158 } 159 } 160 161 162 public static boolean canBeMadePrivate(Method method) 163 { 164 MethodOptimizationInfo info = MethodOptimizationInfo.getMethodOptimizationInfo(method); 165 return info != null && 166 info.canBeMadePrivate(); 167 } 168 } 169 | Popular Tags |