[jboss-cvs] JBossAS SVN: r107667 - in projects/aop/tags: JBoss_AOP_2_1_6_GA_CP01 and 11 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Aug 18 12:32:07 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-08-18 12:32:06 -0400 (Wed, 18 Aug 2010)
New Revision: 107667

Added:
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java
Removed:
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java
Modified:
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aophelper/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-core/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-jmx/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-mc/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aspects/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/build/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/deployers/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/jrockit-pluggable-instrumentor/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/pluggable-instrumentor/pom.xml
   projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/pom.xml
Log:
2.1.6.GA_CP01


Copied: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01 (from rev 107581, projects/aop/branches/JBoss_AOP_2_1_6_GA_CP)

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aop/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.jboss.aop</groupId>

Deleted: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2010-08-18 16:32:06 UTC (rev 107667)
@@ -1,403 +0,0 @@
-/*
-  * JBoss, Home of Professional Open Source
-  * Copyright 2005, JBoss Inc., and individual contributors as indicated
-  * by the @authors tag. See the copyright.txt in the distribution for a
-  * full listing of individual contributors.
-  *
-  * This is free software; you can redistribute it and/or modify it
-  * under the terms of the GNU Lesser General Public License as
-  * published by the Free Software Foundation; either version 2.1 of
-  * the License, or (at your option) any later version.
-  *
-  * This software is distributed in the hope that it will be useful,
-  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-  * Lesser General Public License for more details.
-  *
-  * You should have received a copy of the GNU Lesser General Public
-  * License along with this software; if not, write to the Free
-  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-  */
-package org.jboss.aop.proxy;
-
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.security.ProtectionDomain;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.CtField;
-import javassist.CtMethod;
-import javassist.CtNewMethod;
-import javassist.Modifier;
-import javassist.SerialVersionUID;
-
-import org.jboss.aop.AspectManager;
-import org.jboss.aop.ClassAdvisor;
-import org.jboss.aop.ClassInstanceAdvisor;
-import org.jboss.aop.InstanceAdvisor;
-import org.jboss.aop.instrument.Instrumentor;
-import org.jboss.aop.instrument.TransformerCommon;
-import org.jboss.aop.util.JavassistMethodHashing;
-import org.jboss.aop.util.reference.MethodPersistentReference;
-import org.jboss.aop.util.reference.PersistentReference;
-import org.jboss.util.collection.WeakValueHashMap;
-
-
-/**
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @version $Revision$
- */
-public class ClassProxyFactory
-{
-   private static Object maplock = new Object();
-   private static WeakValueHashMap<String, Class<?>> classnameMap = new WeakValueHashMap<String, Class<?>>();
-   private static WeakHashMap<ClassLoader, WeakHashMap<Class<?>, WeakReference<Class<?>>>> proxyCache = new WeakHashMap<ClassLoader, WeakHashMap<Class<?>, WeakReference<Class<?>>>>();
-   private static WeakHashMap<Class<?>, Map<Long, MethodPersistentReference>> methodMapCache = new WeakHashMap<Class<?>, Map<Long, MethodPersistentReference>>();
-   
-   public static final String GENERATED_PROXIES_PACKAGE = "org.jboss.aop.generatedproxies";
-
-   public static ClassProxy newInstance(Class<?> clazz) throws Exception
-   {
-      return newInstance(clazz, null);
-   }
-
-   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins) throws Exception
-   {
-      return newInstance(clazz, mixins, new ClassInstanceAdvisor());
-   }
-
-   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace) throws Exception
-   {
-      return newInstance(clazz, mixins, new ClassInstanceAdvisor(), interceptWriteReplace);
-   }
-
-   private static Class<?> getProxyClass(Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace)
-   throws Exception
-   {
-      // Don't make a proxy of a proxy !
-      if (ClassProxy.class.isAssignableFrom(clazz)) clazz = clazz.getSuperclass();
-
-      ClassPool pool = AspectManager.instance().findClassPool(clazz);
-      if (pool == null) throw new NullPointerException("Could not find ClassPool");
-
-      
-      Class<?> proxyClass = null;
-      synchronized (maplock)
-      {
-         WeakHashMap<Class<?>, WeakReference<Class<?>>> proxiesForLoader = proxyCache.get(pool.getClassLoader());
-         if (proxiesForLoader == null)
-         {
-            proxiesForLoader = new WeakHashMap<Class<?>, WeakReference<Class<?>>>();
-            proxyCache.put(pool.getClassLoader(), proxiesForLoader);
-         }
-         if (proxiesForLoader != null)
-         {
-            WeakReference<Class<?>> ref = proxiesForLoader.get(pool.getClassLoader());
-            if (ref != null)
-            {
-               proxyClass = ref.get();
-            }
-         }
-         if (proxyClass == null)
-         {
-            proxyClass = generateProxy(pool, clazz, mixins, interceptWriteReplace);
-            classnameMap.put(clazz.getName(), proxyClass);
-            proxiesForLoader.put(clazz, new WeakReference<Class<?>>(proxyClass));
-            HashMap<Long, MethodPersistentReference> map = methodMap(clazz);
-            methodMapCache.put(proxyClass, map);
-         }
-      }
-      return proxyClass;
-   }
-
-   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, InstanceAdvisor advisor) throws Exception
-   {
-      return newInstance(clazz, mixins, advisor, false);
-
-   }
-
-   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, InstanceAdvisor advisor, boolean interceptWriteReplace) throws Exception
-   {
-      Class<?> proxyClass = getProxyClass(clazz, mixins, interceptWriteReplace);
-      ClassProxy proxy = (ClassProxy) proxyClass.newInstance();
-      proxy.setMixins(mixins);
-      proxy._setInstanceAdvisor(advisor);
-      return proxy;
-
-   }
-
-   public static HashMap<Long, MethodPersistentReference> getMethodMap(String classname)
-   {
-      synchronized (maplock)
-      {
-         Class<?> clazz = classnameMap.get(classname);
-         if (clazz == null) return null;
-         return (HashMap<Long, MethodPersistentReference>) methodMapCache.get(clazz);
-      }
-   }
-
-   public static HashMap<Long, MethodPersistentReference> getMethodMap(Class<?> clazz)
-   {
-      HashMap<Long, MethodPersistentReference> map = getMethodMap(clazz.getName());
-      if (map != null) return map;
-      try
-      {
-         return methodMap(clazz);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException(e);  //To change body of catch statement use Options | File Templates.
-      }
-   }
-
-   private static int counter = 0;
-
-   private static CtClass createProxyCtClass(ClassPool pool, ProxyMixin[] mixins, Class<?> clazz, boolean interceptWriteReplace)
-   throws Exception
-   {
-      String packageName = clazz.getPackage().getName();
-      if (packageName.startsWith("java.") || packageName.startsWith("sun."))
-      {
-         packageName = GENERATED_PROXIES_PACKAGE;
-      }
-      String classname = null;
-      synchronized (ClassProxyFactory.class)
-      {
-         classname = packageName + ".AOPClassProxy$" + counter++;
-      }
-
-      CtClass template = pool.get("org.jboss.aop.proxy.ClassProxyTemplate");
-      CtClass superclass = pool.get(clazz.getName());
-      
-      CtField mixinField = template.getField("mixins");
-      CtField instanceAdvisor = template.getField("instanceAdvisor");
-      
-      CtClass proxy = TransformerCommon.makeClass(pool, classname, superclass);
-      
-      mixinField = new CtField(mixinField.getType(), "mixins", proxy);
-      mixinField.setModifiers(Modifier.PRIVATE);
-      Instrumentor.addSyntheticAttribute(mixinField);
-      proxy.addField(mixinField);
-      instanceAdvisor = new CtField(instanceAdvisor.getType(), "instanceAdvisor", proxy);
-      instanceAdvisor.setModifiers(Modifier.PRIVATE);
-      proxy.addField(instanceAdvisor);
-
-      CtMethod writeEx = CtNewMethod.make("   public void writeExternal(java.io.ObjectOutput out)\n" +
-                                          "   throws java.io.IOException\n" +
-                                          "   {\n" +
-                                          "   }", proxy);
-      Instrumentor.addSyntheticAttribute(writeEx);
-      CtMethod readEx = CtNewMethod.make("   public void readExternal(java.io.ObjectInput in)\n" +
-                                         "   throws java.io.IOException, ClassNotFoundException\n" +
-                                         "   {\n" +
-                                         "   }", proxy);
-      Instrumentor.addSyntheticAttribute(readEx);
-      CtMethod getInstanceAdvisor = CtNewMethod.make("   public org.jboss.aop.InstanceAdvisor _getInstanceAdvisor()\n" +
-                                                     "   {\n" +
-                                                     "      return instanceAdvisor;\n" +
-                                                     "   }", proxy);
-      Instrumentor.addSyntheticAttribute(getInstanceAdvisor);
-      CtMethod setInstanceAdvisor = CtNewMethod.make("   public void _setInstanceAdvisor(org.jboss.aop.InstanceAdvisor newAdvisor)\n" +
-                                                     "   {\n" +
-                                                     "      instanceAdvisor = (org.jboss.aop.ClassInstanceAdvisor) newAdvisor;\n" +
-                                                     "   }", proxy);
-      Instrumentor.addSyntheticAttribute(setInstanceAdvisor);
-      CtMethod dynamicInvoke = CtNewMethod.make("   public org.jboss.aop.joinpoint.InvocationResponse _dynamicInvoke(org.jboss.aop.joinpoint.Invocation invocation)\n" +
-                                                "   throws Throwable\n" +
-                                                "   {\n" +
-                                                "      ((org.jboss.aop.joinpoint.InvocationBase) invocation).setInstanceResolver(instanceAdvisor.getMetaData());\n" +
-                                                "      org.jboss.aop.advice.Interceptor[] aspects = instanceAdvisor.getInterceptors();\n" +
-                                                "      return new org.jboss.aop.joinpoint.InvocationResponse(invocation.invokeNext(aspects));\n" +
-                                                "   }", proxy);
-      Instrumentor.addSyntheticAttribute(dynamicInvoke);
-      CtMethod setMixins = CtNewMethod.make("   public void setMixins(org.jboss.aop.proxy.ProxyMixin[] mixins)\n" +
-                                            "   {\n" +
-                                            "      this.mixins = mixins;\n" +
-                                            "   }", proxy);
-      Instrumentor.addSyntheticAttribute(setMixins);
-      CtMethod writeReplace = CtNewMethod.make("   public Object writeReplace() throws java.io.ObjectStreamException\n" +
-                                               "   {\n" +
-                                               "      return new org.jboss.aop.proxy.MarshalledClassProxy(this.getClass().getSuperclass(), mixins, instanceAdvisor);\n" +
-                                               "   }", proxy);
-      Instrumentor.addSyntheticAttribute(writeReplace);
-
-      proxy.addMethod(writeEx);
-      proxy.addMethod(readEx);
-      proxy.addMethod(getInstanceAdvisor);
-      proxy.addMethod(setInstanceAdvisor);
-      proxy.addMethod(dynamicInvoke);
-      proxy.addMethod(setMixins);
-      if (!interceptWriteReplace)
-         proxy.addMethod(writeReplace);
-
-      /*
-      CtMethod writeEx = template.getDeclaredMethod("writeExternal");
-      CtMethod readEx = template.getDeclaredMethod("readExternal");
-      CtMethod getInstanceAdvisor = template.getDeclaredMethod("_getInstanceAdvisor");
-      CtMethod setInstanceAdvisor = template.getDeclaredMethod("_setInstanceAdvisor");
-      CtMethod dynamicInvoke = template.getDeclaredMethod("_dynamicInvoke");
-      CtMethod setMixins = template.getDeclaredMethod("setMixins");
-      CtMethod writeReplace = template.getDeclaredMethod("writeReplace");
-
-
-
-
-      proxy.addMethod(CtNewMethod.copy(writeEx, proxy, null));
-      proxy.addMethod(CtNewMethod.copy(readEx, proxy, null));
-      proxy.addMethod(CtNewMethod.copy(getInstanceAdvisor, proxy, null));
-      proxy.addMethod(CtNewMethod.copy(setInstanceAdvisor, proxy, null));
-      proxy.addMethod(CtNewMethod.copy(dynamicInvoke, proxy, null));
-      proxy.addMethod(CtNewMethod.copy(setMixins, proxy, null));
-      proxy.addMethod(CtNewMethod.copy(writeReplace, proxy, null));
-      */
-
-
-      proxy.addInterface(pool.get("org.jboss.aop.proxy.ClassProxy"));
-      proxy.addInterface(pool.get("java.io.Externalizable"));
-      proxy.addInterface(pool.get("org.jboss.aop.instrument.Untransformable"));
-      proxy.addInterface(pool.get("org.jboss.aop.proxy.MethodMapped"));
-
-      CtClass map = pool.get("java.util.Map");
-      CtField methodMap = new CtField(map, "methodMap", proxy);
-      methodMap.setModifiers(Modifier.PRIVATE | Modifier.STATIC);
-      proxy.addField(methodMap);
-      CtMethod getMethodMap = CtNewMethod.getter("getMethodMap", methodMap);
-      getMethodMap.setModifiers(Modifier.PUBLIC);
-      proxy.addMethod(getMethodMap);
-
-      HashSet<String> addedInterfaces = new HashSet<String>();
-      HashSet<Long> addedMethods = new HashSet<Long>();
-      if (mixins != null)
-      {
-         for (int i = 0; i < mixins.length; i++)
-         {
-            HashSet<Long> mixinMethods = new HashSet<Long>();
-            Class<?>[] mixinf = mixins[i].getInterfaces();
-            ClassPool mixPool = AspectManager.instance().findClassPool(mixins[i].getMixin().getClass());
-            CtClass mixClass = mixPool.get(mixins[i].getMixin().getClass().getName());
-            for (int j = 0; j < mixinf.length; j++)
-            {
-               if (addedInterfaces.contains(mixinf[j].getName())) throw new Exception("2 mixins are implementing the same interfaces");
-               ClassPool mixIntfPool = AspectManager.instance().findClassPool(mixinf[j]);
-               CtClass intfClass = mixIntfPool.get(mixinf[j].getName());
-               CtMethod[] methods = intfClass.getMethods();
-               for (int m = 0; m < methods.length; m++)
-               {
-                  if (methods[m].getDeclaringClass().getName().equals("java.lang.Object")) continue;
-                  Long hash = new Long(JavassistMethodHashing.methodHash(methods[m]));
-                  if (mixinMethods.contains(hash)) continue;
-                  if (addedMethods.contains(hash)) throw new Exception("More than one mixin has same method");
-                  mixinMethods.add(hash);
-                  addedMethods.add(hash);
-                  String returnStr = (methods[m].getReturnType().equals(CtClass.voidType)) ? "" : "return ";
-                  String code = "{" +
-                  "   " + mixClass.getName() + " mixin = (" + mixClass.getName() + ")mixins[" + i + "].getMixin();" +
-                  "   " + returnStr + " mixin." + methods[m].getName() + "($$);" +
-                  "}";
-                  CtMethod newMethod = CtNewMethod.make(methods[m].getReturnType(), methods[m].getName(), methods[m].getParameterTypes(), methods[m].getExceptionTypes(), code, proxy);
-                  newMethod.setModifiers(Modifier.PUBLIC);
-                  proxy.addMethod(newMethod);
-               }
-
-               proxy.addInterface(intfClass);
-               addedInterfaces.add(intfClass.getName());
-            }
-         }
-      }
-
-      HashMap<Long, CtMethod> allMethods = JavassistMethodHashing.getMethodMap(superclass);
-      
-      if (interceptWriteReplace)
-         allMethods.put(JavassistMethodHashing.methodHash(writeReplace), writeReplace);
-     
-      for (Map.Entry<Long, CtMethod> entry : allMethods.entrySet())
-      {
-         CtMethod m = entry.getValue();
-         if (!Modifier.isPublic(m.getModifiers()) || Modifier.isStatic(m.getModifiers())) continue;
-
-         Long hash = entry.getKey();
-         if (addedMethods.contains(hash)) continue;
-         addedMethods.add(hash);
-         String aopReturnStr = (m.getReturnType().equals(CtClass.voidType)) ? "" : "return ($r)";
-         String args = "null";
-         if (m.getParameterTypes().length > 0) args = "$args";
-         String code = "{   " +
-         "    org.jboss.aop.advice.Interceptor[] aspects = instanceAdvisor.getInterceptors(); " +
-         "    org.jboss.aop.MethodInfo mi = new org.jboss.aop.MethodInfo(); " +
-         "    mi.setHash(" + hash.longValue() + "L);" +
-         "    org.jboss.aop.proxy.ProxyMethodInvocation invocation = new org.jboss.aop.proxy.ProxyMethodInvocation(this, mi, aspects); " +
-         "    invocation.setInstanceResolver(instanceAdvisor.getMetaData()); " +
-         "    invocation.setArguments(" + args + "); " +
-         "    " + aopReturnStr + " invocation.invokeNext(); " +
-         "}";
-         CtMethod newMethod = CtNewMethod.make(m.getReturnType(), m.getName(), m.getParameterTypes(), m.getExceptionTypes(), code, proxy);
-         newMethod.setModifiers(Modifier.PUBLIC);
-         proxy.addMethod(newMethod);
-      }
-      SerialVersionUID.setSerialVersionUID(proxy);
-      return proxy;
-   }
-
-   private static Class<?> generateProxy(ClassPool pool, Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace) throws Exception
-   {
-      CtClass proxy = createProxyCtClass(pool, mixins, clazz, interceptWriteReplace);
-      ProtectionDomain pd = clazz.getProtectionDomain();
-      Class<?> proxyClass = TransformerCommon.toClass(proxy, pd);
-      Map<Long, MethodPersistentReference> methodmap = ClassProxyFactory.getMethodMap(proxyClass); 
-      Field field = proxyClass.getDeclaredField("methodMap");
-      SecurityActions.setAccessible(field);
-      field.set(null, methodmap);
-      return proxyClass;
-   }
-
-   private static void populateMethodTables(HashMap<Long, MethodPersistentReference> advised, List<Long> ignoredHash, Class<?> superclass)
-   throws Exception
-   {
-      if (superclass == null) return;
-      if (superclass.getName().equals("java.lang.Object")) return;
-
-      Method[] declaredMethods = superclass.getDeclaredMethods();
-      for (int i = 0; i < declaredMethods.length; i++)
-      {
-         if (ClassAdvisor.isAdvisable(declaredMethods[i])) 
-         {   
-            //if a method is marked as a "volatile/bridge" method, we need to
-            //ignore it and check that other implementations of that method
-            // (in superclasses) are not added either.
-            if(!java.lang.reflect.Modifier.isVolatile( declaredMethods[i].getModifiers()))
-            {
-               long hash = org.jboss.aop.util.MethodHashing.methodHash(declaredMethods[i]);
-               if(!ignoredHash.contains(new Long(hash)))
-                  advised.put(new Long(hash), new MethodPersistentReference(declaredMethods[i], PersistentReference.REFERENCE_WEAK));
-            }
-            else
-            {
-               long hash = org.jboss.aop.util.MethodHashing.methodHash(declaredMethods[i]);
-               ignoredHash.add(new Long(hash));
-            }
-         }
-      }
-      
-      populateMethodTables(advised, ignoredHash, superclass.getSuperclass());
-
-   }
-
-   public static HashMap<Long, MethodPersistentReference> methodMap(Class<?> clazz)
-   throws Exception
-   {
-      HashMap<Long, MethodPersistentReference> methods = new HashMap<Long, MethodPersistentReference>();
-      List<Long> ignoredHash = new ArrayList<Long>();
-      populateMethodTables(methods, ignoredHash, clazz);
-      return methods;
-   }
-
-}

Copied: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java (from rev 107582, projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java)
===================================================================
--- projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	                        (rev 0)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2010-08-18 16:32:06 UTC (rev 107667)
@@ -0,0 +1,403 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.aop.proxy;
+
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.security.ProtectionDomain;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtField;
+import javassist.CtMethod;
+import javassist.CtNewMethod;
+import javassist.Modifier;
+import javassist.SerialVersionUID;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.ClassAdvisor;
+import org.jboss.aop.ClassInstanceAdvisor;
+import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.instrument.Instrumentor;
+import org.jboss.aop.instrument.TransformerCommon;
+import org.jboss.aop.util.JavassistMethodHashing;
+import org.jboss.aop.util.reference.MethodPersistentReference;
+import org.jboss.aop.util.reference.PersistentReference;
+import org.jboss.util.collection.WeakValueHashMap;
+
+
+/**
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @version $Revision$
+ */
+public class ClassProxyFactory
+{
+   private static Object maplock = new Object();
+   private static WeakValueHashMap<String, Class<?>> classnameMap = new WeakValueHashMap<String, Class<?>>();
+   private static WeakHashMap<ClassLoader, WeakHashMap<Class<?>, WeakReference<Class<?>>>> proxyCache = new WeakHashMap<ClassLoader, WeakHashMap<Class<?>, WeakReference<Class<?>>>>();
+   private static WeakHashMap<Class<?>, Map<Long, MethodPersistentReference>> methodMapCache = new WeakHashMap<Class<?>, Map<Long, MethodPersistentReference>>();
+   
+   public static final String GENERATED_PROXIES_PACKAGE = "org.jboss.aop.generatedproxies";
+
+   public static ClassProxy newInstance(Class<?> clazz) throws Exception
+   {
+      return newInstance(clazz, null);
+   }
+
+   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins) throws Exception
+   {
+      return newInstance(clazz, mixins, new ClassInstanceAdvisor());
+   }
+
+   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace) throws Exception
+   {
+      return newInstance(clazz, mixins, new ClassInstanceAdvisor(), interceptWriteReplace);
+   }
+
+   private static Class<?> getProxyClass(Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace)
+   throws Exception
+   {
+      // Don't make a proxy of a proxy !
+      if (ClassProxy.class.isAssignableFrom(clazz)) clazz = clazz.getSuperclass();
+
+      ClassPool pool = AspectManager.instance().findClassPool(clazz);
+      if (pool == null) throw new NullPointerException("Could not find ClassPool");
+
+      
+      Class<?> proxyClass = null;
+      synchronized (maplock)
+      {
+         WeakHashMap<Class<?>, WeakReference<Class<?>>> proxiesForLoader = proxyCache.get(pool.getClassLoader());
+         if (proxiesForLoader == null)
+         {
+            proxiesForLoader = new WeakHashMap<Class<?>, WeakReference<Class<?>>>();
+            proxyCache.put(pool.getClassLoader(), proxiesForLoader);
+         }
+         if (proxiesForLoader != null)
+         {
+            WeakReference<Class<?>> ref = proxiesForLoader.get(pool.getClassLoader());
+            if (ref != null)
+            {
+               proxyClass = ref.get();
+            }
+         }
+         if (proxyClass == null)
+         {
+            proxyClass = generateProxy(pool, clazz, mixins, interceptWriteReplace);
+            classnameMap.put(clazz.getName(), proxyClass);
+            proxiesForLoader.put(clazz, new WeakReference<Class<?>>(proxyClass));
+            HashMap<Long, MethodPersistentReference> map = methodMap(clazz);
+            methodMapCache.put(proxyClass, map);
+         }
+      }
+      return proxyClass;
+   }
+
+   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, InstanceAdvisor advisor) throws Exception
+   {
+      return newInstance(clazz, mixins, advisor, false);
+
+   }
+
+   public static ClassProxy newInstance(Class<?> clazz, ProxyMixin[] mixins, InstanceAdvisor advisor, boolean interceptWriteReplace) throws Exception
+   {
+      Class<?> proxyClass = getProxyClass(clazz, mixins, interceptWriteReplace);
+      ClassProxy proxy = (ClassProxy) proxyClass.newInstance();
+      proxy.setMixins(mixins);
+      proxy._setInstanceAdvisor(advisor);
+      return proxy;
+
+   }
+
+   public static HashMap<Long, MethodPersistentReference> getMethodMap(String classname)
+   {
+      synchronized (maplock)
+      {
+         Class<?> clazz = classnameMap.get(classname);
+         if (clazz == null) return null;
+         return (HashMap<Long, MethodPersistentReference>) methodMapCache.get(clazz);
+      }
+   }
+
+   public static HashMap<Long, MethodPersistentReference> getMethodMap(Class<?> clazz)
+   {
+      HashMap<Long, MethodPersistentReference> map = getMethodMap(clazz.getName());
+      if (map != null) return map;
+      try
+      {
+         return methodMap(clazz);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);  //To change body of catch statement use Options | File Templates.
+      }
+   }
+
+   private static int counter = 0;
+
+   private static CtClass createProxyCtClass(ClassPool pool, ProxyMixin[] mixins, Class<?> clazz, boolean interceptWriteReplace)
+   throws Exception
+   {
+      String packageName = clazz.getPackage().getName();
+      if (packageName.startsWith("java.") || packageName.startsWith("sun."))
+      {
+         packageName = GENERATED_PROXIES_PACKAGE;
+      }
+      String classname = null;
+      synchronized (ClassProxyFactory.class)
+      {
+         classname = packageName + ".AOPClassProxy$" + counter++;
+      }
+
+      CtClass template = pool.get("org.jboss.aop.proxy.ClassProxyTemplate");
+      CtClass superclass = pool.get(clazz.getName());
+      
+      CtField mixinField = template.getField("mixins");
+      CtField instanceAdvisor = template.getField("instanceAdvisor");
+      
+      CtClass proxy = TransformerCommon.makeClass(pool, classname, superclass);
+      
+      mixinField = new CtField(mixinField.getType(), "mixins", proxy);
+      mixinField.setModifiers(Modifier.PRIVATE);
+      Instrumentor.addSyntheticAttribute(mixinField);
+      proxy.addField(mixinField);
+      instanceAdvisor = new CtField(instanceAdvisor.getType(), "instanceAdvisor", proxy);
+      instanceAdvisor.setModifiers(Modifier.PRIVATE);
+      proxy.addField(instanceAdvisor);
+
+      CtMethod writeEx = CtNewMethod.make("   public void writeExternal(java.io.ObjectOutput out)\n" +
+                                          "   throws java.io.IOException\n" +
+                                          "   {\n" +
+                                          "   }", proxy);
+      Instrumentor.addSyntheticAttribute(writeEx);
+      CtMethod readEx = CtNewMethod.make("   public void readExternal(java.io.ObjectInput in)\n" +
+                                         "   throws java.io.IOException, ClassNotFoundException\n" +
+                                         "   {\n" +
+                                         "   }", proxy);
+      Instrumentor.addSyntheticAttribute(readEx);
+      CtMethod getInstanceAdvisor = CtNewMethod.make("   public org.jboss.aop.InstanceAdvisor _getInstanceAdvisor()\n" +
+                                                     "   {\n" +
+                                                     "      return instanceAdvisor;\n" +
+                                                     "   }", proxy);
+      Instrumentor.addSyntheticAttribute(getInstanceAdvisor);
+      CtMethod setInstanceAdvisor = CtNewMethod.make("   public void _setInstanceAdvisor(org.jboss.aop.InstanceAdvisor newAdvisor)\n" +
+                                                     "   {\n" +
+                                                     "      instanceAdvisor = (org.jboss.aop.ClassInstanceAdvisor) newAdvisor;\n" +
+                                                     "   }", proxy);
+      Instrumentor.addSyntheticAttribute(setInstanceAdvisor);
+      CtMethod dynamicInvoke = CtNewMethod.make("   public org.jboss.aop.joinpoint.InvocationResponse _dynamicInvoke(org.jboss.aop.joinpoint.Invocation invocation)\n" +
+                                                "   throws Throwable\n" +
+                                                "   {\n" +
+                                                "      ((org.jboss.aop.joinpoint.InvocationBase) invocation).setInstanceResolver(instanceAdvisor.getMetaData());\n" +
+                                                "      org.jboss.aop.advice.Interceptor[] aspects = instanceAdvisor.getInterceptors();\n" +
+                                                "      return new org.jboss.aop.joinpoint.InvocationResponse(invocation.invokeNext(aspects));\n" +
+                                                "   }", proxy);
+      Instrumentor.addSyntheticAttribute(dynamicInvoke);
+      CtMethod setMixins = CtNewMethod.make("   public void setMixins(org.jboss.aop.proxy.ProxyMixin[] mixins)\n" +
+                                            "   {\n" +
+                                            "      this.mixins = mixins;\n" +
+                                            "   }", proxy);
+      Instrumentor.addSyntheticAttribute(setMixins);
+      CtMethod writeReplace = CtNewMethod.make("   public Object writeReplace() throws java.io.ObjectStreamException\n" +
+                                               "   {\n" +
+                                               "      return new org.jboss.aop.proxy.MarshalledClassProxy(this.getClass().getSuperclass(), mixins, instanceAdvisor);\n" +
+                                               "   }", proxy);
+      Instrumentor.addSyntheticAttribute(writeReplace);
+
+      proxy.addMethod(writeEx);
+      proxy.addMethod(readEx);
+      proxy.addMethod(getInstanceAdvisor);
+      proxy.addMethod(setInstanceAdvisor);
+      proxy.addMethod(dynamicInvoke);
+      proxy.addMethod(setMixins);
+      if (!interceptWriteReplace)
+         proxy.addMethod(writeReplace);
+
+      /*
+      CtMethod writeEx = template.getDeclaredMethod("writeExternal");
+      CtMethod readEx = template.getDeclaredMethod("readExternal");
+      CtMethod getInstanceAdvisor = template.getDeclaredMethod("_getInstanceAdvisor");
+      CtMethod setInstanceAdvisor = template.getDeclaredMethod("_setInstanceAdvisor");
+      CtMethod dynamicInvoke = template.getDeclaredMethod("_dynamicInvoke");
+      CtMethod setMixins = template.getDeclaredMethod("setMixins");
+      CtMethod writeReplace = template.getDeclaredMethod("writeReplace");
+
+
+
+
+      proxy.addMethod(CtNewMethod.copy(writeEx, proxy, null));
+      proxy.addMethod(CtNewMethod.copy(readEx, proxy, null));
+      proxy.addMethod(CtNewMethod.copy(getInstanceAdvisor, proxy, null));
+      proxy.addMethod(CtNewMethod.copy(setInstanceAdvisor, proxy, null));
+      proxy.addMethod(CtNewMethod.copy(dynamicInvoke, proxy, null));
+      proxy.addMethod(CtNewMethod.copy(setMixins, proxy, null));
+      proxy.addMethod(CtNewMethod.copy(writeReplace, proxy, null));
+      */
+
+
+      proxy.addInterface(pool.get("org.jboss.aop.proxy.ClassProxy"));
+      proxy.addInterface(pool.get("java.io.Externalizable"));
+      proxy.addInterface(pool.get("org.jboss.aop.instrument.Untransformable"));
+      proxy.addInterface(pool.get("org.jboss.aop.proxy.MethodMapped"));
+
+      CtClass map = pool.get("java.util.Map");
+      CtField methodMap = new CtField(map, "methodMap", proxy);
+      methodMap.setModifiers(Modifier.PRIVATE | Modifier.STATIC);
+      proxy.addField(methodMap);
+      CtMethod getMethodMap = CtNewMethod.getter("getMethodMap", methodMap);
+      getMethodMap.setModifiers(Modifier.PUBLIC);
+      proxy.addMethod(getMethodMap);
+
+      HashSet<String> addedInterfaces = new HashSet<String>();
+      HashSet<Long> addedMethods = new HashSet<Long>();
+      if (mixins != null)
+      {
+         for (int i = 0; i < mixins.length; i++)
+         {
+            HashSet<Long> mixinMethods = new HashSet<Long>();
+            Class<?>[] mixinf = mixins[i].getInterfaces();
+            ClassPool mixPool = AspectManager.instance().findClassPool(mixins[i].getMixin().getClass());
+            CtClass mixClass = mixPool.get(mixins[i].getMixin().getClass().getName());
+            for (int j = 0; j < mixinf.length; j++)
+            {
+               if (addedInterfaces.contains(mixinf[j].getName())) throw new Exception("2 mixins are implementing the same interfaces");
+               ClassPool mixIntfPool = AspectManager.instance().findClassPool(mixinf[j]);
+               CtClass intfClass = mixIntfPool.get(mixinf[j].getName());
+               CtMethod[] methods = intfClass.getMethods();
+               for (int m = 0; m < methods.length; m++)
+               {
+                  if (methods[m].getDeclaringClass().getName().equals("java.lang.Object")) continue;
+                  Long hash = new Long(JavassistMethodHashing.methodHash(methods[m]));
+                  if (mixinMethods.contains(hash)) continue;
+                  if (addedMethods.contains(hash)) throw new Exception("More than one mixin has same method");
+                  mixinMethods.add(hash);
+                  addedMethods.add(hash);
+                  String returnStr = (methods[m].getReturnType().equals(CtClass.voidType)) ? "" : "return ";
+                  String code = "{" +
+                  "   " + mixClass.getName() + " mixin = (" + mixClass.getName() + ")mixins[" + i + "].getMixin();" +
+                  "   " + returnStr + " mixin." + methods[m].getName() + "($$);" +
+                  "}";
+                  CtMethod newMethod = CtNewMethod.make(methods[m].getReturnType(), methods[m].getName(), methods[m].getParameterTypes(), methods[m].getExceptionTypes(), code, proxy);
+                  newMethod.setModifiers(Modifier.PUBLIC);
+                  proxy.addMethod(newMethod);
+               }
+
+               proxy.addInterface(intfClass);
+               addedInterfaces.add(intfClass.getName());
+            }
+         }
+      }
+
+      HashMap<Long, CtMethod> allMethods = JavassistMethodHashing.getMethodMap(superclass);
+      
+      if (interceptWriteReplace)
+         allMethods.put(JavassistMethodHashing.methodHash(writeReplace), writeReplace);
+     
+      for (Map.Entry<Long, CtMethod> entry : allMethods.entrySet())
+      {
+         CtMethod m = entry.getValue();
+         if (!Modifier.isPublic(m.getModifiers()) || Modifier.isStatic(m.getModifiers())) continue;
+
+         Long hash = entry.getKey();
+         if (addedMethods.contains(hash)) continue;
+         addedMethods.add(hash);
+         String aopReturnStr = (m.getReturnType().equals(CtClass.voidType)) ? "" : "return ($r)";
+         String args = "null";
+         if (m.getParameterTypes().length > 0) args = "$args";
+         String code = "{   " +
+         "    org.jboss.aop.advice.Interceptor[] aspects = instanceAdvisor.getInterceptors(); " +
+         "    org.jboss.aop.MethodInfo mi = new org.jboss.aop.MethodInfo(); " +
+         "    mi.setHash(" + hash.longValue() + "L);" +
+         "    org.jboss.aop.proxy.ProxyMethodInvocation invocation = new org.jboss.aop.proxy.ProxyMethodInvocation(this, mi, aspects); " +
+         "    invocation.setInstanceResolver(instanceAdvisor.getMetaData()); " +
+         "    invocation.setArguments(" + args + "); " +
+         "    " + aopReturnStr + " invocation.invokeNext(); " +
+         "}";
+         CtMethod newMethod = CtNewMethod.make(m.getReturnType(), m.getName(), m.getParameterTypes(), m.getExceptionTypes(), code, proxy);
+         newMethod.setModifiers(Modifier.PUBLIC);
+         proxy.addMethod(newMethod);
+      }
+      SerialVersionUID.setSerialVersionUID(proxy);
+      return proxy;
+   }
+
+   private static Class<?> generateProxy(ClassPool pool, Class<?> clazz, ProxyMixin[] mixins, boolean interceptWriteReplace) throws Exception
+   {
+      CtClass proxy = createProxyCtClass(pool, mixins, clazz, interceptWriteReplace);
+      ProtectionDomain pd = clazz.getProtectionDomain();
+      Class<?> proxyClass = TransformerCommon.toClass(proxy, pd);
+      Map<Long, MethodPersistentReference> methodmap = ClassProxyFactory.getMethodMap(proxyClass); 
+      Field field = proxyClass.getDeclaredField("methodMap");
+      SecurityActions.setAccessible(field);
+      field.set(null, methodmap);
+      return proxyClass;
+   }
+
+   private static void populateMethodTables(HashMap<Long, MethodPersistentReference> advised, List<Long> ignoredHash, Class<?> superclass)
+   throws Exception
+   {
+      if (superclass == null) return;
+      if (superclass.getName().equals("java.lang.Object")) return;
+
+      Method[] declaredMethods = SecurityActions.getDeclaredMethods(superclass);
+      for (int i = 0; i < declaredMethods.length; i++)
+      {
+         if (ClassAdvisor.isAdvisable(declaredMethods[i])) 
+         {   
+            //if a method is marked as a "volatile/bridge" method, we need to
+            //ignore it and check that other implementations of that method
+            // (in superclasses) are not added either.
+            if(!java.lang.reflect.Modifier.isVolatile( declaredMethods[i].getModifiers()))
+            {
+               long hash = org.jboss.aop.util.MethodHashing.methodHash(declaredMethods[i]);
+               if(!ignoredHash.contains(new Long(hash)))
+                  advised.put(new Long(hash), new MethodPersistentReference(declaredMethods[i], PersistentReference.REFERENCE_WEAK));
+            }
+            else
+            {
+               long hash = org.jboss.aop.util.MethodHashing.methodHash(declaredMethods[i]);
+               ignoredHash.add(new Long(hash));
+            }
+         }
+      }
+      
+      populateMethodTables(advised, ignoredHash, superclass.getSuperclass());
+
+   }
+
+   public static HashMap<Long, MethodPersistentReference> methodMap(Class<?> clazz)
+   throws Exception
+   {
+      HashMap<Long, MethodPersistentReference> methods = new HashMap<Long, MethodPersistentReference>();
+      List<Long> ignoredHash = new ArrayList<Long>();
+      populateMethodTables(methods, ignoredHash, clazz);
+      return methods;
+   }
+
+}

Deleted: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java	2010-08-18 16:32:06 UTC (rev 107667)
@@ -1,137 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source.
-* Copyright 2006, Red Hat Middleware LLC, and individual contributors
-* as indicated by the @author tags. See the copyright.txt file in the
-* distribution for a full listing of individual contributors. 
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/ 
-package org.jboss.aop.proxy;
-
-import java.lang.reflect.AccessibleObject;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class SecurityActions
-{
-   interface SetAccessibleAction
-   {
-      void setAccessible(AccessibleObject accessibleObject);
-      
-      SetAccessibleAction PRIVILEGED = new SetAccessibleAction()
-      {
-         public void setAccessible(final AccessibleObject accessibleObject)
-         {
-            try
-            {
-               AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
-               {
-                  public Object run() throws Exception
-                  {
-                     accessibleObject.setAccessible(true);
-                     return null;
-                  }
-               });
-            }
-            catch (PrivilegedActionException e)
-            {
-               throw new RuntimeException("Error setting " + accessibleObject + " as accessible ", e.getException());
-            }
-         }
-      };
-
-      SetAccessibleAction NON_PRIVILEGED = new SetAccessibleAction()
-      {
-         public void setAccessible(AccessibleObject accessibleObject)
-         {
-            accessibleObject.setAccessible(true);
-         }
-      };
-   }
-
-   static void setAccessible(AccessibleObject accessibleObject)
-   {
-      if (System.getSecurityManager() == null)
-      {
-         SetAccessibleAction.NON_PRIVILEGED.setAccessible(accessibleObject);
-      }
-      else
-      {
-         SetAccessibleAction.PRIVILEGED.setAccessible(accessibleObject);
-      }
-   }
-   
-   public static class GetContextClassLoaderAction implements PrivilegedAction<ClassLoader>
-   {
-      public static GetContextClassLoaderAction INSTANCE = new GetContextClassLoaderAction();
-      
-      public ClassLoader run()
-      {
-         return Thread.currentThread().getContextClassLoader();
-      }
-   }
-
-   static ClassLoader getContextClassLoader()
-   {
-      if (System.getSecurityManager() == null)
-         return Thread.currentThread().getContextClassLoader();
-      else
-         return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
-   }
-   
-   interface GetClassLoaderAction 
-   {
-      ClassLoader getClassLoader(Class<?> clazz);
-      
-      GetClassLoaderAction NON_PRIVILEGED = new GetClassLoaderAction() {
-
-         public ClassLoader getClassLoader(Class<?> clazz)
-         {
-            return clazz.getClassLoader();
-         }};
-
-     GetClassLoaderAction PRIVILEGED = new GetClassLoaderAction() {
-
-         public ClassLoader getClassLoader(final Class<?> clazz)
-         {
-            return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-
-               public ClassLoader run()
-               {
-                  return clazz.getClassLoader();
-               }});
-         }};
-   }
-   
-   static ClassLoader getClassLoader(Class<?> clazz)
-   {
-      if (System.getSecurityManager() == null)
-      {
-         return GetClassLoaderAction.NON_PRIVILEGED.getClassLoader(clazz);
-      }
-      else
-      {
-         return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
-      }
-   }
-}

Copied: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java (from rev 107582, projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java)
===================================================================
--- projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java	                        (rev 0)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aop/src/main/java/org/jboss/aop/proxy/SecurityActions.java	2010-08-18 16:32:06 UTC (rev 107667)
@@ -0,0 +1,174 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.aop.proxy;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+class SecurityActions
+{
+   interface SetAccessibleAction
+   {
+      void setAccessible(AccessibleObject accessibleObject);
+      
+      SetAccessibleAction PRIVILEGED = new SetAccessibleAction()
+      {
+         public void setAccessible(final AccessibleObject accessibleObject)
+         {
+            try
+            {
+               AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+               {
+                  public Object run() throws Exception
+                  {
+                     accessibleObject.setAccessible(true);
+                     return null;
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw new RuntimeException("Error setting " + accessibleObject + " as accessible ", e.getException());
+            }
+         }
+      };
+
+      SetAccessibleAction NON_PRIVILEGED = new SetAccessibleAction()
+      {
+         public void setAccessible(AccessibleObject accessibleObject)
+         {
+            accessibleObject.setAccessible(true);
+         }
+      };
+   }
+
+   static void setAccessible(AccessibleObject accessibleObject)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         SetAccessibleAction.NON_PRIVILEGED.setAccessible(accessibleObject);
+      }
+      else
+      {
+         SetAccessibleAction.PRIVILEGED.setAccessible(accessibleObject);
+      }
+   }
+   
+   public static class GetContextClassLoaderAction implements PrivilegedAction<ClassLoader>
+   {
+      public static GetContextClassLoaderAction INSTANCE = new GetContextClassLoaderAction();
+      
+      public ClassLoader run()
+      {
+         return Thread.currentThread().getContextClassLoader();
+      }
+   }
+
+   static ClassLoader getContextClassLoader()
+   {
+      if (System.getSecurityManager() == null)
+         return Thread.currentThread().getContextClassLoader();
+      else
+         return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
+   }
+   
+   interface GetClassLoaderAction 
+   {
+      ClassLoader getClassLoader(Class<?> clazz);
+      
+      GetClassLoaderAction NON_PRIVILEGED = new GetClassLoaderAction() {
+
+         public ClassLoader getClassLoader(Class<?> clazz)
+         {
+            return clazz.getClassLoader();
+         }};
+
+     GetClassLoaderAction PRIVILEGED = new GetClassLoaderAction() {
+
+         public ClassLoader getClassLoader(final Class<?> clazz)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+
+               public ClassLoader run()
+               {
+                  return clazz.getClassLoader();
+               }});
+         }};
+   }
+   
+   static ClassLoader getClassLoader(Class<?> clazz)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return GetClassLoaderAction.NON_PRIVILEGED.getClassLoader(clazz);
+      }
+      else
+      {
+         return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
+      }
+   }
+   
+   interface GetDeclaredMethodsAction 
+   {
+      Method[] getDeclaredMethods(Class<?> clazz);
+      
+      GetDeclaredMethodsAction NON_PRIVILEGED = new GetDeclaredMethodsAction() {
+
+         public Method[] getDeclaredMethods(Class<?> clazz)
+         {
+            return clazz.getDeclaredMethods();
+         }};
+
+         GetDeclaredMethodsAction PRIVILEGED = new GetDeclaredMethodsAction() {
+
+            public Method[] getDeclaredMethods(final Class<?> clazz)
+            {
+               return AccessController.doPrivileged(new PrivilegedAction<Method[]>() {
+
+                  public Method[] run()
+                  {
+                     return clazz.getDeclaredMethods();
+                  }});
+            }};
+   }
+   
+   static Method[] getDeclaredMethods(Class<?> clazz)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return GetDeclaredMethodsAction.NON_PRIVILEGED.getDeclaredMethods(clazz);
+      }
+      else
+      {
+         return GetDeclaredMethodsAction.PRIVILEGED.getDeclaredMethods(clazz);
+      }
+   }
+}

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aophelper/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aophelper/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aophelper/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,13 +2,13 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.jboss.aop</groupId>
   <artifactId>aophelper</artifactId>
   <packaging>jar</packaging>
-  <version>2.1.6.GA</version>
+  <version>2.1.6.GA_CP01</version>
   <name>JBoss AOP Helper</name>
 
    <pluginRepositories>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-core/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/asintegration-core/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-core/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jboss-aop-asintegration-core</artifactId>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-jmx/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/asintegration-jmx/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-jmx/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jboss-aop-asintegration-jmx</artifactId>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-mc/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/asintegration-mc/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/asintegration-mc/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jboss-aop-asintegration-mc</artifactId>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aspects/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/aspects/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/aspects/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <artifactId>jboss-aop-parent</artifactId>
     <groupId>org.jboss.aop</groupId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jboss-aop-aspects</artifactId>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/build/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/build/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/build/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jboss-aop-dist</artifactId>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/deployers/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/deployers/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/deployers/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -2,7 +2,7 @@
   <parent>
     <artifactId>jboss-aop-parent</artifactId>
     <groupId>org.jboss.aop</groupId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jboss-aop-deployers</artifactId>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/jrockit-pluggable-instrumentor/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/jrockit-pluggable-instrumentor/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/jrockit-pluggable-instrumentor/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <artifactId>jrockit-pluggable-instrumentor</artifactId>
   <packaging>jar</packaging>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/pluggable-instrumentor/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/pluggable-instrumentor/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/pluggable-instrumentor/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.jboss.aop</groupId>
     <artifactId>jboss-aop-parent</artifactId>
-    <version>2.1.6.GA</version>
+    <version>2.1.6.GA_CP01</version>
   </parent>
   <artifactId>pluggable-instrumentor</artifactId>
   <packaging>jar</packaging>

Modified: projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/pom.xml
===================================================================
--- projects/aop/branches/JBoss_AOP_2_1_6_GA_CP/pom.xml	2010-08-13 08:28:10 UTC (rev 107581)
+++ projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01/pom.xml	2010-08-18 16:32:06 UTC (rev 107667)
@@ -10,13 +10,13 @@
   <groupId>org.jboss.aop</groupId>
   <artifactId>jboss-aop-parent</artifactId>
   <packaging>pom</packaging>
-  <version>2.1.6.GA</version>
+  <version>2.1.6.GA_CP01</version>
   <description>JBoss AOP</description>
   <name>JBoss AOP Parent POM</name>
   <url>http://www.jboss.org/jbossaop/</url>
   <scm>
-    <connection>scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/aop/tags/JBoss_AOP_2_1_6_GA</connection>
-    <developerConnection>scm:svn:https://svn.jboss.org/repos/jbossas/projects/aop/tags/JBoss_AOP_2_1_6_GA</developerConnection>
+    <connection>scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01</connection>
+    <developerConnection>scm:svn:https://svn.jboss.org/repos/jbossas/projects/aop/tags/JBoss_AOP_2_1_6_GA_CP01</developerConnection>
   </scm>
   
   <properties>



More information about the jboss-cvs-commits mailing list