1 21 package proguard.optimize.info; 22 23 import proguard.classfile.*; 24 import proguard.classfile.util.*; 25 import proguard.classfile.visitor.MemberVisitor; 26 27 35 public class NoSideEffectMethodMarker 36 extends SimplifiedVisitor 37 implements MemberVisitor 38 { 39 private static final Object KEPT_BUT_NO_SIDE_EFFECTS = new Object (); 42 43 44 46 public void visitAnyMember(Clazz Clazz, Member member) 47 { 48 } 50 51 52 public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod) 53 { 54 markNoSideEffects(programMethod); 55 } 56 57 58 public void visitLibraryMethod(LibraryClass libraryClass, LibraryMethod libraryMethod) 59 { 60 markNoSideEffects(libraryMethod); 61 } 62 63 64 66 private static void markNoSideEffects(Method method) 67 { 68 MethodOptimizationInfo info = MethodOptimizationInfo.getMethodOptimizationInfo(method); 69 if (info != null) 70 { 71 info.setNoSideEffects(); 72 } 73 else 74 { 75 MethodLinker.lastMember(method).setVisitorInfo(KEPT_BUT_NO_SIDE_EFFECTS); 76 } 77 } 78 79 80 public static boolean hasNoSideEffects(Method method) 81 { 82 if (MethodLinker.lastVisitorAccepter(method).getVisitorInfo() == KEPT_BUT_NO_SIDE_EFFECTS) 83 { 84 return true; 85 } 86 87 MethodOptimizationInfo info = MethodOptimizationInfo.getMethodOptimizationInfo(method); 88 return info != null && 89 info.hasNoSideEffects(); 90 } 91 } 92 | Popular Tags |