]> source.dussan.org Git - aspectj.git/commitdiff
fix and test for 123901. test for 125475 (commented out)
authoraclement <aclement>
Sun, 29 Jan 2006 10:12:10 +0000 (10:12 +0000)
committeraclement <aclement>
Sun, 29 Jan 2006 10:12:10 +0000 (10:12 +0000)
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AccessForInlineVisitor.java
tests/bugs151/pr123901/A.java [new file with mode: 0644]
tests/bugs151/pr123901/B.java [new file with mode: 0644]
tests/bugs151/pr125475/TestEmptyPointcutAtAspect.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc151/Ajc151Tests.java
tests/src/org/aspectj/systemtest/ajc151/ajc151.xml

index 657b3b52098b7d3f248e816c24499cfad33bf396..fc6d8a5bb89b0125b292ef590b6a7925668f6e41 100644 (file)
@@ -41,6 +41,7 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BlockScope;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding;
+import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ProblemFieldBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
 import org.aspectj.org.eclipse.jdt.internal.compiler.lookup.VariableBinding;
@@ -96,11 +97,12 @@ public class AccessForInlineVisitor extends ASTVisitor {
                                //!!! understand and fix this case later
                                receiverType = ref.otherBindings[0].declaringClass;
                        }
-                       
-                       for (int i=0, len=ref.otherBindings.length; i < len; i++) {
+                       boolean cont = true; // don't continue if we come across a problem
+                       for (int i=0, len=ref.otherBindings.length; i < len && cont; i++) {
                                FieldBinding binding = ref.otherBindings[i];
                                ref.otherBindings[i] = getAccessibleField(binding, receiverType);
-                               receiverType = binding.type;
+                               if (!(binding instanceof ProblemFieldBinding))  receiverType = binding.type;
+                               else                                                cont=false;
                        }
                }
        }
diff --git a/tests/bugs151/pr123901/A.java b/tests/bugs151/pr123901/A.java
new file mode 100644 (file)
index 0000000..5ed3cb7
--- /dev/null
@@ -0,0 +1,5 @@
+package a;
+
+public class A {
+   public void x(){} 
+}
diff --git a/tests/bugs151/pr123901/B.java b/tests/bugs151/pr123901/B.java
new file mode 100644 (file)
index 0000000..df8baf0
--- /dev/null
@@ -0,0 +1,8 @@
+package a;
+public aspect B {
+   void around():call(void *(..)){ 
+      A a = new A();
+      a.A.a.x(); // This line raises the NPE    
+      proceed();    
+   }
+}
diff --git a/tests/bugs151/pr125475/TestEmptyPointcutAtAspect.java b/tests/bugs151/pr125475/TestEmptyPointcutAtAspect.java
new file mode 100644 (file)
index 0000000..12334f4
--- /dev/null
@@ -0,0 +1,6 @@
+@Aspect
+public class TestEmptyPointcutAtAspect {
+
+       @Pointcut("")
+       protected void scope () {}
+}
index 5dda12f07bc6082dbc9350e2cba15c0e11b0535c..79ff78c44daac1eee803a83c9b3a2c755bafa6d8 100644 (file)
@@ -33,6 +33,8 @@ public class Ajc151Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
   public void testCallInheritedGenericMethod_pr124999() { runTest("calling inherited generic method from around advice");}
   public void testIncorrectlyReferencingPointcuts_pr122452()    { runTest("incorrectly referencing pointcuts");}
   public void testIncorrectlyReferencingPointcuts_pr122452_2()    { runTest("incorrectly referencing pointcuts - 2");}
+  //public void testEmptyPointcut_pr125475()    { runTest("empty pointcut in atAJ");}
+  public void testInlinevisitorNPE_pr123901() { runTest("inlinevisitor NPE");}
   
   public void testMixingNumbersOfTypeParameters_pr125080()   { 
          runTest("mixing numbers of type parameters");    
index f3d9c5b845f3737530b807b4fde68982965362fc..212ac55894e299c8d2763fb9c99ade9bd48c350c 100644 (file)
@@ -5,6 +5,12 @@
     
     <ajc-test dir="bugs151" title="member types in generic types">
         <compile files="pr122458.aj" options="-1.5 -emacssym"/>
+    </ajc-test>  
+    
+    <ajc-test dir="bugs151/pr123901" title="inlinevisitor NPE">
+        <compile files="A.java,B.java" options="-1.5">
+          <message kind="error" line="5" text="a.A cannot be resolved or is not a field"/>
+        </compile>
     </ajc-test>
     
     <ajc-test dir="bugs151" title="member types in generic types - 2">
         <compile files="pkg/C.java,pkg/A.aj" options="-emacssym"/>
     </ajc-test>
 
+    <ajc-test dir="bugs151/pr125475" title="empty pointcut in atAJ">
+        <compile files="TestEmptyPointcutAtAspect.java" options="-1.5"/>
+    </ajc-test>
+
 </suite>
\ No newline at end of file