You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2010/12/02 20:55:28 UTC
svn commit: r1041556 - in
/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook:
META-INF/MANIFEST.MF src/testweavinghook/MyWeavingHook.java
src/testweavinghook/TCCLSetterVisitor.java
Author: davidb
Date: Thu Dec 2 19:55:27 2010
New Revision: 1041556
URL: http://svn.apache.org/viewvc?rev=1041556&view=rev
Log:
Adding initial use of ASM to SPI-Fly.
This commit only contains a dummy transformation.
Added:
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/TCCLSetterVisitor.java
Modified:
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/META-INF/MANIFEST.MF
incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/MyWeavingHook.java
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/META-INF/MANIFEST.MF?rev=1041556&r1=1041555&r2=1041556&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/META-INF/MANIFEST.MF (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/META-INF/MANIFEST.MF Thu Dec 2 19:55:27 2010
@@ -6,6 +6,7 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Activator: testweavinghook.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Import-Package: org.osgi.framework;version="1.3.0",
+Import-Package: org.objectweb.asm;version="3.2.0",
+ org.osgi.framework;version="1.3.0",
org.osgi.framework.hooks.weaving;version="1.0.0",
org.osgi.framework.wiring;version="1.0.0"
Modified: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/MyWeavingHook.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/MyWeavingHook.java?rev=1041556&r1=1041555&r2=1041556&view=diff
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/MyWeavingHook.java (original)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/MyWeavingHook.java Thu Dec 2 19:55:27 2010
@@ -22,6 +22,8 @@ import java.io.IOException;
import java.net.URL;
import java.util.List;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
import org.osgi.framework.hooks.weaving.WeavingHook;
import org.osgi.framework.hooks.weaving.WovenClass;
import org.osgi.framework.wiring.BundleWiring;
@@ -30,7 +32,17 @@ public class MyWeavingHook implements We
@Override
public void weave(WovenClass wovenClass) {
- System.out.println("*** WovenClass: " + wovenClass.getClassName());
+ if (wovenClass.getBundleWiring().getBundle().getSymbolicName().equals("MyTestBundle"))
+ {
+ System.out.println("*** WovenClass: " + wovenClass.getClassName());
+
+ ClassReader cr = new ClassReader(wovenClass.getBytes());
+ ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
+ TCCLSetterVisitor tsv = new TCCLSetterVisitor(cw);
+ cr.accept(tsv, 0);
+ wovenClass.setBytes(cw.toByteArray());
+ }
+ /*
if (wovenClass.getClassName().startsWith("mytestbundle")) {
BundleWiring bw = wovenClass.getBundleWiring();
String fileName = wovenClass.getClassName().replace('.', '/') + ".class";
@@ -47,6 +59,6 @@ public class MyWeavingHook implements We
e.printStackTrace();
}
}
- }
+ }*/
}
}
Added: incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/TCCLSetterVisitor.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/TCCLSetterVisitor.java?rev=1041556&view=auto
==============================================================================
--- incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/TCCLSetterVisitor.java (added)
+++ incubator/aries/trunk/spi-fly/contrib/pilot_using_weavinghook/TestWeavingHook/src/testweavinghook/TCCLSetterVisitor.java Thu Dec 2 19:55:27 2010
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package testweavinghook;
+
+import java.util.Arrays;
+
+import org.objectweb.asm.ClassAdapter;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.MethodAdapter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+public class TCCLSetterVisitor extends ClassAdapter implements ClassVisitor, Opcodes {
+
+ public TCCLSetterVisitor(ClassVisitor cv) {
+ super(cv);
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int access, String name, String desc,
+ String signature, String[] exceptions) {
+ System.out.println("@@@ " + access + ": " + name + "#" + desc + "#" + signature + "~" + Arrays.toString(exceptions));
+
+ MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
+ return new TCCLSetterMethodVisitor(mv);
+ }
+
+ private static class TCCLSetterMethodVisitor extends MethodAdapter implements MethodVisitor
+ {
+ public TCCLSetterMethodVisitor(MethodVisitor mv) {
+ super(mv);
+ }
+
+ @Override
+ public void visitMethodInsn(int opcode, String owner, String name,
+ String desc) {
+ System.out.println("### " + opcode + ": " + owner + "#" + name + "#" + desc);
+
+ if (opcode == INVOKESTATIC &&
+ "java/util/ServiceLoader".equals(owner) &&
+ "load".equals(name)) {
+ System.out.println("+++ Gotcha!");
+
+ mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
+ mv.visitLdcInsn("Bleeeeeh");
+ mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
+ }
+
+ super.visitMethodInsn(opcode, owner, name, desc);
+ }
+ }
+}