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/08/26 17:45:24 UTC
[21/24] zest-java git commit: ZEST-118;
Massive update of removing the Iterable<> use for type manipulation
in the runtime internals and all public APIs of that.
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorsModel.java
index 9bc075f..435a020 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorsModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorsModel.java
@@ -24,7 +24,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import java.util.function.Function;
+import java.util.stream.Stream;
import org.apache.zest.api.common.ConstructionException;
import org.apache.zest.api.composite.CompositeDescriptor;
import org.apache.zest.api.composite.InvalidCompositeException;
@@ -35,8 +35,7 @@ import org.apache.zest.api.util.Classes;
import org.apache.zest.bootstrap.BindingException;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.HierarchicalVisitorAdapter;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specifications;
+import org.apache.zest.runtime.legacy.Specifications;
import org.apache.zest.functional.VisitableHierarchy;
import org.apache.zest.runtime.injection.Dependencies;
import org.apache.zest.runtime.injection.DependencyModel;
@@ -107,18 +106,24 @@ public final class ConstructorsModel
}
@Override
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- Function<ConstructorModel, Iterable<DependencyModel>> constructorDependencies = new Function<ConstructorModel, Iterable<DependencyModel>>()
+ if( boundConstructors == null )
{
- @Override
- public Iterable<DependencyModel> apply( ConstructorModel constructorModel )
- {
- return constructorModel.dependencies();
- }
- };
+ return constructorModels.stream().flatMap( ConstructorModel::dependencies );
+ }
+ return boundConstructors.stream().flatMap( ConstructorModel::dependencies );
- return Iterables.flattenIterables( Iterables.map( constructorDependencies, boundConstructors == null ? constructorModels : boundConstructors ) );
+// Function<ConstructorModel, Iterable<DependencyModel>> constructorDependencies = new Function<ConstructorModel, Iterable<DependencyModel>>()
+// {
+// @Override
+// public Iterable<DependencyModel> apply( ConstructorModel constructorModel )
+// {
+// return constructorModel.dependencies();
+// }
+// };
+//
+// return Iterables.flattenIterables( Iterables.map( constructorDependencies, boundConstructors == null ? constructorModels : boundConstructors ) );
}
@SuppressWarnings( "raw" )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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
index 91a782a..d83c9f0 100644
--- 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
@@ -19,17 +19,17 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
+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.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.apache.zest.api.util.Classes.interfacesOf;
import static org.objectweb.asm.Opcodes.AASTORE;
import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
@@ -69,7 +69,6 @@ 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
@@ -87,13 +86,13 @@ public class FragmentClassLoader
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;
+ case "1.8":
+ JDK_VERSION = Opcodes.V1_8;
+ break;
+ case "1.7":
+ default:
+ JDK_VERSION = Opcodes.V1_7;
+ break;
}
}
@@ -140,8 +139,10 @@ public class FragmentClassLoader
}
}
// To Allow JDK classes to be composed.
- if( name.startsWith( "java." ))
+ if( name.startsWith( "java." ) )
+ {
name = "zest." + name;
+ }
byte[] b = generateClass( name, baseClass );
return defineClass( name, b, 0, b.length, baseClass.getProtectionDomain() );
@@ -164,7 +165,8 @@ public class FragmentClassLoader
// Composite reference
{
- cw.visitField( ACC_PUBLIC, "_instance", "Lorg/apache/zest/api/composite/CompositeInvoker;", null, null ).visitEnd();
+ cw.visitField( ACC_PUBLIC, "_instance", "Lorg/apache/zest/api/composite/CompositeInvoker;", null, null )
+ .visitEnd();
}
// Static Method references
@@ -173,10 +175,10 @@ public class FragmentClassLoader
int idx = 1;
for( Method method : baseClass.getMethods() )
{
- if( isOverridden(method, baseClass) )
+ if( isOverridden( method, baseClass ) )
{
cw.visitField( ACC_PRIVATE + ACC_STATIC, "m" + idx++, "Ljava/lang/reflect/Method;", null,
- null ).visitEnd();
+ null ).visitEnd();
hasProxyMethods = true;
}
}
@@ -190,34 +192,42 @@ public class FragmentClassLoader
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);
+ cmv.visitVarInsn( ALOAD, 0 );
int idx = 1;
for( Class aClass : constructor.getParameterTypes() )
{
final int opcode;
- if (aClass.equals(Integer.TYPE)) {
+ if( aClass.equals( Integer.TYPE ) )
+ {
opcode = ILOAD;
- } else if (aClass.equals(Long.TYPE)) {
+ }
+ else if( aClass.equals( Long.TYPE ) )
+ {
opcode = LLOAD;
- } else if (aClass.equals(Float.TYPE)) {
+ }
+ else if( aClass.equals( Float.TYPE ) )
+ {
opcode = FLOAD;
- } else if (aClass.equals(Double.TYPE)) {
+ }
+ else if( aClass.equals( Double.TYPE ) )
+ {
opcode = DLOAD;
- } else {
+ }
+ else
+ {
opcode = ALOAD;
}
- cmv.visitVarInsn(opcode, idx++);
+ cmv.visitVarInsn( opcode, idx++ );
}
- cmv.visitMethodInsn(INVOKESPECIAL, baseClassSlash, "<init>", desc, false);
- cmv.visitInsn(RETURN);
- cmv.visitMaxs(idx, idx);
+ cmv.visitMethodInsn( INVOKESPECIAL, baseClassSlash, "<init>", desc, false );
+ cmv.visitInsn( RETURN );
+ cmv.visitMaxs( idx, idx );
cmv.visitEnd();
}
}
-
// Overloaded and unimplemented methods
if( hasProxyMethods )
{
@@ -226,7 +236,7 @@ public class FragmentClassLoader
List<Label> exceptionLabels = new ArrayList<>();
for( Method method : methods )
{
- if( isOverridden(method, baseClass) )
+ if( isOverridden( method, baseClass ) )
{
idx++;
String methodName = method.getName();
@@ -404,7 +414,7 @@ public class FragmentClassLoader
int midx = 0;
for( Method method : methods )
{
- if( isOverridden(method, baseClass) )
+ if( isOverridden( method, baseClass ) )
{
method.setAccessible( true );
Class methodClass;
@@ -466,7 +476,7 @@ public class FragmentClassLoader
return cw.toByteArray();
}
- private static boolean isOverridden(Method method, Class baseClass)
+ private static boolean isOverridden( Method method, Class baseClass )
{
if( Modifier.isAbstract( method.getModifiers() ) )
{
@@ -505,58 +515,39 @@ public class FragmentClassLoader
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;
- }
+ return clazz.isAssignableFrom( baseClass ) && checkForMethod( method, clazz );
}
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() );
+ return interfacesOf( clazz )
+ .map( Classes.RAW_CLASS )
+ .filter( intface -> checkForMethod( method, intface ) )
+ .findFirst()
+ .orElseThrow( () -> 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 ) ) ) )
+ return interfacesOf( baseClass )
+ .map( Classes.RAW_CLASS )
+ .filter( Methods.HAS_METHODS )
+ .anyMatch( intface -> checkForMethod( method, intface ));
+ }
+
+ private static boolean checkForMethod( Method method, Class<?> intface )
+ {
+ try
{
- try
- {
- Method m = aClass.getMethod( method.getName(), method.getParameterTypes() );
- m.setAccessible( true );
- return true;
- }
- catch( NoSuchMethodException e )
- {
- // Ignore
- }
+ Method m = intface.getMethod( method.getName(), method.getParameterTypes() );
+ m.setAccessible( true );
+ return true;
+ }
+ catch( NoSuchMethodException e )
+ {
+ return false;
}
- return false;
}
private static void type( MethodVisitor mv, Class<?> aClass )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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
index a0ade3d..ea4c5e4 100644
--- 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
@@ -77,18 +77,15 @@ public class FunctionStateResolver
public void populateState( EntityModel model, EntityState state )
{
- for( PropertyDescriptor propDesc : model.state().properties() )
- {
+ model.state().properties().forEach( propDesc -> {
Object value = getPropertyState( propDesc );
state.setPropertyValue( propDesc.qualifiedName(), value );
- }
- for( AssociationDescriptor assDesc : model.state().associations() )
- {
+ } );
+ model.state().associations().forEach( assDesc -> {
EntityReference ref = getAssociationState( assDesc );
state.setAssociationValue( assDesc.qualifiedName(), ref );
- }
- for( ManyAssociationModel manyAssDesc : model.state().manyAssociations() )
- {
+ } );
+ model.state().manyAssociations().forEach( manyAssDesc -> {
ManyAssociationState associationState = state.manyAssociationValueOf( manyAssDesc.qualifiedName() );
// First clear existing ones
for( EntityReference ref : associationState )
@@ -100,9 +97,8 @@ public class FunctionStateResolver
{
associationState.add( 0, ref );
}
- }
- for( NamedAssociationModel namedAssDesc : model.state().namedAssociations() )
- {
+ } );
+ model.state().namedAssociations().forEach( namedAssDesc -> {
NamedAssociationState associationState = state.namedAssociationValueOf( namedAssDesc.qualifiedName() );
// First clear existing ones
for( String name : associationState )
@@ -114,6 +110,6 @@ public class FunctionStateResolver
{
associationState.put( entry.getKey(), entry.getValue() );
}
- }
+ } );
}
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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
index c0be60b..abbe7b0 100644
--- 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
@@ -17,6 +17,8 @@ package org.apache.zest.runtime.composite;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.zest.api.common.ConstructionException;
import org.apache.zest.api.composite.CompositeInstance;
import org.apache.zest.api.injection.scope.This;
@@ -25,29 +27,25 @@ 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.Dependencies;
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>
+ implements MixinDescriptor, VisitableHierarchy<Object, Object>, Dependencies
{
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;
+ private final List<Class<?>> thisMixinTypes;
public MixinModel( Class<?> declaredMixinClass, Class<?> instantiationClass )
{
@@ -77,10 +75,12 @@ public final class MixinModel
return InvocationHandler.class.isAssignableFrom( mixinClass );
}
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- return Iterables.flatten( constructorsModel.dependencies(), injectedFieldsModel.dependencies(), injectedMethodsModel
- .dependencies() );
+ return Stream.of( constructorsModel, injectedFieldsModel, injectedMethodsModel )
+ .flatMap( Dependencies::dependencies );
+// return Iterables.flatten( constructorsModel.dependencies(), injectedFieldsModel.dependencies(), injectedMethodsModel
+// .dependencies() );
}
@Override
@@ -121,11 +121,7 @@ public final class MixinModel
instantiationClass.getDeclaredField( "_instance" ).set( mixin,
injectionContext.compositeInstance() );
}
- catch( IllegalAccessException e )
- {
- e.printStackTrace();
- }
- catch( NoSuchFieldException e )
+ catch( IllegalAccessException | NoSuchFieldException e )
{
e.printStackTrace();
}
@@ -141,7 +137,7 @@ public final class MixinModel
}
catch( InitializationException e )
{
- List<Class<?>> compositeType = toList( compositeInstance.types() );
+ List<Class<?>> compositeType = compositeInstance.types().collect( Collectors.toList() );
String message = "Unable to initialize " + mixinClass + " in composite " + compositeType;
throw new ConstructionException( message, e );
}
@@ -154,9 +150,14 @@ public final class MixinModel
return thisMixinTypes;
}
- private Iterable<Class<?>> buildThisMixinTypes()
+ private List<Class<?>> buildThisMixinTypes()
{
- return map( new DependencyModel.InjectionTypeFunction(), unique( Iterables.filter( new DependencyModel.ScopeSpecification( This.class ), dependencies() ) ) );
+ return dependencies()
+ .filter( new DependencyModel.ScopeSpecification( This.class ) )
+ .distinct()
+ .map( new DependencyModel.InjectionTypeFunction() )
+ .collect( Collectors.toList() );
+// return map( new DependencyModel.InjectionTypeFunction(), unique( Iterables.filter( new DependencyModel.ScopeSpecification( This.class ), dependencies() ) ) );
}
protected FragmentInvocationHandler newInvocationHandler( Method method )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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
index 30fc6c0..c944c2b 100644
--- 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
@@ -25,11 +25,13 @@ import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.stream.Stream;
import org.apache.zest.api.util.Classes;
import org.apache.zest.bootstrap.BindingException;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.HierarchicalVisitorAdapter;
import org.apache.zest.functional.VisitableHierarchy;
+import org.apache.zest.runtime.injection.Dependencies;
import org.apache.zest.runtime.injection.DependencyModel;
import org.apache.zest.runtime.injection.InjectedFieldModel;
import org.apache.zest.runtime.model.Binder;
@@ -37,7 +39,6 @@ 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;
/**
@@ -45,7 +46,7 @@ import static org.apache.zest.functional.Iterables.map;
* and mixin implementations.
*/
public class MixinsModel
- implements Binder, VisitableHierarchy<Object, Object>
+ implements Binder, VisitableHierarchy<Object, Object>, Dependencies
{
protected final Map<Method, MixinModel> methodImplementation = new HashMap<Method, MixinModel>();
protected final Map<Method, Integer> methodIndex = new HashMap<Method, Integer>();
@@ -54,9 +55,9 @@ public class MixinsModel
private final Map<Class, Integer> mixinIndex = new HashMap<Class, Integer>();
private final Set<Class<?>> mixinTypes = new LinkedHashSet<Class<?>>();
- public Iterable<Class<?>> mixinTypes()
+ public Stream<Class<?>> mixinTypes()
{
- return mixinTypes;
+ return mixinTypes.stream();
}
public <T> boolean isImplemented( Class<T> mixinType )
@@ -88,10 +89,9 @@ public class MixinsModel
public void addMixinType( Class mixinType )
{
- for( Type type : interfacesOf( mixinType ) )
- {
- mixinTypes.add( Classes.RAW_CLASS.apply( type ) );
- }
+ Stream<? extends Type> stream = interfacesOf( mixinType );
+ Stream<Class<?>> rawClass = stream.map( Classes.RAW_CLASS );
+ rawClass.forEach( mixinTypes::add );
}
public void addMixinModel( MixinModel mixinModel )
@@ -189,36 +189,33 @@ public class MixinsModel
return mixinFor( method ).newInvocationHandler( method );
}
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- return flattenIterables( map( new Function<MixinModel, Iterable<DependencyModel>>()
- {
- @Override
- public Iterable<DependencyModel> apply( MixinModel mixinModel )
- {
- return mixinModel.dependencies();
- }
- }, mixinModels ) );
+ return mixinModels.stream().flatMap( Dependencies::dependencies );
}
- public Iterable<Method> invocationsFor( final Class<?> mixinClass )
+ public Stream<Method> invocationsFor( final Class<?> mixinClass )
{
- return map( new Function<Map.Entry<Method, MixinModel>, Method>()
- {
- @Override
- public Method apply( Map.Entry<Method, MixinModel> entry )
- {
- return entry.getKey();
- }
- }, filter( new Predicate<Map.Entry<Method, MixinModel>>()
- {
- @Override
- public boolean test( Map.Entry<Method, MixinModel> item )
- {
- MixinModel model = item.getValue();
- return model.mixinClass().equals( mixinClass );
- }
- }, methodImplementation.entrySet() ) );
+ return methodImplementation.entrySet()
+ .stream().filter( entry -> entry.getValue().mixinClass().equals( mixinClass ) )
+ .map( Map.Entry::getKey );
+
+// return map( new Function<Map.Entry<Method, MixinModel>, Method>()
+// {
+// @Override
+// public Method apply( Map.Entry<Method, MixinModel> entry )
+// {
+// return entry.getKey();
+// }
+// }, filter( new Predicate<Map.Entry<Method, MixinModel>>()
+// {
+// @Override
+// public boolean test( Map.Entry<Method, MixinModel> item )
+// {
+// MixinModel model = item.getValue();
+// return model.mixinClass().equals( mixinClass );
+// }
+// }, methodImplementation.entrySet() ) );
}
private class Uses
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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
index 888ec22..26d2afa 100644
--- 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
@@ -19,6 +19,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.stream.Stream;
import org.apache.zest.api.sideeffect.SideEffectsDescriptor;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.Iterables;
@@ -43,9 +44,10 @@ public final class SideEffectsModel
}
@Override
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- return Iterables.flattenIterables( Iterables.map( Dependencies.DEPENDENCIES_FUNCTION, sideEffectModels ) );
+ return sideEffectModels.stream().flatMap( Dependencies::dependencies );
+// return Iterables.flattenIterables( Iterables.map( Dependencies.DEPENDENCIES_FUNCTION, sideEffectModels ) );
}
// Context
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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
index a0b17cb..1ad5088 100644
--- 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
@@ -18,6 +18,7 @@
package org.apache.zest.runtime.composite;
import java.lang.reflect.AccessibleObject;
+import java.util.stream.Stream;
import org.apache.zest.api.common.QualifiedName;
import org.apache.zest.api.composite.StateDescriptor;
import org.apache.zest.functional.HierarchicalVisitor;
@@ -58,7 +59,7 @@ public class StateModel
}
@Override
- public Iterable<PropertyModel> properties()
+ public Stream<PropertyModel> properties()
{
return propertiesModel.properties();
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
index e834262..6e84bf0 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientBuilderInstance.java
@@ -84,10 +84,10 @@ public final class TransientBuilderInstance<T>
throws ConstructionException
{
// Set correct info's (immutable) on the state
- for( PropertyDescriptor propertyDescriptor : model.model().state().properties() )
+ model.model().state().properties().forEach( propertyDescriptor ->
{
- ( (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() ) ).setPropertyInfo( (PropertyInfo) propertyDescriptor );
- }
+ ( (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() ) ).setPropertyInfo( propertyDescriptor );
+ } );
model.model().checkConstraints( state );
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
index 924ecb7..384f4fc 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientClassLoader.java
@@ -19,6 +19,9 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
+import org.apache.zest.api.entity.Lifecycle;
+import org.apache.zest.api.mixin.Initializable;
+import org.apache.zest.api.util.Methods;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
@@ -26,12 +29,9 @@ 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.apache.zest.api.util.Classes.RAW_CLASS;
+import static org.apache.zest.api.util.Classes.interfacesOf;
import static org.objectweb.asm.Opcodes.AASTORE;
import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
@@ -71,7 +71,6 @@ 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 classes used for transients. All methods delegate to CompositeInvoker.
@@ -88,13 +87,13 @@ import static org.apache.zest.api.util.Classes.interfacesOf;
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;
+ case "1.8":
+ JDK_VERSION = Opcodes.V1_8;
+ break;
+ case "1.7":
+ default:
+ JDK_VERSION = Opcodes.V1_7;
+ break;
}
}
@@ -439,14 +438,7 @@ import static org.apache.zest.api.util.Classes.interfacesOf;
private static boolean isOverloaded( Method method, Class baseClass )
{
- if( Modifier.isFinal( method.getModifiers() ) )
- {
- return false; // Cannot override final methods
- }
- else
- {
- return true;
- }
+ return !Modifier.isFinal( method.getModifiers() );
}
private static boolean isInternalZestMethod( Method method, Class baseClass )
@@ -473,33 +465,29 @@ import static org.apache.zest.api.util.Classes.interfacesOf;
}
}
- private static Class getInterfaceMethodDeclaration( Method method, Class clazz )
+ private static Class<?> getInterfaceMethodDeclaration( Method method, Class clazz )
throws NoSuchMethodException
{
- Iterable<Class<?>> interfaces = Iterables.map( Classes.RAW_CLASS, interfacesOf( clazz ) );
- for( Class<?> anInterface : interfaces )
- {
+ return interfacesOf( clazz ).map( RAW_CLASS ).filter( intFace -> {
try
{
- anInterface.getMethod( method.getName(), method.getParameterTypes() );
- return anInterface;
+ intFace.getMethod( method.getName(), method.getParameterTypes() );
+ return true;
}
catch( NoSuchMethodException e )
{
// Try next
+ return false;
}
- }
-
- throw new NoSuchMethodException( method.getName() );
+ } ).findFirst().orElseThrow( () -> 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 ) ) ) )
- {
+ return interfacesOf( baseClass ).map( RAW_CLASS ).filter( Methods.HAS_METHODS ).anyMatch( clazz -> {
try
{
- Method m = aClass.getMethod( method.getName(), method.getParameterTypes() );
+ Method m = clazz.getMethod( method.getName(), method.getParameterTypes() );
m.setAccessible( true );
return true;
}
@@ -507,8 +495,8 @@ import static org.apache.zest.api.util.Classes.interfacesOf;
{
// Ignore
}
- }
- return false;
+ return false;
+ } );
}
private static void type( MethodVisitor mv, Class<?> aClass )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
index df15d5c..5531d52 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientInstance.java
@@ -20,6 +20,7 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
+import java.util.stream.Stream;
import org.apache.zest.api.ZestAPI;
import org.apache.zest.api.composite.Composite;
import org.apache.zest.api.composite.CompositeInstance;
@@ -102,7 +103,7 @@ public class TransientInstance
}
@Override
- public Iterable<Class<?>> types()
+ public Stream<Class<?>> types()
{
return compositeModel.types();
}
@@ -213,7 +214,7 @@ public class TransientInstance
String modelTypeName = compositeModel.getClass().getSimpleName();
String metaTypeModel = modelTypeName.substring( 0, modelTypeName.length() - 5 );
return metaTypeModel + "Instance{" +
- "mixins=" + ( mixins == null ? null : Arrays.asList( mixins ) ) +
+ "mixins=" + Arrays.asList( mixins ) +
", state=" + state +
", compositeModel=" + compositeModel +
", module=" + moduleInstance +
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
index 0d0ecac..cc3d343 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientModel.java
@@ -14,22 +14,21 @@
package org.apache.zest.runtime.composite;
+import java.util.List;
import org.apache.zest.api.common.MetaInfo;
import org.apache.zest.api.common.Visibility;
import org.apache.zest.api.composite.TransientDescriptor;
import org.apache.zest.api.constraint.ConstraintViolationException;
import org.apache.zest.runtime.injection.InjectionContext;
-import org.apache.zest.runtime.property.PropertyModel;
import org.apache.zest.spi.module.ModuleSpi;
/**
* Model for Transient Composites
*/
-public class TransientModel
- extends CompositeModel
+public class TransientModel extends CompositeModel
implements TransientDescriptor
{
- public TransientModel( Iterable<Class<?>> types, final Visibility visibility,
+ public TransientModel( List<Class<?>> types, final Visibility visibility,
final MetaInfo metaInfo,
final MixinsModel mixinsModel,
final StateModel stateModel,
@@ -62,9 +61,8 @@ public class TransientModel
public void checkConstraints( TransientStateInstance instanceState )
throws ConstraintViolationException
{
- for( PropertyModel propertyModel : stateModel.properties() )
- {
- propertyModel.checkConstraints( instanceState.<Object>propertyFor( propertyModel.accessor() ).get() );
- }
+ stateModel.properties().forEach( propertyModel ->
+ propertyModel.checkConstraints( instanceState.propertyFor( propertyModel.accessor() ).get() )
+ );
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
index 14d0901..13f3853 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientStateInstance.java
@@ -20,6 +20,7 @@ package org.apache.zest.runtime.composite;
import java.lang.reflect.AccessibleObject;
import java.util.Map;
+import java.util.stream.Stream;
import org.apache.zest.api.property.Property;
import org.apache.zest.api.property.StateHolder;
@@ -53,8 +54,8 @@ public final class TransientStateInstance
}
@Override
- public Iterable<Property<?>> properties()
+ public Stream<Property<?>> properties()
{
- return properties.values();
+ return properties.values().stream();
}
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
index 102719e..42a34cb 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/TransientsModel.java
@@ -15,6 +15,8 @@
package org.apache.zest.runtime.composite;
import java.util.List;
+import java.util.stream.Stream;
+import org.apache.zest.api.composite.TransientDescriptor;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.VisitableHierarchy;
@@ -31,9 +33,9 @@ public class TransientsModel
this.transientModels = transientModels;
}
- public Iterable<TransientModel> models()
+ public Stream<TransientModel> models()
{
- return transientModels;
+ return transientModels.stream();
}
@Override
@@ -52,4 +54,9 @@ public class TransientsModel
}
return modelVisitor.visitLeave( this );
}
+
+ public Stream<? extends TransientDescriptor> stream()
+ {
+ return transientModels.stream();
+ }
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
index 56deeb7..7106515 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntitiesModel.java
@@ -15,6 +15,8 @@
package org.apache.zest.runtime.entity;
import java.util.List;
+import java.util.stream.Stream;
+import org.apache.zest.api.entity.EntityDescriptor;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.VisitableHierarchy;
@@ -31,9 +33,9 @@ public class EntitiesModel
this.entityModels = entityModels;
}
- public Iterable<EntityModel> models()
+ public Stream<EntityModel> models()
{
- return entityModels;
+ return entityModels.stream();
}
@Override
@@ -52,4 +54,9 @@ public class EntitiesModel
}
return modelVisitor.visitLeave( this );
}
+
+ public Stream<? extends EntityDescriptor> stream()
+ {
+ return entityModels.stream();
+ }
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
index 8512a87..de3013e 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityInstance.java
@@ -17,13 +17,11 @@ package org.apache.zest.runtime.entity;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-import java.util.HashSet;
-import java.util.Set;
-import org.apache.zest.api.association.Association;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.zest.api.association.AssociationDescriptor;
import org.apache.zest.api.association.AssociationStateDescriptor;
-import org.apache.zest.api.association.ManyAssociation;
-import org.apache.zest.api.association.NamedAssociation;
import org.apache.zest.api.composite.CompositeDescriptor;
import org.apache.zest.api.composite.CompositeInstance;
import org.apache.zest.api.constraint.ConstraintViolationException;
@@ -41,6 +39,8 @@ import org.apache.zest.spi.entity.EntityState;
import org.apache.zest.spi.entity.EntityStatus;
import org.apache.zest.spi.module.ModuleSpi;
+import static java.util.stream.Collectors.toList;
+
/**
* Entity instance
*/
@@ -128,7 +128,7 @@ public final class EntityInstance
}
@Override
- public Iterable<Class<?>> types()
+ public Stream<Class<?>> types()
{
return entityModel.types();
}
@@ -268,50 +268,27 @@ public final class EntityInstance
{
// Calculate aggregated Entities
AssociationStateDescriptor stateDescriptor = entityModel.state();
- Set<Object> aggregatedEntities = new HashSet<>();
- Iterable<? extends AssociationDescriptor> associations = stateDescriptor.associations();
- for( AssociationDescriptor association : associations )
- {
- if( association.isAggregated() )
- {
- Association<?> assoc = state.associationFor( association.accessor() );
- Object aggregatedEntity = assoc.get();
- if( aggregatedEntity != null )
- {
- aggregatedEntities.add( aggregatedEntity );
- }
- }
- }
- Iterable<? extends AssociationDescriptor> manyAssociations = stateDescriptor.manyAssociations();
- for( AssociationDescriptor association : manyAssociations )
- {
- if( association.isAggregated() )
- {
- ManyAssociation<?> manyAssoc = state.manyAssociationFor( association.accessor() );
- for( Object entity : manyAssoc )
- {
- aggregatedEntities.add( entity );
- }
- }
- }
- Iterable<? extends AssociationDescriptor> namedAssociations = stateDescriptor.namedAssociations();
- for( AssociationDescriptor association : namedAssociations )
- {
- if( association.isAggregated() )
- {
- NamedAssociation<?> namedAssoc = state.namedAssociationFor( association.accessor() );
- for( String name : namedAssoc )
- {
- aggregatedEntities.add( namedAssoc.get( name ) );
- }
- }
- }
-
- // Remove aggregated Entities
- for( Object aggregatedEntity : aggregatedEntities )
- {
- unitOfWork.remove( aggregatedEntity );
- }
+ Stream.concat(
+ stateDescriptor.associations()
+ .filter( AssociationDescriptor::isAggregated )
+ .map( association -> state.associationFor( association.accessor() ).get() )
+ .filter( entity -> entity != null ),
+
+ Stream.concat(
+ stateDescriptor.manyAssociations()
+ .filter( AssociationDescriptor::isAggregated )
+ .flatMap( association -> state.manyAssociationFor( association.accessor() ).toList().stream() )
+ .filter( entity -> entity != null ),
+
+ stateDescriptor.namedAssociations()
+ .filter( AssociationDescriptor::isAggregated )
+ .flatMap( association -> state.namedAssociationFor( association.accessor() )
+ .toMap()
+ .values()
+ .stream() )
+ .filter( entity -> entity != null )
+ )
+ ).distinct().forEach( unitOfWork::remove );
}
public void checkConstraints()
@@ -322,8 +299,8 @@ public final class EntityInstance
}
catch( ConstraintViolationException e )
{
- throw new ConstraintViolationException( identity.identity(), entityModel.types(), e.mixinTypeName(), e.methodName(), e
- .constraintViolations() );
+ List<Class<?>> entityModelList = entityModel.types().collect( toList() );
+ throw new ConstraintViolationException( identity.identity(), entityModelList, e.mixinTypeName(), e.methodName(), e.constraintViolations() );
}
}
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
index aa45b18..8079507 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
@@ -15,6 +15,7 @@
package org.apache.zest.runtime.entity;
import java.lang.reflect.Method;
+import java.util.List;
import org.apache.zest.api.association.AssociationDescriptor;
import org.apache.zest.api.common.ConstructionException;
import org.apache.zest.api.common.MetaInfo;
@@ -29,7 +30,6 @@ import org.apache.zest.api.property.PropertyDescriptor;
import org.apache.zest.api.property.StateHolder;
import org.apache.zest.api.unitofwork.EntityCompositeAlreadyExistsException;
import org.apache.zest.api.util.Annotations;
-import org.apache.zest.functional.Iterables;
import org.apache.zest.runtime.composite.CompositeMethodsModel;
import org.apache.zest.runtime.composite.CompositeModel;
import org.apache.zest.runtime.property.PropertyModel;
@@ -40,16 +40,10 @@ import org.apache.zest.spi.entitystore.EntityStoreException;
import org.apache.zest.spi.entitystore.EntityStoreUnitOfWork;
import org.apache.zest.spi.module.ModuleSpi;
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.flattenIterables;
-import static org.apache.zest.functional.Iterables.map;
-
/**
* JAVADOC
*/
-public final class EntityModel
- extends CompositeModel
+public final class EntityModel extends CompositeModel
implements EntityDescriptor
{
private static final Method IDENTITY_METHOD;
@@ -68,7 +62,7 @@ public final class EntityModel
private final boolean queryable;
- public EntityModel( Iterable<Class<?>> types,
+ public EntityModel( List<Class<?>> types,
Visibility visibility,
MetaInfo info,
EntityMixinsModel mixinsModel,
@@ -78,10 +72,12 @@ public final class EntityModel
{
super( types, visibility, info, mixinsModel, stateModel, compositeMethodsModel );
- final Queryable queryable = first( Iterables.<Queryable>cast(
- filter( Annotations.isType( Queryable.class ),
- flattenIterables( map( Annotations.ANNOTATIONS_OF, types ) ) ) ) );
- this.queryable = queryable == null || queryable.value();
+ this.queryable = types.stream()
+ .flatMap( Annotations.ANNOTATIONS_OF )
+ .filter( Annotations.isType( Queryable.class ) )
+ .map( annot -> ( (Queryable) annot ).value() )
+ .findFirst()
+ .orElse( false );
}
@Override
@@ -98,8 +94,7 @@ public final class EntityModel
public EntityInstance newInstance( ModuleUnitOfWork uow, ModuleSpi moduleInstance, EntityState state )
{
- EntityInstance instance = new EntityInstance( uow, moduleInstance, this, state );
- return instance;
+ return new EntityInstance( uow, moduleInstance, this, state );
}
public Object[] newMixinHolder()
@@ -143,28 +138,24 @@ public final class EntityModel
public void initState( ModuleSpi module, EntityState entityState )
{
// Set new properties to default value
- for( PropertyModel propertyDescriptor : state().properties() )
- {
+ state().properties().forEach( propertyDescriptor -> {
entityState.setPropertyValue( propertyDescriptor.qualifiedName(), propertyDescriptor.initialValue( module ) );
- }
+ } );
// Set new associations to null
- for( AssociationDescriptor associationDescriptor : state().associations() )
- {
+ state().associations().forEach( associationDescriptor -> {
entityState.setAssociationValue( associationDescriptor.qualifiedName(), null );
- }
+ } );
// Set new many-associations to empty
- for( AssociationDescriptor associationDescriptor : state().manyAssociations() )
- {
+ state().manyAssociations().forEach( associationDescriptor -> {
entityState.manyAssociationValueOf( associationDescriptor.qualifiedName() );
- }
+ } );
// Set new named-associations to empty
- for( AssociationDescriptor associationDescriptor : state().namedAssociations() )
- {
+ state().namedAssociations().forEach( associationDescriptor -> {
entityState.namedAssociationValueOf( associationDescriptor.qualifiedName() );
- }
+ } );
}
public void invokeLifecycle( boolean create, Object[] mixins, CompositeInstance instance, StateHolder state )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
index 82a511b..9ab2326 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
@@ -24,18 +24,15 @@ import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiFunction;
-import java.util.function.Function;
+import java.util.stream.Stream;
import org.apache.zest.api.association.Association;
-import org.apache.zest.api.association.AssociationDescriptor;
import org.apache.zest.api.association.AssociationStateHolder;
import org.apache.zest.api.association.ManyAssociation;
import org.apache.zest.api.association.NamedAssociation;
import org.apache.zest.api.entity.EntityReference;
import org.apache.zest.api.property.Property;
-import org.apache.zest.api.property.PropertyDescriptor;
import org.apache.zest.api.unitofwork.UnitOfWork;
import org.apache.zest.api.util.Classes;
-import org.apache.zest.functional.Iterables;
import org.apache.zest.runtime.association.AssociationInstance;
import org.apache.zest.runtime.association.AssociationModel;
import org.apache.zest.runtime.association.ManyAssociationInstance;
@@ -98,16 +95,9 @@ public final class EntityStateInstance
}
@Override
- public Iterable<Property<?>> properties()
+ public Stream<Property<?>> properties()
{
- return Iterables.map( new Function<PropertyDescriptor, Property<?>>()
- {
- @Override
- public Property<?> apply( PropertyDescriptor propertyDescriptor )
- {
- return propertyFor( propertyDescriptor.accessor() );
- }
- }, stateModel.properties() );
+ return stateModel.properties().map( descriptor -> propertyFor( descriptor.accessor() ) );
}
@Override
@@ -127,20 +117,20 @@ public final class EntityStateInstance
: associationModel,
entityFunction,
new Property<EntityReference>()
- {
- @Override
- public EntityReference get()
- {
- return entityState.associationValueOf( associationModel.qualifiedName() );
- }
-
- @Override
- public void set( EntityReference newValue )
- throws IllegalArgumentException, IllegalStateException
{
- entityState.setAssociationValue( associationModel.qualifiedName(), newValue );
- }
- } );
+ @Override
+ public EntityReference get()
+ {
+ return entityState.associationValueOf( associationModel.qualifiedName() );
+ }
+
+ @Override
+ public void set( EntityReference newValue )
+ throws IllegalArgumentException, IllegalStateException
+ {
+ entityState.setAssociationValue( associationModel.qualifiedName(), newValue );
+ }
+ } );
state.put( accessor, association );
}
@@ -148,16 +138,9 @@ public final class EntityStateInstance
}
@Override
- public Iterable<Association<?>> allAssociations()
+ public Stream<? extends Association<?>> allAssociations()
{
- return Iterables.map( new Function<AssociationDescriptor, Association<?>>()
- {
- @Override
- public Association<?> apply( AssociationDescriptor associationDescriptor )
- {
- return associationFor( associationDescriptor.accessor() );
- }
- }, stateModel.associations() );
+ return stateModel.associations().map( descriptor -> associationFor( descriptor.accessor() ) );
}
@Override
@@ -184,16 +167,9 @@ public final class EntityStateInstance
}
@Override
- public Iterable<ManyAssociation<?>> allManyAssociations()
+ public Stream<ManyAssociation<?>> allManyAssociations()
{
- return Iterables.map( new Function<AssociationDescriptor, ManyAssociation<?>>()
- {
- @Override
- public ManyAssociation<?> apply( AssociationDescriptor associationDescriptor )
- {
- return manyAssociationFor( associationDescriptor.accessor() );
- }
- }, stateModel.manyAssociations() );
+ return stateModel.manyAssociations().map( descriptor -> manyAssociationFor( descriptor.accessor() ) );
}
@Override
@@ -220,33 +196,22 @@ public final class EntityStateInstance
}
@Override
- public Iterable<? extends NamedAssociation<?>> allNamedAssociations()
+ public Stream<? extends NamedAssociation<?>> allNamedAssociations()
{
- return Iterables.map( new Function<AssociationDescriptor, NamedAssociation<?>>()
- {
- @Override
- public NamedAssociation<?> apply( AssociationDescriptor associationDescriptor )
- {
- return namedAssociationFor( associationDescriptor.accessor() );
- }
- }, stateModel.namedAssociations() );
+ return stateModel.namedAssociations().map( descriptor -> namedAssociationFor( descriptor.accessor() ) );
}
public void checkConstraints()
{
- for( PropertyDescriptor propertyDescriptor : stateModel.properties() )
- {
- ConstraintsCheck constraints = (ConstraintsCheck) propertyDescriptor;
+ stateModel.properties().forEach( propertyDescriptor -> {
Property<Object> property = this.propertyFor( propertyDescriptor.accessor() );
- constraints.checkConstraints( property.get() );
- }
+ propertyDescriptor.checkConstraints( property.get() );
+ } );
- for( AssociationDescriptor associationDescriptor : stateModel.associations() )
- {
- ConstraintsCheck constraints = (ConstraintsCheck) associationDescriptor;
+ stateModel.associations().forEach( associationDescriptor -> {
Association<Object> association = this.associationFor( associationDescriptor.accessor() );
- constraints.checkConstraints( association.get() );
- }
+ associationDescriptor.checkConstraints( association.get() );
+ } );
// TODO Should ManyAssociations and NamedAssociations be checked too?
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
index 8b9b56e..82952b5 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
@@ -20,6 +20,7 @@
package org.apache.zest.runtime.entity;
import java.lang.reflect.AccessibleObject;
+import java.util.stream.Stream;
import org.apache.zest.api.association.AssociationDescriptor;
import org.apache.zest.api.association.AssociationStateDescriptor;
import org.apache.zest.api.common.QualifiedName;
@@ -117,19 +118,19 @@ public final class EntityStateModel
}
@Override
- public Iterable<AssociationModel> associations()
+ public Stream<AssociationModel> associations()
{
return associationsModel.associations();
}
@Override
- public Iterable<ManyAssociationModel> manyAssociations()
+ public Stream<ManyAssociationModel> manyAssociations()
{
return manyAssociationsModel.manyAssociations();
}
@Override
- public Iterable<NamedAssociationModel> namedAssociations()
+ public Stream<NamedAssociationModel> namedAssociations()
{
return namedAssociationsModel.namedAssociations();
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
index 4d68cff..55ee4f9 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
@@ -19,20 +19,14 @@
package org.apache.zest.runtime.injection;
import java.util.function.Function;
+import java.util.stream.Stream;
/**
* TODO
*/
public interface Dependencies
{
- public static Function<Dependencies, Iterable<DependencyModel>> DEPENDENCIES_FUNCTION = new Function<Dependencies, Iterable<DependencyModel>>()
- {
- @Override
- public Iterable<DependencyModel> apply( Dependencies dependencies )
- {
- return dependencies.dependencies();
- }
- };
+ Function<Dependencies, Stream<DependencyModel>> DEPENDENCIES_FUNCTION = Dependencies::dependencies;
- Iterable<DependencyModel> dependencies();
+ Stream<DependencyModel> dependencies();
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
index f521e11..349a750 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
@@ -20,6 +20,8 @@ import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Collection;
import java.util.function.Predicate;
+import java.util.stream.Stream;
+import org.apache.zest.api.composite.DependencyDescriptor;
import org.apache.zest.api.composite.InjectedFieldDescriptor;
import org.apache.zest.api.util.Classes;
import org.apache.zest.bootstrap.BindingException;
@@ -36,7 +38,7 @@ import static java.util.Collections.singleton;
* JAVADOC
*/
public final class InjectedFieldModel
- implements InjectedFieldDescriptor, VisitableHierarchy<InjectedFieldModel, DependencyModel>
+ implements InjectedFieldDescriptor, Dependencies, VisitableHierarchy<InjectedFieldModel, DependencyModel>
{
private DependencyModel dependencyModel;
private Field injectedField;
@@ -49,9 +51,9 @@ public final class InjectedFieldModel
}
@Override
- public DependencyModel dependency()
+ public Stream<DependencyModel> dependencies()
{
- return dependencyModel;
+ return Stream.of( dependencyModel );
}
@Override
@@ -60,6 +62,12 @@ public final class InjectedFieldModel
return injectedField;
}
+ @Override
+ public DependencyDescriptor dependency()
+ {
+ return dependencyModel;
+ }
+
public void bind( Resolution resolution )
throws BindingException
{
@@ -80,7 +88,11 @@ public final class InjectedFieldModel
catch( IllegalArgumentException e )
{
String valueClassName;
- if( Proxy.isProxyClass( value.getClass() ) )
+ if( value == null )
+ {
+ valueClassName = "<null>";
+ }
+ else if( Proxy.isProxyClass( value.getClass() ) )
{
InvocationHandler invocationHandler = Proxy.getInvocationHandler( value );
if( invocationHandler instanceof TransientInstance )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
index 0767282..18126eb 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
@@ -20,21 +20,18 @@ import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
-import java.util.function.Function;
+import java.util.stream.Stream;
import org.apache.zest.api.injection.InjectionScope;
import org.apache.zest.api.util.Classes;
import org.apache.zest.api.util.Fields;
import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Iterables;
import org.apache.zest.functional.VisitableHierarchy;
import static org.apache.zest.api.util.Annotations.hasAnnotation;
import static org.apache.zest.api.util.Annotations.type;
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.iterable;
-import static org.apache.zest.functional.Specifications.translate;
+import static org.apache.zest.runtime.legacy.Specifications.translate;
/**
* JAVADOC
@@ -42,20 +39,17 @@ import static org.apache.zest.functional.Specifications.translate;
public final class InjectedFieldsModel
implements Dependencies, VisitableHierarchy<Object, Object>
{
- private final List<InjectedFieldModel> fields = new ArrayList<InjectedFieldModel>();
+ private final List<InjectedFieldModel> fields = new ArrayList<>();
public InjectedFieldsModel( Class fragmentClass )
{
- Iterable<Field> mappedFields = Fields.FIELDS_OF.apply( fragmentClass );
- for( Field field : mappedFields )
- {
- Annotation injectionAnnotation = first( filter( translate( type(), hasAnnotation( InjectionScope.class ) ), iterable( field
- .getAnnotations() ) ) );
- if( injectionAnnotation != null )
- {
- addModel( fragmentClass, field, injectionAnnotation );
- }
- }
+ Fields.fieldsOf( fragmentClass ).forEach( field ->
+ Arrays.stream( field.getAnnotations() )
+ .filter( translate( type(), hasAnnotation( InjectionScope.class ) ) )
+ .filter( annot -> annot != null )
+ .forEach( injectionAnnotation -> addModel( fragmentClass, field, injectionAnnotation )
+ )
+ );
}
private void addModel( Class fragmentClass, Field field, Annotation injectionAnnotation )
@@ -85,16 +79,17 @@ public final class InjectedFieldsModel
}
@Override
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- return Iterables.map( new Function<InjectedFieldModel, DependencyModel>()
- {
- @Override
- public DependencyModel apply( InjectedFieldModel injectedFieldModel )
- {
- return injectedFieldModel.dependency();
- }
- }, fields );
+ return fields.stream().flatMap( Dependencies::dependencies );
+// return Iterables.map( new Function<InjectedFieldModel, DependencyModel>()
+// {
+// @Override
+// public DependencyModel apply( InjectedFieldModel injectedFieldModel )
+// {
+// return injectedFieldModel.dependency();
+// }
+// }, fields );
}
@Override
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java
index b0ec660..bdb8d22 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java
@@ -16,6 +16,7 @@ package org.apache.zest.runtime.injection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.stream.Stream;
import org.apache.zest.api.composite.InjectedMethodDescriptor;
import org.apache.zest.bootstrap.InjectionException;
import org.apache.zest.functional.HierarchicalVisitor;
@@ -45,7 +46,7 @@ public final class InjectedMethodModel
}
@Override
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
return parameters.dependencies();
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
index 864143e..d4c5d06 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
@@ -15,26 +15,23 @@
package org.apache.zest.runtime.injection;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import java.util.Optional;
+import java.util.stream.Stream;
import org.apache.zest.api.injection.InjectionScope;
import org.apache.zest.api.util.Annotations;
import org.apache.zest.api.util.Classes;
import org.apache.zest.api.util.Methods;
import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specifications;
+import org.apache.zest.runtime.legacy.Specifications;
import org.apache.zest.functional.VisitableHierarchy;
import static org.apache.zest.api.util.Annotations.hasAnnotation;
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.flattenIterables;
-import static org.apache.zest.functional.Iterables.iterable;
-import static org.apache.zest.functional.Iterables.map;
/**
* JAVADOC
@@ -43,57 +40,70 @@ public final class InjectedMethodsModel
implements Dependencies, VisitableHierarchy<Object, Object>
{
// Model
- private final List<InjectedMethodModel> methodModels = new ArrayList<InjectedMethodModel>();
+ private final List<InjectedMethodModel> methodModels = new ArrayList<>();
public InjectedMethodsModel( Class fragmentClass )
{
- nextMethod:
- for( Method method : Methods.METHODS_OF.apply( fragmentClass ) )
- {
+ Methods.methodsOf( fragmentClass ).forEach( method -> {
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
if( parameterAnnotations.length > 0 )
{
InjectedParametersModel parametersModel = new InjectedParametersModel();
final Type[] genericParameterTypes = method.getGenericParameterTypes();
+ boolean found = true;
for( int i = 0; i < parameterAnnotations.length; i++ )
{
- Annotation injectionAnnotation = first( filter( Specifications.translate( Annotations.type(), hasAnnotation( InjectionScope.class ) ), iterable( parameterAnnotations[ i ] ) ) );
- if( injectionAnnotation == null )
- {
- continue nextMethod;
- }
-
- Type genericType = genericParameterTypes[ i ];
- if( genericType instanceof ParameterizedType )
+ Optional<Annotation> opt = Arrays.stream( parameterAnnotations[ i ] )
+ .filter( Specifications.translate( Annotations.type(), hasAnnotation( InjectionScope.class ) ) )
+ .findFirst();
+ if( opt.isPresent() )
{
- genericType = new ParameterizedTypeInstance( ( (ParameterizedType) genericType ).getActualTypeArguments(), ( (ParameterizedType) genericType )
- .getRawType(), ( (ParameterizedType) genericType ).getOwnerType() );
-
- for( int j = 0; j < ( (ParameterizedType) genericType ).getActualTypeArguments().length; j++ )
+ Annotation injectionAnnotation = opt.get();
+ Type genericType = genericParameterTypes[ i ];
+ if( genericType instanceof ParameterizedType )
{
- Type type = ( (ParameterizedType) genericType ).getActualTypeArguments()[ j ];
- if( type instanceof TypeVariable )
+ genericType = createParameterizedTypeInstance( (ParameterizedType) genericType );
+
+ for( int j = 0; j < ( (ParameterizedType) genericType ).getActualTypeArguments().length; j++ )
{
- type = Classes.resolveTypeVariable( (TypeVariable) type, method.getDeclaringClass(), fragmentClass );
- ( (ParameterizedType) genericType ).getActualTypeArguments()[ j ] = type;
+ Type type = ( (ParameterizedType) genericType ).getActualTypeArguments()[ j ];
+ if( type instanceof TypeVariable )
+ {
+ type = Classes.resolveTypeVariable( (TypeVariable) type, method.getDeclaringClass(), fragmentClass );
+ ( (ParameterizedType) genericType ).getActualTypeArguments()[ j ] = type;
+ }
}
}
+ boolean optional = DependencyModel.isOptional( injectionAnnotation, parameterAnnotations[ i ] );
+ DependencyModel dependencyModel = new DependencyModel( injectionAnnotation, genericType, fragmentClass, optional, parameterAnnotations[ i ] );
+ parametersModel.addDependency( dependencyModel );
}
-
- boolean optional = DependencyModel.isOptional( injectionAnnotation, parameterAnnotations[ i ] );
- DependencyModel dependencyModel = new DependencyModel( injectionAnnotation, genericType, fragmentClass, optional, parameterAnnotations[ i ] );
- parametersModel.addDependency( dependencyModel );
+ else
+ {
+ found = false;
+ break;
+ }
+ }
+ if( found )
+ {
+ methodModels.add( new InjectedMethodModel( method, parametersModel ) );
}
- InjectedMethodModel methodModel = new InjectedMethodModel( method, parametersModel );
- methodModels.add( methodModel );
}
- }
+ } );
+ }
+
+ private Type createParameterizedTypeInstance( ParameterizedType genericType )
+ {
+ return new ParameterizedTypeInstance(
+ genericType.getActualTypeArguments(), genericType.getRawType(), genericType.getOwnerType()
+ );
}
@Override
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- return flattenIterables( map( Dependencies.DEPENDENCIES_FUNCTION, methodModels ) );
+ return methodModels.stream().flatMap( InjectedMethodModel::dependencies );
+// return flattenIterables( map( Dependencies.DEPENDENCIES_FUNCTION, methodModels ) );
}
// Context
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
index 1a4c723..91aeeb7 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
@@ -18,9 +18,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
+import java.util.stream.Stream;
import org.apache.zest.api.composite.InjectedParametersDescriptor;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.VisitableHierarchy;
+import org.apache.zest.runtime.composite.ConstructorModel;
/**
* JAVADOC
@@ -36,9 +38,9 @@ public final class InjectedParametersModel
}
@Override
- public Iterable<DependencyModel> dependencies()
+ public Stream<DependencyModel> dependencies()
{
- return parameterDependencies;
+ return parameterDependencies.stream();
}
// Context
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
index 8d87bb9..05a5fa4 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
@@ -35,16 +35,14 @@ import org.apache.zest.runtime.injection.InjectionProvider;
import org.apache.zest.runtime.injection.InjectionProviderFactory;
import org.apache.zest.runtime.model.Resolution;
-import static org.apache.zest.functional.Iterables.first;
-
/**
* JAVADOC
*/
public final class InjectionProviderFactoryStrategy
implements InjectionProviderFactory
{
- private final Map<Class<? extends Annotation>, InjectionProviderFactory> generalProviderFactories = new HashMap<Class<? extends Annotation>, InjectionProviderFactory>();
- private final Map<Class<? extends Annotation>, InjectionProviderFactory> valuesProviderFactories = new HashMap<Class<? extends Annotation>, InjectionProviderFactory>();
+ private final Map<Class<? extends Annotation>, InjectionProviderFactory> generalProviderFactories = new HashMap<>();
+ private final Map<Class<? extends Annotation>, InjectionProviderFactory> valuesProviderFactories = new HashMap<>();
private MetaInfo metaInfo;
public InjectionProviderFactoryStrategy( MetaInfo metaInfo )
@@ -82,7 +80,7 @@ public final class InjectionProviderFactoryStrategy
}
}
ModelDescriptor composite = resolution.model();
- Class<?> compositeType = first( composite.types() );
+ Class<?> compositeType = composite.types().findFirst().orElse( null );
if( factory1 != null && ValueComposite.class.isAssignableFrom( compositeType ) )
{
throw new InvalidValueCompositeException( "@" + injectionAnnotationType.getSimpleName() + " is not allowed in ValueComposites: " + compositeType );
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
index 764d227..9b65780 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java
@@ -26,7 +26,7 @@ import org.apache.zest.api.util.Annotations;
import org.apache.zest.api.util.Classes;
import org.apache.zest.bootstrap.InvalidInjectionException;
import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specifications;
+import org.apache.zest.runtime.legacy.Specifications;
import org.apache.zest.runtime.injection.DependencyModel;
import org.apache.zest.runtime.injection.InjectionContext;
import org.apache.zest.runtime.injection.InjectionProvider;
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
index 70c8160..a3e2bf4 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java
@@ -21,6 +21,9 @@ package org.apache.zest.runtime.injection.provider;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.zest.api.composite.CompositeDescriptor;
import org.apache.zest.api.util.Classes;
import org.apache.zest.bootstrap.InvalidInjectionException;
@@ -32,9 +35,6 @@ import org.apache.zest.runtime.injection.InjectionProvider;
import org.apache.zest.runtime.injection.InjectionProviderFactory;
import org.apache.zest.runtime.model.Resolution;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.iterable;
-
/**
* JAVADOC
*/
@@ -51,7 +51,7 @@ public final class ThisInjectionProviderFactory
// If Composite type then return real type, otherwise use the specified one
final Class<?> thisType = dependencyModel.rawInjectionType();
- Iterable<Class<?>> injectionTypes = null;
+ Stream<Class<?>> injectionTypes;
if( Classes.assignableTypeSpecification( thisType ).test( bindingContext.model() ) )
{
injectionTypes = bindingContext.model().types();
@@ -59,25 +59,17 @@ public final class ThisInjectionProviderFactory
else
{
CompositeDescriptor acd = ( (CompositeDescriptor) bindingContext.model() );
- for( Class<?> mixinType : acd.mixinTypes() )
- {
- if( thisType.isAssignableFrom( mixinType ) )
- {
- Iterable<? extends Class<?>> iterable = iterable( thisType );
- injectionTypes = (Iterable<Class<?>>) iterable;
- break;
- }
- }
-
- if( injectionTypes == null )
- {
- throw new InvalidInjectionException( "Composite " + bindingContext.model()
- + " does not implement @This type " + thisType.getName() + " in fragment "
- + dependencyModel.injectedClass().getName() );
- }
+ injectionTypes = acd.mixinTypes().filter( thisType::isAssignableFrom );
}
- return new ThisInjectionProvider( injectionTypes );
+ List<Class<?>> classes = injectionTypes.collect( Collectors.toList() );
+ if( classes.size() == 0 )
+ {
+ throw new InvalidInjectionException( "Composite " + bindingContext.model()
+ + " does not implement @This type " + thisType.getName() + " in fragment "
+ + dependencyModel.injectedClass().getName() );
+ }
+ return new ThisInjectionProvider( classes );
}
else
{
@@ -85,27 +77,27 @@ public final class ThisInjectionProviderFactory
}
}
- @SuppressWarnings( {"raw", "unchecked"} )
+ @SuppressWarnings( { "raw", "unchecked" } )
private static class ThisInjectionProvider
implements InjectionProvider
{
Constructor proxyConstructor;
private Class[] interfaces;
- private ThisInjectionProvider( Iterable<Class<?>> types )
+ private ThisInjectionProvider( List<Class<?>> types )
{
try
{
Class proxyClass;
- if( Proxy.class.isAssignableFrom( first( types ) ) )
+ Class<?> mainType = types.get( 0 );
+ if( Proxy.class.isAssignableFrom( mainType ) )
{
- proxyClass = first( types );
+ proxyClass = mainType;
}
else
{
- Class<?> mainType = first( types );
interfaces = Iterables.toArray( Class.class, Iterables.<Class>cast( types ) );
- proxyClass = ProxyGenerator.createProxyClass(mainType.getClassLoader(), interfaces);
+ proxyClass = ProxyGenerator.createProxyClass( mainType.getClassLoader(), interfaces );
}
proxyConstructor = proxyClass.getConstructor( InvocationHandler.class );