polygene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nic...@apache.org
Subject [13/57] [abbrv] [partial] polygene-java git commit: Revert "First round of changes to move to org.apache.zest namespace."
Date Thu, 21 Dec 2017 07:12:06 GMT
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentClassLoader.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentClassLoader.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentClassLoader.java
deleted file mode 100644
index 9835128..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentClassLoader.java
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
- * Copyright (c) 2010, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-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.apache.zest.api.entity.Lifecycle;
-import org.apache.zest.api.mixin.Initializable;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.api.util.Methods;
-import org.apache.zest.functional.Iterables;
-
-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.apache.zest.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 final int JDK_VERSION;
-    public static final String GENERATED_POSTFIX = "_Stub";
-
-    static
-    {
-        String jdkString = System.getProperty( "java.specification.version" );
-        switch( jdkString )
-        {
-            case "1.8":
-                JDK_VERSION = Opcodes.V1_8;
-                break;
-            case "1.7":
-            default:
-                JDK_VERSION = Opcodes.V1_7;
-                break;
-        }
-    }
-
-    public FragmentClassLoader( ClassLoader parent )
-    {
-        super( parent );
-    }
-
-    @Override
-    protected Class findClass( String name )
-        throws ClassNotFoundException
-    {
-        if( name.endsWith( GENERATED_POSTFIX ) )
-        {
-            Class baseClass;
-            String baseName = name.substring( 0, name.length() - 5 );
-            try
-            {
-                baseClass = loadClass( baseName );
-            }
-            catch( ClassNotFoundException e )
-            {
-                // Try replacing the last _ with $
-                while( true )
-                {
-                    int idx = baseName.lastIndexOf( "_" );
-                    if( idx != -1 )
-                    {
-                        baseName = baseName.substring( 0, idx ) + "$" + baseName.substring( idx + 1 );
-                        try
-                        {
-                            baseClass = loadClass( baseName );
-                            break;
-                        }
-                        catch( ClassNotFoundException e1 )
-                        {
-                            // Try again
-                        }
-                    }
-                    else
-                    {
-                        throw e;
-                    }
-                }
-            }
-//  To Allow JDK classes to be composed.
-            if( name.startsWith( "java." ))
-                name = "qi4j." + name;
-
-            byte[] b = generateClass( name, baseClass );
-            return defineClass( name, b, 0, b.length, baseClass.getProtectionDomain() );
-        }
-
-        // Try the classloader of this classloader -> get classes in Zest such as CompositeInvoker
-        return getClass().getClassLoader().loadClass( name );
-    }
-
-    public static byte[] generateClass( String name, Class baseClass )
-        throws ClassNotFoundException
-    {
-        String classSlash = name.replace( '.', '/' );
-        String baseClassSlash = getInternalName( baseClass );
-
-        ClassWriter cw = new ClassWriter( ClassWriter.COMPUTE_MAXS );
-
-        // Class definition start
-        cw.visit( JDK_VERSION, ACC_PUBLIC + ACC_SUPER, classSlash, null, baseClassSlash, null );
-
-        // Composite reference
-        {
-            cw.visitField( ACC_PUBLIC, "_instance", "Lorg/qi4j/api/composite/CompositeInvoker;", null, null ).visitEnd();
-        }
-
-        // Static Method references
-        boolean hasProxyMethods = false;
-        {
-            int idx = 1;
-            for( Method method : baseClass.getMethods() )
-            {
-                if( isOverridden(method, baseClass) )
-                {
-                    cw.visitField( ACC_PRIVATE + ACC_STATIC, "m" + idx++, "Ljava/lang/reflect/Method;", null,
-                                        null ).visitEnd();
-                    hasProxyMethods = true;
-                }
-            }
-        }
-
-        // Constructors
-        for( Constructor constructor : baseClass.getDeclaredConstructors() )
-        {
-            if( Modifier.isPublic( constructor.getModifiers() ) || Modifier.isProtected( constructor.getModifiers() ) )
-            {
-                String desc = org.objectweb.asm.commons.Method.getMethod( constructor ).getDescriptor();
-                MethodVisitor cmv = cw.visitMethod( ACC_PUBLIC, "<init>", desc, null, null );
-                cmv.visitCode();
-                cmv.visitVarInsn(ALOAD, 0);
-
-                int idx = 1;
-                for( Class aClass : constructor.getParameterTypes() )
-                {
-                    final int opcode;
-                    if (aClass.equals(Integer.TYPE)) {
-                        opcode = ILOAD;
-                    } else if (aClass.equals(Long.TYPE)) {
-                        opcode = LLOAD;
-                    } else if (aClass.equals(Float.TYPE)) {
-                        opcode = FLOAD;
-                    } else if (aClass.equals(Double.TYPE)) {
-                        opcode = DLOAD;
-                    } else {
-                        opcode = ALOAD;
-                    }
-                    cmv.visitVarInsn(opcode, idx++);
-                }
-
-                cmv.visitMethodInsn(INVOKESPECIAL, baseClassSlash, "<init>", desc, false);
-                cmv.visitInsn(RETURN);
-                cmv.visitMaxs(idx, idx);
-                cmv.visitEnd();
-            }
-        }
-
-
-        // Overloaded and unimplemented methods
-        if( hasProxyMethods )
-        {
-            Method[] methods = baseClass.getMethods();
-            int idx = 0;
-            List<Label> exceptionLabels = new ArrayList<>();
-            for( Method method : methods )
-            {
-                if( isOverridden(method, baseClass) )
-                {
-                    idx++;
-                    String methodName = method.getName();
-                    String desc = org.objectweb.asm.commons.Method.getMethod( method ).getDescriptor();
-
-                    String[] exceptions = null;
-                    {
-                        MethodVisitor mv = cw.visitMethod( ACC_PUBLIC, methodName, desc, null, null );
-                        if( isInternalQi4jMethod( method, baseClass ) )
-                        {
-                            // generate a NoOp method...
-                            mv.visitInsn( RETURN );
-                        }
-                        else
-                        {
-                            Label endLabel = null; // Use this if return type is void
-                            if( method.getExceptionTypes().length > 0 )
-                            {
-                                exceptions = new String[ method.getExceptionTypes().length ];
-                                for( int i = 0; i < method.getExceptionTypes().length; i++ )
-                                {
-                                    Class<?> aClass = method.getExceptionTypes()[ i ];
-                                    exceptions[ i ] = getInternalName( aClass );
-                                }
-                            }
-                            mv.visitCode();
-                            Label l0 = new Label();
-                            Label l1 = new Label();
-
-                            exceptionLabels.clear();
-                            for( Class<?> declaredException : method.getExceptionTypes() )
-                            {
-                                Label ld = new Label();
-                                mv.visitTryCatchBlock( l0, l1, ld, getInternalName( declaredException ) );
-                                exceptionLabels.add( ld ); // Reuse this further down for the catch
-                            }
-
-                            Label lruntime = new Label();
-                            mv.visitTryCatchBlock( l0, l1, lruntime, "java/lang/RuntimeException" );
-                            Label lerror = new Label();
-                            mv.visitTryCatchBlock( l0, l1, lerror, "java/lang/Throwable" );
-
-                            mv.visitLabel( l0 );
-                            mv.visitVarInsn( ALOAD, 0 );
-                            mv.visitFieldInsn( GETFIELD, classSlash, "_instance",
-                                               "Lorg/qi4j/api/composite/CompositeInvoker;" );
-                            mv.visitFieldInsn( GETSTATIC, classSlash, "m" + idx, "Ljava/lang/reflect/Method;" );
-
-                            int paramCount = method.getParameterTypes().length;
-                            int stackIdx = 0;
-                            if( paramCount == 0 )
-                            {
-                                // Send in null as parameter
-                                mv.visitInsn( ACONST_NULL );
-                            }
-                            else
-                            {
-                                insn( mv, paramCount );
-                                mv.visitTypeInsn( ANEWARRAY, "java/lang/Object" );
-                                int pidx = 0;
-                                for( Class<?> aClass : method.getParameterTypes() )
-                                {
-                                    mv.visitInsn( DUP );
-                                    insn( mv, pidx++ );
-                                    stackIdx = wrapParameter( mv, aClass, stackIdx + 1 );
-                                    mv.visitInsn( AASTORE );
-                                }
-                            }
-
-                            // Call method
-                            mv.visitMethodInsn( INVOKEINTERFACE, "org/qi4j/api/composite/CompositeInvoker",
-                                                "invokeComposite",
-                                                "(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;", true );
-
-                            // Return value
-                            if( !method.getReturnType().equals( Void.TYPE ) )
-                            {
-                                unwrapResult( mv, method.getReturnType(), l1 );
-                            }
-                            else
-                            {
-                                mv.visitInsn( POP );
-                                mv.visitLabel( l1 );
-                                endLabel = new Label();
-                                mv.visitJumpInsn( GOTO, endLabel );
-                            }
-
-                            // Increase stack to beyond method args
-                            stackIdx++;
-
-                            // Declared exceptions
-                            int exceptionIdx = 0;
-                            for( Class<?> aClass : method.getExceptionTypes() )
-                            {
-                                mv.visitLabel( exceptionLabels.get( exceptionIdx++ ) );
-                                mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ getInternalName( aClass ) } );
-                                mv.visitVarInsn( ASTORE, stackIdx );
-                                mv.visitVarInsn( ALOAD, stackIdx );
-                                mv.visitInsn( ATHROW );
-                            }
-
-                            // RuntimeException and Error catch-all
-                            mv.visitLabel( lruntime );
-                            mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ "java/lang/RuntimeException" } );
-                            mv.visitVarInsn( ASTORE, stackIdx );
-                            mv.visitVarInsn( ALOAD, stackIdx );
-                            mv.visitInsn( ATHROW );
-
-                            mv.visitLabel( lerror );
-                            mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ "java/lang/Throwable" } );
-                            mv.visitVarInsn( ASTORE, stackIdx );
-                            mv.visitVarInsn( ALOAD, stackIdx );
-                            mv.visitTypeInsn( CHECKCAST, "java/lang/Error" );
-                            mv.visitInsn( ATHROW );
-
-                            // Return type = void
-                            if( endLabel != null )
-                            {
-                                mv.visitLabel( endLabel );
-                                mv.visitFrame( Opcodes.F_SAME, 0, null, 0, null );
-                                mv.visitInsn( RETURN );
-                            }
-
-                            mv.visitMaxs( 0, 0 );
-                            mv.visitEnd();
-                        }
-                    }
-
-                    if( !Modifier.isAbstract( method.getModifiers() ) )
-                    {
-                        // Add method with _ as prefix
-                        MethodVisitor mv;
-                        mv = cw.visitMethod( ACC_PUBLIC, "_" + method.getName(), desc, null, exceptions );
-                        mv.visitCode();
-                        mv.visitVarInsn( ALOAD, 0 );
-
-                        // Parameters
-                        int stackIdx = 1;
-                        for( Class<?> aClass : method.getParameterTypes() )
-                        {
-                            stackIdx = loadParameter( mv, aClass, stackIdx ) + 1;
-                        }
-
-                        // Call method
-                        mv.visitMethodInsn( INVOKESPECIAL, baseClassSlash, method.getName(), desc, false );
-
-                        // Return value
-                        if( !method.getReturnType().equals( Void.TYPE ) )
-                        {
-                            returnResult( mv, method.getReturnType() );
-                        }
-                        else
-                        {
-                            mv.visitInsn( RETURN );
-                        }
-
-                        mv.visitMaxs( 1, 1 );
-                        mv.visitEnd();
-                    }
-                }
-            }
-
-            // Class initializer
-            {
-                MethodVisitor mv;
-                mv = cw.visitMethod( ACC_STATIC, "<clinit>", "()V", null, null );
-                mv.visitCode();
-                Label l0 = new Label();
-                Label l1 = new Label();
-                Label l2 = new Label();
-                mv.visitTryCatchBlock( l0, l1, l2, "java/lang/NoSuchMethodException" );
-                mv.visitLabel( l0 );
-
-                // Lookup methods and store in static variables
-                int midx = 0;
-                for( Method method : methods )
-                {
-                    if( isOverridden(method, baseClass) )
-                    {
-                        method.setAccessible( true );
-                        Class methodClass;
-                        if( Modifier.isAbstract( method.getModifiers() ) )
-                        {
-                            methodClass = method.getDeclaringClass();
-                        }
-                        else
-                        {
-                            try
-                            {
-                                methodClass = getInterfaceMethodDeclaration( method,
-                                                                             baseClass ); // Overridden method lookup
-                            }
-                            catch( NoSuchMethodException e )
-                            {
-                                throw new ClassNotFoundException( name, e );
-                            }
-                        }
-
-                        midx++;
-
-                        mv.visitLdcInsn( Type.getType( methodClass ) );
-                        mv.visitLdcInsn( method.getName() );
-                        insn( mv, method.getParameterTypes().length );
-                        mv.visitTypeInsn( ANEWARRAY, "java/lang/Class" );
-
-                        int pidx = 0;
-                        for( Class<?> aClass : method.getParameterTypes() )
-                        {
-                            mv.visitInsn( DUP );
-                            insn( mv, pidx++ );
-                            type( mv, aClass );
-                            mv.visitInsn( AASTORE );
-                        }
-
-                        mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Class", "getMethod",
-                                            "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;", false );
-                        mv.visitFieldInsn( PUTSTATIC, classSlash, "m" + midx, "Ljava/lang/reflect/Method;" );
-                    }
-                }
-
-                mv.visitLabel( l1 );
-                Label l3 = new Label();
-                mv.visitJumpInsn( GOTO, l3 );
-                mv.visitLabel( l2 );
-                mv.visitFrame( Opcodes.F_SAME1, 0, null, 1, new Object[]{ "java/lang/NoSuchMethodException" } );
-                mv.visitVarInsn( ASTORE, 0 );
-                mv.visitVarInsn( ALOAD, 0 );
-                mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/NoSuchMethodException", "printStackTrace", "()V", false );
-                mv.visitLabel( l3 );
-                mv.visitFrame( Opcodes.F_SAME, 0, null, 0, null );
-                mv.visitInsn( RETURN );
-                mv.visitMaxs( 6, 1 );
-                mv.visitEnd();
-            }
-        }
-        cw.visitEnd();
-        return cw.toByteArray();
-    }
-
-    private static boolean isOverridden(Method method, Class baseClass)
-    {
-        if( Modifier.isAbstract( method.getModifiers() ) )
-        {
-            return true; // Implement all abstract methods
-        }
-
-        if( Modifier.isFinal( method.getModifiers() ) )
-        {
-            return false; // Cannot override final methods
-        }
-
-        if( isInterfaceMethod( method, baseClass ) )
-        {
-            // if() used for clarity.
-            //noinspection RedundantIfStatement
-            if( isInternalQi4jMethod( method, baseClass ) )
-            {
-                return false; // Skip methods in Zest-internal interfaces
-            }
-            else
-            {
-                return true;
-            }
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    private static boolean isInternalQi4jMethod( Method method, Class baseClass )
-    {
-        return isDeclaredIn( method, Initializable.class, baseClass )
-               || isDeclaredIn( method, Lifecycle.class, baseClass );
-    }
-
-    private static boolean isDeclaredIn( Method method, Class<?> clazz, Class<?> baseClass )
-    {
-        if( !clazz.isAssignableFrom( baseClass ) )
-        {
-            return false;
-        }
-
-        try
-        {
-            clazz.getMethod( method.getName(), method.getParameterTypes() );
-            return true;
-        }
-        catch( NoSuchMethodException e )
-        {
-            return false;
-        }
-    }
-
-    private static Class getInterfaceMethodDeclaration( Method method, Class clazz )
-        throws NoSuchMethodException
-    {
-        Iterable<Class<?>> interfaces = Iterables.map( Classes.RAW_CLASS, interfacesOf( clazz ) );
-        for( Class<?> anInterface : interfaces )
-        {
-            try
-            {
-                anInterface.getMethod( method.getName(), method.getParameterTypes() );
-                return anInterface;
-            }
-            catch( NoSuchMethodException e )
-            {
-                // Try next
-            }
-        }
-
-        throw new NoSuchMethodException( method.getName() );
-    }
-
-    private static boolean isInterfaceMethod( Method method, Class<?> baseClass )
-    {
-        for( Class<?> aClass : Iterables.filter( Methods.HAS_METHODS, Iterables.map( Classes.RAW_CLASS, interfacesOf( baseClass ) ) ) )
-        {
-            try
-            {
-                Method m = aClass.getMethod( method.getName(), method.getParameterTypes() );
-                m.setAccessible( true );
-                return true;
-            }
-            catch( NoSuchMethodException e )
-            {
-                // Ignore
-            }
-        }
-        return false;
-    }
-
-    private static void type( MethodVisitor mv, Class<?> aClass )
-    {
-        if( aClass.equals( Integer.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Integer", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Long.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Long", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Short.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Short", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Byte.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Byte", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Double.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Double", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Float.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Float", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Boolean.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Boolean", "TYPE", "Ljava/lang/Class;" );
-        }
-        else if( aClass.equals( Character.TYPE ) )
-        {
-            mv.visitFieldInsn( GETSTATIC, "java/lang/Character", "TYPE", "Ljava/lang/Class;" );
-        }
-        else
-        {
-            mv.visitLdcInsn( Type.getType( aClass ) );
-        }
-    }
-
-    private static int wrapParameter( MethodVisitor mv, Class<?> aClass, int idx )
-    {
-        if( aClass.equals( Integer.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false );
-        }
-        else if( aClass.equals( Long.TYPE ) )
-        {
-            mv.visitVarInsn( LLOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false );
-            idx++; // Extra jump
-        }
-        else if( aClass.equals( Short.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Short", "valueOf", "(S)Ljava/lang/Short;", false );
-        }
-        else if( aClass.equals( Byte.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false );
-        }
-        else if( aClass.equals( Double.TYPE ) )
-        {
-            mv.visitVarInsn( DLOAD, idx );
-            idx++; // Extra jump
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false );
-        }
-        else if( aClass.equals( Float.TYPE ) )
-        {
-            mv.visitVarInsn( FLOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Float", "valueOf", "(F)Ljava/lang/Float;", false );
-        }
-        else if( aClass.equals( Boolean.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;", false );
-        }
-        else if( aClass.equals( Character.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-            mv.visitMethodInsn( INVOKESTATIC, "java/lang/Character", "valueOf", "(C)Ljava/lang/Character;", false );
-        }
-        else
-        {
-            mv.visitVarInsn( ALOAD, idx );
-        }
-
-        return idx;
-    }
-
-    private static void unwrapResult( MethodVisitor mv, Class<?> aClass, Label label )
-    {
-        if( aClass.equals( Integer.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Integer" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false );
-            mv.visitLabel( label );
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Long.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Long" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false );
-            mv.visitLabel( label );
-            mv.visitInsn( LRETURN );
-        }
-        else if( aClass.equals( Short.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Short" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Short", "shortValue", "()S", false );
-            mv.visitLabel( label );
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Byte.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Byte" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Byte", "byteValue", "()B", false );
-            mv.visitLabel( label );
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Double.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Double" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false );
-            mv.visitLabel( label );
-            mv.visitInsn( DRETURN );
-        }
-        else if( aClass.equals( Float.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Float" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F", false );
-            mv.visitLabel( label );
-            mv.visitInsn( FRETURN );
-        }
-        else if( aClass.equals( Boolean.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Boolean" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false );
-            mv.visitLabel( label );
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Character.TYPE ) )
-        {
-            mv.visitTypeInsn( CHECKCAST, "java/lang/Character" );
-            mv.visitMethodInsn( INVOKEVIRTUAL, "java/lang/Character", "charValue", "()C", false );
-            mv.visitLabel( label );
-            mv.visitInsn( IRETURN );
-        }
-        else
-        {
-            mv.visitTypeInsn( CHECKCAST, getInternalName( aClass ) );
-            mv.visitLabel( label );
-            mv.visitInsn( ARETURN );
-        }
-    }
-
-    private static int loadParameter( MethodVisitor mv, Class<?> aClass, int idx )
-    {
-        if( aClass.equals( Integer.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-        }
-        else if( aClass.equals( Long.TYPE ) )
-        {
-            mv.visitVarInsn( LLOAD, idx );
-            idx++; // Extra jump
-        }
-        else if( aClass.equals( Short.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-        }
-        else if( aClass.equals( Byte.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-        }
-        else if( aClass.equals( Double.TYPE ) )
-        {
-            mv.visitVarInsn( DLOAD, idx );
-            idx++; // Extra jump
-        }
-        else if( aClass.equals( Float.TYPE ) )
-        {
-            mv.visitVarInsn( FLOAD, idx );
-        }
-        else if( aClass.equals( Boolean.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-        }
-        else if( aClass.equals( Character.TYPE ) )
-        {
-            mv.visitVarInsn( ILOAD, idx );
-        }
-        else
-        {
-            mv.visitVarInsn( ALOAD, idx );
-        }
-
-        return idx;
-    }
-
-    private static void returnResult( MethodVisitor mv, Class<?> aClass )
-    {
-        if( aClass.equals( Integer.TYPE ) )
-        {
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Long.TYPE ) )
-        {
-            mv.visitInsn( LRETURN );
-        }
-        else if( aClass.equals( Short.TYPE ) )
-        {
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Byte.TYPE ) )
-        {
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Double.TYPE ) )
-        {
-            mv.visitInsn( DRETURN );
-        }
-        else if( aClass.equals( Float.TYPE ) )
-        {
-            mv.visitInsn( FRETURN );
-        }
-        else if( aClass.equals( Boolean.TYPE ) )
-        {
-            mv.visitInsn( IRETURN );
-        }
-        else if( aClass.equals( Character.TYPE ) )
-        {
-            mv.visitInsn( IRETURN );
-        }
-        else
-        {
-            mv.visitTypeInsn( CHECKCAST, getInternalName( aClass ) );
-            mv.visitInsn( ARETURN );
-        }
-    }
-
-    private static void insn( MethodVisitor mv, int length )
-    {
-        switch( length )
-        {
-        case 0:
-            mv.visitInsn( ICONST_0 );
-            return;
-        case 1:
-            mv.visitInsn( ICONST_1 );
-            return;
-        case 2:
-            mv.visitInsn( ICONST_2 );
-            return;
-        case 3:
-            mv.visitInsn( ICONST_3 );
-            return;
-        case 4:
-            mv.visitInsn( ICONST_4 );
-            return;
-        case 5:
-            mv.visitInsn( ICONST_5 );
-            return;
-        default:
-            mv.visitIntInsn( BIPUSH, length );
-        }
-    }
-
-    public static boolean isGenerated( Class clazz )
-    {
-        return clazz.getName().endsWith( GENERATED_POSTFIX );
-    }
-
-    public static boolean isGenerated( Object object )
-    {
-        return object.getClass().getName().endsWith( GENERATED_POSTFIX );
-    }
-
-    public Class loadFragmentClass( Class fragmentClass )
-        throws ClassNotFoundException
-    {
-        return loadClass( fragmentClass.getName().replace( '$', '_' ) + GENERATED_POSTFIX );
-    }
-
-    public static Class getSourceClass( Class fragmentClass )
-    {
-        return fragmentClass.getName().endsWith( GENERATED_POSTFIX ) ? fragmentClass.getSuperclass() : fragmentClass;
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentInvocationHandler.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentInvocationHandler.java
deleted file mode 100644
index 1d4c0e9..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/FragmentInvocationHandler.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-
-/**
- * JAVADOC
- */
-abstract class FragmentInvocationHandler
-    implements InvocationHandler
-{
-    private static final String COMPACT_TRACE = "qi4j.compacttrace";
-
-    private static final CompactLevel compactLevel;
-
-    static
-    {
-        compactLevel = CompactLevel.valueOf( System.getProperty( COMPACT_TRACE, "proxy" ) );
-    }
-
-    protected Object fragment;
-    protected Method method;
-
-    void setFragment( Object fragment )
-    {
-        this.fragment = fragment;
-    }
-
-    public void setMethod( Method method )
-    {
-        this.method = method;
-    }
-
-    protected Throwable cleanStackTrace( Throwable throwable, Object proxy, Method method )
-    {
-        if( compactLevel == CompactLevel.off )
-        {
-            return throwable;
-        }
-
-        StackTraceElement[] trace = throwable.getStackTrace();
-
-        // Check if exception originated within Zest or JDK - if so then skip compaction
-        if( trace.length == 0 || !isApplicationClass( trace[ 0 ].getClassName() ) )
-        {
-            return throwable;
-        }
-
-        int count = 0;
-        for( int i = 0; i < trace.length; i++ )
-        {
-            StackTraceElement stackTraceElement = trace[ i ];
-            if( !isApplicationClass( stackTraceElement.getClassName() ) )
-            {
-                // TODO: Should find stack entry outside Runtime, and compact beyond that
-                trace[ i ] = null;
-                count++;
-            }
-            else
-            {
-                boolean classOrigin = stackTraceElement.getClassName().equals( proxy.getClass().getSimpleName() );
-                boolean methodOrigin = stackTraceElement.getMethodName().equals( method.getName() );
-                if( classOrigin && methodOrigin && compactLevel == CompactLevel.proxy )
-                {
-                    // Stop removing if the originating method call has been located in the stack.
-                    // For 'semi' and 'extensive' compaction, we don't and do the entire stack instead.
-                    trace[ i ] = new StackTraceElement( proxy.getClass()
-                                                            .getInterfaces()[ 0 ].getName(), method.getName(), null, -1 );
-                    break; // Stop compacting this trace
-                }
-            }
-        }
-
-        // Create new trace array
-        int idx = 0;
-        StackTraceElement[] newTrace = new StackTraceElement[ trace.length - count ];
-        for( StackTraceElement stackTraceElement : trace )
-        {
-            if( stackTraceElement != null )
-            {
-                newTrace[ idx++ ] = stackTraceElement;
-            }
-        }
-        throwable.setStackTrace( newTrace );
-
-        Throwable nested = throwable.getCause();
-        if( nested != null )
-        {
-            //noinspection ThrowableResultOfMethodCallIgnored
-            cleanStackTrace( nested, proxy, method );
-        }
-        return throwable;
-    }
-
-    private boolean isApplicationClass( String className )
-    {
-        if( compactLevel == CompactLevel.semi )
-        {
-            return !isJdkInternals( className );
-        }
-        return !( className.endsWith( FragmentClassLoader.GENERATED_POSTFIX ) ||
-                  className.startsWith( "org.qi4j.runtime" ) ||
-                  isJdkInternals( className ) );
-    }
-
-    private boolean isJdkInternals( String className )
-    {
-        return className.startsWith( "java.lang.reflect" )
-               || className.startsWith( "com.sun.proxy" )
-               || className.startsWith( "sun.reflect" );
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/FunctionStateResolver.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/FunctionStateResolver.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/FunctionStateResolver.java
deleted file mode 100644
index 9c2943b..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/FunctionStateResolver.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2012, Kent Sølvsten.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.util.List;
-import java.util.Map;
-import org.apache.zest.api.association.AssociationDescriptor;
-import org.apache.zest.api.entity.EntityReference;
-import org.apache.zest.api.property.PropertyDescriptor;
-import org.apache.zest.functional.Function;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.runtime.association.ManyAssociationModel;
-import org.apache.zest.runtime.association.NamedAssociationModel;
-import org.apache.zest.runtime.entity.EntityModel;
-import org.apache.zest.spi.entity.EntityState;
-import org.apache.zest.spi.entity.ManyAssociationState;
-import org.apache.zest.spi.entity.NamedAssociationState;
-
-/**
- * Function based StateResolver.
- */
-public class FunctionStateResolver
-    implements StateResolver
-{
-    final Function<PropertyDescriptor, Object> propertyFunction;
-    final Function<AssociationDescriptor, EntityReference> associationFunction;
-    final Function<AssociationDescriptor, Iterable<EntityReference>> manyAssociationFunction;
-    final Function<AssociationDescriptor, Map<String, EntityReference>> namedAssociationFunction;
-
-    public FunctionStateResolver( Function<PropertyDescriptor, Object> propertyFunction,
-                                  Function<AssociationDescriptor, EntityReference> associationFunction,
-                                  Function<AssociationDescriptor, Iterable<EntityReference>> manyAssociationFunction,
-                                  Function<AssociationDescriptor, Map<String, EntityReference>> namedAssociationFunction )
-    {
-        this.propertyFunction = propertyFunction;
-        this.associationFunction = associationFunction;
-        this.manyAssociationFunction = manyAssociationFunction;
-        this.namedAssociationFunction = namedAssociationFunction;
-    }
-
-    @Override
-    public Object getPropertyState( PropertyDescriptor propertyDescriptor )
-    {
-        return propertyFunction.map( propertyDescriptor );
-    }
-
-    @Override
-    public EntityReference getAssociationState( AssociationDescriptor associationDescriptor )
-    {
-        return associationFunction.map( associationDescriptor );
-    }
-
-    @Override
-    public List<EntityReference> getManyAssociationState( AssociationDescriptor associationDescriptor )
-    {
-        return Iterables.toList( manyAssociationFunction.map( associationDescriptor ) );
-    }
-
-    @Override
-    public Map<String, EntityReference> getNamedAssociationState( AssociationDescriptor associationDescriptor )
-    {
-        return namedAssociationFunction.map( associationDescriptor );
-    }
-
-    public void populateState( EntityModel model, EntityState state )
-    {
-        for( PropertyDescriptor propDesc : model.state().properties() )
-        {
-            Object value = getPropertyState( propDesc );
-            state.setPropertyValue( propDesc.qualifiedName(), value );
-        }
-        for( AssociationDescriptor assDesc : model.state().associations() )
-        {
-            EntityReference ref = getAssociationState( assDesc );
-            state.setAssociationValue( assDesc.qualifiedName(), ref );
-        }
-        for( ManyAssociationModel manyAssDesc : model.state().manyAssociations() )
-        {
-            ManyAssociationState associationState = state.manyAssociationValueOf( manyAssDesc.qualifiedName() );
-            // First clear existing ones
-            for( EntityReference ref : associationState )
-            {
-                associationState.remove( ref );
-            }
-            // then add the new ones.
-            for( EntityReference ref : getManyAssociationState( manyAssDesc ) )
-            {
-                associationState.add( 0, ref );
-            }
-        }
-        for( NamedAssociationModel namedAssDesc : model.state().namedAssociations() )
-        {
-            NamedAssociationState associationState = state.namedAssociationValueOf( namedAssDesc.qualifiedName() );
-            // First clear existing ones
-            for( String name : associationState )
-            {
-                associationState.remove( name );
-            }
-            // then add the new ones.
-            for( Map.Entry<String, EntityReference> entry : getNamedAssociationState( namedAssDesc ).entrySet() )
-            {
-                associationState.put( entry.getKey(), entry.getValue() );
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericFragmentInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericFragmentInvocationHandler.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericFragmentInvocationHandler.java
deleted file mode 100644
index dfb9750..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericFragmentInvocationHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2007 Rickard Öberg
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * JAVADOC
- */
-public final class GenericFragmentInvocationHandler
-    extends FragmentInvocationHandler
-{
-    // InvocationHandler implementation ------------------------------
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args )
-        throws Throwable
-    {
-        try
-        {
-            return ( (InvocationHandler) fragment ).invoke( proxy, method, args );
-        }
-        catch( InvocationTargetException throwable )
-        {
-            throw cleanStackTrace( throwable.getTargetException(), proxy, method );
-        }
-        catch( Throwable throwable )
-        {
-            throw cleanStackTrace( throwable, proxy, method );
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java
deleted file mode 100644
index 47ba877..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/GenericSpecification.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import org.apache.zest.functional.Specification;
-
-/**
- * Specification that checks whether a given class implements InvocationHandler or not.
- */
-public class GenericSpecification
-    implements Specification<Class<?>>
-{
-    public static final GenericSpecification INSTANCE = new GenericSpecification();
-
-    @Override
-    public boolean satisfiedBy( Class<?> item )
-    {
-        return InvocationHandler.class.isAssignableFrom( item );
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/InstancePool.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/InstancePool.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/InstancePool.java
deleted file mode 100644
index 9286e2d..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/InstancePool.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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 org.apache.zest.runtime.composite;
-
-/**
- * JAVADOC
- */
-public interface InstancePool<T>
-{
-    public T obtainInstance();
-
-    public void releaseInstance( T instance );
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinModel.java
deleted file mode 100644
index c0be60b..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinModel.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.List;
-import org.apache.zest.api.common.ConstructionException;
-import org.apache.zest.api.composite.CompositeInstance;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.mixin.Initializable;
-import org.apache.zest.api.mixin.InitializationException;
-import org.apache.zest.api.mixin.MixinDescriptor;
-import org.apache.zest.api.property.StateHolder;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.VisitableHierarchy;
-import org.apache.zest.runtime.injection.DependencyModel;
-import org.apache.zest.runtime.injection.InjectedFieldsModel;
-import org.apache.zest.runtime.injection.InjectedMethodsModel;
-import org.apache.zest.runtime.injection.InjectionContext;
-
-import static org.apache.zest.functional.Iterables.map;
-import static org.apache.zest.functional.Iterables.toList;
-import static org.apache.zest.functional.Iterables.unique;
-
-/**
- * JAVADOC
- */
-public final class MixinModel
-    implements MixinDescriptor, VisitableHierarchy<Object, Object>
-{
-    private final Class<?> mixinClass;
-    private final Class<?> instantiationClass;
-    private final ConstructorsModel constructorsModel;
-    private final InjectedFieldsModel injectedFieldsModel;
-    private final InjectedMethodsModel injectedMethodsModel;
-    private final Iterable<Class<?>> thisMixinTypes;
-
-    public MixinModel( Class<?> declaredMixinClass, Class<?> instantiationClass )
-    {
-        injectedFieldsModel = new InjectedFieldsModel( declaredMixinClass );
-        injectedMethodsModel = new InjectedMethodsModel( declaredMixinClass );
-
-        this.mixinClass = declaredMixinClass;
-        this.instantiationClass = instantiationClass;
-        constructorsModel = new ConstructorsModel( instantiationClass );
-
-        thisMixinTypes = buildThisMixinTypes();
-    }
-
-    @Override
-    public Class<?> mixinClass()
-    {
-        return mixinClass;
-    }
-
-    public Class<?> instantiationClass()
-    {
-        return instantiationClass;
-    }
-
-    public boolean isGeneric()
-    {
-        return InvocationHandler.class.isAssignableFrom( mixinClass );
-    }
-
-    public Iterable<DependencyModel> dependencies()
-    {
-        return Iterables.flatten( constructorsModel.dependencies(), injectedFieldsModel.dependencies(), injectedMethodsModel
-            .dependencies() );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            if( constructorsModel.accept( visitor ) )
-            {
-                if( injectedFieldsModel.accept( visitor ) )
-                {
-                    injectedMethodsModel.accept( visitor );
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    // Context
-    public Object newInstance( CompositeInstance compositeInstance, StateHolder state, UsesInstance uses )
-    {
-        InjectionContext injectionContext = new InjectionContext( compositeInstance, uses, state );
-        return newInstance( injectionContext );
-    }
-
-    public Object newInstance( InjectionContext injectionContext )
-    {
-        Object mixin;
-        CompositeInstance compositeInstance = injectionContext.compositeInstance();
-
-        mixin = constructorsModel.newInstance( injectionContext );
-
-        if( FragmentClassLoader.isGenerated( instantiationClass ) )
-        {
-            try
-            {
-                instantiationClass.getDeclaredField( "_instance" ).set( mixin,
-                                                                        injectionContext.compositeInstance() );
-            }
-            catch( IllegalAccessException e )
-            {
-                e.printStackTrace();
-            }
-            catch( NoSuchFieldException e )
-            {
-                e.printStackTrace();
-            }
-        }
-
-        injectedFieldsModel.inject( injectionContext, mixin );
-        injectedMethodsModel.inject( injectionContext, mixin );
-        if( mixin instanceof Initializable )
-        {
-            try
-            {
-                ( (Initializable) mixin ).initialize();
-            }
-            catch( InitializationException e )
-            {
-                List<Class<?>> compositeType = toList( compositeInstance.types() );
-                String message = "Unable to initialize " + mixinClass + " in composite " + compositeType;
-                throw new ConstructionException( message, e );
-            }
-        }
-        return mixin;
-    }
-
-    public Iterable<Class<?>> thisMixinTypes()
-    {
-        return thisMixinTypes;
-    }
-
-    private Iterable<Class<?>> buildThisMixinTypes()
-    {
-        return map( new DependencyModel.InjectionTypeFunction(), unique( Iterables.filter( new DependencyModel.ScopeSpecification( This.class ), dependencies() ) ) );
-    }
-
-    protected FragmentInvocationHandler newInvocationHandler( Method method )
-    {
-        if( InvocationHandler.class.isAssignableFrom( mixinClass )
-            && !method.getDeclaringClass().isAssignableFrom( mixinClass ) )
-        {
-            return new GenericFragmentInvocationHandler();
-        }
-        else
-        {
-            return new TypedModifierInvocationHandler();
-        }
-    }
-
-    @Override
-    public String toString()
-    {
-        return mixinClass.getName();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsInstance.java
deleted file mode 100644
index 2720884..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsInstance.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.Method;
-
-/**
- * JAVADOC
- */
-public interface MixinsInstance
-{
-    Object invoke( Object composite, Object[] params, CompositeMethodInstance methodInstance )
-        throws Throwable;
-
-    Object invokeObject( Object proxy, Object[] args, Method method )
-        throws Throwable;
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
deleted file mode 100644
index d90f9d9..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/MixinsModel.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.bootstrap.BindingException;
-import org.apache.zest.functional.Function;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.HierarchicalVisitorAdapter;
-import org.apache.zest.functional.Specification;
-import org.apache.zest.functional.VisitableHierarchy;
-import org.apache.zest.runtime.injection.DependencyModel;
-import org.apache.zest.runtime.injection.InjectedFieldModel;
-import org.apache.zest.runtime.model.Binder;
-import org.apache.zest.runtime.model.Resolution;
-
-import static org.apache.zest.api.util.Classes.interfacesOf;
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.flattenIterables;
-import static org.apache.zest.functional.Iterables.map;
-
-/**
- * Base implementation of model for mixins. This records the mapping between methods in the Composite
- * and mixin implementations.
- */
-public class MixinsModel
-    implements Binder, VisitableHierarchy<Object, Object>
-{
-    protected final Map<Method, MixinModel> methodImplementation = new HashMap<Method, MixinModel>();
-    protected final Map<Method, Integer> methodIndex = new HashMap<Method, Integer>();
-    protected List<MixinModel> mixinModels = new ArrayList<MixinModel>();
-
-    private final Map<Class, Integer> mixinIndex = new HashMap<Class, Integer>();
-    private final Set<Class<?>> mixinTypes = new LinkedHashSet<Class<?>>();
-
-    public Iterable<Class<?>> mixinTypes()
-    {
-        return mixinTypes;
-    }
-
-    public <T> boolean isImplemented( Class<T> mixinType )
-    {
-        return mixinTypes.contains( mixinType );
-    }
-
-    public List<MixinModel> mixinModels()
-    {
-        return mixinModels;
-    }
-
-    public MixinModel mixinFor( Method method )
-    {
-        return methodImplementation.get( method );
-    }
-
-    public MixinModel getMixinModel( Class mixinClass )
-    {
-        for( MixinModel mixinModel : mixinModels )
-        {
-            if( mixinModel.mixinClass().equals( mixinClass ) )
-            {
-                return mixinModel;
-            }
-        }
-        return null;
-    }
-
-    public void addMixinType( Class mixinType )
-    {
-        for( Type type : interfacesOf( mixinType ) )
-        {
-            mixinTypes.add( Classes.RAW_CLASS.map( type ) );
-        }
-    }
-
-    public void addMixinModel( MixinModel mixinModel )
-    {
-        mixinModels.add( mixinModel );
-    }
-
-    public void addMethodMixin( Method method, MixinModel mixinModel )
-    {
-        methodImplementation.put( method, mixinModel );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( MixinModel mixinModel : mixinModels )
-            {
-                mixinModel.accept( visitor );
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    // Binding
-    @Override
-    public void bind( final Resolution resolution )
-        throws BindingException
-    {
-        // Order mixins based on @This usages
-        UsageGraph<MixinModel> deps = new UsageGraph<MixinModel>( mixinModels, new Uses(), true );
-        mixinModels = deps.resolveOrder();
-
-        // Populate mappings
-        for( int i = 0; i < mixinModels.size(); i++ )
-        {
-            MixinModel mixinModel = mixinModels.get( i );
-            mixinIndex.put( mixinModel.mixinClass(), i );
-        }
-
-        for( Map.Entry<Method, MixinModel> methodClassEntry : methodImplementation.entrySet() )
-        {
-            methodIndex.put( methodClassEntry.getKey(), mixinIndex.get( methodClassEntry.getValue().mixinClass() ) );
-        }
-
-        for( MixinModel mixinModel : mixinModels )
-        {
-            mixinModel.accept( new HierarchicalVisitorAdapter<Object, Object, BindingException>()
-            {
-                @Override
-                public boolean visitEnter( Object visited )
-                    throws BindingException
-                {
-                    if( visited instanceof InjectedFieldModel )
-                    {
-                        InjectedFieldModel fieldModel = (InjectedFieldModel) visited;
-                        fieldModel.bind( resolution.forField( fieldModel.field() ) );
-                        return false;
-                    }
-                    else if( visited instanceof Binder )
-                    {
-                        Binder constructorsModel = (Binder) visited;
-                        constructorsModel.bind( resolution );
-
-                        return false;
-                    }
-                    return true;
-                }
-
-                @Override
-                public boolean visit( Object visited )
-                    throws BindingException
-                {
-                    if( visited instanceof Binder )
-                    {
-                        ( (Binder) visited ).bind( resolution );
-                    }
-                    return true;
-                }
-            } );
-        }
-    }
-
-    // Context
-
-    public Object[] newMixinHolder()
-    {
-        return new Object[ mixinIndex.size() ];
-    }
-
-    public FragmentInvocationHandler newInvocationHandler( final Method method )
-    {
-        return mixinFor( method ).newInvocationHandler( method );
-    }
-
-    public Iterable<DependencyModel> dependencies()
-    {
-        return flattenIterables( map( new Function<MixinModel, Iterable<DependencyModel>>()
-        {
-            @Override
-            public Iterable<DependencyModel> map( MixinModel mixinModel )
-            {
-                return mixinModel.dependencies();
-            }
-        }, mixinModels ) );
-    }
-
-    public Iterable<Method> invocationsFor( final Class<?> mixinClass )
-    {
-        return map( new Function<Map.Entry<Method, MixinModel>, Method>()
-        {
-            @Override
-            public Method map( Map.Entry<Method, MixinModel> entry )
-            {
-                return entry.getKey();
-            }
-        }, filter( new Specification<Map.Entry<Method, MixinModel>>()
-        {
-            @Override
-            public boolean satisfiedBy( Map.Entry<Method, MixinModel> item )
-            {
-                MixinModel model = item.getValue();
-                return model.mixinClass().equals( mixinClass );
-            }
-        }, methodImplementation.entrySet() ) );
-    }
-
-    private class Uses
-        implements UsageGraph.Use<MixinModel>
-    {
-        @Override
-        public Collection<MixinModel> uses( MixinModel source )
-        {
-            Iterable<Class<?>> thisMixinTypes = source.thisMixinTypes();
-            List<MixinModel> usedMixinClasses = new ArrayList<MixinModel>();
-            for( Class thisMixinType : thisMixinTypes )
-            {
-                for( Method method : thisMixinType.getMethods() )
-                {
-                    usedMixinClasses.add( methodImplementation.get( method ) );
-                }
-            }
-            return usedMixinClasses;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyGenerator.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyGenerator.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyGenerator.java
deleted file mode 100644
index 916fa45..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyGenerator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.Proxy;
-
-/**
- * generates proxyclasses
- */
-public class ProxyGenerator {
-    public static Class<?> createProxyClass(ClassLoader mainTypeClassLoader, Class<?>[] interfaces) {
-        ClassLoader effectiveClassLoader = Thread.currentThread().getContextClassLoader();
-        if (effectiveClassLoader == null) {
-            effectiveClassLoader = mainTypeClassLoader;
-        }
-        return Proxy.getProxyClass(effectiveClassLoader, interfaces);
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyReferenceInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyReferenceInvocationHandler.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyReferenceInvocationHandler.java
deleted file mode 100644
index 334a517..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ProxyReferenceInvocationHandler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2007, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2007, Niclas Hedhman. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.lang.reflect.UndeclaredThrowableException;
-import org.apache.zest.api.composite.CompositeInvoker;
-
-public final class ProxyReferenceInvocationHandler
-    implements InvocationHandler, CompositeInvoker
-{
-    private Object proxy;
-
-    public Object proxy()
-    {
-        return proxy;
-    }
-
-    public void setProxy( Object proxy )
-    {
-        this.proxy = proxy;
-    }
-
-    public void clearProxy()
-    {
-        proxy = null;
-    }
-
-    @Override
-    public Object invokeComposite( Method method, Object[] args )
-        throws Throwable
-    {
-        try
-        {
-            InvocationHandler invocationHandler = Proxy.getInvocationHandler( this.proxy );
-            return invocationHandler.invoke( this.proxy, method, args );
-        }
-        catch( InvocationTargetException e )
-        {
-            throw e.getTargetException();
-        }
-        catch( UndeclaredThrowableException e )
-        {
-            throw e.getUndeclaredThrowable();
-        }
-    }
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args )
-        throws Throwable
-    {
-        try
-        {
-            InvocationHandler invocationHandler = Proxy.getInvocationHandler( this.proxy );
-            return invocationHandler.invoke( this.proxy, method, args );
-        }
-        catch( InvocationTargetException e )
-        {
-            throw e.getTargetException();
-        }
-        catch( UndeclaredThrowableException e )
-        {
-            throw e.getUndeclaredThrowable();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectInvocationHandlerResult.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectInvocationHandlerResult.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectInvocationHandlerResult.java
deleted file mode 100644
index ed0b4cc..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectInvocationHandlerResult.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-
-/**
- * JAVADOC
- */
-public final class SideEffectInvocationHandlerResult
-    implements InvocationHandler
-{
-    private Object result;
-    private Throwable throwable;
-
-    public SideEffectInvocationHandlerResult()
-    {
-    }
-
-    public void setResult( Object result, Throwable throwable )
-    {
-        this.result = result;
-        this.throwable = throwable;
-    }
-
-    // InvocationHandler implementation ------------------------------
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args )
-        throws Throwable
-    {
-        if( throwable != null )
-        {
-            throw throwable;
-        }
-        else
-        {
-            return result;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectModel.java
deleted file mode 100644
index 6643eb9..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectModel.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import org.apache.zest.api.sideeffect.SideEffectDescriptor;
-
-/**
- * JAVADOC
- */
-public final class SideEffectModel
-    extends AbstractModifierModel
-    implements SideEffectDescriptor
-{
-    public SideEffectModel( Class<?> sideEffectClass, Class<?> instantiationClass )
-    {
-        super( sideEffectClass, instantiationClass );
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsInstance.java
deleted file mode 100644
index 3f20d6f..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsInstance.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.List;
-
-/**
- * JAVADOC
- */
-public final class SideEffectsInstance
-    implements InvocationHandler
-{
-    private final List<InvocationHandler> sideEffects;
-    private final SideEffectInvocationHandlerResult resultInvocationHandler;
-    private final ProxyReferenceInvocationHandler proxyHandler;
-    private InvocationHandler invoker;
-
-    public SideEffectsInstance( List<InvocationHandler> sideEffects,
-                                SideEffectInvocationHandlerResult resultInvocationHandler,
-                                ProxyReferenceInvocationHandler proxyHandler,
-                                InvocationHandler invoker
-    )
-    {
-        this.sideEffects = sideEffects;
-        this.resultInvocationHandler = resultInvocationHandler;
-        this.proxyHandler = proxyHandler;
-        this.invoker = invoker;
-    }
-
-    @Override
-    public Object invoke( Object proxy, Method method, Object[] args )
-        throws Throwable
-    {
-        try
-        {
-            Object result = invoker.invoke( proxy, method, args );
-            invokeSideEffects( proxy, method, args, result, null );
-            return result;
-        }
-        catch( Throwable throwable )
-        {
-            invokeSideEffects( proxy, method, args, null, throwable );
-            throw throwable;
-        }
-    }
-
-    private void invokeSideEffects( Object proxy,
-                                    Method method,
-                                    Object[] params,
-                                    Object result,
-                                    Throwable originalThrowable
-    )
-        throws Throwable
-    {
-        proxyHandler.setProxy( proxy );
-        resultInvocationHandler.setResult( result, originalThrowable );
-
-        try
-        {
-            for( InvocationHandler sideEffect : sideEffects )
-            {
-                try
-                {
-                    sideEffect.invoke( proxy, method, params );
-                }
-                catch( Throwable throwable )
-                {
-                    if( throwable != originalThrowable )
-                    {
-                        throwable.printStackTrace();
-                    }
-                }
-            }
-        }
-        finally
-        {
-            proxyHandler.clearProxy();
-            resultInvocationHandler.setResult( null, null );
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsModel.java
deleted file mode 100644
index 888ec22..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/SideEffectsModel.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import org.apache.zest.api.sideeffect.SideEffectsDescriptor;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.VisitableHierarchy;
-import org.apache.zest.runtime.injection.Dependencies;
-import org.apache.zest.runtime.injection.DependencyModel;
-import org.apache.zest.spi.module.ModuleSpi;
-
-/**
- * JAVADOC
- */
-public final class SideEffectsModel
-    implements SideEffectsDescriptor, Dependencies, VisitableHierarchy<Object, Object>
-{
-    public static final SideEffectsModel EMPTY_SIDEEFFECTS = new SideEffectsModel( Collections.<SideEffectModel>emptyList() );
-
-    private List<SideEffectModel> sideEffectModels = null;
-
-    public SideEffectsModel( List<SideEffectModel> sideEffectModels )
-    {
-        this.sideEffectModels = sideEffectModels;
-    }
-
-    @Override
-    public Iterable<DependencyModel> dependencies()
-    {
-        return Iterables.flattenIterables( Iterables.map( Dependencies.DEPENDENCIES_FUNCTION, sideEffectModels ) );
-    }
-
-    // Context
-    public SideEffectsInstance newInstance( Method method, ModuleSpi moduleInstance, InvocationHandler invoker )
-    {
-        ProxyReferenceInvocationHandler proxyHandler = new ProxyReferenceInvocationHandler();
-        SideEffectInvocationHandlerResult result = new SideEffectInvocationHandlerResult();
-        List<InvocationHandler> sideEffects = new ArrayList<InvocationHandler>( sideEffectModels.size() );
-        for( SideEffectModel sideEffectModel : sideEffectModels )
-        {
-            InvocationHandler sideEffect = sideEffectModel.newInstance( moduleInstance, result, proxyHandler, method );
-            sideEffects.add( sideEffect );
-        }
-        return new SideEffectsInstance( sideEffects, result, proxyHandler, invoker );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
-        throws ThrowableType
-    {
-        if( modelVisitor.visitEnter( this ) )
-        {
-            for( SideEffectModel sideEffectModel : sideEffectModels )
-            {
-                if( !sideEffectModel.accept( modelVisitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return modelVisitor.visitLeave( this );
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateModel.java
deleted file mode 100644
index a0b17cb..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateModel.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2008-2011, Rickard Öberg. All Rights Reserved.
- *
- * Licensed  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 org.apache.zest.runtime.composite;
-
-import java.lang.reflect.AccessibleObject;
-import org.apache.zest.api.common.QualifiedName;
-import org.apache.zest.api.composite.StateDescriptor;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.VisitableHierarchy;
-import org.apache.zest.runtime.property.PropertiesModel;
-import org.apache.zest.runtime.property.PropertyModel;
-
-/**
- * Base model for Composite state
- */
-public class StateModel
-    implements StateDescriptor, VisitableHierarchy<Object, Object>
-{
-    protected final PropertiesModel propertiesModel;
-
-    public StateModel( PropertiesModel propertiesModel )
-    {
-        this.propertiesModel = propertiesModel;
-    }
-
-    public PropertyModel propertyModelFor( AccessibleObject accessor )
-    {
-        return propertiesModel.getProperty( accessor );
-    }
-
-    @Override
-    public PropertyModel findPropertyModelByName( String name )
-        throws IllegalArgumentException
-    {
-        return propertiesModel.getPropertyByName( name );
-    }
-
-    @Override
-    public PropertyModel findPropertyModelByQualifiedName( QualifiedName name )
-        throws IllegalArgumentException
-    {
-        return propertiesModel.getPropertyByQualifiedName( name );
-    }
-
-    @Override
-    public Iterable<PropertyModel> properties()
-    {
-        return propertiesModel.properties();
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            ( (VisitableHierarchy<Object, Object>) propertiesModel ).accept( visitor );
-        }
-        return visitor.visitLeave( this );
-    }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateResolver.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateResolver.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateResolver.java
deleted file mode 100644
index 5ebe47f..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/StateResolver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2012, Kent Sølvsten.
- *
- * Licensed 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 org.apache.zest.runtime.composite;
-
-import java.util.List;
-import java.util.Map;
-import org.apache.zest.api.association.AssociationDescriptor;
-import org.apache.zest.api.entity.EntityReference;
-import org.apache.zest.api.property.PropertyDescriptor;
-
-/**
- * StateResolver.
- */
-public interface StateResolver
-{
-    Object getPropertyState( PropertyDescriptor propertyDescriptor );
-
-    EntityReference getAssociationState( AssociationDescriptor associationDescriptor );
-
-    List<EntityReference> getManyAssociationState( AssociationDescriptor associationDescriptor );
-
-    Map<String, EntityReference> getNamedAssociationState( AssociationDescriptor associationDescriptor );
-}


Mime
View raw message