[jboss-cvs] JBossAS SVN: r96366 - in projects/aop/trunk/aop/src/main: java/org/jboss/aop/advice and 11 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 13 12:20:08 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-11-13 12:20:05 -0500 (Fri, 13 Nov 2009)
New Revision: 96366

Added:
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/SecurityActions.java
Modified:
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectAnnotationLoaderStrategy.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/JoinPointInfo.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/ReflectiveAspectBinder.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/SecurityActions.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AbstractAdvice.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceMethodProperties.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AspectDefinition.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/CFlowInterceptor.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/GenericInterceptorFactory.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/PrecedenceDef.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/array/ArrayBinding.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/SecurityActions.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/introduction/InterfaceIntroduction.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/joinpoint/InvocationBase.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/ConstructorMetaData.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/FieldMetaData.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/pointcut/PointcutStats.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledClassProxy.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledInterfaceProxy.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ProxyMixin.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledContainerProxy.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledProxyAdvisor.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/Compiler.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/MarshalledValue.java
   projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ReflectUtils.java
   projects/aop/trunk/aop/src/main/resources/findbugs/exclude.xml
Log:
[JBAOP-757] More bug fixes and findbugs excludes

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/Advisor.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -73,6 +73,7 @@
 import org.jboss.aop.metadata.SimpleMetaData;
 import org.jboss.aop.pointcut.PointcutMethodMatch;
 import org.jboss.aop.util.JoinPointComparator;
+import org.jboss.aop.util.ReflectUtils;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.metadata.spi.MetaData;
@@ -247,13 +248,13 @@
     */
    public Constructor<?>[] getConstructors()
    {
-      return constructors;
+      return ReflectUtils.copyArray(constructors);
    }
 
    /** @deprecated Use getConstructorInfos instead*/
    public Interceptor[][] getConstructorInterceptors()
    {
-      return constructorInterceptors;
+      return ReflectUtils.copyArray(constructorInterceptors);
    }
 
    /**
@@ -263,13 +264,13 @@
     */
    public ConstructorInfo[] getConstructorInfos()
    {
-      return constructorInfos;
+      return ReflectUtils.copyArray(constructorInfos);
    }
 
    /** @deprecated Use getConstructionInfos instead*/
    public Interceptor[][] getConstructionInterceptors()
    {
-      return constructionInterceptors;
+      return ReflectUtils.copyArray(constructionInterceptors);
    }
 
    /**
@@ -279,7 +280,7 @@
     */
    public ConstructionInfo[] getConstructionInfos()
    {
-      return constructionInfos;
+      return ReflectUtils.copyArray(constructionInfos);
    }
 
    /**
@@ -1760,7 +1761,7 @@
          try
          {
             Field infoField = clazz.getDeclaredField(ConstructionTransformer.getConstructionInfoFieldName(clazz.getSimpleName(), i));
-            infoField.setAccessible(true);
+            SecurityActions.setAccessible(infoField);
             infoField.set(null, new WeakReference<ConstructionInfo>(info));
          }
          catch (NoSuchFieldException e)

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectAnnotationLoaderStrategy.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectAnnotationLoaderStrategy.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectAnnotationLoaderStrategy.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -27,6 +27,7 @@
 import org.jboss.aop.advice.PrecedenceDefEntry;
 import org.jboss.aop.advice.Scope;
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
+import org.jboss.aop.util.ReflectUtils;
 
 /**
  * 
@@ -106,7 +107,7 @@
       {
          super();
          this.name = name;
-         this.interfaces = interfaces;
+         this.interfaces = ReflectUtils.copyArray(interfaces);
          this.target = target;
          this.expr = expr;
          this.constructorClass = constructorClass;
@@ -120,7 +121,7 @@
       
       public String[] getInterfaces()
       {
-         return interfaces;
+         return ReflectUtils.copyArray(interfaces);
       }
       
       public String getTarget()
@@ -173,7 +174,7 @@
       {
          super();
          this.classname = classname;
-         this.interfaces = interfaces;
+         this.interfaces = ReflectUtils.copyArray(interfaces);
          this.construction = construction;
          this.trans = trans;
       }
@@ -185,7 +186,7 @@
 
       public String[] getInterfaces()
       {
-         return interfaces;
+         return ReflectUtils.copyArray(interfaces);
       }
 
       public String getConstruction()

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectManager.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -83,6 +83,7 @@
 import org.jboss.aop.pointcut.Typedef;
 import org.jboss.aop.pointcut.ast.ClassExpression;
 import org.jboss.aop.util.AOPLock;
+import org.jboss.aop.util.ReflectUtils;
 import org.jboss.aop.util.UnmodifiableEmptyCollections;
 import org.jboss.aop.util.logging.AOPLogger;
 import org.jboss.util.collection.WeakValueHashMap;
@@ -189,7 +190,7 @@
 
    //Keeps track of if we need to convert references etc for a given class. Domains for scoped classloaders will have their own version of this
    protected static Map<ClassLoader, InterceptionMarkers> interceptionMarkers = new WeakHashMap<ClassLoader, InterceptionMarkers>();
-   private final static ClassLoader NULL_CLASSLOADER = new URLClassLoader(new URL[0]);
+   private final static ClassLoader NULL_CLASSLOADER = SecurityActions.createEmptyURLClassLoader();
    
    // Static -------------------------------------------------------
 
@@ -948,7 +949,7 @@
 
    public ClassExpression[] getIgnoreExpressions()
    {
-      return ignoreExpressions;
+      return ReflectUtils.copyArray(ignoreExpressions);
    }
 
    public void setIgnore(ArrayList<String> ignore)
@@ -1163,7 +1164,7 @@
 
    public Map<String, InterceptorFactory> getInterceptorFactories()
    {
-      return interceptorFactories;
+      return Collections.unmodifiableMap(interceptorFactories);
    }
 
    /**
@@ -1236,7 +1237,7 @@
             }
          }
       }
-      return sortedPrecedenceDefEntries;
+      return ReflectUtils.copyArray(sortedPrecedenceDefEntries);
    }
 
    /**

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/AspectXmlLoader.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -1319,7 +1319,7 @@
       }
    }
 
-   public static XmlLoaderFactory factory = null;
+   static XmlLoaderFactory factory = null;
 
 
    public void deploy(URL url, AspectManager manager, ClassLoader cl) throws Exception

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/ClassAdvisor.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -188,7 +188,7 @@
 
    public Field[] getAdvisedFields()
    {
-      return advisedFields;
+      return ReflectUtils.copyArray(advisedFields);
    }
 
    public TLongObjectHashMap getAdvisedMethods()
@@ -204,7 +204,7 @@
    @Override
    public Constructor<?>[] getConstructors()
    {
-      return constructors;
+      return ReflectUtils.copyArray(constructors);
    }
 
    public TLongObjectHashMap getMethodCalledByMethodInterceptors()
@@ -214,12 +214,12 @@
 
    public HashMap<String, TLongObjectHashMap>[] getMethodCalledByConInterceptors()
    {
-      return methodCalledByConInterceptors;
+      return ReflectUtils.copyArray(methodCalledByConInterceptors);
    }
 
    public HashMap<String, TLongObjectHashMap>[] getConCalledByConInterceptors()
    {
-      return conCalledByConInterceptors;
+      return ReflectUtils.copyArray(conCalledByConInterceptors);
    }
 
    public TLongObjectHashMap getConCalledByMethodInterceptors()
@@ -240,7 +240,7 @@
 
    public FieldInfo[] getFieldReadInfos()
    {
-      return fieldReadInfos;
+      return ReflectUtils.copyArray(fieldReadInfos);
    }
 
    /** @deprecated use getFieldWriteInfos instead */
@@ -251,7 +251,7 @@
 
    public FieldInfo[] getFieldWriteInfos()
    {
-      return fieldWriteInfos;
+      return ReflectUtils.copyArray(fieldWriteInfos);
    }
 
    public TLongObjectHashMap getMethodInterceptors()
@@ -489,7 +489,7 @@
          try
          {
             Field infoField = clazz.getDeclaredField(MethodExecutionTransformer.getMethodInfoFieldName(amethod.getName(), keys[i]));
-            infoField.setAccessible(true);
+            SecurityActions.setAccessible(infoField);
             infoField.set(null, new WeakReference<MethodInfo>(info));
          }
          catch (NoSuchFieldException e)
@@ -529,7 +529,7 @@
          try
          {
             Field infoField = clazz.getDeclaredField(FieldAccessTransformer.getFieldReadInfoFieldName(advisedFields[i].getName()));
-            infoField.setAccessible(true);
+            SecurityActions.setAccessible(infoField);
             infoField.set(null, new WeakReference<FieldInfo>(info));
          }
          catch (NoSuchFieldException e)
@@ -569,7 +569,7 @@
          try
          {
             Field infoField = clazz.getDeclaredField(FieldAccessTransformer.getFieldWriteInfoFieldName(advisedFields[i].getName()));
-            infoField.setAccessible(true);
+            SecurityActions.setAccessible(infoField);
             infoField.set(null, new WeakReference<FieldInfo>(info));
          }
          catch (NoSuchFieldException e)
@@ -1492,7 +1492,7 @@
                Method un = superclass.getDeclaredMethod(ClassAdvisor.notAdvisedMethodName(superclass.getName(),
                m.getName()),
                m.getParameterTypes());
-               un.setAccessible(true);
+               SecurityActions.setAccessible(un);
                unadvisedMethods.put(hash, un);
             }
             catch (NoSuchMethodException ignored)
@@ -1779,16 +1779,16 @@
    throws Throwable
    {
       MethodInfo info = methodInfos.getMethodInfo(methodHash);
-      if (info == null && logger.isDebugEnabled())
-      {
-         logger.debug("info is null for hash: " + methodHash + " of " + clazz.getName());
-      }
       return invokeMethod(instanceAdvisor, target, methodHash, arguments, info);
    }
 
    public Object invokeMethod(InstanceAdvisor instanceAdvisor, Object target, long methodHash, Object[] arguments, MethodInfo info)
    throws Throwable
    {
+      if (info == null)
+      {
+         throw new IllegalArgumentException("info is null for hash: " + methodHash + " of " + clazz);
+      }
       Interceptor[] aspects = info.getInterceptors();
       if (instanceAdvisor != null && (instanceAdvisor.hasInterceptors()))
       {

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/JoinPointInfo.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/JoinPointInfo.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/JoinPointInfo.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -30,6 +30,7 @@
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.JoinPointBean;
 import org.jboss.aop.joinpoint.Joinpoint;
+import org.jboss.aop.util.ReflectUtils;
 
 public abstract class JoinPointInfo implements JoinPointBean
 {
@@ -46,7 +47,7 @@
    
    protected WeakReference<Class<?>> clazz;
    
-   private String adviceString;
+   private volatile String adviceString;
 
    protected JoinPointInfo()
    {
@@ -189,7 +190,7 @@
    public void setInterceptors(Interceptor[] interceptors) {
       this.interceptorChainLock.writeLock().lock();
       adviceString = null;
-      this.interceptors = interceptors;
+      this.interceptors = ReflectUtils.copyArray(interceptors);
       this.interceptorChainLock.writeLock().unlock();
    }
 
@@ -262,7 +263,7 @@
             buf.append(icptr.getAdviceString());
          }
          
-         return buf.toString();
+        adviceString = buf.toString();
       }
       
       return adviceString; 

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/ReflectiveAspectBinder.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/ReflectiveAspectBinder.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/ReflectiveAspectBinder.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -73,8 +73,8 @@
 
    //Lifecycle callbacks are a microcontainer thing, the key is the MC ControllerState
    protected Map<Object, Set<LifecycleCallbackDefinition>> lifecycleCallbacks = new HashMap<Object, Set<LifecycleCallbackDefinition>>();
-   boolean initialisedAspects;
-   boolean intitialisedLifecycleCallbacks;
+   volatile boolean initialisedAspects;
+   volatile boolean intitialisedLifecycleCallbacks;
    
    public ReflectiveAspectBinder(Class<?> clazz, Advisor advisor)
    {
@@ -104,6 +104,7 @@
          {
             AspectManager.lock.unlockRead();
          }
+         initialisedAspects = true;
       }
       return aspects;
    }
@@ -113,6 +114,7 @@
       if (!intitialisedLifecycleCallbacks)
       {
          bindLifecycles();
+         intitialisedLifecycleCallbacks = true;
       }
       return lifecycleCallbacks;
    }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/SecurityActions.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/SecurityActions.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/SecurityActions.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -23,6 +23,8 @@
 
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Constructor;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
@@ -221,4 +223,42 @@
          return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
       }
    }
+   
+   interface CreateEmptyURLClassLoaderAction
+   {
+      ClassLoader create();
+      
+      CreateEmptyURLClassLoaderAction NON_PRIVILEGED = new CreateEmptyURLClassLoaderAction()
+      {
+         public ClassLoader create()
+         {
+            return new URLClassLoader(new URL[0]);
+         }
+      };
+
+      CreateEmptyURLClassLoaderAction PRIVILEGED = new CreateEmptyURLClassLoaderAction()
+      {
+         public ClassLoader create()
+         {
+            return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+
+               public ClassLoader run()
+               {
+                  return new URLClassLoader(new URL[0]);
+               }});
+         }
+      };
+   }
+   
+   static ClassLoader createEmptyURLClassLoader()
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return CreateEmptyURLClassLoaderAction.NON_PRIVILEGED.create();
+      }
+      else
+      {
+         return CreateEmptyURLClassLoaderAction.PRIVILEGED.create();
+      }
+   }
 }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AbstractAdvice.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AbstractAdvice.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AbstractAdvice.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -21,6 +21,8 @@
   */
 package org.jboss.aop.advice;
 
+import java.lang.reflect.Method;
+
 import org.jboss.aop.instrument.Untransformable;
 import org.jboss.aop.joinpoint.ConstructionInvocation;
 import org.jboss.aop.joinpoint.ConstructorCalledByConstructorInvocation;
@@ -34,8 +36,6 @@
 import org.jboss.aop.joinpoint.MethodCalledByMethodInvocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
 
-import java.lang.reflect.Method;
-
 /**
  * Comment
  *
@@ -69,11 +69,11 @@
    protected Class<?> aspectClass;
    protected String adviceName;
 
-   protected void init(String advice, Class<?> aspectClass)
+   protected void init(String advice, Class<?> aspectClazz)
    {
       if (aspectClass == null)
       {
-         this.aspectClass = aspectClass;
+         this.aspectClass = aspectClazz;
       }
       if (adviceName == null)
       {

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceBinding.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -36,6 +36,7 @@
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
 import org.jboss.aop.pointcut.ast.ParseException;
 import org.jboss.aop.pointcut.ast.PointcutExpressionParser;
+import org.jboss.aop.util.ReflectUtils;
 import org.jboss.aop.util.logging.AOPLogger;
 
 /**
@@ -105,7 +106,7 @@
    public AdviceBinding(String name, Pointcut p, ASTCFlowExpression cflow, String cflowString, InterceptorFactory[] factories) throws ParseException
    {
       this.name = name;
-      interceptorFactories = factories;
+      interceptorFactories = ReflectUtils.copyArray(factories);
       this.cflow = cflow;
 
       pointcut = p;
@@ -267,7 +268,7 @@
     */
    public InterceptorFactory[] getInterceptorFactories()
    {
-      return interceptorFactories;
+      return ReflectUtils.copyArray(interceptorFactories);
    }
 
    /**

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceMethodProperties.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceMethodProperties.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AdviceMethodProperties.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -28,6 +28,7 @@
 import javassist.NotFoundException;
 
 import org.jboss.aop.joinpoint.JoinPointBean;
+import org.jboss.aop.util.ReflectUtils;
 
 /** Contains the properties of an advice method that we want to find.
  * Once found it is populated with the arguments
@@ -110,12 +111,13 @@
       this.joinPoint = joinPoint;
       this.aspectClass = aspectClass;
       this.adviceName = adviceName;
+      this.thrownType = thrownType;
       this.joinPointBeanType = joinPointBeanType;
       this.invocationType = invocationType;
       this.joinpointReturnType = joinpointReturnType;
-      this.joinpointParameters = joinpointParameters;
-      this.joinpointParameterClassTypes = joinpointParameterClassTypes;
-      this.joinpointExceptions = joinpointExceptions;
+      this.joinpointParameters = ReflectUtils.copyArray(joinpointParameters);
+      this.joinpointParameterClassTypes = ReflectUtils.copyArray(joinpointParameterClassTypes);
+      this.joinpointExceptions = ReflectUtils.copyArray(joinpointExceptions);
       this.target = target;
       this.targetAvailable = targetAvailable;
       this.optionalParameters = OptionalParameters.TARGET;
@@ -169,7 +171,7 @@
    public void setFoundProperties(Method adviceMethod, int[] args)
    {
       this.adviceMethod = adviceMethod;
-      this.args = args;
+      this.args = ReflectUtils.copyArray(args);
    }
 
    public JoinPointBean getJoinPoint()

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AspectDefinition.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AspectDefinition.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/AspectDefinition.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -150,7 +150,7 @@
     * 
     * @return {@code true} if this aspect definition is active in its domain
     */
-   public boolean isDeployed()
+   public synchronized boolean isDeployed()
    {
       return deployed;
    }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/CFlowInterceptor.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/CFlowInterceptor.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/CFlowInterceptor.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -24,6 +24,7 @@
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.pointcut.CFlowMatcher;
 import org.jboss.aop.pointcut.ast.ASTCFlowExpression;
+import org.jboss.aop.util.ReflectUtils;
 
 /**
  * Comment
@@ -40,7 +41,7 @@
 
    public CFlowInterceptor(String cflowString, ASTCFlowExpression expr, Interceptor[] chain)
    {
-      this.chain = chain;
+      this.chain = ReflectUtils.copyArray(chain);
       this.expr = expr;
       this.cflowString = cflowString;
    }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/GenericInterceptorFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/GenericInterceptorFactory.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/GenericInterceptorFactory.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -134,6 +134,7 @@
          result = 17;
          result = 31 * result + classname.hashCode();
          result = 31 * result + name.hashCode();
+         cachedHash = result;
       }
       return result;
    }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/PrecedenceDef.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/PrecedenceDef.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/advice/PrecedenceDef.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -21,6 +21,9 @@
   */
 package org.jboss.aop.advice;
 
+import org.jboss.aop.util.ReflectUtils;
+
+
 /**
  *
  * @author <a href="mailto:kabir.khan at jboss.org">Kabir Khan</a>
@@ -36,12 +39,12 @@
    {
       super();
       this.name = name;
-      this.entries = entries;
+      this.entries = ReflectUtils.copyArray(entries);
    }
    
    public PrecedenceDefEntry[] getEntries()
    {
-      return entries;
+      return ReflectUtils.copyArray(entries);
    }
    
    public String getName()

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/array/ArrayBinding.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/array/ArrayBinding.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/array/ArrayBinding.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -26,6 +26,7 @@
 import java.util.List;
 
 import org.jboss.aop.advice.InterceptorFactory;
+import org.jboss.aop.util.ReflectUtils;
 
 /**
  * 
@@ -42,7 +43,7 @@
    public ArrayBinding(String name, InterceptorFactory[] factories, Type type)
    {
       this.name = name;
-      interceptorFactories = factories;
+      interceptorFactories = ReflectUtils.copyArray(factories);
       this.type = type;
    }
 
@@ -62,7 +63,7 @@
 
    public InterceptorFactory[] getInterceptorFactories()
    {
-      return interceptorFactories;
+      return ReflectUtils.copyArray(interceptorFactories);
    }
 
    public boolean equals(Object obj)

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/SecurityActions.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/SecurityActions.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/SecurityActions.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -22,6 +22,8 @@
 package org.jboss.aop.instrument;
 
 import java.lang.reflect.AccessibleObject;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
@@ -133,4 +135,42 @@
          return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
       }
    }
+   
+   interface CreateURLClassLoaderAction
+   {
+      URLClassLoader create(URL[] urls, ClassLoader parent);
+      
+      CreateURLClassLoaderAction NON_PRIVILEGED = new CreateURLClassLoaderAction()
+      {
+         public URLClassLoader create(URL[] urls, ClassLoader parent)
+         {
+            return new URLClassLoader(new URL[0]);
+         }
+      };
+
+      CreateURLClassLoaderAction PRIVILEGED = new CreateURLClassLoaderAction()
+      {
+         public URLClassLoader create(URL[] urls, ClassLoader parent)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction<URLClassLoader>() {
+
+               public URLClassLoader run()
+               {
+                  return new URLClassLoader(new URL[0]);
+               }});
+         }
+      };
+   }
+   
+   static URLClassLoader createEmptyURLClassLoader(URL[] urls, ClassLoader parent)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return CreateURLClassLoaderAction.NON_PRIVILEGED.create(urls, parent);
+      }
+      else
+      {
+         return CreateURLClassLoaderAction.PRIVILEGED.create(urls, parent);
+      }
+   }
 }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/instrument/TransformerCommon.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -82,7 +82,7 @@
             URLClassLoader loader = Compiler.loader;
             if (loader == null)
             {
-               loader = new URLClassLoader(NO_URLS, SecurityActions.getContextClassLoader());
+               loader = SecurityActions.createEmptyURLClassLoader(NO_URLS, SecurityActions.getContextClassLoader());
             }
             URL url = loader.getResource(
                   classForPackage.getName().replace('.', '/') + ".class");

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/introduction/InterfaceIntroduction.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/introduction/InterfaceIntroduction.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/introduction/InterfaceIntroduction.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -31,6 +31,8 @@
 import org.jboss.aop.pointcut.ast.ClassExpression;
 import org.jboss.aop.pointcut.ast.TypeExpressionParser;
 import org.jboss.aop.pointcut.ast.ParseException;
+import org.jboss.aop.util.ReflectUtils;
+
 import javassist.CtClass;
 
 /**
@@ -51,7 +53,7 @@
       public Mixin(String classname, String[] interfaces, String construction, boolean trans)
       {
          this.classname = classname;
-         this.interfaces = interfaces;
+         this.interfaces = ReflectUtils.copyArray(interfaces);
          this.construction = construction;
          this.trans = trans;
       }
@@ -63,7 +65,7 @@
 
       public String[] getInterfaces()
       {
-         return interfaces;
+         return ReflectUtils.copyArray(interfaces);
       }
 
       public String getConstruction()
@@ -83,7 +85,7 @@
 
       public void setInterfaces(String[] interfaces)
       {
-         this.interfaces = interfaces;
+         this.interfaces = ReflectUtils.copyArray(interfaces);
       }
 
       public void setConstruction(String construction)
@@ -117,7 +119,7 @@
    public InterfaceIntroduction(String name, String exp, String[] interfaces)
    {
       this.name = name;
-      this.interfaces = interfaces;
+      this.interfaces = ReflectUtils.copyArray(interfaces);
       this.classExpr = new ClassExpression(exp);
    }
    
@@ -135,7 +137,7 @@
    {
       this.name = name;
       this.ast = ast;
-      this.interfaces = interfaces;
+      this.interfaces = ReflectUtils.copyArray(interfaces);
    }
 
    // call this constructor only when constructor method receives the mixin target
@@ -177,7 +179,7 @@
 
    public void setInterfaces(String[] interfaces)
    {
-      this.interfaces = interfaces;
+      this.interfaces = ReflectUtils.copyArray(interfaces);
    }
 
    public void setName(String name)
@@ -192,7 +194,7 @@
 
    public String[] getInterfaces()
    {
-      return interfaces;
+      return ReflectUtils.copyArray(interfaces);
    }
 
    public ArrayList<InterfaceIntroduction.Mixin> getMixins()

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/joinpoint/InvocationBase.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/joinpoint/InvocationBase.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/joinpoint/InvocationBase.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -27,6 +27,7 @@
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.metadata.MetaDataResolver;
 import org.jboss.aop.metadata.SimpleMetaData;
+import org.jboss.aop.util.ReflectUtils;
 
 import java.lang.annotation.Annotation;
 import java.util.HashMap;
@@ -146,7 +147,7 @@
       int oldCurrentInterceptor = currentInterceptor;
 
       // Start the new stack
-      interceptors = newInterceptors;
+      interceptors = ReflectUtils.copyArray(newInterceptors);
       currentInterceptor = 0;
 
       // Invoke the new stack
@@ -197,7 +198,7 @@
     */
    public org.jboss.aop.advice.Interceptor[] getInterceptors()
    {
-      return interceptors;
+      return ReflectUtils.copyArray(interceptors);
    }
 
 

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/ConstructorMetaData.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/ConstructorMetaData.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/ConstructorMetaData.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -130,7 +130,7 @@
    public synchronized SimpleMetaData getAllMetaData(Invocation invocation)
    {
       Constructor<?> constructor = ((ConstructorInvocation)invocation).getConstructor();
-      return constructorMetaData.get(constructor);
+      return constructorMetaData.get(constructor.toString());
    }
 
    // temporary interface so that loader/compiler can get annotations

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/FieldMetaData.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/FieldMetaData.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/metadata/FieldMetaData.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -132,6 +132,6 @@
    public synchronized SimpleMetaData getAllMetaData(Invocation invocation)
    {
       Field field = ((FieldInvocation)invocation).getField();
-      return fieldMetaData.get(field);
+      return fieldMetaData.get(field.getName());
    }
 }

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/pointcut/PointcutStats.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/pointcut/PointcutStats.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/pointcut/PointcutStats.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -223,34 +223,36 @@
       {
          setAllTrue();
       }
-      Pointcut p = manager.getPointcut(node.getPointcutName());
-      if (p instanceof PointcutExpression)
+      else
       {
-         PointcutExpression expr = (PointcutExpression) p;
-         PointcutStats stats = expr.getStats();
-         if (stats != null)
+         Pointcut p = manager.getPointcut(node.getPointcutName());
+         if (p instanceof PointcutExpression)
          {
-            execution |= stats.isExecution();
-            methodExecution |= stats.isMethodExecution();
-            constructorExecution |= stats.isConstructorExecution();
-            call |= stats.isCall();
-            methodCall |= stats.isMethodCall();
-            constructorCall |= stats.isConstructorCall();
-            within |= stats.isWithin();
-            get |= stats.isGet();
-            set |= stats.isSet();
-            withincode |= stats.isWithincode();
+            PointcutExpression expr = (PointcutExpression) p;
+            PointcutStats stats = expr.getStats();
+            if (stats != null)
+            {
+               execution |= stats.isExecution();
+               methodExecution |= stats.isMethodExecution();
+               constructorExecution |= stats.isConstructorExecution();
+               call |= stats.isCall();
+               methodCall |= stats.isMethodCall();
+               constructorCall |= stats.isConstructorCall();
+               within |= stats.isWithin();
+               get |= stats.isGet();
+               set |= stats.isSet();
+               withincode |= stats.isWithincode();
+            }
+            else
+            {
+               setAllTrue();
+            }
          }
          else
          {
             setAllTrue();
          }
       }
-      else
-      {
-         setAllTrue();
-
-      }
       return Boolean.FALSE;
    }
 

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ClassProxyFactory.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -101,7 +101,7 @@
          }
          if (proxiesForLoader != null)
          {
-            WeakReference<Class<?>> ref = proxiesForLoader.get(pool.getClassLoader());
+            WeakReference<Class<?>> ref = proxiesForLoader.get(clazz);
             if (ref != null)
             {
                proxyClass = ref.get();

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledClassProxy.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledClassProxy.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledClassProxy.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -22,6 +22,7 @@
 package org.jboss.aop.proxy;
 
 import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.util.ReflectUtils;
 
 import java.io.ObjectStreamException;
 import java.io.Serializable;
@@ -48,7 +49,7 @@
    {
       this.clazz = clazz;
       this.advisor = advisor;
-      this.mixins = mixins;
+      this.mixins = ReflectUtils.copyArray(mixins);
    }
 
    public Object readResolve() throws ObjectStreamException

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledInterfaceProxy.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledInterfaceProxy.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/MarshalledInterfaceProxy.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -22,6 +22,7 @@
 package org.jboss.aop.proxy;
 
 import org.jboss.aop.InstanceAdvisor;
+import org.jboss.aop.util.ReflectUtils;
 import org.jboss.util.id.GUID;
 
 import java.io.ObjectStreamException;
@@ -51,7 +52,7 @@
       this.guid = guid;
       this.advisor = advisor;
       this.interfaces = intfs;
-      this.mixins = mixins;
+      this.mixins = ReflectUtils.copyArray(mixins);
    }
 
    public Object readResolve() throws ObjectStreamException

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ProxyMixin.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ProxyMixin.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/ProxyMixin.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -23,6 +23,8 @@
 
 import java.io.Serializable;
 
+import org.jboss.aop.util.ReflectUtils;
+
 /**
  * Comment
  *
@@ -42,7 +44,7 @@
 
    public ProxyMixin(Object mixin, Class<?>[] interfaces)
    {
-      this.interfaces = interfaces;
+      this.interfaces = ReflectUtils.copyArray(interfaces);
       this.mixin = mixin;
    }
 
@@ -53,7 +55,7 @@
 
    public Class<?>[] getInterfaces()
    {
-      return interfaces;
+      return ReflectUtils.copyArray(interfaces);
    }
 
 }
\ No newline at end of file

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledContainerProxy.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledContainerProxy.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledContainerProxy.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -48,6 +48,7 @@
 import org.jboss.aop.instrument.Untransformable;
 import org.jboss.aop.metadata.SimpleMetaData;
 import org.jboss.aop.util.MethodHashing;
+import org.jboss.aop.util.ReflectUtils;
 import org.jboss.util.id.GUID;
 
 /**
@@ -90,7 +91,7 @@
       Class<?> proxyClass = proxyInstance.getClass();
       this.proxyClassName = proxyClass.getName();
       this.key = key;
-      this.mixins = mixins;
+      this.mixins = ReflectUtils.copyArray(mixins);
       this.delegate = delegate;
       this.clazz = currentAdvisor.getClazz();
 
@@ -188,7 +189,7 @@
    
    public Object[] getMixins()
    {
-      return mixins;
+      return ReflectUtils.copyArray(mixins);
    }
 
    public Object getDelegate()

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledProxyAdvisor.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledProxyAdvisor.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/proxy/container/MarshalledProxyAdvisor.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -43,7 +43,7 @@
  */
 public class MarshalledProxyAdvisor extends Advisor implements InstanceAdvisor
 {
-   TLongObjectHashMap methodInfos = new TLongObjectHashMap();
+   TLongObjectHashMap methodInfosMap = new TLongObjectHashMap();
    Object instance;
    
    public MarshalledProxyAdvisor(String name, AspectManager manager)
@@ -58,7 +58,7 @@
    
    public void addMethodInfo(MethodInfo info)
    {
-      methodInfos.put(info.getHash(), info);
+      methodInfosMap.put(info.getHash(), info);
    }
    
    public void setInstance(Object instance)
@@ -99,13 +99,13 @@
    @Override
    public MethodInfo getMethodInfo(long hash)
    {
-      MethodInfo info = (MethodInfo)methodInfos.get(hash);
+      MethodInfo info = (MethodInfo)methodInfosMap.get(hash);
       return info;
    }
    
    public MethodInfo[] getMethodInfos()
    {
-      Object[] vals = methodInfos.getValues();
+      Object[] vals = methodInfosMap.getValues();
       MethodInfo[] infos = new MethodInfo[vals.length];
       System.arraycopy(vals, 0, infos, 0, vals.length);
       return infos;

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/Compiler.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/Compiler.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/Compiler.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -185,7 +185,7 @@
 
 
       URL[] urls = paths.toArray(new URL[paths.size()]);
-      loader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
+      loader = SecurityActions.createEmptyURLClassLoader(urls, Thread.currentThread().getContextClassLoader());
 
       Thread.currentThread().setContextClassLoader(loader);
 
@@ -379,7 +379,7 @@
       if (org.jboss.aop.Advised.class.isAssignableFrom(clazz))
       {
          Field f = clazz.getDeclaredField("aop$classAdvisor$aop");
-         f.setAccessible(true);
+         SecurityActions.setAccessible(f);
          f.get(null);
          return true;
       }

Added: projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/SecurityActions.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/SecurityActions.java	                        (rev 0)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/SecurityActions.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -0,0 +1,123 @@
+/*
+* 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.standalone;
+
+import java.lang.reflect.AccessibleObject;
+import java.net.URL;
+import java.net.URLClassLoader;
+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: 94419 $
+ */
+class SecurityActions
+{
+   interface CreateURLClassLoaderAction
+   {
+      URLClassLoader create(URL[] urls, ClassLoader parent);
+      
+      CreateURLClassLoaderAction NON_PRIVILEGED = new CreateURLClassLoaderAction()
+      {
+         public URLClassLoader create(URL[] urls, ClassLoader parent)
+         {
+            return new URLClassLoader(new URL[0]);
+         }
+      };
+
+      CreateURLClassLoaderAction PRIVILEGED = new CreateURLClassLoaderAction()
+      {
+         public URLClassLoader create(URL[] urls, ClassLoader parent)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction<URLClassLoader>() {
+
+               public URLClassLoader run()
+               {
+                  return new URLClassLoader(new URL[0]);
+               }});
+         }
+      };
+   }
+   
+   static URLClassLoader createEmptyURLClassLoader(URL[] urls, ClassLoader parent)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         return CreateURLClassLoaderAction.NON_PRIVILEGED.create(urls, parent);
+      }
+      else
+      {
+         return CreateURLClassLoaderAction.PRIVILEGED.create(urls, parent);
+      }
+   }
+   
+   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);
+      }
+   }
+
+}

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/standalone/StandaloneClassPool.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -58,11 +58,10 @@
                  = cl.getDeclaredMethod("defineClass",
                          new Class[]{String.class, byte[].class,
                                      int.class, int.class});
-         method.setAccessible(true);
+         SecurityActions.setAccessible(method);
          Object[] args = new Object[]{ctClass.getName(), b, new Integer(0),
                                       new Integer(b.length)};
          Class<?> clazz = (Class<?>) method.invoke(getClassLoader(), args);
-         method.setAccessible(false);
          return clazz;
       }
       catch (RuntimeException e)

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/MarshalledValue.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/MarshalledValue.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/MarshalledValue.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -94,7 +94,9 @@
     */
    public byte[] toByteArray()
    {
-      return serializedForm;
+      byte[] copy = new byte[serializedForm.length];
+      System.arraycopy(serializedForm, 0, copy, 0, serializedForm.length);
+      return copy;
    }
 
    /**

Modified: projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ReflectUtils.java
===================================================================
--- projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ReflectUtils.java	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/java/org/jboss/aop/util/ReflectUtils.java	2009-11-13 17:20:05 UTC (rev 96366)
@@ -21,6 +21,7 @@
 */ 
 package org.jboss.aop.util;
 
+import java.lang.reflect.Array;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -83,5 +84,22 @@
 
       return true;
    }
-   
+
+   public static <T> T[] copyArray(T[] original)
+   {
+      if (original == null)
+         return null;
+      T[] copy = (T[])Array.newInstance(original.getClass().getComponentType(), original.length);
+      System.arraycopy(original, 0, copy, 0, copy.length);
+      return copy;
+   }
+
+   public static int[] copyArray(int[] original)
+   {
+      if (original == null)
+         return null;
+      int[] copy = new int[original.length];
+      System.arraycopy(original, 0, copy, 0, copy.length);
+      return copy;
+   }
 }

Modified: projects/aop/trunk/aop/src/main/resources/findbugs/exclude.xml
===================================================================
--- projects/aop/trunk/aop/src/main/resources/findbugs/exclude.xml	2009-11-13 16:13:31 UTC (rev 96365)
+++ projects/aop/trunk/aop/src/main/resources/findbugs/exclude.xml	2009-11-13 17:20:05 UTC (rev 96366)
@@ -412,6 +412,306 @@
       <Method name="loadAnnotationIntroduction" params="org.w3c.dom.Element" returns="org.jboss.aop.introduction.AnnotationIntroduction"/>
       <Bug pattern="RpC_REPEATED_CONDITIONAL_TEST"/>
    </Match>
+   
+   <!-- This class is not used actively, but I don't want to remove it in case someone works on the IDE again -->
+   <Match>
+      <Class name="org.jboss.aop.eclipsesupport.EclipseTestTransformer"/>
+      <Field name="foundRemoteTestRunner"/>
+      <Bug pattern="UWF_UNWRITTEN_FIELD"/>
+   </Match>
             
+   <!-- These create a URLClassLoader within a privileged block if a security manager is present -->
+   <Match>
+      <Class name="org.jboss.aop.instrument.SecurityActions$CreateURLClassLoaderAction$1"/>
+      <Method name="create" params="java.net.URL[], java.lang.ClassLoader" returns="java.net.URLClassLoader"/>
+      <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.SecurityActions$CreateEmptyURLClassLoaderAction$1"/>
+      <Method name="create"/>
+      <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>
+   </Match>            
+   <Match>
+      <Class name="org.jboss.aop.standalone.SecurityActions$CreateURLClassLoaderAction$1"/>
+      <Method name="create" params="java.net.URL[], java.lang.ClassLoader" returns="java.net.URLClassLoader"/>
+      <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>
+   </Match>
+            
+   <!-- Not accessibly externally class -->   
+   <Match>
+      <Class name="org.jboss.aop.advice.AdviceMethodProperties"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+            
+   <!-- The arguments arrays here are meant to be mutable -->
+      <Match>
+      <Class name="org.jboss.aop.joinpoint.CallerInvocation"/>
+      <Method name="getArguments"/><Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructionInvocation"/>
+      <Method name="getArguments"/><Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructorInvocation"/>
+      <Method name="getArguments"/><Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.MethodInvocation"/>
+      <Method name="getArguments"/><Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   
+   <!-- Parameter Object is short-lived -->
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="interfaces"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="mixins"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="signature"/>
+      <Bug pattern="EI_EXPOSE_REP"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="interfaces"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="mixins"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.proxy.container.AOPProxyFactoryParameters"/>
+      <Field name="signature"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+           
+   <!-- These array invocations are meant to store a reference to the array being invoked upon --> 
+   <Match>
+      <Class name="org.jboss.aop.array.BooleanArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>            
+   <Match>
+      <Class name="org.jboss.aop.array.BooleanArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>            
+   <Match>
+      <Class name="org.jboss.aop.array.ByteArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>          
+   <Match>
+      <Class name="org.jboss.aop.array.ByteArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>           
+   <Match>
+      <Class name="org.jboss.aop.array.CharArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>          
+   <Match>
+      <Class name="org.jboss.aop.array.CharArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>        
+   <Match>
+      <Class name="org.jboss.aop.array.DoubleArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.DoubleArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.FloatArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.FloatArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.IntArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.IntArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.LongArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.LongArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.ObjectArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.ObjectArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.ShortArrayElementReadInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.array.ShortArrayElementWriteInvocation"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>   
+            
+   <!-- These fields are part of the spi and cannot be changed -->           
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="debugClasses"/>
+      <Bug pattern="MS_CANNOT_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="optimize"/>
+      <Bug pattern="MS_CANNOT_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="suppressReferenceErrors"/>
+      <Bug pattern="MS_CANNOT_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="verbose"/>
+      <Bug pattern="MS_CANNOT_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="maintainAdvisorMethodInterceptors"/>
+      <Bug pattern="MS_PKGPROTECT"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="manager"/>
+      <Bug pattern="MS_PKGPROTECT"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="classLoaderValidator"/>
+      <Bug pattern="MS_SHOULD_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="interceptionMarkers"/>
+      <Bug pattern="MS_SHOULD_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="notificationHandler"/>
+      <Bug pattern="MS_SHOULD_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="suppressTransformationErrors"/>
+      <Bug pattern="MS_SHOULD_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="debugClasses"/>
+      <Bug pattern="MS_PKGPROTECT"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.AspectManager"/>
+      <Field name="suppressReferenceErrors"/>
+      <Bug pattern="MS_SHOULD_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.Deployment"/>
+      <Field name="searchClasspath"/>
+      <Bug pattern="MS_CANNOT_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.hook.JDK14TransformerManager"/>
+      <Field name="transformer"/>
+      <Bug pattern="MS_SHOULD_BE_FINAL"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.standalone.Compiler"/>
+      <Field name="loader"/>
+      <Bug pattern="MS_CANNOT_BE_FINAL"/>
+   </Match>
+
+   <!-- constant array -->            
+   <Match>
+      <Class name="org.jboss.aop.instrument.WrapperTransformer"/>
+      <Field name="transformationsStatus"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+            
+   <!-- arguments field should be mutable -->
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.CallerInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructionInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructionInvocation"/>
+      <Method name="setArguments" params="java.lang.Object[]" returns="void"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructorCalledByConstructorInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructorCalledByMethodInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.ConstructorInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.MethodCalledByConstructorInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.MethodCalledByMethodInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+   <Match>
+      <Class name="org.jboss.aop.joinpoint.MethodInvocation"/>
+      <Field name="arguments"/>
+      <Bug pattern="EI_EXPOSE_REP2"/>
+   </Match>
+                          
                
 </FindBugsFilter>




More information about the jboss-cvs-commits mailing list