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;
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()) {
<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>
--- /dev/null
+
+// 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.*(..));
+}
+