]> source.dussan.org Git - aspectj.git/commitdiff
fix for pr 48522, not warning on (un)softened exception
authoracolyer <acolyer>
Wed, 7 Jan 2004 15:21:26 +0000 (15:21 +0000)
committeracolyer <acolyer>
Wed, 7 Jan 2004 15:21:26 +0000 (15:21 +0000)
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
tests/ajcTests.xml
tests/bugs/SofteningTooMuch.java [new file with mode: 0644]

index dd708a1b73a4eff12b090475211c1c2029185331..49b726db2e9132da2495c07f4b0b0dac2897fd75 100644 (file)
@@ -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()) {
index 3f9841dc7c0dd0facb89ae688b6d28dbaf3add31..3b834af69b675a6df792e762c44ffa7f8115f7a0 100644 (file)
                <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 (file)
index 0000000..164adb2
--- /dev/null
@@ -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.*(..));
+}
+