Browse Source

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
tags/V1_2_1
aclement 20 years ago
parent
commit
5e0876580b

+ 15
- 8
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/PointcutDeclaration.java View File

@@ -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) {

+ 19
- 0
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java View File

@@ -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());
}

}

+ 4
- 0
tests/bugs/BogusMessage.java View File

@@ -0,0 +1,4 @@
public aspect BogusMessage {
public abstract pointcut tracingScope();

}

+ 3
- 0
tests/bugs/BogusMessage2.java View File

@@ -0,0 +1,3 @@
public class BogusMessage2 {
public abstract pointcut tracingScope();
}

+ 8
- 0
tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java View File

@@ -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)");
}
}


+ 15
- 0
tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml View File

@@ -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>

Loading…
Cancel
Save