You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:08:25 UTC

[13/50] [abbrv] zest-qi4j git commit: Core Runtime, minor: Fragment and Transient loaders gen 1.7 OpCodes only

Core Runtime, minor: Fragment and Transient loaders gen 1.7 OpCodes only

Seems fair as we now require Java 7.


Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/cf478f2f
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/cf478f2f
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/cf478f2f

Branch: refs/heads/3.0
Commit: cf478f2f608c1730a91aeef6554f0083d885623f
Parents: 3dd0f6a
Author: Paul Merlin <pa...@nosphere.org>
Authored: Thu Jun 12 15:04:28 2014 +0200
Committer: Paul Merlin <pa...@nosphere.org>
Committed: Thu Jun 12 15:04:28 2014 +0200

----------------------------------------------------------------------
 .../runtime/composite/FragmentClassLoader.java  | 62 ++++++++++++++++----
 .../runtime/composite/TransientClassLoader.java | 31 +++-------
 2 files changed, 59 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/cf478f2f/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
index 183308f..c140511 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/FragmentClassLoader.java
@@ -19,14 +19,55 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.List;
-import org.objectweb.asm.*;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
 import org.qi4j.api.entity.Lifecycle;
 import org.qi4j.api.mixin.Initializable;
 import org.qi4j.api.util.Classes;
 import org.qi4j.api.util.Methods;
 import org.qi4j.functional.Iterables;
 
-import static org.objectweb.asm.Opcodes.*;
+import static org.objectweb.asm.Opcodes.AASTORE;
+import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SUPER;
+import static org.objectweb.asm.Opcodes.ACONST_NULL;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ANEWARRAY;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.ATHROW;
+import static org.objectweb.asm.Opcodes.BIPUSH;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.DLOAD;
+import static org.objectweb.asm.Opcodes.DRETURN;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.FLOAD;
+import static org.objectweb.asm.Opcodes.FRETURN;
+import static org.objectweb.asm.Opcodes.GETFIELD;
+import static org.objectweb.asm.Opcodes.GETSTATIC;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.ICONST_1;
+import static org.objectweb.asm.Opcodes.ICONST_2;
+import static org.objectweb.asm.Opcodes.ICONST_3;
+import static org.objectweb.asm.Opcodes.ICONST_4;
+import static org.objectweb.asm.Opcodes.ICONST_5;
+import static org.objectweb.asm.Opcodes.ILOAD;
+import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.IRETURN;
+import static org.objectweb.asm.Opcodes.LLOAD;
+import static org.objectweb.asm.Opcodes.LRETURN;
+import static org.objectweb.asm.Opcodes.POP;
+import static org.objectweb.asm.Opcodes.PUTSTATIC;
+import static org.objectweb.asm.Opcodes.RETURN;
 import static org.objectweb.asm.Type.getInternalName;
 import static org.qi4j.api.util.Classes.interfacesOf;
 
@@ -34,23 +75,22 @@ import static org.qi4j.api.util.Classes.interfacesOf;
  * Generate subclasses of mixins/modifiers that implement all interfaces not in the class itself
  * and which delegates those calls to a given composite invoker.
  */
+@SuppressWarnings( "raw" )
 public class FragmentClassLoader
     extends ClassLoader
 {
-    private static int jdkVersion = Opcodes.V1_5;
+    private static final int JDK_VERSION;
     public static final String GENERATED_POSTFIX = "_Stub";
 
     static
     {
         String jdkString = System.getProperty( "java.specification.version" );
-
-        if( jdkString.equals( "1.6" ) )
-        {
-            jdkVersion = Opcodes.V1_6;
-        }
-        else if( jdkString.equals( "1.7" ) )
+        switch( jdkString )
         {
-            jdkVersion = Opcodes.V1_7;
+            case "1.7":
+            default:
+                JDK_VERSION = Opcodes.V1_7;
+                break;
         }
     }
 
@@ -117,7 +157,7 @@ public class FragmentClassLoader
         ClassWriter cw = new ClassWriter( ClassWriter.COMPUTE_MAXS );
 
         // Class definition start
-        cw.visit( jdkVersion, ACC_PUBLIC + ACC_SUPER, classSlash, null, baseClassSlash, null );
+        cw.visit( JDK_VERSION, ACC_PUBLIC + ACC_SUPER, classSlash, null, baseClassSlash, null );
 
         // Composite reference
         {

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/cf478f2f/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
index 7e9f639..f3e0aa6 100644
--- a/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
+++ b/core/runtime/src/main/java/org/qi4j/runtime/composite/TransientClassLoader.java
@@ -76,7 +76,8 @@ import static org.qi4j.api.util.Classes.interfacesOf;
 /**
  * Generate subclasses of classes used for transients. All methods delegate to CompositeInvoker.
  */
-public class TransientClassLoader
+@SuppressWarnings( "raw" )
+/* package */ final class TransientClassLoader
     extends ClassLoader
 {
     private static final int JDK_VERSION;
@@ -88,31 +89,24 @@ public class TransientClassLoader
         switch( jdkString )
         {
             case "1.7":
-                JDK_VERSION = Opcodes.V1_7;
-                break;
-            case "1.6":
-                JDK_VERSION = Opcodes.V1_6;
-                break;
-            case "1.5":
             default:
-                JDK_VERSION = Opcodes.V1_5;
+                JDK_VERSION = Opcodes.V1_7;
                 break;
         }
     }
 
-    public TransientClassLoader( ClassLoader parent )
+    /* package */ TransientClassLoader( ClassLoader parent )
     {
         super( parent );
     }
 
     @Override
-    @SuppressWarnings( "raw" )
     protected Class findClass( String name )
         throws ClassNotFoundException
     {
         if( name.endsWith( GENERATED_POSTFIX ) )
         {
-            Class baseClass = null;
+            Class baseClass;
             String baseName = name.substring( 0, name.length() - 6 );
             try
             {
@@ -152,7 +146,6 @@ public class TransientClassLoader
         return getClass().getClassLoader().loadClass( name );
     }
 
-    @SuppressWarnings( "raw" )
     public static byte[] generateClass( String name, Class baseClass )
         throws ClassNotFoundException
     {
@@ -441,7 +434,6 @@ public class TransientClassLoader
         return cw.toByteArray();
     }
 
-    @SuppressWarnings( "raw" )
     private static boolean isOverloaded( Method method, Class baseClass )
     {
         if( Modifier.isFinal( method.getModifiers() ) )
@@ -454,15 +446,13 @@ public class TransientClassLoader
         }
     }
 
-    @SuppressWarnings( "raw" )
     private static boolean isInternalQi4jMethod( Method method, Class baseClass )
     {
         return isDeclaredIn( method, Initializable.class, baseClass )
                || isDeclaredIn( method, Lifecycle.class, baseClass );
     }
 
-    @SuppressWarnings( {"raw", "unchecked"} )
-    private static boolean isDeclaredIn( Method method, Class clazz, Class baseClass )
+    private static boolean isDeclaredIn( Method method, Class<?> clazz, Class<?> baseClass )
     {
         if( !clazz.isAssignableFrom( baseClass ) )
         {
@@ -480,7 +470,6 @@ public class TransientClassLoader
         }
     }
 
-    @SuppressWarnings( "raw" )
     private static Class getInterfaceMethodDeclaration( Method method, Class clazz )
         throws NoSuchMethodException
     {
@@ -501,10 +490,9 @@ public class TransientClassLoader
         throw new NoSuchMethodException( method.getName() );
     }
 
-    @SuppressWarnings( {"raw", "unchecked"} )
-    private static boolean isInterfaceMethod( Method method, Class baseClass )
+    private static boolean isInterfaceMethod( Method method, Class<?> baseClass )
     {
-        for( Class aClass : Iterables.filter( Methods.HAS_METHODS, Iterables.map( Classes.RAW_CLASS, interfacesOf( baseClass ) ) ) )
+        for( Class<?> aClass : Iterables.filter( Methods.HAS_METHODS, Iterables.map( Classes.RAW_CLASS, interfacesOf( baseClass ) ) ) )
         {
             try
             {
@@ -790,7 +778,6 @@ public class TransientClassLoader
         }
     }
 
-    @SuppressWarnings( "raw" )
     public static boolean isGenerated( Class clazz )
     {
         return clazz.getName().endsWith( GENERATED_POSTFIX );
@@ -801,14 +788,12 @@ public class TransientClassLoader
         return object.getClass().getName().endsWith( GENERATED_POSTFIX );
     }
 
-    @SuppressWarnings( "raw" )
     public Class loadFragmentClass( Class fragmentClass )
         throws ClassNotFoundException
     {
         return loadClass( fragmentClass.getName().replace( '$', '_' ) + GENERATED_POSTFIX );
     }
 
-    @SuppressWarnings( "raw" )
     public static Class getSourceClass( Class fragmentClass )
     {
         return fragmentClass.getName().endsWith( GENERATED_POSTFIX ) ? fragmentClass.getSuperclass() : fragmentClass;