You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2016/04/14 08:13:34 UTC
[28/34] zest-java git commit: Fixed the Type resolution so that a
Foo field will not get a Foo as the injected type.
Fixed the Type resolution so that a Foo<Bar> field will not get a Foo<Blip> as the injected type.
Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/15f156d5
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/15f156d5
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/15f156d5
Branch: refs/heads/develop
Commit: 15f156d50f52a9f334ffdc81f045d93b241522f1
Parents: 9a5c94c
Author: Niclas Hedhman <ni...@hedhman.org>
Authored: Wed Apr 13 19:32:32 2016 +0800
Committer: Niclas Hedhman <ni...@hedhman.org>
Committed: Wed Apr 13 19:32:32 2016 +0800
----------------------------------------------------------------------
.../zest/api/service/ServiceReference.java | 7 ++++
.../runtime/activation/ActivationDelegate.java | 7 ++++
.../ImportedServiceReferenceInstance.java | 7 ++++
.../service/ServiceReferenceInstance.java | 8 ++++-
.../zest/runtime/structure/ModuleInstance.java | 35 ++++++++++----------
.../zest/runtime/structure/TypeLookupImpl.java | 24 ++++++--------
.../property/ValueNestedBuilderTest.java | 30 ++++++++---------
.../runtime/value/NestedValueBuilderTest.java | 2 ++
.../runtime/value/ValueCompositeBasicsTest.java | 2 ++
9 files changed, 73 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/api/src/main/java/org/apache/zest/api/service/ServiceReference.java
----------------------------------------------------------------------
diff --git a/core/api/src/main/java/org/apache/zest/api/service/ServiceReference.java b/core/api/src/main/java/org/apache/zest/api/service/ServiceReference.java
index dd17618..3ed1cfd 100644
--- a/core/api/src/main/java/org/apache/zest/api/service/ServiceReference.java
+++ b/core/api/src/main/java/org/apache/zest/api/service/ServiceReference.java
@@ -15,6 +15,7 @@
package org.apache.zest.api.service;
import org.apache.zest.api.activation.ActivationEventListenerRegistration;
+import org.apache.zest.api.composite.ModelDescriptor;
import org.apache.zest.api.structure.MetaInfoHolder;
import org.apache.zest.api.type.HasTypes;
@@ -44,4 +45,10 @@ public interface ServiceReference<T>
* @return TRUE if the service is available, otherwise return FALSE
*/
boolean isAvailable();
+
+ /** Returns the ServiceModel of the service referenced by this ServiceReference.
+ *
+ * @return
+ */
+ ModelDescriptor model();
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/main/java/org/apache/zest/runtime/activation/ActivationDelegate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/activation/ActivationDelegate.java b/core/runtime/src/main/java/org/apache/zest/runtime/activation/ActivationDelegate.java
index b69d9a7..8363e18 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/activation/ActivationDelegate.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/activation/ActivationDelegate.java
@@ -24,6 +24,7 @@ import org.apache.zest.api.activation.ActivationEvent;
import org.apache.zest.api.activation.ActivationEventListener;
import org.apache.zest.api.activation.ActivationException;
import org.apache.zest.api.activation.PassivationException;
+import org.apache.zest.api.composite.ModelDescriptor;
import org.apache.zest.api.service.ServiceReference;
import static org.apache.zest.api.activation.ActivationEvent.EventType.ACTIVATED;
@@ -334,6 +335,12 @@ public final class ActivationDelegate
}
@Override
+ public ModelDescriptor model()
+ {
+ return reference.model();
+ }
+
+ @Override
public Stream<Class<?>> types()
{
return reference.types();
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
index b77370a..a2da20c 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
@@ -24,6 +24,7 @@ import org.apache.zest.api.activation.Activation;
import org.apache.zest.api.activation.ActivationEventListener;
import org.apache.zest.api.activation.ActivationException;
import org.apache.zest.api.activation.PassivationException;
+import org.apache.zest.api.composite.ModelDescriptor;
import org.apache.zest.api.service.ServiceImporterException;
import org.apache.zest.api.service.ServiceReference;
import org.apache.zest.api.service.ServiceUnavailableException;
@@ -133,6 +134,12 @@ public final class ImportedServiceReferenceInstance<T>
}
}
+ @Override
+ public ModelDescriptor model()
+ {
+ return serviceModel;
+ }
+
public ModuleDescriptor module()
{
return module;
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
index 97928c5..1abe3d5 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
@@ -58,7 +58,7 @@ public final class ServiceReferenceInstance<T>
private final ActivationDelegate activation = new ActivationDelegate( this );
private boolean active = false;
- public ServiceReferenceInstance( ServiceModel serviceModel, ModuleDescriptor module )
+ ServiceReferenceInstance( ServiceModel serviceModel, ModuleDescriptor module )
{
this.module = module;
this.serviceModel = serviceModel;
@@ -102,6 +102,12 @@ public final class ServiceReferenceInstance<T>
return getInstance().isAvailable();
}
+ @Override
+ public ModelDescriptor model()
+ {
+ return serviceModel;
+ }
+
public ModuleDescriptor module()
{
return module;
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
index a24e768..ce458c9 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.zest.api.activation.Activation;
@@ -370,20 +371,7 @@ public class ModuleInstance
{
throw new NoSuchServiceException( serviceType.getTypeName(), name() );
}
- ModuleInstance serviceLocation = (ModuleInstance) serviceModel.module().instance();
- try
- {
- //noinspection unchecked
- return serviceLocation.services
- .references()
- .filter( ref -> ref.hasType( serviceType ) )
- .map( ref -> (ServiceReference<T>) ref )
- .findAny().get();
- }
- catch( NoSuchElementException e )
- {
- throw new NoSuchServiceException( serviceType.getTypeName(), name() );
- }
+ return findServiceReferenceInstance( serviceModel );
}
@Override
@@ -402,14 +390,27 @@ public class ModuleInstance
}
//noinspection unchecked
return serviceModels.stream()
- .flatMap(
- model -> ( (ModuleInstance) model.module().instance() ).services.references()
- )
+ .map( this::findServiceReferenceInstance )
+ .filter( ref -> ref != null )
.filter( ref -> ref.hasType( serviceType ) )
.map( ref -> (ServiceReference<T>) ref )
.collect( Collectors.toList() );
}
+ private <T> ServiceReference<T> findServiceReferenceInstance( ModelDescriptor model )
+ {
+ ModuleInstance moduleInstanceOfModel = (ModuleInstance) model.module().instance();
+ Optional<ServiceReference<?>> candidate = moduleInstanceOfModel.services.references()
+ .filter( ref -> ref.model().equals( model ) )
+ .findAny();
+ if( candidate.isPresent() )
+ {
+ ServiceReference<?> serviceReference = candidate.get();
+ return (ServiceReference<T>) serviceReference;
+ }
+ return null;
+ }
+
// Implementation of Activation
@Override
@SuppressWarnings( "unchecked" )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookupImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookupImpl.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookupImpl.java
index 0d3c740..aba9b22 100755
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookupImpl.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookupImpl.java
@@ -47,7 +47,7 @@ import static org.apache.zest.functional.Iterables.first;
/**
* Central place for Composite Type lookups.
*/
-public class TypeLookupImpl
+class TypeLookupImpl
implements TypeLookup
{
@@ -250,19 +250,15 @@ public class TypeLookupImpl
{
return servicesReferences.computeIfAbsent( type1, type ->
{
- List<ModelDescriptor> models =
- allServices().filter(
- new ExactTypeMatching<>( type ).or( new AssignableFromTypeMatching<>( type ) )
- )
- .distinct()
- .collect( Collectors.toList() );
-
- // TODO: Needed??
-// List<T> result = new ArrayList<>();
-// //noinspection unchecked
-// serviceRefs.forEach( descriptor -> result.add( (T) descriptor ) );
-
- return models;
+ // There is a requirement that "exact match" services must be returned before "assignable match"
+ // services, hence the dual streams instead of a OR filter.
+ return Stream.concat(
+ allServices()
+ .filter( new ExactTypeMatching<>( type ) ),
+ allServices()
+ .filter( new AssignableFromTypeMatching<>( type ) ) )
+ .distinct()
+ .collect( Collectors.toList() );
} );
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/test/java/org/apache/zest/runtime/property/ValueNestedBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/property/ValueNestedBuilderTest.java b/core/runtime/src/test/java/org/apache/zest/runtime/property/ValueNestedBuilderTest.java
index e23af89..69dfe02 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/property/ValueNestedBuilderTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/property/ValueNestedBuilderTest.java
@@ -17,7 +17,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.junit.Test;
import org.apache.zest.api.common.UseDefaults;
import org.apache.zest.api.property.Property;
import org.apache.zest.api.value.ValueBuilder;
@@ -25,23 +24,23 @@ import org.apache.zest.api.value.ValueComposite;
import org.apache.zest.bootstrap.AssemblyException;
import org.apache.zest.bootstrap.ModuleAssembly;
import org.apache.zest.test.AbstractZestTest;
+import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerializationService;
+import org.junit.Test;
public class ValueNestedBuilderTest
- extends AbstractZestTest
+ extends AbstractZestTest
{
- static interface InnerValue
- extends ValueComposite
+ private interface InnerValue
+ extends ValueComposite
{
-
Property<List<String>> listProp();
Property<Map<String, String>> mapProp();
-
}
- static interface InnerDefaultedValue
- extends ValueComposite
+ private interface InnerDefaultedValue
+ extends ValueComposite
{
@UseDefaults
@@ -49,30 +48,28 @@ public class ValueNestedBuilderTest
@UseDefaults
Property<Map<String, String>> mapPropDefault();
-
}
- static interface OuterValue
- extends ValueComposite
+ private interface OuterValue
+ extends ValueComposite
{
Property<List<InnerValue>> innerListProp();
-
}
- static interface OuterDefaultedValue
- extends ValueComposite
+ private interface OuterDefaultedValue
+ extends ValueComposite
{
@UseDefaults
Property<List<InnerDefaultedValue>> innerListPropDefault();
-
}
@Override
public void assemble( ModuleAssembly module )
- throws AssemblyException
+ throws AssemblyException
{
+ module.services( OrgJsonValueSerializationService.class );
module.values( InnerValue.class, InnerDefaultedValue.class, OuterValue.class, OuterDefaultedValue.class );
}
@@ -127,5 +124,4 @@ public class ValueNestedBuilderTest
System.out.println( outer.toString() );
// If we reach this point, value creation went well
}
-
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/test/java/org/apache/zest/runtime/value/NestedValueBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/value/NestedValueBuilderTest.java b/core/runtime/src/test/java/org/apache/zest/runtime/value/NestedValueBuilderTest.java
index a0c2715..f20fa6e 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/value/NestedValueBuilderTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/value/NestedValueBuilderTest.java
@@ -17,6 +17,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerializationService;
import org.junit.Test;
import org.apache.zest.api.common.UseDefaults;
import org.apache.zest.api.property.Property;
@@ -71,6 +72,7 @@ public class NestedValueBuilderTest
public void assemble( ModuleAssembly module )
throws AssemblyException
{
+ module.services( OrgJsonValueSerializationService.class );
module.values( InnerValue.class, InnerDefaultedValue.class, OuterValue.class, OuterDefaultedValue.class );
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/15f156d5/core/runtime/src/test/java/org/apache/zest/runtime/value/ValueCompositeBasicsTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/value/ValueCompositeBasicsTest.java b/core/runtime/src/test/java/org/apache/zest/runtime/value/ValueCompositeBasicsTest.java
index 9174699..f5dabb5 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/value/ValueCompositeBasicsTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/value/ValueCompositeBasicsTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.zest.runtime.value;
+import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerializationService;
import org.junit.Test;
import org.apache.zest.api.injection.scope.This;
import org.apache.zest.api.mixin.Mixins;
@@ -37,6 +38,7 @@ public class ValueCompositeBasicsTest
public void assemble( ModuleAssembly module )
throws AssemblyException
{
+ module.services( OrgJsonValueSerializationService.class );
module.values( SomeValue.class );
}