aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2005-10-21 06:56:11 +0000
committeraclement <aclement>2005-10-21 06:56:11 +0000
commit3021284f5d910a406d26a01ce836bbb5f5cd6bfc (patch)
treee8a059eb712f096be5a764b9dc7112b0c55677da
parent6e337a8e27541f3223a5312bd47013f195915be1 (diff)
downloadaspectj-3021284f5d910a406d26a01ce836bbb5f5cd6bfc.tar.gz
aspectj-3021284f5d910a406d26a01ce836bbb5f5cd6bfc.zip
test and fix for pr111915
-rw-r--r--tests/bugs150/pr111915.java17
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml7
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java15
4 files changed, 33 insertions, 10 deletions
diff --git a/tests/bugs150/pr111915.java b/tests/bugs150/pr111915.java
new file mode 100644
index 000000000..f0ca3abae
--- /dev/null
+++ b/tests/bugs150/pr111915.java
@@ -0,0 +1,17 @@
+import java.io.*;
+
+class SomeClass {
+ public void doSomething() { }
+}
+
+aspect DoesntCompile {
+
+ declare parents : SomeClass implements Serializable;
+
+ pointcut doSomething(SomeClass someClass) :
+ execution(void SomeClass.doSomething()) &&
+ this(someClass);
+
+ void around(Serializable myWorld) : doSomething(myWorld) { }
+
+} \ No newline at end of file
diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
index a6f8acb46..1aabffea6 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
@@ -485,6 +485,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("parameterized generic methods");
}
+ public void testIllegalChangeToPointcutDeclaration_pr111915() {
+ runTest("test illegal change to pointcut declaration");
+ }
+
public void testCantProvideDefaultImplViaITD_pr110307_1() {runTest("Cant provide default implementation via ITD - 1");}
public void testCantProvideDefaultImplViaITD_pr110307_2() {runTest("Cant provide default implementation via ITD - 2");}
public void testCantProvideDefaultImplViaITD_pr110307_3() {runTest("Cant provide default implementation via ITD - 3");}
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
index d0aaa64ca..b4546aac7 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
@@ -6,6 +6,13 @@
<ajc-test dir="java5/staticImports" title="import static java.lang.System.out">
<compile files="StaticImport.aj" options="-1.5"/>
</ajc-test>
+
+ <ajc-test dir="bugs150" title="test illegal change to pointcut declaration">
+ <compile files="pr111915.java" options="-1.5 -showWeaveInfo">
+ <message kind="weave" text="Join point 'method-execution(void SomeClass.doSomething())' in Type 'SomeClass' (pr111915.java:4) advised by around advice from 'DoesntCompile' (pr111915.java:15)"/>
+ <message kind="weave" text="Extending interface set for type 'SomeClass' (pr111915.java) to include 'java.io.Serializable' (pr111915.java)"/>
+ </compile>
+ </ajc-test>
<ajc-test dir="java5/bridgeMethods" pr="72766" title="Ignore bridge methods">
<compile files="AspectX.aj" inpath="testcode.jar" options="-showWeaveInfo">
diff --git a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
index 67407a408..886e5f818 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
@@ -23,7 +23,6 @@ import java.util.Set;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.MessageUtil;
import org.aspectj.util.FuzzyBoolean;
-import org.aspectj.weaver.BCException;
import org.aspectj.weaver.ISourceContext;
import org.aspectj.weaver.IntMap;
import org.aspectj.weaver.ResolvedPointcutDefinition;
@@ -209,7 +208,7 @@ public class ReferencePointcut extends Pointcut {
!p.getExactType().equals(UnresolvedType.OBJECT))
{
scope.message(IMessage.ERROR, p, "incompatible type, expected " +
- parameterTypes[i].getName() + " found " + p);
+ parameterTypes[i].getName() + " found " + p +". Check the type specified in your pointcut");
return;
}
}
@@ -299,18 +298,14 @@ public class ReferencePointcut extends Pointcut {
for (int i=0,len=arguments.size(); i < len; i++) {
TypePattern p = arguments.get(i);
if (p == TypePattern.NO) continue;
- //we are allowed to bind to pointcuts which use subtypes as this is type safe
- if (!p.matchesSubtypes(parameterTypes[i]) &&
- !p.getExactType().equals(UnresolvedType.OBJECT))
- {
- throw new BCException("illegal change to pointcut declaration: " + this);
- }
-
+ // we are allowed to bind to pointcuts which use subtypes as this is type safe
+ // this will be checked in ReferencePointcut.resolveBindings(). Can't check it here
+ // as we don't know about any new parents added via decp.
if (p instanceof BindingTypePattern) {
newBindings.put(i, ((BindingTypePattern)p).getFormalIndex());
}
}
-
+
if (searchStart.isParameterizedType()) {
// build a type map mapping type variable names in the generic type to
// the type parameters presented