summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2005-04-19 12:24:59 +0000
committeraclement <aclement>2005-04-19 12:24:59 +0000
commit32c3ac7de17abb9dff859adea6139c096b29ac31 (patch)
tree6810f0b06514de563c18b36bd272c0fe973660ed
parentd542d36f66e4265e2ccef83188a2c8d4d2587548 (diff)
downloadaspectj-32c3ac7de17abb9dff859adea6139c096b29ac31.tar.gz
aspectj-32c3ac7de17abb9dff859adea6139c096b29ac31.zip
from branch: perclause support and modified delegate processing for multi-threaded environments.
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelWorld.java70
1 files changed, 57 insertions, 13 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
index d4e425b05..218eed263 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
@@ -1,13 +1,14 @@
/* *******************************************************************
* Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Common Public License v1.0
- * which accompanies this distribution and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * PARC initial implementation
+ * All rights reserved.
+ * This program and the accompanying materials are made available
+ * under the terms of the Common Public License v1.0
+ * which accompanies this distribution and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * PARC initial implementation
+ * Alexandre Vasseur perClause support for @AJ aspects
* ******************************************************************/
@@ -34,6 +35,7 @@ import org.aspectj.apache.bcel.generic.PUTSTATIC;
import org.aspectj.apache.bcel.generic.Type;
import org.aspectj.apache.bcel.util.ClassPath;
import org.aspectj.apache.bcel.util.Repository;
+import org.aspectj.apache.bcel.util.ClassLoaderRepository;
import org.aspectj.bridge.IMessageHandler;
import org.aspectj.weaver.Advice;
import org.aspectj.weaver.AdviceKind;
@@ -49,10 +51,13 @@ import org.aspectj.weaver.World;
import org.aspectj.weaver.patterns.FormalBinding;
import org.aspectj.weaver.patterns.Pointcut;
import org.aspectj.weaver.patterns.SimpleScope;
+import org.aspectj.weaver.patterns.PerClause;
public class BcelWorld extends World implements Repository {
private ClassPathManager classPath;
-
+
+ private Repository delegate;
+
//private ClassPathManager aspectPath = null;
// private List aspectPathEntries;
@@ -90,7 +95,9 @@ public class BcelWorld extends World implements Repository {
setMessageHandler(handler);
setXRefHandler(xrefHandler);
// Tell BCEL to use us for resolving any classes
- org.aspectj.apache.bcel.Repository.setRepository(this);
+ delegate = this;
+ // TODO Alex do we need to call org.aspectj.apache.bcel.Repository.setRepository(delegate);
+ // if so, how can that be safe in J2EE ?? (static stuff in Bcel)
}
public BcelWorld(ClassPathManager cpm, IMessageHandler handler, ICrossReferenceHandler xrefHandler) {
@@ -98,9 +105,28 @@ public class BcelWorld extends World implements Repository {
setMessageHandler(handler);
setXRefHandler(xrefHandler);
// Tell BCEL to use us for resolving any classes
- org.aspectj.apache.bcel.Repository.setRepository(this);
+ delegate = this;
+ // TODO Alex do we need to call org.aspectj.apache.bcel.Repository.setRepository(delegate);
+ // if so, how can that be safe in J2EE ?? (static stuff in Bcel)
}
-
+
+ /**
+ * Build a World from a ClassLoader, for LTW support
+ *
+ * @param loader
+ * @param handler
+ * @param xrefHandler
+ */
+ public BcelWorld(ClassLoader loader, IMessageHandler handler, ICrossReferenceHandler xrefHandler) {
+ this.classPath = null;
+ setMessageHandler(handler);
+ setXRefHandler(xrefHandler);
+ // Tell BCEL to use us for resolving any classes
+ delegate = new ClassLoaderRepository(loader);
+ // TODO Alex do we need to call org.aspectj.apache.bcel.Repository.setRepository(delegate);
+ // if so, how can that be safe in J2EE ?? (static stuff in Bcel)
+ }
+
public void addPath (String name) {
classPath.addPath(name, this.getMessageHandler());
}
@@ -217,7 +243,14 @@ public class BcelWorld extends World implements Repository {
private JavaClass lookupJavaClass(ClassPathManager classPath, String name) {
- if (classPath == null) return null;
+ if (classPath == null) {
+ try {
+ return delegate.loadClass(name);
+ } catch (ClassNotFoundException e) {
+ return null;
+ }
+ }
+
try {
ClassPathManager.ClassFile file = classPath.find(TypeX.forName(name));
if (file == null) return null;
@@ -367,6 +400,17 @@ public class BcelWorld extends World implements Repository {
return new BcelCflowCounterFieldAdder(cflowField);
}
+ /**
+ * Register a munger for perclause @AJ aspect so that we add aspectOf(..) to them as needed
+ *
+ * @param aspect
+ * @param kind
+ * @return
+ */
+ public ConcreteTypeMunger makePerClauseAspect(ResolvedTypeX aspect, PerClause.Kind kind) {
+ return new BcelPerClauseAspectAdder(aspect, kind);
+ }
+
public static BcelObjectType getBcelObjectType(ResolvedTypeX concreteAspect) {
//XXX need error checking
return (BcelObjectType) ((ResolvedTypeX.Name)concreteAspect).getDelegate();