ソースを参照

fix NPE in mixing style (can be in concrete aspect from code style as well)

tags/POST_MEMORY_CHANGES
avasseur 18年前
コミット
3509955887

+ 1
- 1
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;}
}


+ 3
- 0
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

+ 42
- 0
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 <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
*/
//@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() {
}
}



+ 4
- 0
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");
}

}

+ 8
- 0
tests/src/org/aspectj/systemtest/ajc150/ataspectj/syntax.xml ファイルの表示

@@ -173,4 +173,12 @@
</compile>
</ajc-test>


<ajc-test dir="java5/ataspectj" title="AbstractInherited">
<compile files="ataspectj/bugs/AbstractInherited.java"
options="-1.5 -showWeaveInfo">
<message kind="weave" text="Join point "/>
</compile>
</ajc-test>

</suite>

+ 8
- 5
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(

読み込み中…
キャンセル
保存