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/07/31 04:47:32 UTC
[13/51] [abbrv] [partial] zest-java git commit: Revert "First round
of changes to move to org.apache.zest namespace."
http://git-wip-us.apache.org/repos/asf/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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/zest-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 );
-}