[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