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