Do not allow Composites in @Uses. Signed-off-by: niclas <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/002794fe Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/002794fe Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/002794fe Branch: refs/heads/develop Commit: 002794fed1e070cf0b0217c69067272be472ee7c Parents: 195da9f Author: niclas <[email protected]> Authored: Wed Jun 7 08:58:31 2017 +0800 Committer: niclas <[email protected]> Committed: Wed Jun 7 08:58:31 2017 +0800 ---------------------------------------------------------------------- .../apache/polygene/runtime/composite/UsesInstance.java | 11 +++++++++++ 1 file changed, 11 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/polygene-java/blob/002794fe/core/runtime/src/main/java/org/apache/polygene/runtime/composite/UsesInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/UsesInstance.java b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/UsesInstance.java index 0fc8eb3..9d9632b 100644 --- a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/UsesInstance.java +++ b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/UsesInstance.java @@ -24,6 +24,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import org.apache.polygene.api.common.ConstructionException; +import org.apache.polygene.runtime.PolygeneRuntimeImpl; /** * JAVADOC @@ -45,6 +47,15 @@ public final class UsesInstance public UsesInstance use( Object... objects ) { + // Validate that there are no Composites in the list, since they are possibly not fully initialized yet. + // TODO: The reason for that is that Composites may not be fully initialized when reaching here, and the hashCode() call later will cause an NPE. + for( Object obj : objects ) + { + if( PolygeneRuntimeImpl.isCompositeType( obj ) ) + { + throw new ConstructionException( "Composites are not allowed as @Uses arguments: " + obj.toString() ); + } + } HashSet<Object> useObjects = new HashSet<>(); if( !uses.isEmpty() ) {
