diff options
-rw-r--r-- | org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java | 8 | ||||
-rw-r--r-- | tests/ajcTests.xml | 13 | ||||
-rw-r--r-- | tests/bugs/SofteningTooMuch.java | 15 |
3 files changed, 36 insertions, 0 deletions
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 dd708a1b7..49b726db2 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 @@ -32,6 +32,7 @@ import org.eclipse.jdt.internal.compiler.ast.AstNode; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; import org.eclipse.jdt.internal.compiler.impl.ReferenceContext; import org.eclipse.jdt.internal.compiler.lookup.MethodBinding; +import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding; import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding; import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; import org.eclipse.jdt.internal.compiler.problem.ProblemReporter; @@ -71,6 +72,13 @@ public class AjProblemReporter extends ProblemReporter { for (Iterator i = world.getWorld().getDeclareSoft().iterator(); i.hasNext(); ) { DeclareSoft d = (DeclareSoft)i.next(); + // We need the exceptionType to match the type in the declare soft statement + // This means it must either be the same type or a subtype + ResolvedTypeX throwException = world.fromEclipse((ReferenceBinding)exceptionType); + FuzzyBoolean isExceptionTypeOrSubtype = + d.getException().matchesInstanceof(throwException); + if (!isExceptionTypeOrSubtype.alwaysTrue() ) continue; + if (callSite != null) { FuzzyBoolean match = d.getPointcut().match(callSite); if (match.alwaysTrue()) { diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index 3f9841dc7..3b834af69 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -6821,5 +6821,18 @@ <message kind="error" line="20" text="incompatible type"/> </compile> </ajc-test> + + <ajc-test dir="bugs" pr="49250" + title="alias getCause for getWrappedThrowable in SoftException"> + <compile files="GetCauseOnSoftException.java" options="-Xlint:warning"> + </compile> + <run vm="1.3" class="GetCauseOnSoftException"/> + </ajc-test> + <ajc-test dir="bugs" pr="48522" + title="Declare soft softening other exception types"> + <compile files="SofteningTooMuch.java"> + <message kind="error" line="6" text="Unhandled exception"/> + </compile> + </ajc-test> </suite> diff --git a/tests/bugs/SofteningTooMuch.java b/tests/bugs/SofteningTooMuch.java new file mode 100644 index 000000000..164adb24c --- /dev/null +++ b/tests/bugs/SofteningTooMuch.java @@ -0,0 +1,15 @@ + +// pr 48522 + +public class SofteningTooMuch { + public static void main(String args[]) { + throw new Exception("should be a compiler error here"); + } +} + +class FooException extends Exception {} + +aspect ExcPolicy { + declare soft: FooException: execution(* SofteningTooMuch.*(..)); +} + |