http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java index 7f4b83f..01c0d75 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/CompositeAssemblyImpl.java @@ -20,7 +20,6 @@ package org.apache.zest.runtime.bootstrap; import java.lang.annotation.Annotation; import java.lang.reflect.AccessibleObject; -import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Member; @@ -29,14 +28,15 @@ import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Predicate; -import java.util.stream.StreamSupport; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Optional; import org.apache.zest.api.common.QualifiedName; @@ -63,7 +63,6 @@ import org.apache.zest.api.util.Classes; import org.apache.zest.api.util.Fields; import org.apache.zest.bootstrap.StateDeclarations; import org.apache.zest.functional.HierarchicalVisitorAdapter; -import org.apache.zest.functional.Iterables; import org.apache.zest.runtime.composite.AbstractConstraintModel; import org.apache.zest.runtime.composite.CompositeConstraintModel; import org.apache.zest.runtime.composite.CompositeMethodModel; @@ -80,11 +79,12 @@ import org.apache.zest.runtime.composite.SideEffectsModel; import org.apache.zest.runtime.composite.StateModel; import org.apache.zest.runtime.composite.ValueConstraintsInstance; import org.apache.zest.runtime.composite.ValueConstraintsModel; +import org.apache.zest.runtime.injection.Dependencies; import org.apache.zest.runtime.injection.DependencyModel; import org.apache.zest.runtime.property.PropertiesModel; import org.apache.zest.runtime.property.PropertyModel; -import static java.util.Arrays.asList; +import static java.util.stream.Stream.concat; import static org.apache.zest.api.util.Annotations.hasAnnotation; import static org.apache.zest.api.util.Annotations.isType; import static org.apache.zest.api.util.Annotations.type; @@ -94,22 +94,10 @@ import static org.apache.zest.api.util.Classes.isAssignableFrom; import static org.apache.zest.api.util.Classes.typeOf; import static org.apache.zest.api.util.Classes.typesOf; import static org.apache.zest.api.util.Classes.wrapperClass; -import static org.apache.zest.functional.Iterables.addAll; -import static org.apache.zest.functional.Iterables.cast; -import static org.apache.zest.functional.Iterables.empty; import static org.apache.zest.functional.Iterables.filter; import static org.apache.zest.functional.Iterables.first; -import static org.apache.zest.functional.Iterables.flatten; -import static org.apache.zest.functional.Iterables.flattenIterables; import static org.apache.zest.functional.Iterables.iterable; -import static org.apache.zest.functional.Iterables.map; -import static org.apache.zest.functional.Iterables.matchesAny; -import static org.apache.zest.functional.Iterables.toList; -import static org.apache.zest.functional.Specifications.and; -import static org.apache.zest.functional.Specifications.in; -import static org.apache.zest.functional.Specifications.not; -import static org.apache.zest.functional.Specifications.or; -import static org.apache.zest.functional.Specifications.translate; +import static org.apache.zest.runtime.legacy.Specifications.translate; /** * Declaration of a Composite. @@ -140,9 +128,9 @@ public abstract class CompositeAssemblyImpl } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - return types; + return types.stream(); } protected StateModel createStateModel() @@ -171,40 +159,51 @@ public abstract class CompositeAssemblyImpl propertiesModel = new PropertiesModel(); stateModel = createStateModel(); mixinsModel = createMixinsModel(); +// compositeMethodsModel = new CompositeMethodsModel(); compositeMethodsModel = new CompositeMethodsModel( mixinsModel ); // Implement composite methods - ArrayList<Type> allTypes = getTypes( this.types ); - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses = constraintDeclarations( getTypes( this.types ) ); - Iterable<Class<?>> concernClasses = flatten( concerns, concernDeclarations( allTypes ) ); - Iterable<Class<?>> sideEffectClasses = flatten( sideEffects, sideEffectDeclarations( allTypes ) ); - Iterable<Class<?>> mixinClasses = flatten( mixins, mixinDeclarations( this.types ) ); - implementMixinType( types, constraintClasses, concernClasses, sideEffectClasses, mixinClasses ); + List<Class<?>> constraintClasses = toList( constraintDeclarations( this.types.stream() ) ); + List<Class<?>> concernClasses = toList( concat( concerns.stream(), concernDeclarations( this.types.stream() ) ) ); + List<Class<?>> sideEffectClasses = toList( concat( sideEffects.stream(), sideEffectDeclarations( this.types.stream() ) ) ); + List<Class<?>> mixinClasses = toList( concat( mixins.stream(), mixinDeclarations( this.types.stream() ) ) ); + //noinspection unchecked + implementMixinType( types, + constraintClasses, + concernClasses, + sideEffectClasses, + mixinClasses + ); // Add state from methods and fields + //noinspection unchecked addState( constraintClasses ); } + private List<Class<?>> toList( Stream<Class<?>> stream ) + { + return stream.collect( Collectors.toList() ); + } + protected void addAnnotationsMetaInfo( Class<?> type, MetaInfo compositeMetaInfo ) { Class[] declaredInterfaces = type.getInterfaces(); for( int i = declaredInterfaces.length - 1; i >= 0; i-- ) { - addAnnotationsMetaInfo( declaredInterfaces[ i], compositeMetaInfo ); + addAnnotationsMetaInfo( declaredInterfaces[ i ], compositeMetaInfo ); } compositeMetaInfo.withAnnotations( type ); } - protected void implementMixinType( Iterable<? extends Class<?>> types, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses, - Iterable<Class<?>> concernClasses, - Iterable<Class<?>> sideEffectClasses, - Iterable<Class<?>> mixinClasses + protected void implementMixinType( List<? extends Class<?>> types, + List<Class<?>> constraintClasses, + List<Class<?>> concernClasses, + List<Class<?>> sideEffectClasses, + List<Class<?>> mixinClasses ) { Set<Class<?>> thisDependencies = new HashSet<>(); - for( Class<?> mixinType : types ) - { + types.forEach( mixinType -> { for( Method method : mixinType.getMethods() ) { if( !compositeMethodsModel.isImplemented( method ) @@ -216,20 +215,20 @@ public abstract class CompositeAssemblyImpl ConcernsModel concernsModel = concernsFor( method, mixinModel.mixinClass(), - Iterables.<Class<?>>flatten( concernDeclarations( mixinModel.mixinClass() ), - concernClasses ) + concat( concernDeclarations( mixinModel.mixinClass() ), + concernClasses.stream() ) ); SideEffectsModel sideEffectsModel = sideEffectsFor( method, mixinModel.mixinClass(), - Iterables.<Class<?>>flatten( sideEffectDeclarations( mixinModel.mixinClass() ), - sideEffectClasses ) + concat( sideEffectDeclarations( mixinModel.mixinClass() ), + sideEffectClasses.stream() ) ); method.setAccessible( true ); ConstraintsModel constraints = constraintsFor( method, - Iterables.<Class<? extends Constraint<?, ?>>>flatten( constraintDeclarations( mixinModel.mixinClass() ), - constraintClasses ) + toList( concat( constraintDeclarations( mixinModel.mixinClass() ), + constraintClasses.stream() ) ) ); CompositeMethodModel methodComposite = new CompositeMethodModel( method, @@ -239,60 +238,76 @@ public abstract class CompositeAssemblyImpl mixinsModel ); - // Implement @This references - Iterable<Class<?>> map = map( new DependencyModel.InjectionTypeFunction(), - filter( new DependencyModel.ScopeSpecification( This.class ), - methodComposite.dependencies() ) ); - Iterable<Class<?>> map1 = map( new DependencyModel.InjectionTypeFunction(), - filter( new DependencyModel.ScopeSpecification( This.class ), - mixinModel.dependencies() ) ); - @SuppressWarnings( "unchecked" ) - Iterable<Class<?>> filter = filter( - not( in( Initializable.class, Lifecycle.class, InvocationHandler.class ) ), - map( Classes.RAW_CLASS, interfacesOf( mixinModel.mixinClass() ) ) - ); - Iterable<? extends Class<?>> flatten = flatten( map, map1, filter ); - addAll( thisDependencies, flatten ); + DependencyModel.InjectionTypeFunction injectionTypeFunction = new DependencyModel.InjectionTypeFunction(); + DependencyModel.ScopeSpecification thisSpec = new DependencyModel.ScopeSpecification( This.class ); + Stream<? extends Dependencies> source = Stream.of( methodComposite, mixinModel ); + source.flatMap( Dependencies::dependencies ) + .filter( thisSpec ) + .map( injectionTypeFunction ) + .forEach( thisDependencies::add ); + + interfacesOf( mixinModel.mixinClass() ) + .map( Classes.RAW_CLASS ) + .filter( clazz -> Stream.of( Initializable.class, Lifecycle.class, InvocationHandler.class ).noneMatch( c -> c + .equals( clazz ) ) ) + .forEach( thisDependencies::add ); + +// // Implement @This references +// Iterable<Class<?>> map = map( new DependencyModel.InjectionTypeFunction(), +// filter( new DependencyModel.ScopeSpecification( This.class ), +// methodComposite.dependencies() ) ); +// Iterable<Class<?>> map1 = map( new DependencyModel.InjectionTypeFunction(), +// filter( new DependencyModel.ScopeSpecification( This.class ), +// mixinModel.dependencies() ) ); +// @SuppressWarnings( "unchecked" ) +// Iterable<Class<?>> filter = filter( +// not( in( Initializable.class, Lifecycle.class, InvocationHandler.class ) ), +// map( Classes.RAW_CLASS, interfacesOf( mixinModel.mixinClass() ) ) +// ); +// Iterable<? extends Class<?>> flatten = flatten( map, map1, filter ); +// addAll( thisDependencies, flatten ); compositeMethodsModel.addMethod( methodComposite ); } } // Add type to set of mixin types mixinsModel.addMixinType( mixinType ); - } + } ); // Implement all @This dependencies that were found - for( Class<?> thisDependency : thisDependencies ) - { + thisDependencies.forEach( thisDependency -> { // Add additional declarations from the @This type - Iterable<Class<? extends Constraint<?, ?>>> typeConstraintClasses = flatten( - constraintClasses, + Stream<Class<?>> typeConstraintClasses = concat( + constraintClasses.stream(), constraintDeclarations( thisDependency ) ); - Iterable<Class<?>> typeConcernClasses = flatten( - concernClasses, + Stream<Class<?>> typeConcernClasses = concat( + concernClasses.stream(), concernDeclarations( thisDependency ) ); - Iterable<Class<?>> typeSideEffectClasses = flatten( - sideEffectClasses, + Stream<Class<?>> typeSideEffectClasses = concat( + sideEffectClasses.stream(), sideEffectDeclarations( thisDependency ) ); - Iterable<Class<?>> typeMixinClasses = flatten( - mixinClasses, + Stream<Class<?>> typeMixinClasses = concat( + mixinClasses.stream(), mixinDeclarations( thisDependency ) ); - - @SuppressWarnings( "unchecked" ) - Iterable<? extends Class<?>> singleton = iterable( thisDependency ); - implementMixinType( singleton, typeConstraintClasses, typeConcernClasses, typeSideEffectClasses, typeMixinClasses ); - } + List<? extends Class<?>> singleton = Collections.singletonList( thisDependency ); + implementMixinType( singleton, + toList(typeConstraintClasses), + toList(typeConcernClasses), + toList(typeSideEffectClasses), + toList(typeMixinClasses) + ); + } ); } @SuppressWarnings( "raw" ) - protected MixinModel implementMethod( Method method, Iterable<Class<?>> mixinDeclarations ) + protected MixinModel implementMethod( Method method, List<Class<?>> mixinDeclarations ) { MixinModel implementationModel = mixinsModel.mixinFor( method ); if( implementationModel != null ) { return implementationModel; } - Class mixinClass = findTypedImplementation( method, mixinDeclarations ); + Class mixinClass = findTypedImplementation( method, mixinDeclarations.stream() ); if( mixinClass != null ) { return implementMethodWithClass( method, mixinClass ); @@ -309,37 +324,26 @@ public abstract class CompositeAssemblyImpl + "\nin\n " + types ); } - @SuppressWarnings( {"raw", "unchecked"} ) - private Class findTypedImplementation( final Method method, Iterable<Class<?>> mixins ) + @SuppressWarnings( { "raw", "unchecked" } ) + private Class<?> findTypedImplementation( final Method method, Stream<Class<?>> mixins ) { // Check if mixinClass implements the method. If so, check if the mixinClass is generic or if the filter passes. // If a mixinClass is both generic AND non-generic at the same time, then the filter applies to the non-generic // side only. - Predicate<Class<?>> appliesToSpec = new Predicate<Class<?>>() - { - @Override - public boolean test( Class<?> item ) - { - return helper.appliesTo( item, method, types, item ); - } - }; - return first( filter( and( isAssignableFrom( method.getDeclaringClass() ), - or( Genericpredicate.INSTANCE, appliesToSpec ) ), - mixins ) ); + Predicate<Class<?>> appliesToSpec = item -> helper.appliesTo( item, method, types, item ); + return mixins + .filter( isAssignableFrom( method.getDeclaringClass() ) + .and( Genericpredicate.INSTANCE + .or( appliesToSpec ) ) ) + .findFirst().orElse( null ); } @SuppressWarnings( "unchecked" ) private Class<?> findGenericImplementation( final Method method, Iterable<Class<?>> mixins ) { // Check if mixinClass is generic and the applies-to filter passes - return first( filter( and( Genericpredicate.INSTANCE, new Predicate<Class<?>>() - { - @Override - public boolean test( Class<?> item ) - { - return helper.appliesTo( item, method, types, item ); - } - } ), mixins ) ); + return first( filter( Genericpredicate.INSTANCE + .and( item -> helper.appliesTo( item, method, types, item ) ), mixins ) ); } private MixinModel implementMethodWithClass( Method method, Class mixinClass ) @@ -356,7 +360,7 @@ public abstract class CompositeAssemblyImpl return mixinModel; } - protected void addState( final Iterable<Class<? extends Constraint<?, ?>>> constraintClasses ) + protected void addState( final List<Class<?>> constraintClasses ) { // Add method state compositeMethodsModel.accept( new HierarchicalVisitorAdapter<Object, Object, RuntimeException>() @@ -390,16 +394,8 @@ public abstract class CompositeAssemblyImpl if( visited instanceof MixinModel ) { MixinModel model = (MixinModel) visited; - Consumer<Field> addState = new Consumer<Field>() - { - @Override - public void accept( Field field ) - { - addStateFor( field, constraintClasses ); - } - }; - Iterable<Field> fields = Fields.FIELDS_OF.apply( model.mixinClass() ); - StreamSupport.stream( fields.spliterator(), true ) + Consumer<Field> addState = field -> addStateFor( field, constraintClasses ); + Fields.FIELDS_OF.apply( model.mixinClass() ) .filter( Annotations.hasAnnotation( State.class ) ) .forEach( addState ); return false; @@ -410,7 +406,7 @@ public abstract class CompositeAssemblyImpl } protected void addStateFor( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { String stateName = QualifiedName.fromAccessor( accessor ).name(); @@ -428,11 +424,12 @@ public abstract class CompositeAssemblyImpl } protected PropertyModel newPropertyModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); + annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericPropertyInfo.propertyTypeOf( accessor ), @@ -449,19 +446,18 @@ public abstract class CompositeAssemblyImpl Object initialValue = stateDeclarations.initialValueOf( accessor ); boolean useDefaults = metaInfo.get( UseDefaults.class ) != null || stateDeclarations.useDefaults( accessor ); boolean immutable = this.immutable || metaInfo.get( Immutable.class ) != null; - PropertyModel propertyModel = new PropertyModel( + return new PropertyModel( accessor, immutable, useDefaults, valueConstraintsInstance, metaInfo, initialValue ); - return propertyModel; } // Model private ConstraintsModel constraintsFor( Method method, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { List<ValueConstraintsModel> parameterConstraintModels = Collections.emptyList(); @@ -470,15 +466,15 @@ public abstract class CompositeAssemblyImpl boolean constrained = false; for( int i = 0; i < parameterAnnotations.length; i++ ) { - Annotation[] parameterAnnotation = parameterAnnotations[i]; + Annotation[] parameterAnnotation = parameterAnnotations[ i ]; Name nameAnnotation = (Name) first( filter( isType( Name.class ), iterable( parameterAnnotation ) ) ); String name = nameAnnotation == null ? "param" + ( i + 1 ) : nameAnnotation.value(); boolean optional = first( filter( isType( Optional.class ), iterable( parameterAnnotation ) ) ) != null; ValueConstraintsModel parameterConstraintsModel = constraintsFor( - asList( parameterAnnotation ), - parameterTypes[i], + Arrays.stream( parameterAnnotation ), + parameterTypes[ i ], name, optional, constraintClasses, @@ -506,29 +502,32 @@ public abstract class CompositeAssemblyImpl } protected ValueConstraintsModel constraintsFor( - Iterable<Annotation> constraintAnnotations, + Stream<Annotation> constraintAnnotations, Type valueType, String name, boolean optional, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses, + Iterable<Class<?>> constraintClasses, AccessibleObject accessor ) { valueType = wrapperClass( valueType ); List<AbstractConstraintModel> constraintModels = new ArrayList<>(); - Iterable<Annotation> filter = filter( translate( type(), hasAnnotation( ConstraintDeclaration.class ) ), - constraintAnnotations ); + List<Annotation> filtered = constraintAnnotations + .filter( translate( type(), hasAnnotation( ConstraintDeclaration.class ) ) ) + .collect( Collectors.toList() ); + + // TODO: This massive block below should be cleaned up. nextConstraint: - for( Annotation constraintAnnotation : filter ) + for( Annotation constraintAnnotation : filtered ) { // Check composite declarations first Class<? extends Annotation> annotationType = constraintAnnotation.annotationType(); - for( Class<? extends Constraint<?, ?>> constraint : constraintClasses ) + for( Class<?> constraint : constraintClasses ) { - if( helper.appliesTo( constraint, annotationType, valueType ) ) + if( helper.appliesTo( (Class<? extends Constraint<?, ?>>) constraint, annotationType, valueType ) ) { - constraintModels.add( new ConstraintModel( constraintAnnotation, constraint ) ); + constraintModels.add( new ConstraintModel( constraintAnnotation, (Class<? extends Constraint<?, ?>>) constraint ) ); continue nextConstraint; } } @@ -549,11 +548,11 @@ public abstract class CompositeAssemblyImpl // No implementation found! // Check if if it's a composite constraints - Iterable<Annotation> annotations = iterable( annotationType.getAnnotations() ); - if( matchesAny( translate( type(), hasAnnotation( ConstraintDeclaration.class ) ), annotations ) ) + if( Arrays.stream( annotationType.getAnnotations() ) + .anyMatch( translate( type(), hasAnnotation( ConstraintDeclaration.class ) ) ) ) { ValueConstraintsModel valueConstraintsModel = constraintsFor( - annotations, + Arrays.stream( annotationType.getAnnotations() ), valueType, name, optional, @@ -563,30 +562,29 @@ public abstract class CompositeAssemblyImpl constraintAnnotation, valueConstraintsModel ); constraintModels.add( compositeConstraintModel ); - continue nextConstraint; } - - throw new InvalidCompositeException( - "Cannot find implementation of constraint @" - + annotationType.getSimpleName() - + " for " - + valueType - + " in method " - + ( (Member) accessor ).getName() - + " of composite " + types ); + else + { + throw new InvalidCompositeException( + "Cannot find implementation of constraint @" + + annotationType.getSimpleName() + + " for " + + valueType + + " in method " + + ( (Member) accessor ).getName() + + " of composite " + types ); + } } - return new ValueConstraintsModel( constraintModels, name, optional ); } private ConcernsModel concernsFor( Method method, Class<?> mixinClass, - Iterable<Class<?>> concernClasses + Stream<Class<?>> concernClasses ) { List<ConcernModel> concernsFor = new ArrayList<>(); - for( Class<?> concern : concernClasses ) - { + concernClasses.forEach( concern -> { if( helper.appliesTo( concern, method, types, mixinClass ) ) { concernsFor.add( helper.getConcernModel( concern ) ); @@ -610,7 +608,7 @@ public abstract class CompositeAssemblyImpl } } } - } + } ); // Check annotations on method that have @Concerns annotations themselves for( Annotation annotation : method.getAnnotations() ) @@ -641,12 +639,11 @@ public abstract class CompositeAssemblyImpl private SideEffectsModel sideEffectsFor( Method method, Class<?> mixinClass, - Iterable<Class<?>> sideEffectClasses + Stream<Class<?>> sideEffectClasses ) { List<SideEffectModel> sideEffectsFor = new ArrayList<>(); - for( Class<?> sideEffect : sideEffectClasses ) - { + sideEffectClasses.forEach( sideEffect -> { if( helper.appliesTo( sideEffect, method, types, mixinClass ) ) { sideEffectsFor.add( helper.getSideEffectModel( sideEffect ) ); @@ -670,7 +667,7 @@ public abstract class CompositeAssemblyImpl } } } - } + } ); if( sideEffectsFor.isEmpty() ) { @@ -683,156 +680,75 @@ public abstract class CompositeAssemblyImpl } @SuppressWarnings( "unchecked" ) - private Iterable<Class<? extends Constraint<?, ?>>> constraintDeclarations( Class<?> type ) + private Stream<Class<?>> constraintDeclarations( Class<?> type ) { - ArrayList<Type> allTypes = getTypes( type ); - return constraintDeclarations( allTypes ); + Stream<? extends Type> types = getTypes( type ); + return constraintDeclarations( types ); } - private Iterable<Class<? extends Constraint<?, ?>>> constraintDeclarations( ArrayList<Type> allTypes ) + private Stream<Class<?>> constraintDeclarations( Stream<? extends Type> types ) { - // Find all constraints and flatten them into an iterable - Function<Type, Iterable<Class<? extends Constraint<?, ?>>>> function = new Function<Type, Iterable<Class<? extends Constraint<?, ?>>>>() - { - @Override - public Iterable<Class<? extends Constraint<?, ?>>> apply( Type type ) - { - Constraints constraints = Annotations.annotationOn( type, Constraints.class ); - if( constraints == null ) - { - return empty(); - } - else - { - return iterable( constraints.value() ); - } - } - }; - Iterable<Class<? extends Constraint<?, ?>>> flatten = flattenIterables( map( function, allTypes ) ); - return toList( flatten ); + return types + .filter( mixinType -> Annotations.annotationOn( mixinType, Constraints.class ) != null ) + .flatMap( mixinType -> Arrays.stream( Annotations.annotationOn( mixinType, Constraints.class ).value() ) ); } @SuppressWarnings( "unchecked" ) - private Iterable<Class<?>> concernDeclarations( Class<?> type ) + private Stream<Class<?>> concernDeclarations( Class<?> type ) { - Iterable<? extends Class<?>> iterable = iterable( type ); - return concernDeclarations( getTypes( iterable ) ); + Stream<? extends Type> types = getTypes( type ); + return concernDeclarations( types ); } - private Iterable<Class<?>> concernDeclarations( ArrayList<Type> allTypes ) + private Stream<Class<?>> concernDeclarations( Stream<? extends Type> types ) { - // Find all concerns and flattern them into an iterable - Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>() - { - @Override - public Iterable<Class<?>> apply( Type type ) - { - Concerns concerns = Annotations.annotationOn( type, Concerns.class ); - if( concerns == null ) - { - return empty(); - } - else - { - return iterable( concerns.value() ); - } - } - }; - Iterable<Class<?>> flatten = flattenIterables( map( function, allTypes ) ); - return toList( flatten ); + return types + .filter( mixinType -> Annotations.annotationOn( mixinType, Concerns.class ) != null ) + .flatMap( mixinType -> Arrays.stream( Annotations.annotationOn( mixinType, Concerns.class ).value() ) ); } @SuppressWarnings( "unchecked" ) - protected Iterable<Class<?>> sideEffectDeclarations( Class<?> type ) + protected Stream<Class<?>> sideEffectDeclarations( Class<?> type ) { - Iterable<? extends Class<?>> iterable = iterable( type ); - return sideEffectDeclarations( getTypes( iterable ) ); - } - - protected Iterable<Class<?>> sideEffectDeclarations( ArrayList<Type> allTypes ) - { - // Find all side-effects and flattern them into an iterable - Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>() - { - @Override - public Iterable<Class<?>> apply( Type type ) - { - SideEffects sideEffects = Annotations.annotationOn( type, SideEffects.class ); - if( sideEffects == null ) - { - return empty(); - } - else - { - return iterable( sideEffects.value() ); - } - } - }; - Iterable<Class<?>> flatten = flattenIterables( map( function, allTypes ) ); - return toList( flatten ); + Stream<? extends Type> types = getTypes( type ); + return sideEffectDeclarations( types ); } - private ArrayList<Type> getTypes( Class<?> type ) + private Stream<Class<?>> sideEffectDeclarations( Stream<? extends Type> types ) { - Iterable<? extends Class<?>> iterable = iterable( type ); - return getTypes( iterable ); + return types + .filter( mixinType -> Annotations.annotationOn( mixinType, SideEffects.class ) != null ) + .flatMap( mixinType -> Arrays.stream( Annotations.annotationOn( mixinType, SideEffects.class ).value() ) ); } - private ArrayList<Type> getTypes( Iterable<? extends Class<?>> typess ) + private Stream<? extends Type> getTypes( Type type ) { - // Find side-effect declarations - ArrayList<Type> allTypes = new ArrayList<>(); - for( Class<?> type : typess ) + if( type instanceof Class ) { - Iterable<Type> types; - if( type.isInterface() ) + Class<?> clazz = (Class<?>) type; + if( clazz.isInterface() ) { - types = typesOf( type ); + return typesOf( clazz ); } else { - types = cast( classHierarchy( type ) ); + return classHierarchy( clazz ); } - addAll( allTypes, types ); } - return allTypes; + throw new UnsupportedOperationException( "Unable to handle type " + type.getTypeName() ); } @SuppressWarnings( "unchecked" ) - protected Iterable<Class<?>> mixinDeclarations( Class<?> type ) + protected Stream<Class<?>> mixinDeclarations( Class<?> type ) { - Iterable<? extends Class<?>> iterable = iterable( type ); - return mixinDeclarations( iterable ); + Stream<? extends Type> types = getTypes( type ); + return mixinDeclarations( types ); } - protected Iterable<Class<?>> mixinDeclarations( Iterable<? extends Class<?>> typess ) + private Stream<Class<?>> mixinDeclarations( Stream<? extends Type> types ) { - // Find mixin declarations - ArrayList<Type> allTypes = new ArrayList<>(); - for( Class<?> type : typess ) - { - Iterable<Type> types = typesOf( type ); - addAll( allTypes, types ); - } - - // Find all mixins and flattern them into an iterable - Function<Type, Iterable<Class<?>>> function = new Function<Type, Iterable<Class<?>>>() - { - @Override - public Iterable<Class<?>> apply( Type type ) - { - Mixins mixins = Annotations.annotationOn( type, Mixins.class ); - if( mixins == null ) - { - return empty(); - } - else - { - return iterable( mixins.value() ); - } - } - }; - Iterable<Class<?>> flatten = flattenIterables( map( function, allTypes ) ); - return toList( flatten ); + return types.flatMap( this::getTypes ) + .filter( mixinType -> Annotations.annotationOn( mixinType, Mixins.class ) != null ) + .flatMap( mixinType -> Arrays.stream( Annotations.annotationOn( mixinType, Mixins.class ).value() ) ); } }
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ConfigurationAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ConfigurationAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ConfigurationAssemblyImpl.java index f755d85..37403b5 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ConfigurationAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ConfigurationAssemblyImpl.java @@ -17,6 +17,7 @@ */ package org.apache.zest.runtime.bootstrap; +import java.util.stream.Stream; import org.apache.zest.bootstrap.ConfigurationAssembly; /** @@ -35,7 +36,7 @@ public final class ConfigurationAssemblyImpl } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { return value.types(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/EntityAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/EntityAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/EntityAssemblyImpl.java index 23c0eb6..473ab07 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/EntityAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/EntityAssemblyImpl.java @@ -21,6 +21,8 @@ package org.apache.zest.runtime.bootstrap; import java.lang.annotation.Annotation; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Member; +import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.association.Association; import org.apache.zest.api.association.GenericAssociationInfo; import org.apache.zest.api.association.ManyAssociation; @@ -30,7 +32,6 @@ import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Optional; import org.apache.zest.api.common.QualifiedName; import org.apache.zest.api.common.UseDefaults; -import org.apache.zest.api.constraint.Constraint; import org.apache.zest.api.entity.EntityComposite; import org.apache.zest.api.property.GenericPropertyInfo; import org.apache.zest.api.property.Immutable; @@ -59,8 +60,6 @@ import org.apache.zest.runtime.property.PropertyModel; import static org.apache.zest.api.util.Annotations.isType; import static org.apache.zest.api.util.Classes.typeOf; -import static org.apache.zest.functional.Iterables.filter; -import static org.apache.zest.functional.Iterables.first; /** * Declaration of a EntityComposite. @@ -116,10 +115,9 @@ public final class EntityAssemblyImpl namedAssociationsModel = new NamedAssociationsModel(); buildComposite( helper, stateDeclarations ); - EntityModel entityModel = new EntityModel( - types, visibility, metaInfo, (EntityMixinsModel) mixinsModel, (EntityStateModel) stateModel, compositeMethodsModel ); - - return entityModel; + return new EntityModel( types, visibility, metaInfo, + (EntityMixinsModel) mixinsModel, + (EntityStateModel) stateModel, compositeMethodsModel ); } catch( Exception e ) { @@ -128,9 +126,7 @@ public final class EntityAssemblyImpl } @Override - protected void addStateFor( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses - ) + protected void addStateFor( AccessibleObject accessor, List<Class<?>> constraintClasses ) { String stateName = QualifiedName.fromAccessor( accessor ).name(); @@ -164,11 +160,12 @@ public final class EntityAssemblyImpl @Override protected PropertyModel newPropertyModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); + annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericPropertyInfo.propertyTypeOf( accessor ), ( (Member) accessor ) .getName(), optional, constraintClasses, accessor ); ValueConstraintsInstance valueConstraintsInstance = null; @@ -180,16 +177,16 @@ public final class EntityAssemblyImpl Object defaultValue = stateDeclarations.initialValueOf( accessor ); boolean useDefaults = metaInfo.get( UseDefaults.class ) != null || stateDeclarations.useDefaults( accessor ); boolean immutable = this.immutable || metaInfo.get( Immutable.class ) != null; - PropertyModel propertyModel = new PropertyModel( accessor, immutable, useDefaults, valueConstraintsInstance, metaInfo, defaultValue ); - return propertyModel; + return new PropertyModel( accessor, immutable, useDefaults, valueConstraintsInstance, metaInfo, defaultValue ); } public AssociationModel newAssociationModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + Iterable<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); + annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); // Constraints for Association references ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericAssociationInfo @@ -209,16 +206,16 @@ public final class EntityAssemblyImpl } MetaInfo metaInfo = associationDeclarations.metaInfoFor( accessor ); - AssociationModel associationModel = new AssociationModel( accessor, valueConstraintsInstance, associationValueConstraintsInstance, metaInfo ); - return associationModel; + return new AssociationModel( accessor, valueConstraintsInstance, associationValueConstraintsInstance, metaInfo ); } public ManyAssociationModel newManyAssociationModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); + annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); // Constraints for entities in ManyAssociation ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericAssociationInfo @@ -237,16 +234,16 @@ public final class EntityAssemblyImpl manyValueConstraintsInstance = valueConstraintsModel.newInstance(); } MetaInfo metaInfo = manyAssociationDeclarations.metaInfoFor( accessor ); - ManyAssociationModel associationModel = new ManyAssociationModel( accessor, valueConstraintsInstance, manyValueConstraintsInstance, metaInfo ); - return associationModel; + return new ManyAssociationModel( accessor, valueConstraintsInstance, manyValueConstraintsInstance, metaInfo ); } public NamedAssociationModel newNamedAssociationModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); + annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); // Constraints for entities in NamedAssociation ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericAssociationInfo @@ -265,7 +262,6 @@ public final class EntityAssemblyImpl namedValueConstraintsInstance = valueConstraintsModel.newInstance(); } MetaInfo metaInfo = namedAssociationDeclarations.metaInfoFor( accessor ); - NamedAssociationModel associationModel = new NamedAssociationModel( accessor, valueConstraintsInstance, namedValueConstraintsInstance, metaInfo ); - return associationModel; + return new NamedAssociationModel( accessor, valueConstraintsInstance, namedValueConstraintsInstance, metaInfo ); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ImportedServiceAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ImportedServiceAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ImportedServiceAssemblyImpl.java index a07b4f8..e7dd04f 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ImportedServiceAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ImportedServiceAssemblyImpl.java @@ -17,6 +17,7 @@ package org.apache.zest.runtime.bootstrap; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activator; import org.apache.zest.api.common.InvalidApplicationException; import org.apache.zest.api.common.MetaInfo; @@ -24,7 +25,6 @@ import org.apache.zest.api.common.Visibility; import org.apache.zest.api.service.ServiceImporter; import org.apache.zest.api.service.importer.InstanceImporter; import org.apache.zest.bootstrap.ImportedServiceAssembly; -import org.apache.zest.functional.Iterables; import org.apache.zest.runtime.activation.ActivatorsModel; import org.apache.zest.runtime.service.ImportedServiceModel; @@ -53,12 +53,12 @@ public final class ImportedServiceAssemblyImpl } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - return Iterables.<Class<?>>iterable( serviceType ); + return Stream.of( serviceType ); } - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) void addImportedServiceModel( List<ImportedServiceModel> serviceModels ) { try http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java index 6f072de..dd5318c 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ModuleAssemblyImpl.java @@ -23,6 +23,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Predicate; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; import org.apache.zest.api.activation.Activator; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Visibility; @@ -56,7 +58,6 @@ import org.apache.zest.bootstrap.TransientDeclaration; import org.apache.zest.bootstrap.ValueAssembly; import org.apache.zest.bootstrap.ValueDeclaration; import org.apache.zest.functional.Iterables; -import org.apache.zest.functional.Specifications; import org.apache.zest.runtime.activation.ActivatorsModel; import org.apache.zest.runtime.composite.TransientModel; import org.apache.zest.runtime.composite.TransientsModel; @@ -72,7 +73,6 @@ import org.apache.zest.runtime.structure.ModuleModel; import org.apache.zest.runtime.value.ValueModel; import org.apache.zest.runtime.value.ValuesModel; -import static org.apache.zest.functional.Iterables.first; import static org.apache.zest.functional.Iterables.iterable; /** @@ -145,7 +145,7 @@ public final class ModuleAssemblyImpl } @Override - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) public ValueDeclaration values( Class<?>... valueTypes ) { List<ValueAssemblyImpl> assemblies = new ArrayList<>(); @@ -183,7 +183,7 @@ public final class ModuleAssemblyImpl } @Override - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) public TransientDeclaration transients( Class<?>... transientTypes ) { List<TransientAssemblyImpl> assemblies = new ArrayList<>(); @@ -221,7 +221,7 @@ public final class ModuleAssemblyImpl } @Override - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) public EntityDeclaration entities( Class<?>... entityTypes ) { List<EntityAssemblyImpl> assemblies = new ArrayList<>(); @@ -294,14 +294,14 @@ public final class ModuleAssemblyImpl } } - return new ConfigurationDeclarationImpl( entityAssemblyList, valueAssemblyList ); + return new ConfigurationDeclarationImpl( entityAssemblyList, valueAssemblyList ); } @Override public ConfigurationDeclaration configurations( Predicate<HasTypes> specification ) { Predicate<HasTypes> isConfigurationComposite = new MatchTypeSpecification( Identity.class ); - specification = Specifications.and( specification, isConfigurationComposite ); + specification = specification.and( isConfigurationComposite ); List<EntityAssemblyImpl> entityAssmblyList = new ArrayList<>(); for( EntityAssemblyImpl entityAssembly : entityAssemblies.values() ) { @@ -385,9 +385,9 @@ public final class ModuleAssemblyImpl for( Class<?> serviceType : serviceTypes ) { - if( Iterables.matchesAny( AssemblySpecifications.types( serviceType ), serviceAssemblies ) ) + if( Iterables.matchesAny( AssemblySpecifications.ofAnyType( serviceType ), serviceAssemblies ) ) { - Iterables.addAll( assemblies, Iterables.filter( AssemblySpecifications.types( serviceType ), serviceAssemblies ) ); + Iterables.addAll( assemblies, Iterables.filter( AssemblySpecifications.ofAnyType( serviceType ), serviceAssemblies ) ); } else { @@ -522,10 +522,10 @@ public final class ModuleAssemblyImpl List<EntityModel> entityModels = new ArrayList<>(); for( EntityAssemblyImpl entityDeclaration : entityAssemblies.values() ) { - entityModels.add( entityDeclaration.newEntityModel( metaInfoDeclaration, - metaInfoDeclaration, - metaInfoDeclaration, - metaInfoDeclaration, + entityModels.add( entityDeclaration.newEntityModel( metaInfoDeclaration, + metaInfoDeclaration, + metaInfoDeclaration, + metaInfoDeclaration, helper ) ); } @@ -586,18 +586,11 @@ public final class ModuleAssemblyImpl for( ImportedServiceModel importedServiceModel : importedServiceModels ) { - boolean found = false; - for( ObjectModel objectModel : objectModels ) + if( StreamSupport.stream( objectModels.spliterator(), false ) + .anyMatch( model -> + model.types().findFirst().get().equals( importedServiceModel.serviceImporter() ) ) + ) { - if( first( objectModel.types() ).equals( importedServiceModel.serviceImporter() ) ) - { - found = true; - break; - } - } - if( !found ) - { - @SuppressWarnings( "raw" ) Class<? extends ServiceImporter> serviceFactoryType = importedServiceModel.serviceImporter(); ObjectModel objectModel = new ObjectModel( serviceFactoryType, Visibility.module, new MetaInfo() ); objectModels.add( objectModel ); @@ -607,11 +600,10 @@ public final class ModuleAssemblyImpl return moduleModel; } - private String generateId( Iterable<Class<?>> serviceTypes ) + private String generateId( Stream<Class<?>> serviceTypes ) { // Find service identity that is not yet used - Class<?> serviceType = serviceTypes.iterator() - .next(); // Use the first Iterable, which *SHOULD* be the main serviceType + Class<?> serviceType = serviceTypes.findFirst().orElse( null ); // Use the first, which *SHOULD* be the main serviceType int idx = 0; String id = serviceType.getSimpleName(); boolean invalid; http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ObjectAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ObjectAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ObjectAssemblyImpl.java index f4fdd9c..778ffef 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ObjectAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ObjectAssemblyImpl.java @@ -16,12 +16,12 @@ package org.apache.zest.runtime.bootstrap; import java.lang.reflect.Modifier; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.common.InvalidApplicationException; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Visibility; import org.apache.zest.api.composite.Composite; import org.apache.zest.bootstrap.ObjectAssembly; -import org.apache.zest.functional.Iterables; import org.apache.zest.runtime.object.ObjectModel; /** @@ -46,9 +46,9 @@ public final class ObjectAssemblyImpl } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - return Iterables.<Class<?>>iterable( objectType ); + return Stream.of( objectType ); } void addObjectModel( List<ObjectModel> objectModels ) http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ServiceAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ServiceAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ServiceAssemblyImpl.java index fc1e91b..825ebe4 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ServiceAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ServiceAssemblyImpl.java @@ -16,8 +16,10 @@ package org.apache.zest.runtime.bootstrap; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activator; import org.apache.zest.api.activation.Activators; import org.apache.zest.api.common.InvalidApplicationException; @@ -56,14 +58,14 @@ public final class ServiceAssemblyImpl extends CompositeAssemblyImpl return identity; } - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) ServiceModel newServiceModel( StateDeclarations stateDeclarations, AssemblyHelper helper ) { try { buildComposite( helper, stateDeclarations ); List<Class<? extends Activator<?>>> activatorClasses = Iterables.toList( - Iterables.<Class<? extends Activator<?>>>flatten( activators, activatorsDeclarations( types ) ) ); + Iterables.<Class<? extends Activator<?>>>flatten( activators, activatorsDeclarations( types.stream() ) ) ); return new ServiceModel( types, visibility, metaInfo, new ActivatorsModel( activatorClasses ), mixinsModel, stateModel, compositeMethodsModel, @@ -74,35 +76,22 @@ public final class ServiceAssemblyImpl extends CompositeAssemblyImpl throw new InvalidApplicationException( "Could not register " + types, e ); } } - - private Iterable<Class<? extends Activator<?>>> activatorsDeclarations( Iterable<? extends Class<?>> typess ) + + private Iterable<Class<? extends Activator<?>>> activatorsDeclarations( Stream<? extends Class<?>> typess ) + { + return typess.flatMap( Classes::typesOf ) + .filter( type -> Annotations.annotationOn( type, Activators.class ) == null ) + .flatMap( this::getAnnotations ) + .collect( Collectors.toList() ); + } + + private Stream<? extends Class<? extends Activator<?>>> getAnnotations( Type type ) { - // Find activator declarations - ArrayList<Type> allTypes = new ArrayList<>(); - for( Class<?> type : typess ) + Activators activators1 = Annotations.annotationOn( type, Activators.class ); + if( activators1 == null ) { - Iterable<Type> types = Classes.typesOf( type ); - Iterables.addAll( allTypes, types ); + return Stream.empty(); } - // Find all activators and flattern them into an iterable - Function<Type, Iterable<Class<? extends Activator<?>>>> function = new Function<Type, Iterable<Class<? extends Activator<?>>>>() - { - @Override - public Iterable<Class<? extends Activator<?>>> apply( Type type ) - { - Activators activators = Annotations.annotationOn( type, Activators.class ); - if( activators == null ) - { - return Iterables.empty(); - } - else - { - return Iterables.iterable( activators.value() ); - } - } - }; - Iterable<Class<? extends Activator<?>>> flatten = Iterables.flattenIterables( Iterables.map( function, allTypes ) ); - return Iterables.toList( flatten ); + return Arrays.stream( activators1.value() ); } - } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ValueAssemblyImpl.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ValueAssemblyImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ValueAssemblyImpl.java index e3d9c5d..38e3b2c 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ValueAssemblyImpl.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/bootstrap/ValueAssemblyImpl.java @@ -21,6 +21,8 @@ package org.apache.zest.runtime.bootstrap; import java.lang.annotation.Annotation; import java.lang.reflect.AccessibleObject; import java.lang.reflect.Member; +import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.association.Association; import org.apache.zest.api.association.GenericAssociationInfo; import org.apache.zest.api.association.ManyAssociation; @@ -30,7 +32,6 @@ import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Optional; import org.apache.zest.api.common.QualifiedName; import org.apache.zest.api.common.UseDefaults; -import org.apache.zest.api.constraint.Constraint; import org.apache.zest.api.property.GenericPropertyInfo; import org.apache.zest.api.property.Property; import org.apache.zest.api.util.Annotations; @@ -53,8 +54,6 @@ import org.apache.zest.runtime.value.ValueStateModel; import static org.apache.zest.api.util.Annotations.isType; import static org.apache.zest.api.util.Classes.typeOf; -import static org.apache.zest.functional.Iterables.filter; -import static org.apache.zest.functional.Iterables.first; /** * Declaration of a ValueComposite. @@ -95,10 +94,8 @@ public final class ValueAssemblyImpl namedAssociationsModel = new NamedAssociationsModel(); buildComposite( helper, stateDeclarations ); - ValueModel valueModel = new ValueModel( + return new ValueModel( types, visibility, metaInfo, mixinsModel, (ValueStateModel) stateModel, compositeMethodsModel ); - - return valueModel; } catch( Exception e ) { @@ -108,7 +105,7 @@ public final class ValueAssemblyImpl @Override protected void addStateFor( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { String stateName = QualifiedName.fromAccessor( accessor ).name(); @@ -143,11 +140,12 @@ public final class ValueAssemblyImpl @Override protected PropertyModel newPropertyModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); + annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericPropertyInfo.propertyTypeOf( accessor ), ( (Member) accessor ) .getName(), optional, constraintClasses, accessor ); ValueConstraintsInstance valueConstraintsInstance = null; @@ -162,11 +160,11 @@ public final class ValueAssemblyImpl } public AssociationModel newAssociationModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); // Constraints for Association references ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericAssociationInfo @@ -186,16 +184,15 @@ public final class ValueAssemblyImpl } MetaInfo metaInfo = stateDeclarations.metaInfoFor( accessor ); - AssociationModel associationModel = new AssociationModel( accessor, valueConstraintsInstance, associationValueConstraintsInstance, metaInfo ); - return associationModel; + return new AssociationModel( accessor, valueConstraintsInstance, associationValueConstraintsInstance, metaInfo ); } public ManyAssociationModel newManyAssociationModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); // Constraints for entities in ManyAssociation ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericAssociationInfo @@ -214,16 +211,15 @@ public final class ValueAssemblyImpl manyValueConstraintsInstance = valueConstraintsModel.newInstance(); } MetaInfo metaInfo = stateDeclarations.metaInfoFor( accessor ); - ManyAssociationModel associationModel = new ManyAssociationModel( accessor, valueConstraintsInstance, manyValueConstraintsInstance, metaInfo ); - return associationModel; + return new ManyAssociationModel( accessor, valueConstraintsInstance, manyValueConstraintsInstance, metaInfo ); } - + public NamedAssociationModel newNamedAssociationModel( AccessibleObject accessor, - Iterable<Class<? extends Constraint<?, ?>>> constraintClasses + List<Class<?>> constraintClasses ) { - Iterable<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); - boolean optional = first( filter( isType( Optional.class ), annotations ) ) != null; + Stream<Annotation> annotations = Annotations.findAccessorAndTypeAnnotationsIn( accessor ); + boolean optional = annotations.anyMatch( isType( Optional.class ) ); // Constraints for entities in NamedAssociation ValueConstraintsModel valueConstraintsModel = constraintsFor( annotations, GenericAssociationInfo @@ -242,7 +238,6 @@ public final class ValueAssemblyImpl namedValueConstraintsInstance = valueConstraintsModel.newInstance(); } MetaInfo metaInfo = stateDeclarations.metaInfoFor( accessor ); - NamedAssociationModel associationModel = new NamedAssociationModel( accessor, valueConstraintsInstance, namedValueConstraintsInstance, metaInfo ); - return associationModel; + return new NamedAssociationModel( accessor, valueConstraintsInstance, namedValueConstraintsInstance, metaInfo ); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/AbstractModifierModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/AbstractModifierModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/AbstractModifierModel.java index a2478ce..a14d597 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/AbstractModifierModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/AbstractModifierModel.java @@ -14,9 +14,12 @@ package org.apache.zest.runtime.composite; +import java.lang.reflect.Array; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.util.function.IntFunction; +import java.util.stream.Stream; import org.apache.zest.api.common.ConstructionException; import org.apache.zest.functional.HierarchicalVisitor; import org.apache.zest.functional.VisitableHierarchy; @@ -29,11 +32,6 @@ import org.apache.zest.spi.module.ModuleSpi; import static org.apache.zest.api.util.Classes.RAW_CLASS; import static org.apache.zest.api.util.Classes.interfacesOf; -import static org.apache.zest.functional.Iterables.flattenIterables; -import static org.apache.zest.functional.Iterables.iterable; -import static org.apache.zest.functional.Iterables.map; -import static org.apache.zest.functional.Iterables.toArray; -import static org.apache.zest.functional.Iterables.unique; /** * JAVADOC @@ -47,7 +45,7 @@ public abstract class AbstractModifierModel private final InjectedFieldsModel injectedFieldsModel; private final InjectedMethodsModel injectedMethodsModel; - private final Class<?>[] nextInterfaces; + private final Class<Class<?>>[] nextInterfaces; @SuppressWarnings( "unchecked" ) public AbstractModifierModel( Class<?> declaredModifierClass, Class<?> instantiationClass ) @@ -57,7 +55,10 @@ public abstract class AbstractModifierModel injectedFieldsModel = new InjectedFieldsModel( declaredModifierClass ); injectedMethodsModel = new InjectedMethodsModel( declaredModifierClass ); Class<Class<?>> componentType = (Class<Class<?>>) Class.class.cast( Class.class ); - nextInterfaces = toArray( componentType, unique( map( RAW_CLASS, interfacesOf( declaredModifierClass ) ) ) ); + nextInterfaces = interfacesOf( declaredModifierClass ) + .map( RAW_CLASS ) + .distinct() + .toArray( size -> (Class<Class<?>>[]) Array.newInstance( componentType, size ) ); } public Class<?> modifierClass() @@ -67,9 +68,11 @@ public abstract class AbstractModifierModel @Override @SuppressWarnings( "unchecked" ) - public Iterable<DependencyModel> dependencies() + public Stream<DependencyModel> dependencies() { - return flattenIterables( map( DEPENDENCIES_FUNCTION, iterable( constructorsModel, injectedFieldsModel, injectedMethodsModel ) ) ); + return Stream.of( constructorsModel, injectedFieldsModel, injectedMethodsModel ) + .flatMap( Dependencies::dependencies ); +// return flattenIterables( map( DEPENDENCIES_FUNCTION, iterable( constructorsModel, injectedFieldsModel, injectedMethodsModel ) ) ); } public boolean isGeneric() http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java index dfaccfa..7349cfa 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodModel.java @@ -22,6 +22,8 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; 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.MethodDescriptor; import org.apache.zest.api.util.NullArgumentException; @@ -31,11 +33,6 @@ import org.apache.zest.runtime.injection.Dependencies; import org.apache.zest.runtime.injection.DependencyModel; import org.apache.zest.spi.module.ModuleSpi; -import static org.apache.zest.functional.Iterables.filter; -import static org.apache.zest.functional.Iterables.flattenIterables; -import static org.apache.zest.functional.Iterables.iterable; -import static org.apache.zest.functional.Specifications.notNull; - /** * JAVADOC */ @@ -94,10 +91,11 @@ public final class CompositeMethodModel @Override @SuppressWarnings( "unchecked" ) - public Iterable<DependencyModel> dependencies() + public Stream<DependencyModel> dependencies() { - return flattenIterables( filter( notNull(), iterable( concerns != null ? concerns.dependencies() : null, - sideEffects != null ? sideEffects.dependencies() : null ) ) ); + return Stream.of( concerns, sideEffects ).filter( e -> e != null ).flatMap( Dependencies::dependencies ); +// return flattenIterables( filter( notNull(), iterable( concerns != null ? concerns.dependencies() : null, +// sideEffects != null ? sideEffects.dependencies() : null ) ) ); } // Context @@ -197,7 +195,7 @@ public final class CompositeMethodModel public Iterable<Method> invocationsFor( Class<?> mixinClass ) { - return mixins.invocationsFor( mixinClass ); + return mixins.invocationsFor( mixinClass ).collect( Collectors.toList() ); } public class CompositeMethodAnnotatedElement http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodsModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodsModel.java index 62d44c2..d3915c1 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodsModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeMethodsModel.java @@ -15,10 +15,11 @@ package org.apache.zest.runtime.composite; import java.lang.reflect.Method; +import java.util.Collection; import java.util.LinkedHashMap; +import java.util.stream.Stream; import org.apache.zest.api.composite.MissingMethodException; 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; @@ -30,20 +31,24 @@ import static org.apache.zest.functional.Iterables.map; * Model for Composite methods. This includes both private and public methods. */ public final class CompositeMethodsModel - implements VisitableHierarchy<Object, Object> + implements VisitableHierarchy<Object, Object>, Dependencies { private final LinkedHashMap<Method, CompositeMethodModel> methods; + // TODO: With the large block disappearing, this member has no use. Other implications are also commented out for now. private final MixinsModel mixinsModel; public CompositeMethodsModel( MixinsModel mixinsModel ) +// public CompositeMethodsModel() { methods = new LinkedHashMap<>(); this.mixinsModel = mixinsModel; } - public Iterable<DependencyModel> dependencies() + public Stream<DependencyModel> dependencies() { - return Iterables.flattenIterables( map( Dependencies.DEPENDENCIES_FUNCTION, methods.values() ) ); + Collection<CompositeMethodModel> compositeMethods = methods.values(); + return compositeMethods.stream().flatMap( Dependencies.DEPENDENCIES_FUNCTION ); +// return Iterables.flattenIterables( map( , methods.values() ) ); } // Context @@ -64,26 +69,22 @@ public final class CompositeMethodsModel return mixins.invokeObject( proxy, args, method ); } + // TODO: Figure out what was the intention of this code block, added by Rickard in 2009. It doesn't do anything useful. if( !method.getDeclaringClass().isInterface() ) { - Iterable<Class<?>> types = mixinsModel.mixinTypes(); - for( Class<?> aClass : types ) - { + compositeMethod = mixinsModel.mixinTypes().map( aClass -> { try { Method realMethod = aClass.getMethod( method.getName(), method.getParameterTypes() ); - compositeMethod = methods.get( realMethod ); - break; - } - catch( NoSuchMethodException e ) - { + return methods.get( realMethod ); } - catch( SecurityException e ) + catch( NoSuchMethodException | SecurityException e ) { + } - } + return null; + }).filter( model -> model != null ).findFirst().orElse( null ); } -// return mixins.invokeObject( proxy, args, method ); throw new MissingMethodException( "Method '" + method + "' is not implemented" ); } else http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeModel.java index a9554f3..e7f477e 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/CompositeModel.java @@ -18,7 +18,9 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; +import java.util.stream.Stream; import org.apache.zest.api.common.ConstructionException; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Visibility; @@ -48,10 +50,11 @@ public abstract class CompositeModel private final Visibility visibility; private final MetaInfo metaInfo; protected final StateModel stateModel; + private volatile Class<?> primaryType; protected Class<? extends Composite> proxyClass; protected Constructor<? extends Composite> proxyConstructor; - protected CompositeModel( final Iterable<Class<?>> types, + protected CompositeModel( final List<Class<?>> types, final Visibility visibility, final MetaInfo metaInfo, final MixinsModel mixinsModel, @@ -59,7 +62,7 @@ public abstract class CompositeModel final CompositeMethodsModel compositeMethodsModel ) { - this.types = Iterables.addAll( new LinkedHashSet<Class<?>>(), types ); + this.types = new LinkedHashSet<>( types ); this.visibility = visibility; this.metaInfo = metaInfo; this.stateModel = stateModel; @@ -68,13 +71,27 @@ public abstract class CompositeModel // Create proxy class createProxyClass(); + primaryType = mixinTypes() + .filter( type -> !type.getName().equals( "scala.ScalaObject" ) ) + .reduce( null, ( primary, type ) -> + { + if( primary == null ) + { + return type; + } + else if( primary.isAssignableFrom( type ) ) + { + return type; + } + return primary; + } ); } // Model @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - return types; + return types.stream(); } public StateModel state() @@ -116,35 +133,20 @@ public abstract class CompositeModel @SuppressWarnings( { "raw", "unchecked" } ) public Class<?> primaryType() { - Class primaryType = null; - for( Class type : mixinTypes() ) - { - if( type.getName().equals( "scala.ScalaObject" ) ) - { - continue; - } - if( primaryType == null ) - { - primaryType = type; - } - else if( primaryType.isAssignableFrom( type ) ) - { - primaryType = type; - } - } return primaryType; } @Override - public Iterable<Class<?>> mixinTypes() + public Stream<Class<?>> mixinTypes() { return mixinsModel.mixinTypes(); } @Override - public Iterable<DependencyModel> dependencies() + public Stream<DependencyModel> dependencies() { - return Iterables.flatten( mixinsModel.dependencies(), compositeMethodsModel.dependencies() ); + return Stream.of( mixinsModel, compositeMethodsModel ).flatMap( Dependencies::dependencies ); +// return Iterables.flatten( mixinsModel.dependencies(), compositeMethodsModel.dependencies() ); } @Override @@ -214,7 +216,7 @@ public abstract class CompositeModel public Composite newProxy( InvocationHandler invocationHandler ) throws ConstructionException { - Class<?> mainType = first( types() ); + Class<?> mainType = first( types ); if( mainType.isInterface() ) { http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConcernsModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConcernsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConcernsModel.java index 22092fc..11f91ad 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConcernsModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConcernsModel.java @@ -18,6 +18,7 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.Collections; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.concern.ConcernsDescriptor; import org.apache.zest.functional.HierarchicalVisitor; import org.apache.zest.functional.Iterables; @@ -42,9 +43,10 @@ public final class ConcernsModel } @Override - public Iterable<DependencyModel> dependencies() + public Stream<DependencyModel> dependencies() { - return Iterables.flattenIterables( Iterables.map( Dependencies.DEPENDENCIES_FUNCTION, concernsFor ) ); + return concernsFor.stream().flatMap( ConcernModel::dependencies ); +// return Iterables.flattenIterables( Iterables.map( Dependencies.DEPENDENCIES_FUNCTION, concernsFor ) ); } // Context http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstraintsInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstraintsInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstraintsInstance.java index 4e3b313..e56875d 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstraintsInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstraintsInstance.java @@ -18,13 +18,12 @@ package org.apache.zest.runtime.composite; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.composite.Composite; import org.apache.zest.api.composite.CompositeInstance; import org.apache.zest.api.constraint.ConstraintViolation; import org.apache.zest.api.constraint.ConstraintViolationException; -import static org.apache.zest.functional.Iterables.iterable; - /** * JAVADOC */ @@ -71,10 +70,10 @@ public final class ConstraintsInstance } if( instance instanceof CompositeInstance ) { - throw new ConstraintViolationException( (Composite) ( (CompositeInstance) instance ).proxy(), method, violations ); + throw new ConstraintViolationException( ( (CompositeInstance) instance ).proxy(), method, violations ); } - Iterable<? extends Class<?>> types = iterable( instance.getClass() ); - throw new ConstraintViolationException( instance.toString(), (Iterable<Class<?>>) types, method, violations ); + Stream<Class<?>> types = Stream.of( instance.getClass() ); + throw new ConstraintViolationException( instance.toString(), types, method, violations ); } } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorModel.java index e78481f..c64f172 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/composite/ConstructorModel.java @@ -17,6 +17,7 @@ package org.apache.zest.runtime.composite; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; +import java.util.stream.Stream; import org.apache.zest.api.common.ConstructionException; import org.apache.zest.api.composite.ConstructorDescriptor; import org.apache.zest.api.composite.InvalidCompositeException; @@ -49,7 +50,7 @@ public final class ConstructorModel return constructor; } - public Iterable<DependencyModel> dependencies() + public Stream<DependencyModel> dependencies() { return parameters.dependencies(); }
