1 30 package org.objectweb.asm.optimizer; 31 32 import org.objectweb.asm.AnnotationVisitor; 33 import org.objectweb.asm.Attribute; 34 import org.objectweb.asm.ClassAdapter; 35 import org.objectweb.asm.ClassVisitor; 36 import org.objectweb.asm.FieldVisitor; 37 import org.objectweb.asm.MethodVisitor; 38 import org.objectweb.asm.Opcodes; 39 40 46 public class ClassOptimizer extends ClassAdapter { 47 48 private NameMapping mapping; 49 50 private String className; 51 52 public ClassOptimizer(final ClassVisitor cv, final NameMapping mapping) { 53 super(cv); 54 this.mapping = mapping; 55 } 56 57 public String getClassName() { 58 return className; 59 } 60 61 65 public void visit( 66 final int version, 67 final int access, 68 final String name, 69 final String signature, 70 final String superName, 71 final String [] interfaces) 72 { 73 className = name; 74 cv.visit(version, 75 access, 76 mapping.map(name), 77 null, 78 mapping.map(superName), 79 interfaces); 80 } 81 82 public void visitSource(final String source, final String debug) { 83 } 85 86 public void visitOuterClass( 87 final String owner, 88 final String name, 89 final String desc) 90 { 91 } 93 94 public AnnotationVisitor visitAnnotation( 95 final String desc, 96 final boolean visible) 97 { 98 throw new UnsupportedOperationException (); 99 } 100 101 public void visitAttribute(final Attribute attr) { 102 } 104 105 public void visitInnerClass( 106 final String name, 107 final String outerName, 108 final String innerName, 109 final int access) 110 { 111 } 113 114 public FieldVisitor visitField( 115 final int access, 116 final String name, 117 final String desc, 118 final String signature, 119 final Object value) 120 { 121 if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) { 122 if ((access & Opcodes.ACC_FINAL) != 0 123 && (access & Opcodes.ACC_STATIC) != 0 && desc.equals("I")) 124 { 125 return null; 126 } 127 cv.visitField(access, 128 mapping.map(className + "." + name), 129 mapping.fix(desc), 130 null, 131 value); 132 } else { 133 cv.visitField(access, name, desc, null, value); 134 } 135 return null; } 137 138 public MethodVisitor visitMethod( 139 final int access, 140 final String name, 141 final String desc, 142 final String signature, 143 final String [] exceptions) 144 { 145 if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) { 146 return new MethodOptimizer(cv.visitMethod(access, 147 mapping.map(className + "." + name + desc), 148 mapping.fix(desc), 149 null, 150 exceptions), mapping); 151 } else { 152 return new MethodOptimizer(cv.visitMethod(access, 153 name, 154 desc, 155 null, 156 exceptions), mapping); 157 } 158 } 159 } 160 | Popular Tags |