aboutsummaryrefslogtreecommitdiffstats
path: root/weaver
diff options
context:
space:
mode:
authoraclement <aclement>2006-10-12 19:58:09 +0000
committeraclement <aclement>2006-10-12 19:58:09 +0000
commite6a707af677f170f3dbf41081f6ff296b90437d1 (patch)
treefba0b4487b2ff98d9df0864aaa882f4ead167684 /weaver
parentf80ae0089b2a8f57653348b76ef1b7f89aebf2ef (diff)
downloadaspectj-e6a707af677f170f3dbf41081f6ff296b90437d1.tar.gz
aspectj-e6a707af677f170f3dbf41081f6ff296b90437d1.zip
test and fix for 160674: simpler strategy for loading bytecode on SAPBEFORE_133532
Diffstat (limited to 'weaver')
-rw-r--r--weaver/src/org/aspectj/weaver/World.java11
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelWorld.java12
2 files changed, 21 insertions, 2 deletions
diff --git a/weaver/src/org/aspectj/weaver/World.java b/weaver/src/org/aspectj/weaver/World.java
index a670f0eb5..fb5fe193b 100644
--- a/weaver/src/org/aspectj/weaver/World.java
+++ b/weaver/src/org/aspectj/weaver/World.java
@@ -109,6 +109,7 @@ public abstract class World implements Dump.INode {
private boolean fastDelegateSupportEnabled = isASMAround;
private boolean runMinimalMemory = false;
private boolean shouldPipelineCompilation = true;
+ protected boolean bcelRepositoryCaching = xsetBCEL_REPOSITORY_CACHING_DEFAULT.equalsIgnoreCase("true");
private boolean completeBinaryTypes = false;
public boolean forDEBUG_structuralChangesCode = false;
public boolean forDEBUG_bridgingCode = false;
@@ -787,10 +788,12 @@ public abstract class World implements Dump.INode {
public final static String xsetRUN_MINIMAL_MEMORY ="runMinimalMemory"; // default true
public final static String xsetDEBUG_STRUCTURAL_CHANGES_CODE = "debugStructuralChangesCode"; // default false
public final static String xsetDEBUG_BRIDGING = "debugBridging"; // default false
+ public final static String xsetBCEL_REPOSITORY_CACHING = "bcelRepositoryCaching";
public final static String xsetPIPELINE_COMPILATION = "pipelineCompilation";
public final static String xsetPIPELINE_COMPILATION_DEFAULT = "true";
public final static String xsetCOMPLETE_BINARY_TYPES = "completeBinaryTypes";
public final static String xsetCOMPLETE_BINARY_TYPES_DEFAULT = "false";
+ public final static String xsetBCEL_REPOSITORY_CACHING_DEFAULT = "true";
public boolean isInJava5Mode() {
return behaveInJava5Way;
@@ -1175,7 +1178,13 @@ public abstract class World implements Dump.INode {
getMessageHandler().handleMessage(MessageUtil.info("[activateLightweightDelegates=false] Disabling optimization to use lightweight delegates for non-woven types"));
}
- String s = p.getProperty(xsetPIPELINE_COMPILATION,xsetPIPELINE_COMPILATION_DEFAULT);
+ String s = p.getProperty(xsetBCEL_REPOSITORY_CACHING,xsetBCEL_REPOSITORY_CACHING_DEFAULT);
+ bcelRepositoryCaching = s.equalsIgnoreCase("true");
+ if (!bcelRepositoryCaching) {
+ getMessageHandler().handleMessage(MessageUtil.info("[bcelRepositoryCaching=false] AspectJ will not use a bcel cache for class information"));
+ }
+
+ s = p.getProperty(xsetPIPELINE_COMPILATION,xsetPIPELINE_COMPILATION_DEFAULT);
shouldPipelineCompilation = s.equalsIgnoreCase("true");
s = p.getProperty(xsetCOMPLETE_BINARY_TYPES,xsetCOMPLETE_BINARY_TYPES_DEFAULT);
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
index a34454c8d..5dfeba271 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java
@@ -48,6 +48,7 @@ import org.aspectj.apache.bcel.generic.PUTSTATIC;
import org.aspectj.apache.bcel.generic.Type;
import org.aspectj.apache.bcel.util.ClassLoaderRepository;
import org.aspectj.apache.bcel.util.ClassPath;
+import org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository;
import org.aspectj.apache.bcel.util.Repository;
import org.aspectj.bridge.IMessageHandler;
import org.aspectj.weaver.Advice;
@@ -155,10 +156,18 @@ public class BcelWorld extends World implements Repository {
setMessageHandler(handler);
setCrossReferenceHandler(xrefHandler);
// Tell BCEL to use us for resolving any classes
- delegate = new ClassLoaderRepository(loader);
+ delegate = getClassLoaderRepositoryFor(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 Repository getClassLoaderRepositoryFor(ClassLoader loader) {
+ if (bcelRepositoryCaching) {
+ return new ClassLoaderRepository(loader);
+ } else {
+ return new NonCachingClassLoaderRepository(loader);
+ }
+ }
public void addPath (String name) {
classPath.addPath(name, this.getMessageHandler());
@@ -355,6 +364,7 @@ public class BcelWorld extends World implements Repository {
if (trace.isTraceEnabled()) trace.event("lookupJavaClass",this,new Object[] { name, jc });
return jc;
} catch (ClassNotFoundException e) {
+ if (trace.isTraceEnabled()) trace.error("Unable to find class '"+name+"' in repository",e);
return null;
}
}