1 16 package net.sf.cglib.transform.impl; 17 18 import java.lang.reflect.Method ; 19 import net.sf.cglib.core.*; 20 import net.sf.cglib.transform.*; 21 import org.objectweb.asm.Type; 22 23 26 public class AddStaticInitTransformer extends ClassEmitterTransformer { 27 private MethodInfo info; 28 29 public AddStaticInitTransformer(Method classInit) { 30 info = ReflectUtils.getMethodInfo(classInit); 31 if (!TypeUtils.isStatic(info.getModifiers())) { 32 throw new IllegalArgumentException (classInit + " is not static"); 33 } 34 Type[] types = info.getSignature().getArgumentTypes(); 35 if (types.length != 1 || 36 !types[0].equals(Constants.TYPE_CLASS) || 37 !info.getSignature().getReturnType().equals(Type.VOID_TYPE)) { 38 throw new IllegalArgumentException (classInit + " illegal signature"); 39 } 40 } 41 42 protected void init() { 43 if (!TypeUtils.isInterface(getAccess())) { 44 CodeEmitter e = getStaticHook(); 45 EmitUtils.load_class_this(e); 46 e.invoke(info); 47 } 48 } 49 } 50 | Popular Tags |