Browse Source

fix for Bugzilla Bug 72157

 	declare soft can cause programs with invalid exception behaviour to be generated
tags/V1_2_1
acolyer 20 years ago
parent
commit
eca1429e79

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

@@ -33,6 +33,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.IProblemFactory;
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Argument;
import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall;
import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
@@ -74,6 +75,12 @@ public class AjProblemReporter extends ProblemReporter {
if (!factory.getWorld().getDeclareSoft().isEmpty()) {
Shadow callSite = factory.makeShadow(location, referenceContext);
Shadow enclosingExec = factory.makeShadow(referenceContext);
// PR 72157 - calls to super / this within a constructor are not part of the cons join point.
if ((callSite == null) && (enclosingExec.getKind() == Shadow.ConstructorExecution)
&& (location instanceof ExplicitConstructorCall)) {
super.unhandledException(exceptionType, location);
return;
}
// System.err.println("about to show error for unhandled exception: " + new String(exceptionType.sourceName()) +
// " at " + location + " in " + referenceContext);

+ 1
- 1
tests/bugs/ConvertToUnchecked.java View File

@@ -35,7 +35,7 @@ class PersistenceException extends RuntimeException


class Root {
Root(String s) throws IOException {
Root(String s) /*throws IOException*/ {
}
}


+ 35
- 0
tests/bugs/PR72157.java View File

@@ -0,0 +1,35 @@
public class PR72157 {
public PR72157() throws Exception {
throw new Exception();
}

public static void main(String[] args) {
new SCE2();
}
}

class SCE2 extends PR72157 {
public SCE2() {
super(); // CE L13?
}
}

class Foo {
public Foo() throws Exception {
throw new Exception();
}
}

class Goo {
public Goo() {
new Foo();
}
}

aspect SCEAspect {
declare soft: Exception: within(SCE2);
declare soft: Exception: within(Goo);
}

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

@@ -306,5 +306,8 @@ public class Ajc121Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("around advice throws java.lang.VerifyError at runtime");
}
public void test057_decSoftWithSuper() {
runTest("declare soft can cause programs with invalid exception behaviour to be generated");
}
}


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

@@ -449,3 +449,10 @@
<compile files="ArrayCloning.java"/>
<run class="ArrayCloning"/>
</ajc-test>

<ajc-test dir="bugs" pr="72157"
title="declare soft can cause programs with invalid exception behaviour to be generated">
<compile files="PR72157.java">
<message kind="error" line="13" text="Unhandled"/>
</compile>
</ajc-test>

Loading…
Cancel
Save