summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2004-08-27 11:18:01 +0000
committeraclement <aclement>2004-08-27 11:18:01 +0000
commit5e0876580b0e95dd06ca4342e233f9a5dceb33a5 (patch)
tree6037b3a0ffe6978b3eb3427ce3a0fe1e5c63b018
parentb5e6307a63b0513cb058e8d6e56ff87287bdfa15 (diff)
downloadaspectj-5e0876580b0e95dd06ca4342e233f9a5dceb33a5.tar.gz
aspectj-5e0876580b0e95dd06ca4342e233f9a5dceb33a5.zip
Fix for Bugzilla Bug 72699
Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.java23
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java19
-rw-r--r--tests/bugs/BogusMessage.java4
-rw-r--r--tests/bugs/BogusMessage2.java3
-rw-r--r--tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java8
-rw-r--r--tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml15
6 files changed, 64 insertions, 8 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.java
index e1c6673b7..1993e6836 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.java
@@ -76,14 +76,21 @@ public class PointcutDeclaration extends AjMethodDeclaration {
selector = CharOperation.concat(mangledPrefix, '$', selector, '$',
Integer.toHexString(sourceStart).toCharArray());
- if (Modifier.isAbstract(this.declaredModifiers) &&
- !(typeDec instanceof AspectDeclaration))
- {
- typeDec.scope.problemReporter().signalError(sourceStart, sourceEnd,
- "The abstract pointcut " + new String(declaredName) +
- " can only be defined in an aspect");
- ignoreFurtherInvestigation = true;
- return;
+ if (Modifier.isAbstract(this.declaredModifiers)) {
+ if (!(typeDec instanceof AspectDeclaration)) {
+ typeDec.scope.problemReporter().signalError(sourceStart, sourceEnd,
+ "The abstract pointcut " + new String(declaredName) +
+ " can only be defined in an aspect");
+ ignoreFurtherInvestigation = true;
+ return;
+ } else if (!Modifier.isAbstract(typeDec.modifiers)) {
+ typeDec.scope.problemReporter().signalError(sourceStart, sourceEnd,
+ "The abstract pointcut " + new String(declaredName) +
+ " can only be defined in an abstract aspect");
+
+ ignoreFurtherInvestigation = true;
+ return;
+ }
}
if (pointcutDesignator != null) {
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
index 77457f879..5ac77b4ad 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
@@ -31,6 +31,7 @@ import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;
import org.eclipse.jdt.internal.compiler.IProblemFactory;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.Argument;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
@@ -41,6 +42,7 @@ import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
import org.eclipse.jdt.internal.compiler.problem.ProblemReporter;
import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.core.compiler.IProblem;
/**
* Extends problem reporter to support compiler-side implementation of declare soft.
@@ -221,5 +223,22 @@ public class AjProblemReporter extends ProblemReporter {
if (reportIt)
super.javadocMissingParamTag(arg, modifiers);
}
+
+ public void abstractMethodInAbstractClass(SourceTypeBinding type, AbstractMethodDeclaration methodDecl) {
+
+ String abstractMethodName = new String(methodDecl.selector);
+ if (abstractMethodName.startsWith("ajc$pointcut")) {
+ // This will already have been reported, see: PointcutDeclaration.postParse()
+ return;
+ }
+ String[] arguments = new String[] {new String(type.sourceName()), abstractMethodName};
+ super.handle(
+ IProblem.AbstractMethodInAbstractClass,
+ arguments,
+ arguments,
+ methodDecl.sourceStart,
+ methodDecl.sourceEnd,this.referenceContext,
+ this.referenceContext == null ? null : this.referenceContext.compilationResult());
+ }
}
diff --git a/tests/bugs/BogusMessage.java b/tests/bugs/BogusMessage.java
new file mode 100644
index 000000000..d11dd6d68
--- /dev/null
+++ b/tests/bugs/BogusMessage.java
@@ -0,0 +1,4 @@
+public aspect BogusMessage {
+ public abstract pointcut tracingScope();
+
+} \ No newline at end of file
diff --git a/tests/bugs/BogusMessage2.java b/tests/bugs/BogusMessage2.java
new file mode 100644
index 000000000..26ccc360c
--- /dev/null
+++ b/tests/bugs/BogusMessage2.java
@@ -0,0 +1,3 @@
+public class BogusMessage2 {
+ public abstract pointcut tracingScope();
+} \ No newline at end of file
diff --git a/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java b/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
index 7c3e3a261..0ecb6e6dc 100644
--- a/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
@@ -271,5 +271,13 @@ public class Ajc121Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
public void test051_arrayCloningInJava5() {
runTest("AJC possible bug with static nested classes");
}
+
+ public void test052_bogusMessage1() {
+ runTest("Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class (1)");
+ }
+
+ public void test053_bogusMessage2() {
+ runTest("Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class (2)");
+ }
}
diff --git a/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml b/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml
index dd9664295..e4b3a793c 100644
--- a/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml
+++ b/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml
@@ -418,4 +418,19 @@
<compile files="A.java" inpath="OneFiveCode.jar"/>
<!--run class="C"/-->
</ajc-test>
+
+ <ajc-test dir="bugs" pr="72699"
+ title="Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class (1)">
+ <compile files="BogusMessage.java">
+ <message kind="error" line="2" text="The abstract pointcut tracingScope can only be defined in an abstract aspect"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs" pr="72699"
+ title="Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class (2)">
+ <compile files="BogusMessage2.java">
+ <message kind="error" line="2" text="The abstract pointcut tracingScope can only be defined in an aspect"/>
+ </compile>
+ </ajc-test>
+
\ No newline at end of file