1 21 package proguard.optimize; 22 23 import proguard.classfile.util.SimplifiedVisitor; 24 import proguard.classfile.visitor.MemberVisitor; 25 import proguard.classfile.editor.VariableEditor; 26 import proguard.classfile.*; 27 import proguard.classfile.attribute.*; 28 import proguard.classfile.attribute.visitor.AttributeVisitor; 29 import proguard.optimize.info.ParameterUsageMarker; 30 31 40 public class ParameterShrinker 41 extends SimplifiedVisitor 42 implements AttributeVisitor 43 { 44 private static final boolean DEBUG = false; 45 46 47 private MemberVisitor extraVariableMemberVisitor; 48 49 private VariableEditor variableEditor = new VariableEditor(); 50 51 52 55 public ParameterShrinker() 56 { 57 this(null); 58 } 59 60 61 66 public ParameterShrinker(MemberVisitor extraVariableMemberVisitor) 67 { 68 this.extraVariableMemberVisitor = extraVariableMemberVisitor; 69 } 70 71 72 74 public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} 75 76 77 public void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute) 78 { 79 if ((method.getAccessFlags() & ClassConstants.INTERNAL_ACC_ABSTRACT) == 0) 80 { 81 int variablesSize = codeAttribute.u2maxLocals; 83 84 int parameterSize = ParameterUsageMarker.getParameterSize(method); 87 88 if (DEBUG) 89 { 90 System.out.println("ParameterShrinker: "+clazz.getName()+"."+method.getName(clazz)+method.getDescriptor(clazz)); 91 System.out.println(" parameter size = " + parameterSize); 92 } 93 94 variableEditor.reset(variablesSize); 96 97 for (int parameterIndex = 0; parameterIndex < parameterSize; parameterIndex++) 98 { 99 if (!ParameterUsageMarker.isParameterUsed(method, parameterIndex)) 101 { 102 if (DEBUG) 103 { 104 System.out.println(" Deleting parameter #"+parameterIndex); 105 } 106 107 variableEditor.deleteVariable(parameterIndex); 109 110 if (extraVariableMemberVisitor != null) 112 { 113 method.accept(clazz, extraVariableMemberVisitor); 114 } 115 } 116 } 117 118 variableEditor.visitCodeAttribute(clazz, method, codeAttribute); 120 } 121 } 122 } 123 | Popular Tags |