[jboss-cvs] JBossAS SVN: r77548 - branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Aug 27 16:13:51 EDT 2008
Author: bmaxwell
Date: 2008-08-27 16:13:51 -0400 (Wed, 27 Aug 2008)
New Revision: 77548
Modified:
branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/CallerTransformer.java
branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java
branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java
branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/JoinpointSimpleClassifier.java
Log:
[JBPAPP-1141] One off patch to fix JBAOP-430 - ConcurrentModificationException in JoinpointSimpleClassifier.classifyJoinpoint
Modified: branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/CallerTransformer.java
===================================================================
--- branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/CallerTransformer.java 2008-08-27 19:09:50 UTC (rev 77547)
+++ branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/CallerTransformer.java 2008-08-27 20:13:51 UTC (rev 77548)
@@ -24,6 +24,8 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+
import org.jboss.aop.AspectManager;
import org.jboss.aop.ClassAdvisor;
import org.jboss.aop.pointcut.Pointcut;
@@ -336,19 +338,23 @@
DeclareChecker.checkDeclares(manager, call, advisor);
// todo shouldn't iterate every time. must be a better way
- Iterator it = manager.getPointcuts().values().iterator();
- while (it.hasNext())
+ Map pointcuts = manager.getPointcuts();
+ synchronized (pointcuts)
{
- Pointcut p = (Pointcut) it.next();
- if (p.matchesCall(advisor, call))
+ Iterator it = pointcuts.values().iterator();
+ while (it.hasNext())
{
- hasPointcut = true;
- break;
+ Pointcut p = (Pointcut) it.next();
+ if (p.matchesCall(advisor, call))
+ {
+ hasPointcut = true;
+ break;
+ }
+ else
+ {
+ if (AspectManager.verbose) System.out.println("[debug] MethodCall does not match: " + p.getExpr());
+ }
}
- else
- {
- if (AspectManager.verbose) System.out.println("[debug] MethodCall does not match: " + p.getExpr());
- }
}
if (hasPointcut)
{
@@ -435,14 +441,18 @@
boolean hasPointcut = false;
// todo shouldn't iterate every time. must be a better way
- Iterator it = manager.getPointcuts().values().iterator();
- while (it.hasNext())
+ Map pointcuts = manager.getPointcuts();
+ synchronized (pointcuts)
{
- Pointcut p = (Pointcut) it.next();
- if (p.matchesCall(advisor, call))
+ Iterator it = pointcuts.values().iterator();
+ while (it.hasNext())
{
- hasPointcut = true;
- break;
+ Pointcut p = (Pointcut) it.next();
+ if (p.matchesCall(advisor, call))
+ {
+ hasPointcut = true;
+ break;
+ }
}
}
if (hasPointcut)
Modified: branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java
===================================================================
--- branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java 2008-08-27 19:09:50 UTC (rev 77547)
+++ branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructionTransformer.java 2008-08-27 20:13:51 UTC (rev 77548)
@@ -23,6 +23,8 @@
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+
import org.jboss.aop.ClassAdvisor;
import org.jboss.aop.pointcut.Pointcut;
@@ -147,13 +149,18 @@
// currently used by CallerTransformer
public static boolean isAdvisableConstructor(CtConstructor con, ClassAdvisor advisor) throws NotFoundException
{
- Iterator pointcuts = advisor.getManager().getPointcuts().values().iterator();
- while (pointcuts.hasNext())
+
+ Map pointcuts = advisor.getManager().getPointcuts();
+ synchronized (pointcuts)
{
- Pointcut pointcut = (Pointcut) pointcuts.next();
- if (pointcut.matchesConstruction(advisor, con))
+ Iterator it = pointcuts.values().iterator();
+ while (it.hasNext())
{
- return true;
+ Pointcut pointcut = (Pointcut) it.next();
+ if (pointcut.matchesConstruction(advisor, con))
+ {
+ return true;
+ }
}
}
return false;
Modified: branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java
===================================================================
--- branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java 2008-08-27 19:09:50 UTC (rev 77547)
+++ branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/ConstructorExecutionTransformer.java 2008-08-27 20:13:51 UTC (rev 77548)
@@ -24,6 +24,7 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import javassist.CannotCompileException;
import javassist.CtClass;
@@ -462,13 +463,17 @@
// currently used by CallerTransformer
public static boolean isAdvisableConstructor(CtConstructor con, ClassAdvisor advisor) throws NotFoundException
{
- Iterator pointcuts = advisor.getManager().getPointcuts().values().iterator();
- while (pointcuts.hasNext())
+ Map pointcuts = advisor.getManager().getPointcuts();
+ synchronized (pointcuts)
{
- Pointcut pointcut = (Pointcut) pointcuts.next();
- if (pointcut.matchesExecution(advisor, con))
+ Iterator it = pointcuts.values().iterator();
+ while (it.hasNext())
{
- return true;
+ Pointcut pointcut = (Pointcut) it.next();
+ if (pointcut.matchesExecution(advisor, con))
+ {
+ return true;
+ }
}
}
return false;
Modified: branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/JoinpointSimpleClassifier.java
===================================================================
--- branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/JoinpointSimpleClassifier.java 2008-08-27 19:09:50 UTC (rev 77547)
+++ branches/JBPAPP_4_3_0_GA_CP02_JBPAPP-1141/aop/src/main/org/jboss/aop/instrument/JoinpointSimpleClassifier.java 2008-08-27 20:13:51 UTC (rev 77548)
@@ -58,13 +58,13 @@
protected JoinpointClassification classifyJoinpoint(CtMember member, Advisor advisor, Matcher joinpointMatcher) throws NotFoundException
{
Collection pointcuts = advisor.getManager().getPointcuts().values();
- for (Iterator it = pointcuts.iterator(); it.hasNext(); )
+ synchronized (pointcuts)
{
- Pointcut pointcut = (Pointcut) it.next();
-
- try
+ for (Iterator it = pointcuts.iterator(); it.hasNext(); )
{
- if (joinpointMatcher.matches(pointcut, advisor, member))
+ Pointcut pointcut = (Pointcut) it.next();
+
+ if (joinpointMatcher.matches(pointcut, advisor, member))
{
if (AspectManager.verbose)
{
@@ -73,10 +73,6 @@
return JoinpointClassification.WRAPPED;
}
}
- catch (RuntimeException e)
- {
- return handleError(e, member);
- }
}
if (AspectManager.verbose)
{
More information about the jboss-cvs-commits
mailing list