From eca1429e79b3dc55c1f93ffbadb3e50eb9808d9c Mon Sep 17 00:00:00 2001 From: acolyer Date: Wed, 8 Sep 2004 12:04:49 +0000 Subject: fix for Bugzilla Bug 72157 declare soft can cause programs with invalid exception behaviour to be generated --- .../compiler/problem/AjProblemReporter.java | 7 +++++ tests/bugs/ConvertToUnchecked.java | 2 +- tests/bugs/PR72157.java | 35 ++++++++++++++++++++++ .../org/aspectj/systemtest/ajc121/Ajc121Tests.java | 3 ++ .../org/aspectj/systemtest/ajc121/ajc121-tests.xml | 7 +++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/PR72157.java 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 faa48170a..61270166d 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 @@ -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); diff --git a/tests/bugs/ConvertToUnchecked.java b/tests/bugs/ConvertToUnchecked.java index eb71e9f7b..966bc69d3 100644 --- a/tests/bugs/ConvertToUnchecked.java +++ b/tests/bugs/ConvertToUnchecked.java @@ -35,7 +35,7 @@ class PersistenceException extends RuntimeException class Root { - Root(String s) throws IOException { + Root(String s) /*throws IOException*/ { } } diff --git a/tests/bugs/PR72157.java b/tests/bugs/PR72157.java new file mode 100644 index 000000000..39120f5f4 --- /dev/null +++ b/tests/bugs/PR72157.java @@ -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); +} \ No newline at end of file diff --git a/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java b/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java index be7192266..2ea8c3221 100644 --- a/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java @@ -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"); + } } diff --git a/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml b/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml index ddb48afb5..ba4c2cfc8 100644 --- a/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml +++ b/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml @@ -449,3 +449,10 @@ + + + + + + \ No newline at end of file -- cgit v1.2.3