瀏覽代碼

fix for pr 48522, not warning on (un)softened exception

tags/mostlyLastEclipse2xTree_20040112
acolyer 20 年之前
父節點
當前提交
01055e854d

+ 8
- 0
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()) {

+ 13
- 0
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>

+ 15
- 0
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.*(..));
}


Loading…
取消
儲存