1 22 package org.jboss.aop.instrument; 23 24 25 import javassist.CtClass; 26 import javassist.CtConstructor; 27 import javassist.Modifier; 28 29 35 public class OptimizedConstructionTransformer extends ConstructionTransformer 36 { 37 38 public OptimizedConstructionTransformer(Instrumentor instrumentor) 39 { 40 super(instrumentor); 41 } 42 43 protected void insertInterception(CtConstructor constructor, int index) throws Exception 44 { 45 CtClass type = constructor.getDeclaringClass(); 46 OptimizedConstructionInvocations.createOptimizedInvocationClass(instrumentor, type, constructor, index); 47 createWrapper(type, constructor, constructor.getDeclaringClass(), index); 48 } 49 50 private void createWrapper(CtClass type, CtConstructor constructor, CtClass clazz, int index) throws Exception 51 { 52 String invocationClass = OptimizedConstructionInvocations.getOptimizedInvocationClassName(type, index); 53 if(!Modifier.isPublic(constructor.getModifiers())) { 54 invocationClass = invocationClass.substring(invocationClass.lastIndexOf('.') + 1); 55 invocationClass = clazz.getName() + "$" + invocationClass; 56 } 57 58 String infoName = getConstructionInfoFieldName(clazz.getSimpleName(), index); 59 60 String code = 61 " " + constructionInfoFromWeakReference("info", infoName) + 62 " org.jboss.aop.advice.Interceptor[] interceptors = info.getInterceptors(); " + 63 " if (interceptors != (org.jboss.aop.advice.Interceptor[])null) " + 64 " { " + 65 " " + invocationClass + " invocation = new " + invocationClass + "(interceptors, " + 66 Instrumentor.HELPER_FIELD_NAME + ".getConstructors()[" + index + "]); " + 67 OptimizedBehaviourInvocations.setArguments(constructor.getParameterTypes().length) + 68 " invocation.setAdvisor(" + Instrumentor.HELPER_FIELD_NAME + "); " + 69 " invocation.setTargetObject(this); " + 70 " invocation.invokeNext(); " + 71 " } "; 72 73 constructor.insertAfter(code, false); 74 }} 75 | Popular Tags |