Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract classtags/V1_2_1
@@ -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) { |
@@ -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()); | |||
} | |||
} |
@@ -0,0 +1,4 @@ | |||
public aspect BogusMessage { | |||
public abstract pointcut tracingScope(); | |||
} |
@@ -0,0 +1,3 @@ | |||
public class BogusMessage2 { | |||
public abstract pointcut tracingScope(); | |||
} |
@@ -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)"); | |||
} | |||
} | |||
@@ -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> | |||