From: wisberg Date: Wed, 11 May 2005 09:33:34 +0000 (+0000) Subject: src -> java5-src; note test target runs AsmModuleTests, not Loadtime5ModuleTests... X-Git-Tag: PRE_ANDY~338 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=21dda4b6e9e0111c53881bcfedc9833d63fee5a6;p=aspectj.git src -> java5-src; note test target runs AsmModuleTests, not Loadtime5ModuleTests - prior bug. See newbuild.xml. --- diff --git a/loadtime5/build.xml b/loadtime5/build.xml index 97a1e2d99..41c07c1f1 100644 --- a/loadtime5/build.xml +++ b/loadtime5/build.xml @@ -28,7 +28,7 @@ - + diff --git a/loadtime5/java5-src/org/aspectj/weaver/loadtime/Agent.java b/loadtime5/java5-src/org/aspectj/weaver/loadtime/Agent.java new file mode 100644 index 000000000..bb3489841 --- /dev/null +++ b/loadtime5/java5-src/org/aspectj/weaver/loadtime/Agent.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * 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 org.aspectj.weaver.loadtime; + +import java.lang.instrument.Instrumentation; +import java.lang.instrument.ClassFileTransformer; + +/** + * Java 1.5 preMain agent to hook in the class pre processor + * Can be used with -javaagent:aspectjweaver.jar + * + * @author Alexandre Vasseur + */ +public class Agent { + + /** + * The instrumentation instance + */ + private static Instrumentation s_instrumentation; + + /** + * The ClassFileTransformer wrapping the weaver + */ + private static ClassFileTransformer s_transformer = new ClassPreProcessorAgentAdapter(); + + /** + * JSR-163 preMain Agent entry method + * + * @param options + * @param instrumentation + */ + public static void premain(String options, Instrumentation instrumentation) { + s_instrumentation = instrumentation; + s_instrumentation.addTransformer(s_transformer); + } + + /** + * Returns the Instrumentation system level instance + */ + public static Instrumentation getInstrumentation() { + if (s_instrumentation == null) { + throw new UnsupportedOperationException("Java 5 was not started with preMain -javaagent for AspectJ"); + } + return s_instrumentation; + } + +} diff --git a/loadtime5/java5-src/org/aspectj/weaver/loadtime/ClassPreProcessorAgentAdapter.java b/loadtime5/java5-src/org/aspectj/weaver/loadtime/ClassPreProcessorAgentAdapter.java new file mode 100644 index 000000000..9e81bd13d --- /dev/null +++ b/loadtime5/java5-src/org/aspectj/weaver/loadtime/ClassPreProcessorAgentAdapter.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * 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 org.aspectj.weaver.loadtime; + +import org.aspectj.weaver.loadtime.Aj; +import org.aspectj.weaver.loadtime.ClassPreProcessor; + +import java.lang.instrument.ClassFileTransformer; +import java.lang.instrument.IllegalClassFormatException; +import java.security.ProtectionDomain; + +/** + * Java 1.5 adapter for class pre processor + * + * @author Alexandre Vasseur + */ +public class ClassPreProcessorAgentAdapter implements ClassFileTransformer { + + /** + * Concrete preprocessor. + */ + private static ClassPreProcessor s_preProcessor; + + static { + try { + s_preProcessor = new Aj(); + s_preProcessor.initialize(); + } catch (Exception e) { + throw new ExceptionInInitializerError("could not initialize JSR163 preprocessor due to: " + e.toString()); + } + } + + /** + * Weaving delegation + * + * @param loader the defining class loader + * @param className the name of class beeing loaded + * @param classBeingRedefined when hotswap is called + * @param protectionDomain + * @param bytes the bytecode before weaving + * @return the weaved bytecode + */ + public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, + ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException { + if (classBeingRedefined == null) { + return s_preProcessor.preProcess(className, bytes, loader); + } else { + //FIXME av for now we skip hotswap. We should think more about that + new Exception("AspectJ5 does not weave hotswapped class (" + className + ")").printStackTrace(); + return bytes; + } + } + +} diff --git a/loadtime5/java5-testsrc/Loadtime515ModuleTests.java b/loadtime5/java5-testsrc/Loadtime515ModuleTests.java new file mode 100644 index 000000000..91d3aece8 --- /dev/null +++ b/loadtime5/java5-testsrc/Loadtime515ModuleTests.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * 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: (See CVS logs) + * + *******************************************************************************/ + +import org.aspectj.weaver.loadtime.LoadtimeTests; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + */ +public class Loadtime515ModuleTests extends TestCase { + + public static Test suite() { + TestSuite suite = new TestSuite(Loadtime515ModuleTests.class.getName()); + suite.addTestSuite(LoadtimeTests.class); + return suite; + } + +} diff --git a/loadtime5/java5-testsrc/org/aspectj/weaver/loadtime/LoadtimeTests.java b/loadtime5/java5-testsrc/org/aspectj/weaver/loadtime/LoadtimeTests.java new file mode 100644 index 000000000..f777b7ff5 --- /dev/null +++ b/loadtime5/java5-testsrc/org/aspectj/weaver/loadtime/LoadtimeTests.java @@ -0,0 +1,26 @@ +/* ******************************************************************* + * 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: + * Wes Isberg initial implementation + * ******************************************************************/ + + +package org.aspectj.weaver.loadtime; + +import java.lang.instrument.Instrumentation; + +import junit.framework.TestCase; + +public class LoadtimeTests extends TestCase { + + public void testPremain() throws Exception { + Class[] parmTypes = {String.class, Instrumentation.class }; + assertNotNull(Agent.class.getMethod("premain", parmTypes)); + } +} diff --git a/loadtime5/newbuild.xml b/loadtime5/newbuild.xml new file mode 100644 index 000000000..a2a3e6243 --- /dev/null +++ b/loadtime5/newbuild.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/loadtime5/src/org/aspectj/weaver/loadtime/Agent.java b/loadtime5/src/org/aspectj/weaver/loadtime/Agent.java deleted file mode 100644 index bb3489841..000000000 --- a/loadtime5/src/org/aspectj/weaver/loadtime/Agent.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * 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 org.aspectj.weaver.loadtime; - -import java.lang.instrument.Instrumentation; -import java.lang.instrument.ClassFileTransformer; - -/** - * Java 1.5 preMain agent to hook in the class pre processor - * Can be used with -javaagent:aspectjweaver.jar - * - * @author Alexandre Vasseur - */ -public class Agent { - - /** - * The instrumentation instance - */ - private static Instrumentation s_instrumentation; - - /** - * The ClassFileTransformer wrapping the weaver - */ - private static ClassFileTransformer s_transformer = new ClassPreProcessorAgentAdapter(); - - /** - * JSR-163 preMain Agent entry method - * - * @param options - * @param instrumentation - */ - public static void premain(String options, Instrumentation instrumentation) { - s_instrumentation = instrumentation; - s_instrumentation.addTransformer(s_transformer); - } - - /** - * Returns the Instrumentation system level instance - */ - public static Instrumentation getInstrumentation() { - if (s_instrumentation == null) { - throw new UnsupportedOperationException("Java 5 was not started with preMain -javaagent for AspectJ"); - } - return s_instrumentation; - } - -} diff --git a/loadtime5/src/org/aspectj/weaver/loadtime/ClassPreProcessorAgentAdapter.java b/loadtime5/src/org/aspectj/weaver/loadtime/ClassPreProcessorAgentAdapter.java deleted file mode 100644 index 9e81bd13d..000000000 --- a/loadtime5/src/org/aspectj/weaver/loadtime/ClassPreProcessorAgentAdapter.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * 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 org.aspectj.weaver.loadtime; - -import org.aspectj.weaver.loadtime.Aj; -import org.aspectj.weaver.loadtime.ClassPreProcessor; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.IllegalClassFormatException; -import java.security.ProtectionDomain; - -/** - * Java 1.5 adapter for class pre processor - * - * @author Alexandre Vasseur - */ -public class ClassPreProcessorAgentAdapter implements ClassFileTransformer { - - /** - * Concrete preprocessor. - */ - private static ClassPreProcessor s_preProcessor; - - static { - try { - s_preProcessor = new Aj(); - s_preProcessor.initialize(); - } catch (Exception e) { - throw new ExceptionInInitializerError("could not initialize JSR163 preprocessor due to: " + e.toString()); - } - } - - /** - * Weaving delegation - * - * @param loader the defining class loader - * @param className the name of class beeing loaded - * @param classBeingRedefined when hotswap is called - * @param protectionDomain - * @param bytes the bytecode before weaving - * @return the weaved bytecode - */ - public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, - ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException { - if (classBeingRedefined == null) { - return s_preProcessor.preProcess(className, bytes, loader); - } else { - //FIXME av for now we skip hotswap. We should think more about that - new Exception("AspectJ5 does not weave hotswapped class (" + className + ")").printStackTrace(); - return bytes; - } - } - -} diff --git a/loadtime5/testsrc/Loadtime5ModuleTests.java b/loadtime5/testsrc/Loadtime5ModuleTests.java new file mode 100644 index 000000000..231c80df6 --- /dev/null +++ b/loadtime5/testsrc/Loadtime5ModuleTests.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * 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: (See CVS logs) + * + *******************************************************************************/ + +import org.aspectj.testing.util.TestUtil; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + */ +public class Loadtime5ModuleTests extends TestCase { + + public static Test suite() { + TestSuite suite = new TestSuite(Loadtime5ModuleTests.class.getName()); + TestUtil.loadTestsReflectively(suite, "Loadtime515ModuleTests", true); + return suite; + } + public static void main(String[] args) { + junit.textui.TestRunner.main(new String[] {Loadtime5ModuleTests.class.getName()}); + } + +}