ZEST-118; Massive update of removing the Iterable<> use for type manipulation in the runtime internals and all public APIs of that.
Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/bd6fbad9 Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/bd6fbad9 Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/bd6fbad9 Branch: refs/heads/develop Commit: bd6fbad9f3bb053015a6e0e1458a38179dab8ede Parents: b659ba6 Author: Niclas Hedhman <[email protected]> Authored: Wed Aug 26 23:44:24 2015 +0800 Committer: Niclas Hedhman <[email protected]> Committed: Wed Aug 26 23:44:27 2015 +0800 ---------------------------------------------------------------------- .../main/java/org/apache/zest/api/ZestAPI.java | 76 +- .../association/AssociationStateDescriptor.java | 7 +- .../api/association/AssociationStateHolder.java | 7 +- .../org/apache/zest/api/common/MetaInfo.java | 15 +- .../zest/api/composite/CompositeContext.java | 8 +- .../zest/api/composite/CompositeDescriptor.java | 4 +- .../zest/api/composite/StateDescriptor.java | 3 +- .../zest/api/configuration/Configuration.java | 4 +- .../NoSuchConfigurationException.java | 2 +- .../ConstraintViolationException.java | 34 +- .../apache/zest/api/property/StateHolder.java | 3 +- .../zest/api/query/grammar/AndPredicate.java | 9 +- .../zest/api/query/grammar/Notpredicate.java | 3 +- .../zest/api/query/grammar/OrPredicate.java | 8 +- .../api/service/importer/InstanceImporter.java | 48 +- .../api/service/importer/NewObjectImporter.java | 2 +- .../importer/ServiceSelectorImporter.java | 2 +- .../apache/zest/api/structure/Application.java | 3 + .../org/apache/zest/api/structure/Layer.java | 3 + .../org/apache/zest/api/structure/Module.java | 12 + .../java/org/apache/zest/api/type/HasTypes.java | 4 +- .../zest/api/type/MatchTypeSpecification.java | 17 +- .../zest/api/type/ValueCompositeType.java | 12 +- .../org/apache/zest/api/type/ValueType.java | 26 +- .../unitofwork/EntityTypeNotFoundException.java | 29 +- .../api/unitofwork/NoSuchEntityException.java | 39 +- .../org/apache/zest/api/util/Annotations.java | 55 +- .../java/org/apache/zest/api/util/Classes.java | 474 +++++------- .../org/apache/zest/api/util/Constructors.java | 12 +- .../java/org/apache/zest/api/util/Fields.java | 25 +- .../java/org/apache/zest/api/util/Methods.java | 28 +- .../org/apache/zest/api/util/ClassesTest.java | 48 +- .../zest/bootstrap/AssemblySpecifications.java | 21 +- .../bootstrap/builder/ModuleDeclaration.java | 3 +- .../zest/bootstrap/DocumentationSupport.java | 2 +- .../org/apache/zest/functional/ForEach.java | 97 --- .../org/apache/zest/functional/Functions.java | 237 ------ .../org/apache/zest/functional/Iterables.java | 107 +-- .../apache/zest/functional/Specifications.java | 208 ------ .../apache/zest/functional/FunctionsTest.java | 144 ---- .../apache/zest/functional/IterablesTest.java | 90 --- .../zest/functional/SpecificationsTest.java | 86 --- .../functional/docsupport/FunctionalDocs.java | 12 +- .../runtime/activation/ActivationDelegate.java | 14 +- .../runtime/association/AssociationModel.java | 12 +- .../runtime/association/AssociationsModel.java | 5 +- .../association/ManyAssociationModel.java | 7 +- .../association/ManyAssociationsModel.java | 5 +- .../association/NamedAssociationModel.java | 7 +- .../association/NamedAssociationsModel.java | 5 +- .../bootstrap/CompositeAssemblyImpl.java | 436 +++++------ .../bootstrap/ConfigurationAssemblyImpl.java | 3 +- .../runtime/bootstrap/EntityAssemblyImpl.java | 56 +- .../bootstrap/ImportedServiceAssemblyImpl.java | 8 +- .../runtime/bootstrap/ModuleAssemblyImpl.java | 46 +- .../runtime/bootstrap/ObjectAssemblyImpl.java | 6 +- .../runtime/bootstrap/ServiceAssemblyImpl.java | 49 +- .../runtime/bootstrap/ValueAssemblyImpl.java | 47 +- .../composite/AbstractModifierModel.java | 21 +- .../runtime/composite/CompositeMethodModel.java | 16 +- .../composite/CompositeMethodsModel.java | 31 +- .../zest/runtime/composite/CompositeModel.java | 50 +- .../zest/runtime/composite/ConcernsModel.java | 6 +- .../runtime/composite/ConstraintsInstance.java | 9 +- .../runtime/composite/ConstructorModel.java | 3 +- .../runtime/composite/ConstructorsModel.java | 29 +- .../runtime/composite/FragmentClassLoader.java | 135 ++-- .../composite/FunctionStateResolver.java | 20 +- .../zest/runtime/composite/MixinModel.java | 37 +- .../zest/runtime/composite/MixinsModel.java | 65 +- .../runtime/composite/SideEffectsModel.java | 6 +- .../zest/runtime/composite/StateModel.java | 3 +- .../composite/TransientBuilderInstance.java | 6 +- .../runtime/composite/TransientClassLoader.java | 58 +- .../runtime/composite/TransientInstance.java | 5 +- .../zest/runtime/composite/TransientModel.java | 14 +- .../composite/TransientStateInstance.java | 5 +- .../zest/runtime/composite/TransientsModel.java | 11 +- .../zest/runtime/entity/EntitiesModel.java | 11 +- .../zest/runtime/entity/EntityInstance.java | 81 +-- .../apache/zest/runtime/entity/EntityModel.java | 45 +- .../runtime/entity/EntityStateInstance.java | 91 +-- .../zest/runtime/entity/EntityStateModel.java | 7 +- .../zest/runtime/injection/Dependencies.java | 12 +- .../runtime/injection/InjectedFieldModel.java | 20 +- .../runtime/injection/InjectedFieldsModel.java | 47 +- .../runtime/injection/InjectedMethodModel.java | 3 +- .../runtime/injection/InjectedMethodsModel.java | 82 ++- .../injection/InjectedParametersModel.java | 6 +- .../InjectionProviderFactoryStrategy.java | 8 +- .../ServiceInjectionProviderFactory.java | 2 +- .../provider/ThisInjectionProviderFactory.java | 46 +- .../zest/runtime/legacy/Specifications.java | 31 + .../apache/zest/runtime/object/ObjectModel.java | 8 +- .../zest/runtime/object/ObjectsModel.java | 5 +- .../zest/runtime/property/PropertiesModel.java | 5 +- .../zest/runtime/property/PropertyModel.java | 17 +- .../zest/runtime/query/IterableQuerySource.java | 3 +- .../runtime/service/ImportedServiceModel.java | 12 +- .../ImportedServiceReferenceInstance.java | 3 +- .../service/ImportedServicesInstance.java | 35 +- .../runtime/service/ImportedServicesModel.java | 9 +- .../zest/runtime/service/ServiceModel.java | 80 +- .../service/ServiceReferenceInstance.java | 35 +- .../zest/runtime/service/ServicesInstance.java | 32 +- .../zest/runtime/service/ServicesModel.java | 12 +- .../runtime/structure/ApplicationInstance.java | 7 + .../zest/runtime/structure/LayerInstance.java | 73 +- .../zest/runtime/structure/ModuleInstance.java | 292 +++++--- .../runtime/structure/ModuleUnitOfWork.java | 23 +- .../zest/runtime/structure/TypeLookup.java | 321 ++++---- .../runtime/structure/UsedLayersInstance.java | 65 +- .../zest/runtime/types/ValueTypeFactory.java | 17 +- .../runtime/unitofwork/UnitOfWorkInstance.java | 40 +- .../runtime/value/ValueBuilderInstance.java | 12 +- .../zest/runtime/value/ValueInstance.java | 40 +- .../apache/zest/runtime/value/ValueModel.java | 34 +- .../zest/runtime/value/ValueStateInstance.java | 59 +- .../zest/runtime/value/ValueStateModel.java | 7 +- .../apache/zest/runtime/value/ValuesModel.java | 11 +- .../org/apache/zest/api/common/PluginTest.java | 51 +- .../bootstrap/ApplicationAssemblerTest.java | 7 +- .../org/apache/zest/runtime/ZestSPITest.java | 10 +- .../structure/CompositeDescriptorTest.java | 4 +- .../zest/spi/entity/QualifiedIdentity.java | 4 +- .../helpers/JSONMapEntityStoreMixin.java | 8 +- .../helpers/MapEntityStoreMixin.java | 215 +++--- .../org/apache/zest/spi/module/ModelModule.java | 32 +- .../org/apache/zest/spi/module/ModuleSpi.java | 13 +- .../spi/value/ValueDeserializerAdapter.java | 726 ++++++++----------- .../zest/spi/value/ValueSerializerAdapter.java | 227 +++--- .../prefs/PreferencesEntityStoreMixin.java | 366 ++++------ .../entitystore/sql/SQLEntityStoreMixin.java | 148 ++-- .../elasticsearch/ElasticSearchIndexer.java | 77 +- .../index/rdf/indexing/RdfIndexingService.java | 43 +- .../solr/internal/SolrEntityIndexerMixin.java | 19 +- .../support/skeletons/AbstractSQLIndexing.java | 330 ++++----- .../support/skeletons/AbstractSQLQuerying.java | 667 +++++++++-------- .../support/skeletons/AbstractSQLStartup.java | 592 +++++++-------- .../skeletons/SQLCompatEntityStateWrapper.java | 25 +- .../library/circuitbreaker/CircuitBreaker.java | 5 +- .../conversion/values/ValueToEntityMixin.java | 564 ++++++-------- .../source/helper/ApplicationEvents.java | 104 +-- .../factory/DomainEventFactoryService.java | 46 +- .../domain/source/helper/Events.java | 161 ++-- .../library/jmx/ApplicationManagerService.java | 10 +- .../jmx/ConfigurationManagerService.java | 50 +- .../zest/library/scala/ScalaTraitMixin.java | 130 ++-- .../debug/service/DebugOnConsoleSideEffect.java | 4 +- .../debug/service/DebuggingServiceMixin.java | 4 +- .../library/logging/log/SimpleLogConcern.java | 11 +- .../log/service/LogOnConsoleSideEffect.java | 4 +- .../log/service/LoggingServiceMixin.java | 3 +- .../trace/service/TraceServiceMixin.java | 56 +- .../zest/library/logging/DebuggingTest.java | 3 +- .../zest/library/osgi/OSGiEnabledService.java | 29 +- .../zest/library/osgi/OSGiServiceExporter.java | 15 +- .../rdf/entity/EntityStateSerializer.java | 107 ++- .../rdf/entity/EntityTypeSerializer.java | 53 +- .../library/rdf/model/ApplicationVisitor.java | 8 +- .../zest/library/rdf/model/Model2XML.java | 4 +- .../library/rest/client/api/ErrorHandler.java | 3 +- .../ValueCompositeRequestWriter.java | 28 +- .../rest/server/RestServerException.java | 34 + .../rest/server/api/ContextResource.java | 7 +- .../server/assembler/RestServerAssembler.java | 6 +- .../freemarker/ValueCompositeTemplateModel.java | 31 +- .../responsewriter/RestResponseException.java | 31 + .../ValueDescriptorResponseWriter.java | 19 +- .../zest/library/rest/admin/EntityResource.java | 176 +++-- .../apache/zest/library/restlet/RestForm.java | 7 +- .../repository/SmallCrudRepositoryMixin.java | 3 +- .../restlet/resource/ResourceBuilder.java | 2 +- .../internal/service/ServiceFactoryBean.java | 2 +- .../internal/service/ServiceLocator.java | 2 +- .../library/sql/datasource/DataSources.java | 3 +- .../DataSourceConfigurationManagerService.java | 29 +- .../sample/forum/assembler/ForumAssembler.java | 3 +- .../org/apache/zest/sample/rental/web/Page.java | 5 +- .../zest/sample/rental/web/QuikitServlet.java | 4 +- .../zest/envisage/detail/GeneralPane.java | 59 +- .../apache/zest/envisage/detail/MethodPane.java | 2 +- .../detail/ServiceConfigurationPane.java | 9 +- .../apache/zest/envisage/detail/StatePane.java | 2 +- .../ImportedServiceCompositeDescriptor.java | 9 +- .../zest/tools/model/util/MethodFinder.java | 8 +- .../model/util/ServiceConfigurationFinder.java | 2 +- .../tools/model/util/ServiceUsageFinder.java | 13 +- .../zest/tools/model/util/StateFinder.java | 2 +- 189 files changed, 4451 insertions(+), 5999 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/ZestAPI.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/ZestAPI.java b/core/api/src/main/java/org/apache/zest/api/ZestAPI.java index 6a1422e..22eda4c 100644 --- a/core/api/src/main/java/org/apache/zest/api/ZestAPI.java +++ b/core/api/src/main/java/org/apache/zest/api/ZestAPI.java @@ -136,57 +136,47 @@ public interface ZestAPI /** * Function that returns the CompositeDescriptor of a Composite. */ - Function<Composite, CompositeDescriptor> FUNCTION_DESCRIPTOR_FOR = new Function<Composite, CompositeDescriptor>() - { - @Override - public CompositeDescriptor apply( Composite composite ) + Function<Composite, CompositeDescriptor> FUNCTION_DESCRIPTOR_FOR = composite -> { + if( composite instanceof Proxy ) { - if( composite instanceof Proxy ) - { - InvocationHandler invocationHandler = Proxy.getInvocationHandler( composite ); - return ( (CompositeInstance) invocationHandler ).descriptor(); - } - try - { - Class<? extends Composite> compositeClass = composite.getClass(); - Field instanceField = compositeClass.getField( "_instance" ); - Object instance = instanceField.get( composite ); - return ( (CompositeInstance) instance ).descriptor(); - } - catch( Exception e ) - { - InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" ); - exception.initCause( e ); - throw exception; - } + InvocationHandler invocationHandler = Proxy.getInvocationHandler( composite ); + return ( (CompositeInstance) invocationHandler ).descriptor(); + } + try + { + Class<? extends Composite> compositeClass = composite.getClass(); + Field instanceField = compositeClass.getField( "_instance" ); + Object instance = instanceField.get( composite ); + return ( (CompositeInstance) instance ).descriptor(); + } + catch( Exception e ) + { + InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" ); + exception.initCause( e ); + throw exception; } }; /** * Function that returns the CompositeInstance of a Composite. */ - Function<Composite, CompositeInstance> FUNCTION_COMPOSITE_INSTANCE_OF = new Function<Composite, CompositeInstance>() - { - @Override - public CompositeInstance apply( Composite composite ) + Function<Composite, CompositeInstance> FUNCTION_COMPOSITE_INSTANCE_OF = composite -> { + if( composite instanceof Proxy ) + { + return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) ); + } + try + { + Class<? extends Composite> compositeClass = composite.getClass(); + Field instanceField = compositeClass.getField( "_instance" ); + Object instance = instanceField.get( composite ); + return (CompositeInstance) instance; + } + catch( Exception e ) { - if( composite instanceof Proxy ) - { - return ( (CompositeInstance) Proxy.getInvocationHandler( composite ) ); - } - try - { - Class<? extends Composite> compositeClass = composite.getClass(); - Field instanceField = compositeClass.getField( "_instance" ); - Object instance = instanceField.get( composite ); - return (CompositeInstance) instance; - } - catch( Exception e ) - { - InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" ); - exception.initCause( e ); - throw exception; - } + InvalidCompositeException exception = new InvalidCompositeException( "Could not get _instance field" ); + exception.initCause( e ); + throw exception; } }; } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java index a6609da..ca9ffe7 100644 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java +++ b/core/api/src/main/java/org/apache/zest/api/association/AssociationStateDescriptor.java @@ -19,6 +19,7 @@ */ package org.apache.zest.api.association; +import java.util.stream.Stream; import org.apache.zest.api.common.QualifiedName; import org.apache.zest.api.composite.StateDescriptor; @@ -45,9 +46,9 @@ public interface AssociationStateDescriptor extends StateDescriptor AssociationDescriptor getNamedAssociationByQualifiedName( QualifiedName name ) throws IllegalArgumentException; - Iterable<? extends AssociationDescriptor> associations(); + Stream<? extends AssociationDescriptor> associations(); - Iterable<? extends AssociationDescriptor> manyAssociations(); + Stream<? extends AssociationDescriptor> manyAssociations(); - Iterable<? extends AssociationDescriptor> namedAssociations(); + Stream<? extends AssociationDescriptor> namedAssociations(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java b/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java index 2a9c035..b13ebe5 100644 --- a/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java +++ b/core/api/src/main/java/org/apache/zest/api/association/AssociationStateHolder.java @@ -19,6 +19,7 @@ package org.apache.zest.api.association; import java.lang.reflect.AccessibleObject; +import java.util.stream.Stream; import org.apache.zest.api.property.StateHolder; /** @@ -41,7 +42,7 @@ public interface AssociationStateHolder * * @return iterable of associations */ - Iterable<? extends Association<?>> allAssociations(); + Stream<? extends Association<?>> allAssociations(); /** * Get a many-association for a specific accessor method @@ -57,7 +58,7 @@ public interface AssociationStateHolder * * @return iterable of many-associations */ - Iterable<? extends ManyAssociation<?>> allManyAssociations(); + Stream<? extends ManyAssociation<?>> allManyAssociations(); /** * Get a named-association for a specific accessor method @@ -73,5 +74,5 @@ public interface AssociationStateHolder * * @return iterable of named-associations */ - Iterable<? extends NamedAssociation<?>> allNamedAssociations(); + Stream<? extends NamedAssociation<?>> allNamedAssociations(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/common/MetaInfo.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/common/MetaInfo.java b/core/api/src/main/java/org/apache/zest/api/common/MetaInfo.java index ac58192..9c7bd60 100644 --- a/core/api/src/main/java/org/apache/zest/api/common/MetaInfo.java +++ b/core/api/src/main/java/org/apache/zest/api/common/MetaInfo.java @@ -16,7 +16,6 @@ package org.apache.zest.api.common; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Type; import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashMap; @@ -80,7 +79,7 @@ public final class MetaInfo static { - ignored = new HashSet<Class>( 4, 0.8f ); // Optimize size used. + ignored = new HashSet<>( 4, 0.8f ); // Optimize size used. ignored.addAll( asList( Mixins.class, Concerns.class, SideEffects.class ) ); } @@ -88,12 +87,12 @@ public final class MetaInfo public MetaInfo() { - metaInfoMap = new LinkedHashMap<Class<?>, Object>(); + metaInfoMap = new LinkedHashMap<>(); } public MetaInfo( MetaInfo metaInfo ) { - metaInfoMap = new LinkedHashMap<Class<?>, Object>(); + metaInfoMap = new LinkedHashMap<>(); metaInfoMap.putAll( metaInfo.metaInfoMap ); } @@ -107,11 +106,9 @@ public final class MetaInfo else { Class<?> metaInfoclass = metaInfo.getClass(); - Iterable<Type> types = typesOf( metaInfoclass ); - for( Type type : types ) - { - metaInfoMap.put( Classes.RAW_CLASS.apply( type ), metaInfo ); - } + typesOf( metaInfoclass ) + .map( Classes.RAW_CLASS ) + .forEach( type -> metaInfoMap.put( type, metaInfo ) ); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/composite/CompositeContext.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/composite/CompositeContext.java b/core/api/src/main/java/org/apache/zest/api/composite/CompositeContext.java index db1421d..e0fffd2 100644 --- a/core/api/src/main/java/org/apache/zest/api/composite/CompositeContext.java +++ b/core/api/src/main/java/org/apache/zest/api/composite/CompositeContext.java @@ -18,11 +18,9 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.util.stream.Stream; import org.apache.zest.api.ZestAPI; import org.apache.zest.api.structure.Module; -import org.apache.zest.functional.Iterables; - -import static org.apache.zest.functional.Iterables.toArray; /** * Thread-associated composites. This is basically a ThreadLocal which maintains a reference @@ -52,10 +50,10 @@ public class CompositeContext<T extends TransientComposite> { TransientComposite composite = get(); - Iterable<Class<?>> types = ZestAPI.FUNCTION_COMPOSITE_INSTANCE_OF.apply( composite ).types(); + Stream<Class<?>> types = ZestAPI.FUNCTION_COMPOSITE_INSTANCE_OF.apply( composite ).types(); return (T) Proxy.newProxyInstance( composite.getClass().getClassLoader(), - toArray( Class.class, Iterables.<Class>cast( types ) ), + types.toArray( Class[]::new ), new ContextInvocationhandler() ); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/composite/CompositeDescriptor.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/composite/CompositeDescriptor.java b/core/api/src/main/java/org/apache/zest/api/composite/CompositeDescriptor.java index 49f9f42..8c48bed 100644 --- a/core/api/src/main/java/org/apache/zest/api/composite/CompositeDescriptor.java +++ b/core/api/src/main/java/org/apache/zest/api/composite/CompositeDescriptor.java @@ -14,6 +14,8 @@ package org.apache.zest.api.composite; +import java.util.stream.Stream; + /** * Composite Descriptor. */ @@ -22,5 +24,5 @@ public interface CompositeDescriptor { Class<?> primaryType(); - Iterable<Class<?>> mixinTypes(); + Stream<Class<?>> mixinTypes(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/composite/StateDescriptor.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/composite/StateDescriptor.java b/core/api/src/main/java/org/apache/zest/api/composite/StateDescriptor.java index 2d3ac07..3780dee 100644 --- a/core/api/src/main/java/org/apache/zest/api/composite/StateDescriptor.java +++ b/core/api/src/main/java/org/apache/zest/api/composite/StateDescriptor.java @@ -14,6 +14,7 @@ package org.apache.zest.api.composite; +import java.util.stream.Stream; import org.apache.zest.api.common.QualifiedName; import org.apache.zest.api.property.PropertyDescriptor; @@ -28,5 +29,5 @@ public interface StateDescriptor PropertyDescriptor findPropertyModelByQualifiedName( QualifiedName name ) throws IllegalArgumentException; - Iterable<? extends PropertyDescriptor> properties(); + Stream<? extends PropertyDescriptor> properties(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/configuration/Configuration.java b/core/api/src/main/java/org/apache/zest/api/configuration/Configuration.java index 471dc28..6521c8b 100644 --- a/core/api/src/main/java/org/apache/zest/api/configuration/Configuration.java +++ b/core/api/src/main/java/org/apache/zest/api/configuration/Configuration.java @@ -40,8 +40,6 @@ import org.apache.zest.api.usecase.Usecase; import org.apache.zest.api.usecase.UsecaseBuilder; import org.apache.zest.api.value.ValueSerialization; -import static org.apache.zest.functional.Iterables.first; - /** * Provide Configurations for Services. A Service that wants to be configurable * should inject a reference to Configuration with the Configuration type: @@ -257,7 +255,7 @@ public interface Configuration<T> Usecase usecase = UsecaseBuilder.newUsecase( "Configuration:" + me.identity().get() ); UnitOfWork buildUow = module.newUnitOfWork( usecase ); - Class<?> type = first( api.serviceDescriptorFor( serviceComposite ).types() ); + Class<?> type = api.serviceDescriptorFor( serviceComposite ).types().findFirst().orElse( null ); Class<V> configType = serviceModel.configurationType(); // Check for defaults http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/configuration/NoSuchConfigurationException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/configuration/NoSuchConfigurationException.java b/core/api/src/main/java/org/apache/zest/api/configuration/NoSuchConfigurationException.java index c3ad366..d884311 100644 --- a/core/api/src/main/java/org/apache/zest/api/configuration/NoSuchConfigurationException.java +++ b/core/api/src/main/java/org/apache/zest/api/configuration/NoSuchConfigurationException.java @@ -28,7 +28,7 @@ public class NoSuchConfigurationException extends RuntimeException public NoSuchConfigurationException( Class<? extends Identity> configType, String identity, - ConstraintViolationException cause + Exception cause ) { super( "No configuration found for '" + identity + "' and configuration " + configType.getName() + " has one or more non-Optional properties.", cause ); http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/constraint/ConstraintViolationException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/constraint/ConstraintViolationException.java b/core/api/src/main/java/org/apache/zest/api/constraint/ConstraintViolationException.java index e04bfb9..a0fea69 100644 --- a/core/api/src/main/java/org/apache/zest/api/constraint/ConstraintViolationException.java +++ b/core/api/src/main/java/org/apache/zest/api/constraint/ConstraintViolationException.java @@ -22,14 +22,16 @@ import java.lang.reflect.Member; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; +import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; -import java.util.function.Function; -import java.util.stream.StreamSupport; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.zest.api.ZestAPI; import org.apache.zest.api.composite.Composite; -import org.apache.zest.functional.Iterables; + +import static java.util.stream.Collectors.joining; /** * This Exception is thrown when there is one or more Constraint Violations in a method @@ -49,30 +51,31 @@ public class ConstraintViolationException private String methodName; private String mixinTypeName; private String instanceToString; - private Iterable<Class<?>> instanceTypes; + private List<Class<?>> instanceTypes; public ConstraintViolationException( Composite instance, Member method, Collection<ConstraintViolation> constraintViolations ) { - this( instance.toString(), ZestAPI.FUNCTION_DESCRIPTOR_FOR.apply( instance ).types(), method, constraintViolations ); + this( instance.toString(), ZestAPI.FUNCTION_DESCRIPTOR_FOR.apply( instance ) + .types(), method, constraintViolations ); } public ConstraintViolationException( String instanceToString, - Iterable<Class<?>> instanceTypes, + Stream<Class<?>> instanceTypes, Member method, Collection<ConstraintViolation> violations ) { this.instanceToString = instanceToString; - this.instanceTypes = instanceTypes; + this.instanceTypes = instanceTypes.collect( Collectors.toList() ); mixinTypeName = method.getDeclaringClass().getName(); methodName = method.getName(); this.constraintViolations = violations; } public ConstraintViolationException( String instanceToString, - Iterable<Class<?>> instanceTypes, + List<Class<?>> instanceTypes, String mixinTypeName, String methodName, Collection<ConstraintViolation> violations @@ -151,7 +154,7 @@ public class ConstraintViolationException { String pattern = "Constraint violation in {0}.{1} for method ''{3}'' with constraint \"{4}({6})\", for value ''{5}''"; - ArrayList<String> list = new ArrayList<String>(); + ArrayList<String> list = new ArrayList<>(); for( ConstraintViolation violation : constraintViolations ) { Locale locale; @@ -184,20 +187,13 @@ public class ConstraintViolationException String name = violation.name(); Object value = violation.value(); String classes; - if( Iterables.count( instanceTypes ) == 1 ) + if( instanceTypes.stream().count() == 1 ) { - classes = Iterables.first( instanceTypes ).getSimpleName(); + classes = instanceTypes.stream().findFirst().get().getSimpleName(); } else { - classes = "[" + Iterables.<Class<?>>toString( instanceTypes, new Function<Class<?>, String>() - { - @Override - public String apply( Class<?> from ) - { - return from.getSimpleName(); - } - }, "," ) + "]"; + classes = "[" + instanceTypes.stream().map( Class::getSimpleName ).collect( joining( "," ) ) + "]"; } Object[] args = new Object[] { http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/property/StateHolder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/property/StateHolder.java b/core/api/src/main/java/org/apache/zest/api/property/StateHolder.java index d188d3d..e97e9fe 100644 --- a/core/api/src/main/java/org/apache/zest/api/property/StateHolder.java +++ b/core/api/src/main/java/org/apache/zest/api/property/StateHolder.java @@ -15,6 +15,7 @@ package org.apache.zest.api.property; import java.lang.reflect.AccessibleObject; +import java.util.stream.Stream; /** * This represents the state of a composite (properties). @@ -33,5 +34,5 @@ public interface StateHolder <T> Property<T> propertyFor( AccessibleObject accessor ) throws IllegalArgumentException; - Iterable<? extends Property<?>> properties(); + Stream<? extends Property<?>> properties(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java index d89c65a..32054e2 100644 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java +++ b/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java @@ -20,7 +20,6 @@ package org.apache.zest.api.query.grammar; import java.util.function.Predicate; import org.apache.zest.api.composite.Composite; -import org.apache.zest.functional.Specifications; /** * AND Specification. @@ -28,7 +27,6 @@ import org.apache.zest.functional.Specifications; public class AndPredicate extends BinaryPredicate { - public AndPredicate( Iterable<Predicate<Composite>> operands ) { super( operands ); @@ -37,7 +35,12 @@ public class AndPredicate @Override public boolean test( Composite item ) { - return Specifications.and( operands ).test( item ); + Predicate<Composite> master = t -> true; + for( Predicate<Composite> p : operands ) + { + master = master.and( p ); + } + return master.test( item ); } @Override http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/query/grammar/Notpredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/Notpredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/Notpredicate.java index 252488f..f480f64 100644 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/Notpredicate.java +++ b/core/api/src/main/java/org/apache/zest/api/query/grammar/Notpredicate.java @@ -20,7 +20,6 @@ package org.apache.zest.api.query.grammar; import java.util.function.Predicate; import org.apache.zest.api.composite.Composite; -import org.apache.zest.functional.Specifications; /** * NOT Specification. @@ -42,7 +41,7 @@ public class Notpredicate implements Predicate<Composite> @Override public boolean test( Composite item ) { - return Specifications.not( operand ).test( item ); + return operand.negate().test( item ); } @Override http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/query/grammar/OrPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/OrPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/OrPredicate.java index 27c91e9..0e8c0a9 100644 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/OrPredicate.java +++ b/core/api/src/main/java/org/apache/zest/api/query/grammar/OrPredicate.java @@ -20,7 +20,6 @@ package org.apache.zest.api.query.grammar; import java.util.function.Predicate; import org.apache.zest.api.composite.Composite; -import org.apache.zest.functional.Specifications; /** * OR Specification. @@ -37,7 +36,12 @@ public class OrPredicate @Override public boolean test( Composite item ) { - return Specifications.or( operands ).test( item ); + Predicate<Composite> master = t -> false; + for( Predicate<Composite> p : operands ) + { + master = master.or( p ); + } + return master.test( item ); } @Override http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/service/importer/InstanceImporter.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/service/importer/InstanceImporter.java b/core/api/src/main/java/org/apache/zest/api/service/importer/InstanceImporter.java index e13e9c5..8f2410e 100644 --- a/core/api/src/main/java/org/apache/zest/api/service/importer/InstanceImporter.java +++ b/core/api/src/main/java/org/apache/zest/api/service/importer/InstanceImporter.java @@ -14,21 +14,14 @@ package org.apache.zest.api.service.importer; -import java.util.function.Function; +import java.util.stream.Stream; import org.apache.zest.api.injection.scope.Structure; import org.apache.zest.api.service.ImportedServiceDescriptor; import org.apache.zest.api.service.ServiceImporter; import org.apache.zest.api.service.ServiceImporterException; import org.apache.zest.api.structure.Application; import org.apache.zest.api.structure.Layer; -import org.apache.zest.api.structure.MetaInfoHolder; import org.apache.zest.api.structure.Module; -import org.apache.zest.functional.Iterables; - -import static org.apache.zest.functional.Iterables.filter; -import static org.apache.zest.functional.Iterables.first; -import static org.apache.zest.functional.Iterables.map; -import static org.apache.zest.functional.Specifications.notNull; /** * Return a predefined service instance that was provided as meta-info. Search for meta-info in the following order: @@ -50,26 +43,25 @@ public final class InstanceImporter<T> public T importService( final ImportedServiceDescriptor serviceDescriptor ) throws ServiceImporterException { - T instance = null; - Iterable<MetaInfoHolder> holders = Iterables.iterable( serviceDescriptor, module, layer, application ); - for( final MetaInfoHolder metaInfoHolder : holders ) - { - Function<Class<?>, T> metaFinder = new Function<Class<?>, T>() - { - @Override - @SuppressWarnings( "unchecked" ) - public T apply( Class<?> type ) - { - return (T) metaInfoHolder.metaInfo( type ); - } - }; - instance = first( filter( notNull(), map( metaFinder, serviceDescriptor.types() ) ) ); - if( instance != null ) - { - break; - } - } - return instance; + return Stream.of( serviceDescriptor, module, layer, application ) + .flatMap( holder -> serviceDescriptor.types().map( type -> (T) holder.metaInfo( type ) ) ) + .filter( meta -> meta != null ) + .findFirst().orElse( null ); + +// T instance = null; +// Iterable<MetaInfoHolder> holders = Iterables.iterable( serviceDescriptor, module, layer, application ); +// for( final MetaInfoHolder metaInfoHolder : holders ) +// { +// Function<Class<?>, T> metaFinder = type -> (T) metaInfoHolder.metaInfo( type ); +// +// +// instance = first( filter( notNull(), map( metaFinder, serviceDescriptor.types() ) ) ); +// if( instance != null ) +// { +// break; +// } +// } +// return instance; } @Override http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/service/importer/NewObjectImporter.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/service/importer/NewObjectImporter.java b/core/api/src/main/java/org/apache/zest/api/service/importer/NewObjectImporter.java index 55df2c0..57924ca 100644 --- a/core/api/src/main/java/org/apache/zest/api/service/importer/NewObjectImporter.java +++ b/core/api/src/main/java/org/apache/zest/api/service/importer/NewObjectImporter.java @@ -35,7 +35,7 @@ public final class NewObjectImporter<T> public T importService( ImportedServiceDescriptor serviceDescriptor ) throws ServiceImporterException { - return obf.newObject( (Class<T>) Iterables.first( serviceDescriptor.types() ) ); + return obf.newObject( (Class<T>) serviceDescriptor.types().findFirst().orElse( null )); } @Override http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/service/importer/ServiceSelectorImporter.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/service/importer/ServiceSelectorImporter.java b/core/api/src/main/java/org/apache/zest/api/service/importer/ServiceSelectorImporter.java index 515e8e4..daefa9d 100644 --- a/core/api/src/main/java/org/apache/zest/api/service/importer/ServiceSelectorImporter.java +++ b/core/api/src/main/java/org/apache/zest/api/service/importer/ServiceSelectorImporter.java @@ -48,7 +48,7 @@ public final class ServiceSelectorImporter<T> throws ServiceImporterException { Predicate<ServiceReference<?>> selector = serviceDescriptor.metaInfo( Predicate.class ); - Class serviceType = Iterables.first( serviceDescriptor.types() ); + Class serviceType = serviceDescriptor.types().findFirst().orElse( null ); Iterable<ServiceReference<T>> services = locator.findServices( serviceType ); List<ServiceReference<T>> filteredServices = new ArrayList<>(); for( ServiceReference<T> service : services ) http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/structure/Application.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/structure/Application.java b/core/api/src/main/java/org/apache/zest/api/structure/Application.java index 1786d11..601747d 100644 --- a/core/api/src/main/java/org/apache/zest/api/structure/Application.java +++ b/core/api/src/main/java/org/apache/zest/api/structure/Application.java @@ -14,6 +14,7 @@ */ package org.apache.zest.api.structure; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListenerRegistration; @@ -90,4 +91,6 @@ public interface Application * @return Application Descriptor */ ApplicationDescriptor descriptor(); + + Stream<? extends Layer> layers(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/structure/Layer.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/structure/Layer.java b/core/api/src/main/java/org/apache/zest/api/structure/Layer.java index 2f6c28e..cf4db21 100644 --- a/core/api/src/main/java/org/apache/zest/api/structure/Layer.java +++ b/core/api/src/main/java/org/apache/zest/api/structure/Layer.java @@ -15,6 +15,7 @@ package org.apache.zest.api.structure; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListenerRegistration; @@ -28,4 +29,6 @@ public interface Layer * @return the Layer's name */ String name(); + + Stream<? extends Module> modules(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/structure/Module.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/structure/Module.java b/core/api/src/main/java/org/apache/zest/api/structure/Module.java index 09842c2..e5a0aa6 100644 --- a/core/api/src/main/java/org/apache/zest/api/structure/Module.java +++ b/core/api/src/main/java/org/apache/zest/api/structure/Module.java @@ -14,14 +14,20 @@ */ package org.apache.zest.api.structure; +import java.util.stream.Stream; import org.apache.zest.api.activation.ActivationEventListenerRegistration; +import org.apache.zest.api.composite.Composite; import org.apache.zest.api.composite.TransientBuilderFactory; +import org.apache.zest.api.composite.TransientComposite; import org.apache.zest.api.composite.TransientDescriptor; +import org.apache.zest.api.entity.EntityComposite; import org.apache.zest.api.entity.EntityDescriptor; import org.apache.zest.api.injection.scope.Structure; import org.apache.zest.api.object.ObjectDescriptor; import org.apache.zest.api.object.ObjectFactory; import org.apache.zest.api.query.QueryBuilderFactory; +import org.apache.zest.api.service.ImportedServiceDescriptor; +import org.apache.zest.api.service.ServiceDescriptor; import org.apache.zest.api.service.ServiceFinder; import org.apache.zest.api.unitofwork.UnitOfWorkFactory; import org.apache.zest.api.value.ValueBuilderFactory; @@ -77,4 +83,10 @@ public interface Module */ ValueDescriptor valueDescriptor( String typeName ); + Stream<? extends TransientDescriptor> transientComposites(); + Stream<? extends ValueDescriptor> valueComposites(); + Stream<? extends ServiceDescriptor> serviceComposites(); + Stream<? extends EntityDescriptor> entityComposites(); + Stream<? extends ImportedServiceDescriptor> importedServices(); + Stream<? extends ObjectDescriptor> objects(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/type/HasTypes.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/type/HasTypes.java b/core/api/src/main/java/org/apache/zest/api/type/HasTypes.java index 862b7eb..0bc0a35 100644 --- a/core/api/src/main/java/org/apache/zest/api/type/HasTypes.java +++ b/core/api/src/main/java/org/apache/zest/api/type/HasTypes.java @@ -18,10 +18,12 @@ */ package org.apache.zest.api.type; +import java.util.stream.Stream; + /** * Has types. */ public interface HasTypes { - Iterable<Class<?>> types(); + Stream<Class<?>> types(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/type/MatchTypeSpecification.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/type/MatchTypeSpecification.java b/core/api/src/main/java/org/apache/zest/api/type/MatchTypeSpecification.java index 03035a6..579d9ec 100644 --- a/core/api/src/main/java/org/apache/zest/api/type/MatchTypeSpecification.java +++ b/core/api/src/main/java/org/apache/zest/api/type/MatchTypeSpecification.java @@ -34,13 +34,14 @@ public class MatchTypeSpecification @Override public boolean test( HasTypes item ) { - for( Class<?> type : item.types() ) - { - if( matchType.isAssignableFrom( type ) ) - { - return true; - } - } - return false; + return item.types().anyMatch( matchType::isAssignableFrom ); +// for( Class<?> type : item.types() ) +// { +// if( matchType.isAssignableFrom( type ) ) +// { +// return true; +// } +// } +// return false; } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/type/ValueCompositeType.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/type/ValueCompositeType.java b/core/api/src/main/java/org/apache/zest/api/type/ValueCompositeType.java index 6d53b94..4bae2df 100644 --- a/core/api/src/main/java/org/apache/zest/api/type/ValueCompositeType.java +++ b/core/api/src/main/java/org/apache/zest/api/type/ValueCompositeType.java @@ -14,6 +14,8 @@ package org.apache.zest.api.type; import java.lang.reflect.Type; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.zest.api.association.AssociationDescriptor; import org.apache.zest.api.property.PropertyDescriptor; import org.apache.zest.api.util.Classes; @@ -35,26 +37,26 @@ public final class ValueCompositeType public ValueCompositeType( ValueDescriptor model ) { - super( model.types() ); + super( model.types().collect( Collectors.toList() ) ); this.model = model; } - public Iterable<? extends PropertyDescriptor> properties() + public Stream<? extends PropertyDescriptor> properties() { return model.state().properties(); } - public Iterable<? extends AssociationDescriptor> associations() + public Stream<? extends AssociationDescriptor> associations() { return model.state().associations(); } - public Iterable<? extends AssociationDescriptor> manyAssociations() + public Stream<? extends AssociationDescriptor> manyAssociations() { return model.state().manyAssociations(); } - public Iterable<? extends AssociationDescriptor> namedAssociations() + public Stream<? extends AssociationDescriptor> namedAssociations() { return model.state().namedAssociations(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/type/ValueType.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/type/ValueType.java b/core/api/src/main/java/org/apache/zest/api/type/ValueType.java index a9ed888..dc28f10 100644 --- a/core/api/src/main/java/org/apache/zest/api/type/ValueType.java +++ b/core/api/src/main/java/org/apache/zest/api/type/ValueType.java @@ -15,7 +15,9 @@ package org.apache.zest.api.type; import java.util.Collections; +import java.util.List; import java.util.function.Function; +import java.util.stream.Stream; import org.apache.zest.api.util.NullArgumentException; import org.apache.zest.functional.Iterables; @@ -106,17 +108,17 @@ public class ValueType } return false; } - protected final Iterable<Class<?>> types; + protected final List<Class<?>> types; public ValueType( Class<?> type ) { - this( Collections.singleton( type ) ); + this( Collections.singletonList( type ) ); } @SuppressWarnings( "unchecked" ) - public ValueType( Iterable<? extends Class<?>> types ) + public ValueType( List<Class<?>> types ) { - this.types = (Iterable<Class<?>>) types; + this.types = types; } public Class<?> mainType() @@ -125,25 +127,15 @@ public class ValueType } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - return types; + return types.stream(); } @Override public String toString() { - String name = Iterables.toString( - types, - new Function<Class<?>, String>() - { - @Override - public String apply( Class<?> item ) - { - return item.getName(); - } - }, - "," ); + String name = Iterables.toString( types, Class::getName, "," ); if( name.contains( "," ) ) { name = "{" + name + "}"; http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/unitofwork/EntityTypeNotFoundException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/unitofwork/EntityTypeNotFoundException.java b/core/api/src/main/java/org/apache/zest/api/unitofwork/EntityTypeNotFoundException.java index 917c019..b51bc8c 100644 --- a/core/api/src/main/java/org/apache/zest/api/unitofwork/EntityTypeNotFoundException.java +++ b/core/api/src/main/java/org/apache/zest/api/unitofwork/EntityTypeNotFoundException.java @@ -15,10 +15,10 @@ */ package org.apache.zest.api.unitofwork; +import java.util.stream.Collectors; +import java.util.stream.Stream; -import java.util.function.Function; - -import static org.apache.zest.functional.Iterables.fold; +import static java.util.stream.StreamSupport.stream; /** * Zest exception to be thrown in case that an entity composite @@ -29,32 +29,13 @@ public class EntityTypeNotFoundException { private final String compositeType; - public EntityTypeNotFoundException( String entityType, String moduleName, Iterable<String> visibility ) + public EntityTypeNotFoundException( String entityType, String moduleName, Stream<String> visibility ) { super( "Could not find an EntityComposite of type " + entityType + " in module [" + moduleName + "].\n" + - "\tThe following entity types are visible:\n" + join(visibility) ); + "\tThe following entity types are visible:\n" + visibility.collect( Collectors.joining( "\n" ) ) ); this.compositeType = entityType; } - private static String join( Iterable<String> visibility ) - { - return fold( new Function<String, String>() - { - StringBuilder result; - { - result = new StringBuilder(); - } - - @Override - public String apply( String type ) - { - result.append( type ); - result.append( "\n" ); - return result.toString(); - } - }, visibility ); - } - public String compositeType() { return compositeType; http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/unitofwork/NoSuchEntityException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/unitofwork/NoSuchEntityException.java b/core/api/src/main/java/org/apache/zest/api/unitofwork/NoSuchEntityException.java index 8651470..89b5d09 100644 --- a/core/api/src/main/java/org/apache/zest/api/unitofwork/NoSuchEntityException.java +++ b/core/api/src/main/java/org/apache/zest/api/unitofwork/NoSuchEntityException.java @@ -14,10 +14,13 @@ package org.apache.zest.api.unitofwork; import java.util.function.Function; +import java.util.stream.Stream; import org.apache.zest.api.entity.EntityReference; import org.apache.zest.api.usecase.Usecase; import org.apache.zest.functional.Iterables; +import static java.util.Arrays.stream; + /** * This exception indicates that the requested Entity with the given * identity does not exist. @@ -45,9 +48,9 @@ public class NoSuchEntityException this.usecase = usecase; } - public NoSuchEntityException( EntityReference identity, Iterable<Class<?>> types, Usecase usecase ) + public NoSuchEntityException( EntityReference identity, Stream<Class<?>> types, Usecase usecase ) { - this( identity, castToArray( types ), usecase ); + this( identity, types.toArray( Class[]::new ), usecase ); } public EntityReference identity() @@ -73,35 +76,7 @@ public class NoSuchEntityException private static String toString( Class<?>[] mixinTypes ) { - Iterable<String> map = Iterables.map( new Function<Class<?>, String>() - { - @Override - public String apply( Class<?> item ) - { - return item.getName(); - } - }, Iterables.iterable( mixinTypes ) ); - return Iterables.fold( new Function<String, String>() - { - StringBuilder result; - boolean first = true; - - { - result = new StringBuilder(); - result.append( "[" ); - } - - @Override - public String apply( String strings ) - { - if( !first ) - { - result.append( ',' ); - } - first = false; - result.append( strings ); - return result.toString() + "]"; - } - }, map ); + String reduced = stream( mixinTypes ).map( Class::getName ).reduce( "", ( ret, name ) -> ret + "," + name ); + return "[" + reduced.substring( 1 ) + "]"; } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/util/Annotations.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/util/Annotations.java b/core/api/src/main/java/org/apache/zest/api/util/Annotations.java index a144b61..529b358 100644 --- a/core/api/src/main/java/org/apache/zest/api/util/Annotations.java +++ b/core/api/src/main/java/org/apache/zest/api/util/Annotations.java @@ -18,65 +18,36 @@ import java.lang.annotation.Annotation; import java.lang.reflect.AccessibleObject; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Type; +import java.util.Arrays; import java.util.function.Function; import java.util.function.Predicate; -import org.apache.zest.functional.Iterables; +import java.util.stream.Stream; import static org.apache.zest.api.util.Classes.interfacesOf; import static org.apache.zest.api.util.Classes.typeOf; -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; /** * Useful methods for handling Annotations. */ public final class Annotations { - public static Function<Type, Iterable<Annotation>> ANNOTATIONS_OF = Classes.forTypes( new Function<Type, Iterable<Annotation>>() - { - @Override - public Iterable<Annotation> apply( Type type ) - { - return Iterables.iterable( Classes.RAW_CLASS.apply( type ).getAnnotations() ); - } - } ); + public static Function<Type, Stream<Annotation>> ANNOTATIONS_OF = + Classes.forTypes( type -> Arrays.stream( Classes.RAW_CLASS.apply( type ).getAnnotations() ) ); +// Classes.forTypes( type -> Iterables.iterable( Classes.RAW_CLASS.apply( type ).getAnnotations() ) ); public static Predicate<AnnotatedElement> hasAnnotation( final Class<? extends Annotation> annotationType ) { - return new Predicate<AnnotatedElement>() - { - @Override - public boolean test( AnnotatedElement element ) - { - return element.getAnnotation( annotationType ) != null; - } - }; + return element -> element.getAnnotation( annotationType ) != null; } public static Function<Annotation, Class<? extends Annotation>> type() { - return new Function<Annotation, Class<? extends Annotation>>() - { - @Override - public Class<? extends Annotation> apply( Annotation annotation ) - { - return annotation.annotationType(); - } - }; + return Annotation::annotationType; } public static Predicate<Annotation> isType( final Class<? extends Annotation> annotationType ) { - return new Predicate<Annotation>() - { - @Override - public boolean test( Annotation annotation ) - { - return annotation.annotationType().equals( annotationType ); - } - }; + return annotation -> annotation.annotationType().equals( annotationType ); } public static <T extends Annotation> T annotationOn( Type type, Class<T> annotationType ) @@ -84,9 +55,13 @@ public final class Annotations return annotationType.cast( Classes.RAW_CLASS.apply( type ).getAnnotation( annotationType ) ); } - public static Iterable<Annotation> findAccessorAndTypeAnnotationsIn( AccessibleObject accessor ) + public static Stream<Annotation> findAccessorAndTypeAnnotationsIn( AccessibleObject accessor ) { - return flatten( iterable( accessor.getAnnotations() ), - flattenIterables( map( Annotations.ANNOTATIONS_OF, interfacesOf( typeOf( accessor ) ) ) ) ); + return Stream.concat( + Arrays.stream( accessor.getAnnotations() ), + interfacesOf( typeOf( accessor ) ).flatMap( ANNOTATIONS_OF ) + ); +// return flatten( iterable( accessor.getAnnotations() ), +// flattenIterables( map( Annotations.ANNOTATIONS_OF, interfacesOf( typeOf( accessor ) ) ) ) ); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/util/Classes.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/util/Classes.java b/core/api/src/main/java/org/apache/zest/api/util/Classes.java index b965121..7bc6f67 100644 --- a/core/api/src/main/java/org/apache/zest/api/util/Classes.java +++ b/core/api/src/main/java/org/apache/zest/api/util/Classes.java @@ -25,6 +25,7 @@ import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.lang.reflect.WildcardType; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; @@ -32,17 +33,12 @@ import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.zest.api.composite.ModelDescriptor; -import org.apache.zest.functional.Iterables; -import static org.apache.zest.functional.Iterables.cast; -import static org.apache.zest.functional.Iterables.empty; -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.prepend; +import static java.util.stream.Stream.concat; +import static java.util.stream.StreamSupport.stream; /** * Useful methods for handling Classes. @@ -82,14 +78,9 @@ public final class Classes * Return the same class if it's not a primitive class. This can therefore safely be used on all types * to ensure that they are not primitives. */ - private static final Function<Type, Type> WRAPPER_CLASS = new Function<Type, Type>() - { - @Override - public Type apply( Type aClass ) - { - Type wrapperClass = wrapperClasses.get( aClass ); - return wrapperClass == null ? aClass : wrapperClass; - } + private static final Function<Type, Type> WRAPPER_CLASS = clazz -> { + Type wrapperClass = wrapperClasses.get( clazz ); + return wrapperClass == null ? clazz : wrapperClass; }; /** @@ -98,132 +89,114 @@ public final class Classes * to ensure that they are primitives if possible. */ @SuppressWarnings( "UnusedDeclaration" ) - private static final Function<Type, Type> PRIMITIVE_CLASS = new Function<Type, Type>() - { - @Override - public Type apply( Type aClass ) - { - Type primitiveClass = primitiveClasses.get( aClass ); - return primitiveClass == null ? aClass : primitiveClass; - } + private static final Function<Type, Type> PRIMITIVE_CLASS = aClass -> { + Type primitiveClass = primitiveClasses.get( aClass ); + return primitiveClass == null ? aClass : primitiveClass; }; /** * Function that extract the raw class of a type. */ - public static final Function<Type, Class<?>> RAW_CLASS = new Function<Type, Class<?>>() - { - @Override - public Class<?> apply( Type genericType ) + public static final Function<Type, Class<?>> RAW_CLASS = genericType -> { + // Calculate raw type + if( genericType instanceof Class ) { - // Calculate raw type - if( genericType instanceof Class ) - { - return (Class<?>) genericType; - } - else if( genericType instanceof ParameterizedType ) - { - return (Class<?>) ( (ParameterizedType) genericType ).getRawType(); - } - else if( genericType instanceof TypeVariable ) - { - return (Class<?>) ( (TypeVariable) genericType ).getGenericDeclaration(); - } - else if( genericType instanceof WildcardType ) - { - return (Class<?>) ( (WildcardType) genericType ).getUpperBounds()[ 0]; - } - else if( genericType instanceof GenericArrayType ) - { - Object temp = Array.newInstance( (Class<?>) ( (GenericArrayType) genericType ).getGenericComponentType(), 0 ); - return temp.getClass(); - } - throw new IllegalArgumentException( "Could not extract the raw class of " + genericType ); + return (Class<?>) genericType; + } + else if( genericType instanceof ParameterizedType ) + { + return (Class<?>) ( (ParameterizedType) genericType ).getRawType(); + } + else if( genericType instanceof TypeVariable ) + { + return (Class<?>) ( (TypeVariable) genericType ).getGenericDeclaration(); } + else if( genericType instanceof WildcardType ) + { + return (Class<?>) ( (WildcardType) genericType ).getUpperBounds()[ 0 ]; + } + else if( genericType instanceof GenericArrayType ) + { + Object temp = Array.newInstance( (Class<?>) ( (GenericArrayType) genericType ).getGenericComponentType(), 0 ); + return temp.getClass(); + } + throw new IllegalArgumentException( "Could not extract the raw class of " + genericType ); }; - private static final Function<AccessibleObject, Type> TYPE_OF = new Function<AccessibleObject, Type>() - { - @Override - public Type apply( AccessibleObject accessor ) + private static final Function<AccessibleObject, Type> TYPE_OF = accessor -> { + if( accessor instanceof Method ) { - return accessor instanceof Method ? ( (Method) accessor ).getGenericReturnType() : ( (Field) accessor ).getGenericType(); + return ( (Method) accessor ).getGenericReturnType(); } + return ( (Field) accessor ).getGenericType(); }; - private static final Function<Type, Iterable<Class<?>>> CLASS_HIERARCHY = new Function<Type, Iterable<Class<?>>>() + private static final Function<Type, Stream<Class<?>>> CLASS_HIERARCHY = new Function<Type, Stream<Class<?>>>() { @Override - @SuppressWarnings( {"raw", "unchecked"} ) - public Iterable<Class<?>> apply( Type type ) + public Stream<Class<?>> apply( Type type ) { if( type == null ) { - return empty(); + return Stream.empty(); } if( type.equals( Object.class ) ) { - Class<?> aClass = (Class<?>) type; - return cast( iterable( aClass ) ); + return Stream.of( (Class<?>) type ); } else { type = RAW_CLASS.apply( type ); Class superclass = ( (Class) type ).getSuperclass(); - return prepend( (Class<?>) type, apply( superclass ) ); + return concat( Stream.of( (Class<?>) type ), apply( superclass ) ); } } }; @SuppressWarnings( "raw" ) - private static final Function<Type, Iterable<Type>> INTERFACES_OF = new Function<Type, Iterable<Type>>() + private static final Function<Type, Stream<? extends Type>> INTERFACES_OF = new Function<Type, Stream<? extends Type>>() { @Override - public Iterable<Type> apply( Type type ) + public Stream<? extends Type> apply( Type type ) { Class clazz = RAW_CLASS.apply( type ); if( clazz.isInterface() ) { - Iterable<Type> genericInterfaces = iterable( clazz.getGenericInterfaces() ); - Iterable<Type> flattenIterables = flattenIterables( Iterables.map( INTERFACES_OF, genericInterfaces ) ); - return prepend( type, flattenIterables ); + Stream<? extends Type> genericInterfaces = Arrays.stream( clazz.getGenericInterfaces() ); + Stream<? extends Type> intfaces = genericInterfaces.flatMap( INTERFACES_OF ); + return concat( Stream.of( type ), intfaces ); } else { if( type.equals( Object.class ) ) { - return iterable( clazz.getGenericInterfaces() ); + return Arrays.stream( clazz.getGenericInterfaces() ); } else { - return flatten( flattenIterables( Iterables.map( INTERFACES_OF, - iterable( clazz.getGenericInterfaces() ) ) ), - INTERFACES_OF.apply( RAW_CLASS.apply( type ).getSuperclass() ) ); + Stream<Type> stream1 = Arrays.stream( clazz.getGenericInterfaces() ).flatMap( INTERFACES_OF ); + Stream<Type> stream2 = Stream.of( type ) + .map( RAW_CLASS ) + .map( Class::getSuperclass ) + .map( RAW_CLASS ); + return concat( stream1, stream2 ); } } } }; - @SuppressWarnings( "raw" ) - private static final Function<Type, Iterable<Type>> TYPES_OF = new Function<Type, Iterable<Type>>() - { - @Override - public Iterable<Type> apply( Type type ) - { - Class clazz = RAW_CLASS.apply( type ); + private static final Function<Type, Stream<? extends Type>> TYPES_OF = type -> { + Class clazz = RAW_CLASS.apply( type ); - if( clazz.isInterface() ) - { - Iterable<Type> genericInterfaces = iterable( clazz.getGenericInterfaces() ); - Iterable<Type> flattenIterables = flattenIterables( Iterables.map( INTERFACES_OF, genericInterfaces ) ); - return prepend( clazz, flattenIterables ); - } - else - { - return flatten( CLASS_HIERARCHY.apply( type ), - flattenIterables( Iterables.map( INTERFACES_OF, CLASS_HIERARCHY.apply( type ) ) ) ); - } + if( clazz.isInterface() ) + { + Stream<Type> intfaces = Arrays.stream( clazz.getGenericInterfaces() ).flatMap( INTERFACES_OF ); + return concat( Stream.of(clazz), intfaces ); + } + else + { + return Stream.of(type).flatMap( CLASS_HIERARCHY ).flatMap( INTERFACES_OF ).flatMap( CLASS_HIERARCHY ); } }; @@ -232,39 +205,29 @@ public final class Classes return TYPE_OF.apply( from ); } - public static Iterable<Type> typesOf( Iterable<Type> types ) + public static Stream<Type> typesOf( Stream<? extends Type> types ) { - Iterable<Type> result = empty(); - for( Type type : types ) - { - result = flatten( result, typesOf( type ) ); - } - return result; + return types.flatMap( TYPES_OF ); } - public static Iterable<Type> typesOf( Type type ) + public static Stream<? extends Type> typesOf( Type type ) { return TYPES_OF.apply( type ); } - public static Iterable<? extends Type> interfacesOf( Iterable<? extends Type> types ) + public static Stream<? extends Type> interfacesOf( Stream<? extends Type> types ) { - Iterable<Type> result = empty(); - for( Type type : types ) - { - result = flatten( result, interfacesOf( type ) ); - } - return result; + return types.flatMap( INTERFACES_OF ); } - public static Iterable<Type> interfacesOf( Type type ) + public static Stream<? extends Type> interfacesOf( Type type ) { - return INTERFACES_OF.apply( type ); + return Stream.of(type).flatMap( INTERFACES_OF ); } - public static Iterable<Class<?>> classHierarchy( Class<?> type ) + public static Stream<Class<?>> classHierarchy( Class<?> type ) { - return CLASS_HIERARCHY.apply( type ); + return Stream.of(type).flatMap( CLASS_HIERARCHY ); } public static Type wrapperClass( Type type ) @@ -272,17 +235,9 @@ public final class Classes return WRAPPER_CLASS.apply( type ); } - public static Predicate<Class<?>> isAssignableFrom( final Class clazz ) + public static Predicate<Class<?>> isAssignableFrom( final Class<?> clazz ) { - return new Predicate<Class<?>>() - { - @Override - @SuppressWarnings( "unchecked" ) - public boolean test( Class<?> item ) - { - return clazz.isAssignableFrom( item ); - } - }; + return clazz::isAssignableFrom; } @SuppressWarnings( "raw" ) @@ -310,28 +265,14 @@ public final class Classes }; } - public static <T> Function<Type, Iterable<T>> forClassHierarchy( final Function<Class<?>, Iterable<T>> function ) + public static <T> Function<Type, Stream<T>> forClassHierarchy( final Function<Class<?>, Stream<T>> function ) { - return new Function<Type, Iterable<T>>() - { - @Override - public Iterable<T> apply( Type type ) - { - return flattenIterables( Iterables.map( function, CLASS_HIERARCHY.apply( type ) ) ); - } - }; + return type -> Stream.of( type ).flatMap( CLASS_HIERARCHY ).flatMap( function ); } - public static <T> Function<Type, Iterable<T>> forTypes( final Function<Type, Iterable<T>> function ) + public static <T> Function<Type, Stream<T>> forTypes( final Function<Type, Stream<T>> function ) { - return new Function<Type, Iterable<T>>() - { - @Override - public Iterable<T> apply( Type type ) - { - return flattenIterables( Iterables.map( function, TYPES_OF.apply( type ) ) ); - } - }; + return type -> Stream.of(type).flatMap( TYPES_OF ).flatMap( function ); } @SuppressWarnings( "raw" ) @@ -414,19 +355,27 @@ public final class Classes @SuppressWarnings( "UnusedDeclaration" ) public static <AnnotationType extends Annotation> - AnnotationType findAnnotationOfTypeOrAnyOfSuperTypes( Class<?> type, Class<AnnotationType> annotationClass ) - { - AnnotationType result = null; - for( Type clazz : Classes.TYPES_OF.apply( type ) ) - { - result = Classes.RAW_CLASS.apply( clazz ).getAnnotation( annotationClass ); - if( result != null ) - { - break; - } - } - - return result; + AnnotationType findAnnotationOfTypeOrAnyOfSuperTypes( Class<?> type, Class<AnnotationType> annotationClass ) + { + return Stream.of( type ) + .flatMap( TYPES_OF ) + .map( RAW_CLASS ) + .map( clazz -> clazz.getAnnotation(annotationClass)) + .filter( annot -> annot != null ) + .findAny().get(); +// +// +// AnnotationType result = null; +// for( Type clazz : Classes.TYPES_OF.apply( type ) ) +// { +// result = Classes.RAW_CLASS.apply( clazz ).getAnnotation( annotationClass ); +// if( result != null ) +// { +// break; +// } +// } +// +// return result; } public static Predicate<Member> memberNamed( final String name ) @@ -445,9 +394,9 @@ public final class Classes * Given a type variable, find what it resolves to given the declaring class where type * variable was found and a top class that extends the declaring class. * - * @param name The TypeVariable name. + * @param name The TypeVariable name. * @param declaringClass The class where the TypeVariable is declared. - * @param topClass The top class that extends the declaringClass + * @param topClass The top class that extends the declaringClass * * @return The Type instance of the given TypeVariable */ @@ -479,55 +428,87 @@ public final class Classes return resolvedType; } - List<Type> types = new ArrayList<>(); - for( Type type : current.getGenericInterfaces() ) - { - Iterable<Type> interfaces = Classes.INTERFACES_OF.apply( type ); - for( Type anInterface : interfaces ) - { - if( !types.contains( anInterface ) ) - { - types.add( anInterface ); - } - } - types.add( type ); - } - - if( current.getGenericSuperclass() != null ) - { - types.add( current.getGenericSuperclass() ); - } - - for( Type type : types ) - { - Class subClass; - if( type instanceof ParameterizedType ) - { - ParameterizedType pt = (ParameterizedType) type; - Type[] args = pt.getActualTypeArguments(); - Class clazz = (Class) pt.getRawType(); - TypeVariable[] vars = clazz.getTypeParameters(); - for( int i = 0; i < vars.length; i++ ) - { - TypeVariable var = vars[ i]; - Type mappedType = args[ i]; - mappings.put( var, mappedType ); - } - subClass = (Class) pt.getRawType(); - } - else - { - subClass = (Class) type; - } - - Type resolvedType = resolveTypeVariable( name, declaringClass, mappings, subClass ); - if( resolvedType != null ) - { - return resolvedType; - } - } - - return null; + Stream<? extends Type> stream1 = Arrays.stream( current.getGenericInterfaces() ) + .flatMap( INTERFACES_OF ) + .distinct(); + + return concat( Stream.of(current.getGenericSuperclass()), stream1) + .map( type -> + { + Class subClass; + if( type instanceof ParameterizedType ) + { + ParameterizedType pt = (ParameterizedType) type; + Type[] args = pt.getActualTypeArguments(); + Class clazz = (Class) pt.getRawType(); + TypeVariable[] vars = clazz.getTypeParameters(); + for( int i = 0; i < vars.length; i++ ) + { + TypeVariable var = vars[ i ]; + Type mappedType = args[ i ]; + mappings.put( var, mappedType ); + } + subClass = (Class) pt.getRawType(); + } + else + { + subClass = (Class) type; + } + return subClass; + } ) + .map( subClass -> resolveTypeVariable( name, declaringClass, mappings, subClass ) ) + .filter( type -> type != null ) + .findAny().get(); + +// List<Type> types = new ArrayList<>(); +// for( Type type : current.getGenericInterfaces() ) +// { +// Iterable<Type> interfaces = Classes.INTERFACES_OF.apply( type ); +// for( Type anInterface : interfaces ) +// { +// if( !types.contains( anInterface ) ) +// { +// types.add( anInterface ); +// } +// } +// types.add( type ); +// } +// +// if( current.getGenericSuperclass() != null ) +// { +// types.add( current.getGenericSuperclass() ); +// } +// +// for( Type type : types ) +// { +// Class subClass; +// if( type instanceof ParameterizedType ) +// { +// ParameterizedType pt = (ParameterizedType) type; +// Type[] args = pt.getActualTypeArguments(); +// Class clazz = (Class) pt.getRawType(); +// TypeVariable[] vars = clazz.getTypeParameters(); +// for( int i = 0; i < vars.length; i++ ) +// { +// TypeVariable var = vars[ i ]; +// Type mappedType = args[ i ]; +// mappings.put( var, mappedType ); +// } +// subClass = (Class) pt.getRawType(); +// } +// else +// { +// subClass = (Class) type; +// } +// +// Type resolvedType = resolveTypeVariable( name, declaringClass, mappings, subClass ); +// if( resolvedType != null ) +// { +// return resolvedType; +// } +// } +// +// return null; } /** @@ -597,100 +578,35 @@ public final class Classes public static Predicate<ModelDescriptor> modelTypeSpecification( final String className ) { - return new Predicate<ModelDescriptor>() - { - @Override - public boolean test( ModelDescriptor item ) - { - return matchesAny( new Predicate<String>() - { - @Override - public boolean test( String item ) - { - return item.equals( className ); - } - }, map( new Function<Class<?>, String>() - { - @Override - public String apply( Class<?> item ) - { - return item.getName(); - } - }, item.types() ) ); - } - }; + return item -> + stream( item.types().spliterator(), false ) + .map( Class::getName ).anyMatch( typeName -> typeName.equals( className ) ); } @SuppressWarnings( "raw" ) public static Predicate<ModelDescriptor> exactTypeSpecification( final Class type ) { - return new Predicate<ModelDescriptor>() - { - @Override - public boolean test( ModelDescriptor item ) - { - return matchesAny( new Predicate<Class<?>>() - { - @Override - public boolean test( Class<?> item ) - { - return item.equals( type ); - } - }, item.types() ); - } - }; + return item -> item.types().anyMatch( clazz -> clazz.equals( type ) ); } @SuppressWarnings( "raw" ) - public static Predicate<ModelDescriptor> assignableTypeSpecification( final Class type ) + public static Predicate<ModelDescriptor> assignableTypeSpecification( final Class<?> type ) { - return new Predicate<ModelDescriptor>() - { - @Override - public boolean test( ModelDescriptor item ) - { - return matchesAny( new Predicate<Class<?>>() - { - @Override - @SuppressWarnings( "unchecked" ) - public boolean test( Class<?> itemType ) - { - return !type.equals( itemType ) && type.isAssignableFrom( itemType ); - } - }, item.types() ); - } - }; + return item -> + item.types().anyMatch( + itemType -> !type.equals( itemType ) && type.isAssignableFrom( itemType ) + ); } @SuppressWarnings( "raw" ) - public static String toString( Iterable<? extends Class> type ) + public static String toString( Stream<? extends Class> types ) { - StringBuilder builder = new StringBuilder(); - builder.append( "[" ); - boolean first = true; - for( Class c : type ) - { - if( !first ) - { - builder.append( "," ); - } - first = false; - builder.append( c.getSimpleName() ); - } - builder.append( "]" ); - return builder.toString(); + return "[" + types.map(Class::getSimpleName).collect( Collectors.joining(",")) +"]"; } public static Function<Type, String> toClassName() { - return new Function<Type, String>() - { - @Override - public String apply( Type type ) - { - return RAW_CLASS.apply( type ).getName(); - } - }; + return type -> RAW_CLASS.apply( type ).getName(); } private Classes() http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/api/src/main/java/org/apache/zest/api/util/Constructors.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/util/Constructors.java b/core/api/src/main/java/org/apache/zest/api/util/Constructors.java index fd09eb3..c77531d 100644 --- a/core/api/src/main/java/org/apache/zest/api/util/Constructors.java +++ b/core/api/src/main/java/org/apache/zest/api/util/Constructors.java @@ -20,7 +20,9 @@ package org.apache.zest.api.util; import java.lang.reflect.Constructor; import java.lang.reflect.Type; +import java.util.Arrays; import java.util.function.Function; +import java.util.stream.Stream; import static org.apache.zest.functional.Iterables.iterable; @@ -29,12 +31,6 @@ import static org.apache.zest.functional.Iterables.iterable; */ public final class Constructors { - public static final Function<Type, Iterable<Constructor<?>>> CONSTRUCTORS_OF = Classes.forClassHierarchy( new Function<Class<?>, Iterable<Constructor<?>>>() - { - @Override - public Iterable<Constructor<?>> apply( Class<?> type ) - { - return iterable( type.getDeclaredConstructors() ); - } - } ); + public static final Function<Type, Stream<Constructor<?>>> CONSTRUCTORS_OF = + Classes.forClassHierarchy( type -> Arrays.stream( type.getDeclaredConstructors() ) ); }
