From: avasseur Date: Mon, 19 Dec 2005 15:06:51 +0000 (+0000) Subject: fix NPE in mixing style (can be in concrete aspect from code style as well) X-Git-Tag: POST_MEMORY_CHANGES~211 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3509955887685ee99cf2772426bcf74cd3a6e5cb;p=aspectj.git fix NPE in mixing style (can be in concrete aspect from code style as well) --- diff --git a/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsReweavableTest.java b/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsReweavableTest.java index fad0d8488..1636328ab 100644 --- a/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsReweavableTest.java +++ b/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsReweavableTest.java @@ -26,7 +26,7 @@ public class DeclareParentsImplementsReweavableTest extends TestCase { static interface I1 { int do1(); } - static class Imp1 implements I1 { + public static class Imp1 implements I1 { public int do1() {return 1;} } diff --git a/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsTest.java b/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsTest.java index b4cc9ed4e..8ce1e1915 100644 --- a/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsTest.java +++ b/tests/java5/ataspectj/ataspectj/DeclareParentsImplementsTest.java @@ -41,6 +41,9 @@ public class DeclareParentsImplementsTest extends TestCase { } static class Implementation implements Introduced { + public Implementation(int i) {} + public Implementation() {} + public void intro() { log("intro-"+field1); // we cannot copy the raw bytecode as there might be super.* calls, and other OO stuff diff --git a/tests/java5/ataspectj/ataspectj/bugs/AbstractInherited.java b/tests/java5/ataspectj/ataspectj/bugs/AbstractInherited.java new file mode 100644 index 000000000..397c1ad18 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/bugs/AbstractInherited.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2005 Contributors. + * All rights reserved. + * This program and the accompanying materials are made available + * under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution and is available at + * http://eclipse.org/legal/epl-v10.html + * + * Contributors: + * Alexandre Vasseur initial implementation + *******************************************************************************/ +package ataspectj.bugs; + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Around; + +/** + * @author Alexandre Vasseur + */ +//@Aspect +public abstract aspect AbstractInherited { + + //@Around("execution(* foo(..))") + //public Object around() { + // return null; + //} + + void around(): execution(* foo(..)) { + } + +} + +@Aspect +class Sub extends AbstractInherited { +} + +class C { + void foo() { + } +} + + diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java index c462cdea8..4a8635081 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java @@ -133,4 +133,8 @@ public class AtAjSyntaxTests extends XMLBasedAjcTestCase { runTest("AbstractAspectNPE"); } + public void testAbstractInherited() { + runTest("AbstractInherited"); + } + } diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/syntax.xml b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/syntax.xml index 015d8c1dc..09b3c6d78 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/syntax.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/syntax.xml @@ -173,4 +173,12 @@ + + + + + + + \ No newline at end of file diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java index e6f0d88c8..5d6a5fcb6 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java @@ -454,11 +454,14 @@ public class BcelAdvice extends Advice { } } else if (hasExtraParameter()) { previousIsClosure = false; - extraVar.appendLoadAndConvert( - il, - fact, - getExtraParameterType().resolve(world)); - } else { + //extra var can be null here (@Aj aspect extends abstract code style, advice in code style) + if (extraVar != null) { + extraVar.appendLoadAndConvert( + il, + fact, + getExtraParameterType().resolve(world)); + } + } else { previousIsClosure = false; getConcreteAspect().getWorld().getMessageHandler().handleMessage( new Message(