summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2005-11-15 14:34:45 +0000
committeraclement <aclement>2005-11-15 14:34:45 +0000
commite8b6bde2173e74a5969162aee2de59eee9476456 (patch)
tree1c469d92f242d6299a55a9c47f51782066fd3270
parentfdfc78fba8bbc7afc8cd03e2cf11c3547c032b87 (diff)
downloadaspectj-e8b6bde2173e74a5969162aee2de59eee9476456.tar.gz
aspectj-e8b6bde2173e74a5969162aee2de59eee9476456.zip
Matthews patches for 115275
-rw-r--r--loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java17
-rw-r--r--tests/ltw/aop-aspectsinclude.xml5
-rw-r--r--tests/ltw/aop-aspectsincludewithlintwarning.xml8
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java8
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml56
-rw-r--r--weaver/src/org/aspectj/weaver/Lint.java3
-rw-r--r--weaver/src/org/aspectj/weaver/XlintDefault.properties2
-rw-r--r--weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java5
8 files changed, 101 insertions, 3 deletions
diff --git a/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java b/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java
index 3ca6d69cf..bbbbc7bfa 100644
--- a/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java
+++ b/loadtime/src/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java
@@ -19,9 +19,11 @@ import org.aspectj.bridge.Message;
import org.aspectj.bridge.MessageUtil;
import org.aspectj.util.LangUtil;
import org.aspectj.weaver.ICrossReferenceHandler;
+import org.aspectj.weaver.Lint;
import org.aspectj.weaver.ResolvedType;
import org.aspectj.weaver.UnresolvedType;
import org.aspectj.weaver.World;
+import org.aspectj.weaver.Lint.Kind;
import org.aspectj.weaver.bcel.BcelWeaver;
import org.aspectj.weaver.bcel.BcelWorld;
import org.aspectj.weaver.bcel.Utility;
@@ -175,9 +177,8 @@ public class ClassLoaderWeavingAdaptor extends WeavingAdaptor {
info("no configuration found. Disabling weaver for class loader " + getClassLoaderName(loader));
}
} catch (Exception e) {
- weaver.getWorld().getMessageHandler().handleMessage(
- new Message("Register definition failed", IMessage.WARNING, e, null)
- );
+ enabled = false;// will allow very fast skip in shouldWeave()
+ warn("register definition failed",e);
}
}
@@ -284,6 +285,12 @@ public class ClassLoaderWeavingAdaptor extends WeavingAdaptor {
}
}
+ protected void lint (String name, String[] infos) {
+ Lint lint = bcelWorld.getLint();
+ Kind kind = lint.getLintKind(name);
+ kind.signal(infos,null,null);
+ }
+
/**
* Register the aspect, following include / exclude rules
*
@@ -312,6 +319,10 @@ public class ClassLoaderWeavingAdaptor extends WeavingAdaptor {
namespace = namespace.append(";"+aspectClassName);
}
}
+ else {
+// warn("aspect excluded: " + aspectClassName);
+ lint("aspectExcludedByConfiguration", new String[] { aspectClassName, getClassLoaderName(loader) });
+ }
}
}
diff --git a/tests/ltw/aop-aspectsinclude.xml b/tests/ltw/aop-aspectsinclude.xml
new file mode 100644
index 000000000..95f73f611
--- /dev/null
+++ b/tests/ltw/aop-aspectsinclude.xml
@@ -0,0 +1,5 @@
+<aspectj>
+ <aspects>
+ <include within="pakkage.*"/>
+ </aspects>
+</aspectj>
diff --git a/tests/ltw/aop-aspectsincludewithlintwarning.xml b/tests/ltw/aop-aspectsincludewithlintwarning.xml
new file mode 100644
index 000000000..8939234ab
--- /dev/null
+++ b/tests/ltw/aop-aspectsincludewithlintwarning.xml
@@ -0,0 +1,8 @@
+<aspectj>
+ <aspects>
+ <include within="pakkage.*"/>
+ </aspects>
+
+ <weaver options="-Xlint:warning">
+ </weaver>
+</aspectj>
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java b/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java
index 66eb92c68..ffb52a905 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/ltw/LTWTests.java
@@ -57,6 +57,14 @@ public class LTWTests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("Use abstract aspect for ITD using aop.xml");
}
+ public void testAspectsInclude () {
+ runTest("Ensure a subset of inherited aspects is used for weaving");
+ }
+
+ public void testAspectsIncludeWithLintWarning () {
+ runTest("Ensure weaver lint warning issued when an aspect is not used for weaving");
+ }
+
/*
* Allow system properties to be set and restored
* TODO maw move to XMLBasedAjcTestCase or RunSpec
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml b/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml
index 6a8fe1881..69eff31ee 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ltw/ltw-tests.xml
@@ -158,4 +158,60 @@
</stderr>
</run>
</ajc-test>
+
+ <ajc-test dir="ltw"
+ title="Ensure a subset of inherited aspects is used for weaving"
+ keywords="aspects, include">
+ <compile
+ files="Main.java"
+ outjar="main.jar"
+ >
+ </compile>
+ <compile
+ classpath="main.jar"
+ files="Aspect1.aj, Aspect2.aj, pakkage/Aspect3.aj"
+ outjar="aspects.jar"
+ options="-outxml"
+ >
+ </compile>
+ <run class="Main" ltw="aop-aspectsinclude.xml">
+ <stdout>
+ <line text="Main.main"/>
+ <line text="Main.test1"/>
+ <line text="Main.test2"/>
+ </stdout>
+ <stderr>
+ <line text="pakkage.Aspect3.before_test2"/>
+ </stderr>
+ </run>
+ </ajc-test>
+
+ <ajc-test dir="ltw"
+ title="Ensure weaver lint warning issued when an aspect is not used for weaving"
+ keywords="aspects, include, lint">
+ <compile
+ files="Main.java"
+ outjar="main.jar"
+ >
+ </compile>
+ <compile
+ classpath="main.jar"
+ files="Aspect1.aj, Aspect2.aj, pakkage/Aspect3.aj"
+ outjar="aspects.jar"
+ options="-outxml"
+ >
+ </compile>
+ <run class="Main" ltw="aop-aspectsincludewithlintwarning.xml">
+ <stdout>
+ <line text="Main.main"/>
+ <line text="Main.test1"/>
+ <line text="Main.test2"/>
+ </stdout>
+ <stderr>
+ <line text="warning aspect Aspect1 exluded for class loader org.aspectj.weaver.loadtime.WeavingURLClassLoader [Xlint:aspectExcludedByConfiguration]"/>
+ <line text="warning aspect Aspect2 exluded for class loader org.aspectj.weaver.loadtime.WeavingURLClassLoader [Xlint:aspectExcludedByConfiguration]"/>
+ <line text="pakkage.Aspect3.before_test2"/>
+ </stderr>
+ </run>
+ </ajc-test>
diff --git a/weaver/src/org/aspectj/weaver/Lint.java b/weaver/src/org/aspectj/weaver/Lint.java
index d0b22e47c..e8b237079 100644
--- a/weaver/src/org/aspectj/weaver/Lint.java
+++ b/weaver/src/org/aspectj/weaver/Lint.java
@@ -102,6 +102,9 @@ public class Lint {
public final Kind noExplicitConstructorCall =
new Kind("noExplicitConstructorCall","inter-type constructor does not contain explicit constructor call: field initializers in the target type will not be executed");
+ public final Kind aspectExcludedByConfiguration =
+ new Kind("aspectExcludedByConfiguration","aspect {0} exluded for class loader {1}");
+
public Lint(World world) {
this.world = world;
}
diff --git a/weaver/src/org/aspectj/weaver/XlintDefault.properties b/weaver/src/org/aspectj/weaver/XlintDefault.properties
index da3856a79..bb40c00cd 100644
--- a/weaver/src/org/aspectj/weaver/XlintDefault.properties
+++ b/weaver/src/org/aspectj/weaver/XlintDefault.properties
@@ -30,3 +30,5 @@ elementAlreadyAnnotated = warning
runtimeExceptionNotSoftened = warning
uncheckedArgument = warning
noExplicitConstructorCall = warning
+
+aspectExcludedByConfiguration = ignore
diff --git a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
index b59ec5564..ea7590273 100644
--- a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
+++ b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
@@ -31,6 +31,7 @@ import java.util.StringTokenizer;
import org.aspectj.bridge.AbortException;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.IMessageHandler;
+import org.aspectj.bridge.Message;
import org.aspectj.bridge.MessageUtil;
import org.aspectj.bridge.MessageWriter;
import org.aspectj.bridge.IMessage.Kind;
@@ -327,6 +328,10 @@ public class WeavingAdaptor {
return MessageUtil.warn(messageHandler,message);
}
+ protected boolean warn (String message, Throwable th) {
+ return messageHandler.handleMessage(new Message("Register definition failed", IMessage.WARNING, th, null));
+ }
+
protected boolean error (String message) {
return MessageUtil.error(messageHandler,message);
}