diff options
14 files changed, 262 insertions, 10 deletions
diff --git a/docs/adk15ProgGuideDB/ltw.xml b/docs/adk15ProgGuideDB/ltw.xml index cbbdef913..27d55b746 100644 --- a/docs/adk15ProgGuideDB/ltw.xml +++ b/docs/adk15ProgGuideDB/ltw.xml @@ -353,7 +353,11 @@ <literal>org.aspectj.bridge.IMessageHandler</literal> and that is visible from where the <literal>aop.xml</literal> is packed. If more than one such options are used, - the first occurence only is taken into account.</entry> + the first occurence only is taken into account. + You must also be very cautious about using a custom handler since it is likely that it will be invoked + (as well as all its third parties) while the weaving is done, which means that f.e. it cannot be weaved + by the aspects that are configured within the same deployment unit. + </entry> </row> </tbody> </tgroup> diff --git a/loadtime/src/org/aspectj/weaver/loadtime/DefaultMessageHandler.java b/loadtime/src/org/aspectj/weaver/loadtime/DefaultMessageHandler.java index e099dee7c..80d6e23e3 100644 --- a/loadtime/src/org/aspectj/weaver/loadtime/DefaultMessageHandler.java +++ b/loadtime/src/org/aspectj/weaver/loadtime/DefaultMessageHandler.java @@ -25,10 +25,14 @@ public class DefaultMessageHandler implements IMessageHandler { boolean showWarn = true; public boolean handleMessage(IMessage message) throws AbortException { - if (message.getKind().isSameOrLessThan(IMessage.INFO)) { - return SYSTEM_OUT.handleMessage(message); - } else { - return SYSTEM_ERR.handleMessage(message); + if (isIgnoring(message.getKind())) { + return false; + } else { + if (message.getKind().isSameOrLessThan(IMessage.INFO)) { + return SYSTEM_OUT.handleMessage(message); + } else { + return SYSTEM_ERR.handleMessage(message); + } } } diff --git a/loadtime/src/org/aspectj/weaver/loadtime/Options.java b/loadtime/src/org/aspectj/weaver/loadtime/Options.java index e6c502d10..507afe990 100644 --- a/loadtime/src/org/aspectj/weaver/loadtime/Options.java +++ b/loadtime/src/org/aspectj/weaver/loadtime/Options.java @@ -133,10 +133,6 @@ public class Options { public WeaverOption() { messageHandler = new DefaultMessageHandler();//default - - //temp alex - messageHandler.dontIgnore(IMessage.WEAVEINFO); - messageHandler.dontIgnore(IMessage.INFO); } } } diff --git a/tests/java5/ataspectj/ajc-ant.xml b/tests/java5/ataspectj/ajc-ant.xml index 5cdd58ebe..8381b6135 100644 --- a/tests/java5/ataspectj/ajc-ant.xml +++ b/tests/java5/ataspectj/ajc-ant.xml @@ -77,6 +77,28 @@ <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/> <jvmarg value="-Daj5.def=ataspectj/ltwreweavable/aop-ltwreweavable.xml"/> </java> + </target> + <target name="ltwlog.LTWLog"> + <javac destdir="${aj.sandbox}" classpathref="aj.path" + srcdir="${basedir}" + includes="ataspectj/ltwlog/*" + debug="true"> + </javac> + <java fork="yes" classname="ataspectj.ltwlog.MainSilent" failonerror="yes"> + <classpath refid="aj.path"/> + <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/> + <jvmarg value="-Daj5.def=ataspectj/ltwlog/aop-silent.xml"/> + </java> + <java fork="yes" classname="ataspectj.ltwlog.MainVerbose" failonerror="yes"> + <classpath refid="aj.path"/> + <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/> + <jvmarg value="-Daj5.def=ataspectj/ltwlog/aop-verbose.xml"/> + </java> + <java fork="yes" classname="ataspectj.ltwlog.MainVerboseAndShow" failonerror="yes"> + <classpath refid="aj.path"/> + <jvmarg value="-javaagent:${aj.root}/lib/test/loadtime5.jar"/> + <jvmarg value="-Daj5.def=ataspectj/ltwlog/aop-verboseandshow.xml"/> + </java> </target> </project>
\ No newline at end of file diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/Aspect1.java b/tests/java5/ataspectj/ataspectj/ltwlog/Aspect1.java new file mode 100644 index 000000000..6accd8624 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/Aspect1.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * 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.ltwlog; + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.JoinPoint; + +/** + * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> + */ +@Aspect +public class Aspect1 { + + @Before("execution(* ataspectj.ltwlog.Main*.target())") + public void before(JoinPoint jp) { + System.out.println(jp.toShortString()); + } +} diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/MainSilent.java b/tests/java5/ataspectj/ataspectj/ltwlog/MainSilent.java new file mode 100644 index 000000000..ecf404e66 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/MainSilent.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * 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.ltwlog; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> + */ +public class MainSilent { + + void target() {}; + + public static void main(String args[]) throws Throwable { + new MainSilent().target(); + if (!MessageHolder.startsAs(Arrays.asList(new String[]{})) || MessageHolder.size()>0) { + MessageHolder.dump(); + throw new RuntimeException("failed"); + } + } + + +} diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/MainVerbose.java b/tests/java5/ataspectj/ataspectj/ltwlog/MainVerbose.java new file mode 100644 index 000000000..feda514ff --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/MainVerbose.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * 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.ltwlog; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> + */ +public class MainVerbose { + + void target() {}; + + public static void main(String args[]) throws Throwable { + new MainVerbose().target(); + if (!MessageHolder.startsAs(Arrays.asList(new String[]{ + "info weaving 'ataspectj/ltwlog/MainVerbose'", + "info weaving 'ataspectj/ltwlog/Aspect1'"}))) { + MessageHolder.dump(); + throw new RuntimeException("failed"); + } + } + + +} diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/MainVerboseAndShow.java b/tests/java5/ataspectj/ataspectj/ltwlog/MainVerboseAndShow.java new file mode 100644 index 000000000..232f1ab31 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/MainVerboseAndShow.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * 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.ltwlog; + +import java.util.ArrayList; +import java.util.Arrays; + +/** + * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> + */ +public class MainVerboseAndShow { + + void target() {}; + + public static void main(String args[]) throws Throwable { + new MainVerboseAndShow().target(); + if (!MessageHolder.startsAs(Arrays.asList(new String[]{ + "info weaving 'ataspectj/ltwlog/MainVerboseAndShow'", + "weaveinfo Type 'ataspectj.ltwlog.MainVerboseAndShow' (MainVerboseAndShow.java:22) advised by before advice from 'ataspectj.ltwlog.Aspect1' (Aspect1.java)", + "info weaving 'ataspectj/ltwlog/Aspect1'"}))) { + MessageHolder.dump(); + throw new RuntimeException("failed"); + } + } + + +} diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/MessageHolder.java b/tests/java5/ataspectj/ataspectj/ltwlog/MessageHolder.java new file mode 100644 index 000000000..4f245ab35 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/MessageHolder.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * 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.ltwlog; + +import org.aspectj.bridge.IMessageHolder; +import org.aspectj.bridge.IMessage; +import org.aspectj.bridge.AbortException; +import org.aspectj.weaver.loadtime.DefaultMessageHandler; + +import java.util.ArrayList; +import java.util.List; +import java.util.Iterator; + +/** + * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a> + */ +public class MessageHolder extends DefaultMessageHandler { + + static List s_messages = new ArrayList(); + + public MessageHolder() { + } + + public boolean handleMessage(IMessage message) throws AbortException { + if (isIgnoring(message.getKind())) { + return false; + } else { + s_messages.add(message.toString()); + return true; + } + } + + public static boolean startsAs(List messages) { + if (s_messages.size() < messages.size()) + return false; + + int i = 0; + for (Iterator iterator = messages.iterator(); iterator.hasNext();) { + String s = (String) iterator.next(); + if (!((String)s_messages.get(i)).startsWith(s)) { + return false; + } + i++; + } + return true; + } + + public static int size() { + return s_messages.size(); + } + + public static void dump() { + for (Iterator iterator = s_messages.iterator(); iterator.hasNext();) { + String s = (String) iterator.next(); + System.err.println("Holds:" + s); + } + } +} diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/aop-silent.xml b/tests/java5/ataspectj/ataspectj/ltwlog/aop-silent.xml new file mode 100644 index 000000000..6e320f1d2 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/aop-silent.xml @@ -0,0 +1,6 @@ +<aspectj> + <weaver options="-XmessageHandlerClass:ataspectj.ltwlog.MessageHolder"/> + <aspects> + <aspect name="ataspectj.ltwlog.Aspect1"/> + </aspects> +</aspectj>
\ No newline at end of file diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/aop-verbose.xml b/tests/java5/ataspectj/ataspectj/ltwlog/aop-verbose.xml new file mode 100644 index 000000000..c7756c8e5 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/aop-verbose.xml @@ -0,0 +1,6 @@ +<aspectj> + <weaver options="-XmessageHandlerClass:ataspectj.ltwlog.MessageHolder -verbose"/> + <aspects> + <aspect name="ataspectj.ltwlog.Aspect1"/> + </aspects> +</aspectj>
\ No newline at end of file diff --git a/tests/java5/ataspectj/ataspectj/ltwlog/aop-verboseandshow.xml b/tests/java5/ataspectj/ataspectj/ltwlog/aop-verboseandshow.xml new file mode 100644 index 000000000..11ace2a93 --- /dev/null +++ b/tests/java5/ataspectj/ataspectj/ltwlog/aop-verboseandshow.xml @@ -0,0 +1,6 @@ +<aspectj> + <weaver options="-XmessageHandlerClass:ataspectj.ltwlog.MessageHolder -showWeaveInfo -verbose"/> + <aspects> + <aspect name="ataspectj.ltwlog.Aspect1"/> + </aspects> +</aspectj>
\ No newline at end of file diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjLTWTests.java b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjLTWTests.java index 5b8a25982..e414c63b4 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjLTWTests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjLTWTests.java @@ -74,4 +74,8 @@ public class AtAjLTWTests extends XMLBasedAjcTestCase { runTest("Ajc Aspect1 LTW Aspect2 -Xreweavable"); } + public void testLTWLog() { + runTest("LTW Log"); + } + } diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/ltw.xml b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/ltw.xml index 7749ae32b..af74f5b81 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/ltw.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/ltw.xml @@ -93,5 +93,10 @@ outjar="main1.jar"/> <ant file="ajc-ant.xml" target="ltw.Aspect2MainTest" verbose="true"/> </ajc-test> - + + <ajc-test dir="java5/ataspectj" title="LTW Log"> + <ant file="ajc-ant.xml" target="ltwlog.LTWLog" verbose="true"/> + </ajc-test> + + </suite>
\ No newline at end of file |