Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2014-2015 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
  * either express or implied. See the License for the specific language
  * governing permissions and limitations under the License.
  */
 package org.lastaflute.di.core.aop.javassist;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 

Author(s):
modified by jflute (originated in Seasar)
 
 public class AspectWeaver {
 
     public static final String PREFIX_ENHANCED_CLASS = "$$";
     public static final String SUFFIX_ENHANCED_CLASS = "$$EnhancedByS2AOP$$";
     public static final String SUFFIX_METHOD_INVOCATION_CLASS = "$$MethodInvocation$$";
     public static final String SUFFIX_INVOKE_SUPER_METHOD = "$$invokeSuperMethod$$";
     public static final String SEPARATOR_METHOD_INVOCATION_CLASS = "$$";
 
     protected static final Set<StringenhancedClassNames = Collections.synchronizedSet(new HashSet<String>());
     protected final Class<?> targetClass;
     protected final Map parameters;
     protected final String enhancedClassName;
     protected final EnhancedClassGenerator enhancedClassGenerator;
     protected final List<Class<?>> methodInvocationClassList = new ArrayList<Class<?>>();
     protected Class<?> enhancedClass;
     protected ClassPool classPool;
 
     public AspectWeaver(final Class<?> targetClassfinal Map parameters) {
         this. = targetClass;
         this. = parameters;
 
          = ClassPoolUtil.getClassPool(targetClass);
          = getEnhancedClassName();
          = new EnhancedClassGenerator(targetClass);
     }
 
     public void setInterceptors(final Method methodfinal MethodInterceptor[] interceptors) {
         final String methodInvocationClassName = getMethodInvocationClassName(method);
         final MethodInvocationClassGenerator methodInvocationGenerator =
                 new MethodInvocationClassGenerator(methodInvocationClassName);
 
         final String invokeSuperMethodName = createInvokeSuperMethod(method);
         methodInvocationGenerator.createProceedMethod(methodinvokeSuperMethodName);
         .createTargetMethod(methodmethodInvocationClassName);
 
         final Class<?> methodInvocationClass = methodInvocationGenerator.toClass(LdiClassLoaderUtil.getClassLoader());
         setStaticField(methodInvocationClass"method"method);
         setStaticField(methodInvocationClass"interceptors"interceptors);
         setStaticField(methodInvocationClass"parameters");
         .add(methodInvocationClass);
     }
 
     public void setInterTypes(final InterType[] interTypes) {
         if (interTypes == null) {
             return;
         }
 
         for (int i = 0; i < interTypes.length; ++i) {
             .applyInterType(interTypes[i]);
         }
     }
 
     public Class<?> generateClass() {
         if ( == null) {
              = .toClass(LdiClassLoaderUtil.getClassLoader());
 
             for (int i = 0; i < .size(); ++i) {
                 final Class<?> methodInvocationClass = (Class<?>) .get(i);
                 setStaticField(methodInvocationClass"targetClass");
             }
        }
        return ;
    }
    public String getEnhancedClassName() {
        final StringBuffer buf = new StringBuffer(200);
        final String targetClassName = .getName();
        final Package pkg = .getPackage();
        if (targetClassName.startsWith("java.") || (pkg != null && pkg.isSealed())) {
            buf.append();
        }
        buf.append(targetClassName).append().append(Integer.toHexString(hashCode()));
        final int length = buf.length();
        for (int i = 0; .contains(new String(buf)); ++i) {
            buf.setLength(length);
            buf.append("_").append(i);
        }
        String name = new String(buf);
        .add(name);
        return name;
    }
    public String getMethodInvocationClassName(final Method method) {
                + .size();
    }
    public String createInvokeSuperMethod(final Method method) {
        final String invokeSuperMethodName =  + method.getName() + ;
        if (!LdiMethodUtil.isAbstract(method)) {
            .createInvokeSuperMethod(methodinvokeSuperMethodName);
        }
        return invokeSuperMethodName;
    }
    public void setStaticField(final Class<?> clazzfinal String namefinal Object value) {
        try {
            final Field field = clazz.getDeclaredField(name);
            field.setAccessible(true);
            LdiFieldUtil.set(fieldnamevalue);
            field.setAccessible(false);
        } catch (final NoSuchFieldException e) {
            throw new NoSuchFieldRuntimeException(namee);
        }
    }
New to GrepCode? Check out our FAQ X