aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.java10
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java3
-rw-r--r--tests/ajcTests.xml20
-rw-r--r--tests/ajcTestsBroken.xml6
-rw-r--r--tests/ajcTestsFailing.xml26
-rw-r--r--tests/bugs/AspectInitError.java23
-rw-r--r--tests/bugs/ThisJoinPointAndVerifier.java28
-rw-r--r--tests/jimTests.xml21
8 files changed, 115 insertions, 22 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.java
index 583edca78..ef833b13e 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/InterTypeFieldDeclaration.java
@@ -67,6 +67,14 @@ public class InterTypeFieldDeclaration extends InterTypeDeclaration {
EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(upperScope);
ResolvedMember sig = munger.getSignature();
TypeX aspectType = EclipseFactory.fromBinding(upperScope.referenceContext.binding);
+
+ if (sig.getReturnType() == ResolvedTypeX.VOID ||
+ (sig.getReturnType().isArray() && (sig.getReturnType().getComponentType() == ResolvedTypeX.VOID)))
+ {
+ upperScope.problemReporter().signalError(sourceStart, sourceEnd,
+ "field type can not be void");
+ }
+
//
// System.err.println("sig: " + sig);
// System.err.println("field: " + world.makeFieldBinding(
@@ -129,6 +137,8 @@ public class InterTypeFieldDeclaration extends InterTypeDeclaration {
EclipseFactory world = EclipseFactory.fromScopeLookupEnvironment(classScope);
resolveOnType(classScope);
+ if (classScope.referenceContext.binding == null) return null;
+
binding = classScope.referenceContext.binding.resolveTypesFor(binding);
if (ignoreFurtherInvestigation) return null;
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java
index d1744dafb..68c875bfc 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/EclipseFactory.java
@@ -108,13 +108,14 @@ public class EclipseFactory {
if (binding instanceof HelperInterfaceBinding) {
return ((HelperInterfaceBinding) binding).getTypeX();
}
- if (binding.qualifiedSourceName() == null) {
+ if (binding == null || binding.qualifiedSourceName() == null) {
return ResolvedTypeX.MISSING;
}
return TypeX.forName(getName(binding));
}
public static TypeX[] fromBindings(TypeBinding[] bindings) {
+ if (bindings == null) return TypeX.NONE;
int len = bindings.length;
TypeX[] ret = new TypeX[len];
for (int i=0; i<len; i++) {
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml
index 54261ece4..321afe3d9 100644
--- a/tests/ajcTests.xml
+++ b/tests/ajcTests.xml
@@ -5610,4 +5610,24 @@
<compile files="TransactionTest.java,sub/ExecutionMonitor.java,sub/ObserverProtocol.aj"/>
<run class="TransactionTest"/>
</ajc-test>
+
+ <ajc-test dir="bugs" pr="34210"
+ title="thisJoinPoint.getArgs() causes IncompatibleClassChangeError">
+ <compile files="ThisJoinPointAndVerifier.java"/>
+ <run class="ThisJoinPointAndVerifier"/>
+ </ajc-test>
+
+ <ajc-test dir="errors" keywords="error"
+ title="inter-type declaration of void field">
+ <compile files="VoidFieldDeclarationCE.java">
+ <message kind="error" line="7"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="binding"
+ title="no such constructor for proceed argument (error)">
+ <compile files="UnfoundConstructor.java">
+ <message kind="error" line="25"/>
+ </compile>
+ </ajc-test>
</suite>
diff --git a/tests/ajcTestsBroken.xml b/tests/ajcTestsBroken.xml
index 6fc14b27f..d919e26e4 100644
--- a/tests/ajcTestsBroken.xml
+++ b/tests/ajcTestsBroken.xml
@@ -67,5 +67,9 @@
</compile>
</ajc-test>
-
+ <ajc-test dir="bugs" pr="33948"
+ title="default constructor inter-type declaration">
+ <compile files="ConstructorDeclaration.java"/>
+ <run class="ConstructorDeclaration"/>
+ </ajc-test>
</suite>
diff --git a/tests/ajcTestsFailing.xml b/tests/ajcTestsFailing.xml
index 2073f0e7c..051196a60 100644
--- a/tests/ajcTestsFailing.xml
+++ b/tests/ajcTestsFailing.xml
@@ -52,19 +52,6 @@
</compile>
</ajc-test>
- <ajc-test dir="binding"
- title="no such constructor for proceed argument (error)">
- <compile files="UnfoundConstructor.java">
- <message kind="error" line="25"/>
- </compile>
- </ajc-test>
-
- <ajc-test dir="bugs" pr="33948"
- title="default constructor inter-type declaration">
- <compile files="ConstructorDeclaration.java"/>
- <run class="ConstructorDeclaration"/>
- </ajc-test>
-
<ajc-test dir="errors" keywords="error"
title="class extending abstract aspect">
<compile files="ClassExtendingAbstractAspectCE.java">
@@ -72,13 +59,6 @@
</compile>
</ajc-test>
- <ajc-test dir="errors" keywords="error"
- title="inter-type declaration of void field">
- <compile files="VoidFieldDeclarationCE.java">
- <message kind="error" line="7"/>
- </compile>
- </ajc-test>
-
<ajc-test dir="incremental/stringliteral"
title="incrementally change string size and wire in injar classes">
<compile staging="true" options="-incremental"
@@ -104,4 +84,10 @@
before main packageOne.Main"/>
</ajc-test>
+ <ajc-test dir="bugs" pr="34206"
+ title="before():execution(new(..)) does not throw NoAspectBoundException">
+ <compile files="AspectInitError.java"/>
+ <run class="AspectInitError"/>
+ </ajc-test>
+
</suite>
diff --git a/tests/bugs/AspectInitError.java b/tests/bugs/AspectInitError.java
new file mode 100644
index 000000000..3a46b9c5a
--- /dev/null
+++ b/tests/bugs/AspectInitError.java
@@ -0,0 +1,23 @@
+
+
+/** Bugzilla Bug 34206
+ before():execution(new(..)) does not throw NoAspectBoundException */
+public class AspectInitError {
+ public static void main(String[] args) {
+ //Watchcall.aspectOf();
+ AspectInitError c = new AspectInitError();
+ }
+
+}
+
+aspect Watchcall {
+ pointcut myConstructor(): execution(new(..));
+
+ before(): myConstructor() {
+ System.err.println("Entering Constructor");
+ }
+
+ after(): myConstructor() {
+ System.err.println("Leaving Constructor");
+ }
+}
diff --git a/tests/bugs/ThisJoinPointAndVerifier.java b/tests/bugs/ThisJoinPointAndVerifier.java
new file mode 100644
index 000000000..a3b609c40
--- /dev/null
+++ b/tests/bugs/ThisJoinPointAndVerifier.java
@@ -0,0 +1,28 @@
+
+
+/** Bugzilla Bug 34210
+ thisJoinPoint.getArgs() causes IncompatibleClassChangeError */
+public class ThisJoinPointAndVerifier {
+ public void method() {
+ System.out.println("Executed method");
+ }
+ public static void main(String args[]) {
+ ThisJoinPointAndVerifier td = new ThisJoinPointAndVerifier();
+ td.method();
+ }
+}
+
+aspect Log1 {
+ pointcut logged_method() :
+ call(* ThisJoinPointAndVerifier.*(..));
+ after() : logged_method() {
+ Object[] args = thisJoinPoint.getArgs();
+ System.out.println ("Log1a: leaving " + thisJoinPoint.getSignature());
+ }
+ // comment this advice for scenario 2
+ after() : logged_method() {
+ //VM crash on scenario 1
+ //Object[] args = thisJoinPoint.getArgs();
+ System.out.println ("Log1b: leaving " + thisJoinPoint.getSignature());
+ }
+} \ No newline at end of file
diff --git a/tests/jimTests.xml b/tests/jimTests.xml
index e7e9b8b97..17db88e59 100644
--- a/tests/jimTests.xml
+++ b/tests/jimTests.xml
@@ -1,5 +1,26 @@
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd">
<suite>
+ <ajc-test dir="new/declare" pr="31724"
+ title="omnibus declare warning context"
+ comment="XXX untested: no source context shown">
+ <compile files="DeclareWarning.java">
+ <message kind="warning" line="5"/>
+ <message kind="warning" line="12"/>
+ <message kind="warning" line="13"/>
+ <message kind="warning" line="14"/>
+ <message kind="warning" line="15"/>
+ <message kind="warning" line="16"/>
+ <message kind="warning" line="17"/>
+ <message kind="warning" line="18"/>
+ <message kind="warning" line="21"/>
+ <message kind="warning" line="22"/>
+ <message kind="warning" line="23"/>
+ <message kind="warning" line="33"/>
+ <message kind="warning" line="36"/>
+ <message kind="warning" line="39"/>
+ <message kind="warning" line="74"/>
+ </compile>
+ </ajc-test>
<!--