]> source.dussan.org Git - aspectj.git/commitdiff
fix for Bugzilla Bug 72157
authoracolyer <acolyer>
Wed, 8 Sep 2004 12:04:49 +0000 (12:04 +0000)
committeracolyer <acolyer>
Wed, 8 Sep 2004 12:04:49 +0000 (12:04 +0000)
  declare soft can cause programs with invalid exception behaviour to be generated

org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
tests/bugs/ConvertToUnchecked.java
tests/bugs/PR72157.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml

index faa48170a5bd0de941d13eacfdeceb0a1afb244d..61270166dfcab90ef6bcbbbbd3d7ded219551635 100644 (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);         
                        
index eb71e9f7bde14918bdf0d2f7a95d6bc39a4134ec..966bc69d3ae50ba6b744ef36718d6e95f0413d10 100644 (file)
@@ -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 (file)
index 0000000..39120f5
--- /dev/null
@@ -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
index be719226649291100d43e87c7171d8dd8f057f72..2ea8c32213aadb5a232b411aa5fdebe061d16e84 100644 (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");
+    }
 }
 
index ddb48afb5af9ebd0cade7894d6d484fb53f64532..ba4c2cfc8759b9101d4ef9e9df894afb7e1b96a8 100644 (file)
                <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>
\ No newline at end of file