Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class
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) {
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;
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.
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());
+ }
}
--- /dev/null
+public aspect BogusMessage {
+ public abstract pointcut tracingScope();
+
+}
\ No newline at end of file
--- /dev/null
+public class BogusMessage2 {
+ public abstract pointcut tracingScope();
+}
\ No newline at end of file
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)");
+ }
}
<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