Reduction of code in Associations API implementation, as they actually shared a 
lot of code across the 3 types.
General cleanup.

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/37251c5b
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/37251c5b
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/37251c5b

Branch: refs/heads/develop
Commit: 37251c5bd803dae17206f5e5cc2eb204d442dc2a
Parents: cf3e885
Author: niclas <[email protected]>
Authored: Fri May 12 18:01:22 2017 +0800
Committer: niclas <[email protected]>
Committed: Sun May 14 12:07:56 2017 +0800

----------------------------------------------------------------------
 .../api/activation/ActivationException.java     |   1 -
 .../ApplicationPassivationThread.java           |   1 -
 .../api/activation/PassivationException.java    |   2 -
 .../api/association/AssociationStateHolder.java |   3 +-
 .../polygene/api/entity/EntityReference.java    |   2 +-
 .../association/AbstractAssociationModel.java   | 198 ++++++++++++++++
 .../runtime/association/AssociationModel.java   | 190 +--------------
 .../association/ManyAssociationInstance.java    |   3 +-
 .../association/ManyAssociationModel.java       | 226 +-----------------
 .../association/ManyAssociationsModel.java      |   4 +-
 .../association/NamedAssociationInstance.java   |  12 +-
 .../association/NamedAssociationModel.java      | 229 +------------------
 .../composite/ValueConstraintsInstance.java     |   2 -
 .../runtime/entity/EntityStateInstance.java     |  41 ++--
 .../polygene/runtime/value/ValueInstance.java   |   6 +-
 .../runtime/value/ValueStateInstance.java       |   6 +-
 16 files changed, 249 insertions(+), 677 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/api/src/main/java/org/apache/polygene/api/activation/ActivationException.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/activation/ActivationException.java
 
b/core/api/src/main/java/org/apache/polygene/api/activation/ActivationException.java
index cf6d978..b4e6e29 100644
--- 
a/core/api/src/main/java/org/apache/polygene/api/activation/ActivationException.java
+++ 
b/core/api/src/main/java/org/apache/polygene/api/activation/ActivationException.java
@@ -24,7 +24,6 @@ package org.apache.polygene.api.activation;
  */
 public class ActivationException extends Exception
 {
-    private static final long serialVersionUID = 1L;
     public ActivationException( String message, Throwable cause )
     {
         super( message, cause );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/api/src/main/java/org/apache/polygene/api/activation/ApplicationPassivationThread.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/activation/ApplicationPassivationThread.java
 
b/core/api/src/main/java/org/apache/polygene/api/activation/ApplicationPassivationThread.java
index 7197257..c758d04 100644
--- 
a/core/api/src/main/java/org/apache/polygene/api/activation/ApplicationPassivationThread.java
+++ 
b/core/api/src/main/java/org/apache/polygene/api/activation/ApplicationPassivationThread.java
@@ -71,7 +71,6 @@ public final class ApplicationPassivationThread
     private static class ApplicationPassivation
         implements Runnable
     {
-
         private final Application application;
         private final PrintStream output;
         private final Logger logger;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/api/src/main/java/org/apache/polygene/api/activation/PassivationException.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/activation/PassivationException.java
 
b/core/api/src/main/java/org/apache/polygene/api/activation/PassivationException.java
index 98eaa0f..a4f8540 100644
--- 
a/core/api/src/main/java/org/apache/polygene/api/activation/PassivationException.java
+++ 
b/core/api/src/main/java/org/apache/polygene/api/activation/PassivationException.java
@@ -31,8 +31,6 @@ import java.util.List;
 public final class PassivationException
     extends Exception
 {
-
-    private static final long serialVersionUID = 1L;
     private final List<Exception> causes;
 
     /**

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/api/src/main/java/org/apache/polygene/api/association/AssociationStateHolder.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/association/AssociationStateHolder.java
 
b/core/api/src/main/java/org/apache/polygene/api/association/AssociationStateHolder.java
index 9cf336b..ed68517 100644
--- 
a/core/api/src/main/java/org/apache/polygene/api/association/AssociationStateHolder.java
+++ 
b/core/api/src/main/java/org/apache/polygene/api/association/AssociationStateHolder.java
@@ -26,8 +26,7 @@ import org.apache.polygene.api.property.StateHolder;
 /**
  * This represents the state of a entity (properties+associations).
  */
-public interface AssociationStateHolder
-    extends StateHolder
+public interface AssociationStateHolder extends StateHolder
 {
     /**
      * Get an association for a specific accessor method.

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
----------------------------------------------------------------------
diff --git 
a/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java 
b/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
index c15532e..1f28a0e 100644
--- a/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
+++ b/core/api/src/main/java/org/apache/polygene/api/entity/EntityReference.java
@@ -80,7 +80,7 @@ public final class EntityReference
      *
      * @return The reference of the Entity that this EntityReference.is 
referring to
      */
-    public final Identity identity()
+    public Identity identity()
     {
         return identity;
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/AbstractAssociationModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/AbstractAssociationModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/AbstractAssociationModel.java
new file mode 100644
index 0000000..974a978
--- /dev/null
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/AbstractAssociationModel.java
@@ -0,0 +1,198 @@
+package org.apache.polygene.runtime.association;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import org.apache.polygene.api.association.AbstractAssociation;
+import org.apache.polygene.api.association.AssociationDescriptor;
+import org.apache.polygene.api.association.GenericAssociationInfo;
+import org.apache.polygene.api.common.MetaInfo;
+import org.apache.polygene.api.common.QualifiedName;
+import org.apache.polygene.api.constraint.ConstraintViolationException;
+import org.apache.polygene.api.entity.Aggregated;
+import org.apache.polygene.api.entity.Queryable;
+import org.apache.polygene.api.property.Immutable;
+import org.apache.polygene.api.util.Classes;
+import org.apache.polygene.api.util.Visitable;
+import org.apache.polygene.api.util.Visitor;
+import org.apache.polygene.bootstrap.BindingException;
+import org.apache.polygene.runtime.composite.ValueConstraintsInstance;
+import org.apache.polygene.runtime.model.Binder;
+import org.apache.polygene.runtime.model.Resolution;
+
+public class AbstractAssociationModel<AT>
+    implements AbstractAssociation, AssociationDescriptor, AssociationInfo, 
Binder, Visitable<AT>
+{
+    private final MetaInfo metaInfo;
+    private final AccessibleObject accessor;
+    private final QualifiedName qualifiedName;
+    private final ValueConstraintsInstance constraints;
+    private final ValueConstraintsInstance associationConstraints;
+    private final boolean queryable;
+    private final boolean immutable;
+    private final boolean aggregated;
+    private Type type;
+    private AssociationInfo builderInfo;
+
+    public AbstractAssociationModel( AccessibleObject accessor,
+                                     ValueConstraintsInstance 
valueConstraintsInstance,
+                                     ValueConstraintsInstance 
associationConstraintsInstance,
+                                     MetaInfo metaInfo )
+    {
+        this.metaInfo = metaInfo;
+        this.constraints = valueConstraintsInstance;
+        this.associationConstraints = associationConstraintsInstance;
+        this.accessor = accessor;
+        this.type = GenericAssociationInfo.associationTypeOf( accessor );
+        this.qualifiedName = QualifiedName.fromAccessor( accessor );
+        this.immutable = metaInfo.get( Immutable.class ) != null;
+        this.aggregated = metaInfo.get( Aggregated.class ) != null;
+
+        Queryable queryable = accessor.getAnnotation( Queryable.class );
+        this.queryable = queryable == null || queryable.value();
+    }
+
+    @Override
+    public <T> T metaInfo( Class<T> infoType )
+    {
+        return metaInfo.get( infoType );
+    }
+
+    @Override
+    public QualifiedName qualifiedName()
+    {
+        return qualifiedName;
+    }
+
+    @Override
+    public Type type()
+    {
+        return type;
+    }
+
+    @Override
+    public boolean isImmutable()
+    {
+        return immutable;
+    }
+
+    @Override
+    public boolean isAggregated()
+    {
+        return aggregated;
+    }
+
+    @Override
+    public AccessibleObject accessor()
+    {
+        return accessor;
+    }
+
+    @Override
+    public boolean queryable()
+    {
+        return queryable;
+    }
+
+    @Override
+    public void checkConstraints( Object value )
+        throws ConstraintViolationException
+    {
+        constraints.checkConstraints( value, accessor );
+    }
+
+    public void checkAssociationConstraints( AbstractAssociation association )
+        throws ConstraintViolationException
+    {
+        associationConstraints.checkConstraints( association, accessor );
+    }
+
+    public AssociationInfo builderInfo()
+    {
+        return builderInfo;
+    }
+
+    @Override
+    public void bind( Resolution resolution )
+        throws BindingException
+    {
+        builderInfo = new AssociationInfo()
+        {
+            @Override
+            public boolean isImmutable()
+            {
+                return false;
+            }
+
+            @Override
+            public QualifiedName qualifiedName()
+            {
+                return qualifiedName;
+            }
+
+            @Override
+            public Type type()
+            {
+                return type;
+            }
+
+            @Override
+            public void checkConstraints( Object value )
+                throws ConstraintViolationException
+            {
+                AbstractAssociationModel.this.checkConstraints( value );
+            }
+        };
+
+        if( type instanceof TypeVariable )
+        {
+            Class mainType = resolution.model().types().findFirst().orElse( 
null );
+            type = Classes.resolveTypeVariable( (TypeVariable) type, ( 
(Member) accessor ).getDeclaringClass(), mainType );
+        }
+    }
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public <ThrowableType extends Throwable> boolean accept( Visitor<? super 
AT, ThrowableType> visitor )
+        throws ThrowableType
+    {
+        return visitor.visit( (AT) this );
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if( this == o )
+        {
+            return true;
+        }
+        if( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+        AbstractAssociationModel that = (AbstractAssociationModel) o;
+        return accessor.equals( that.accessor );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return accessor.hashCode();
+    }
+
+    @Override
+    public String toString()
+    {
+        if( accessor instanceof Field )
+        {
+            return ( (Field) accessor ).toGenericString();
+        }
+        else
+        {
+            return ( (Method) accessor ).toGenericString();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/AssociationModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/AssociationModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/AssociationModel.java
index b83021e..33c2193 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/AssociationModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/AssociationModel.java
@@ -21,46 +21,18 @@
 package org.apache.polygene.runtime.association;
 
 import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import org.apache.polygene.api.association.Association;
 import org.apache.polygene.api.association.AssociationDescriptor;
-import org.apache.polygene.api.association.GenericAssociationInfo;
 import org.apache.polygene.api.common.MetaInfo;
-import org.apache.polygene.api.common.QualifiedName;
-import org.apache.polygene.api.constraint.ConstraintViolationException;
-import org.apache.polygene.api.entity.Aggregated;
-import org.apache.polygene.api.entity.Queryable;
-import org.apache.polygene.api.property.Immutable;
-import org.apache.polygene.api.util.Classes;
-import org.apache.polygene.api.util.Visitable;
-import org.apache.polygene.api.util.Visitor;
-import org.apache.polygene.bootstrap.BindingException;
 import org.apache.polygene.runtime.composite.ValueConstraintsInstance;
-import org.apache.polygene.runtime.model.Binder;
-import org.apache.polygene.runtime.model.Resolution;
 
 /**
  * Model for an Association.
  *
  * <p>Equality is based on the Association accessor object (associated type 
and name), not on the QualifiedName.</p>
  */
-public final class AssociationModel
-    implements AssociationDescriptor, AssociationInfo, Binder, 
Visitable<AssociationModel>
+public final class AssociationModel extends 
AbstractAssociationModel<AssociationModel>
+    implements AssociationDescriptor, AssociationInfo
 {
-    private MetaInfo metaInfo;
-    private Type type;
-    private AccessibleObject accessor;
-    private QualifiedName qualifiedName;
-    private ValueConstraintsInstance constraints;
-    private ValueConstraintsInstance associationConstraints;
-    private boolean queryable;
-    private boolean immutable;
-    private boolean aggregated;
-    private AssociationInfo builderInfo;
 
     public AssociationModel( AccessibleObject accessor,
                              ValueConstraintsInstance valueConstraintsInstance,
@@ -68,162 +40,6 @@ public final class AssociationModel
                              MetaInfo metaInfo
     )
     {
-        this.metaInfo = metaInfo;
-        this.constraints = valueConstraintsInstance;
-        this.associationConstraints = associationConstraintsInstance;
-        this.accessor = accessor;
-        initialize();
-    }
-
-    private void initialize()
-    {
-        this.type = GenericAssociationInfo.associationTypeOf( accessor );
-        this.qualifiedName = QualifiedName.fromAccessor( accessor );
-        this.immutable = metaInfo.get( Immutable.class ) != null;
-        this.aggregated = metaInfo.get( Aggregated.class ) != null;
-
-        final Queryable queryable = accessor.getAnnotation( Queryable.class );
-        this.queryable = queryable == null || queryable.value();
-    }
-
-    @Override
-    public <T> T metaInfo( Class<T> infoType )
-    {
-        return metaInfo.get( infoType );
-    }
-
-    @Override
-    public QualifiedName qualifiedName()
-    {
-        return qualifiedName;
-    }
-
-    @Override
-    public Type type()
-    {
-        return type;
-    }
-
-    @Override
-    public boolean isImmutable()
-    {
-        return immutable;
-    }
-
-    @Override
-    public boolean isAggregated()
-    {
-        return aggregated;
-    }
-
-    @Override
-    public AccessibleObject accessor()
-    {
-        return accessor;
-    }
-
-    @Override
-    public boolean queryable()
-    {
-        return queryable;
-    }
-
-    public AssociationInfo getBuilderInfo()
-    {
-        return builderInfo;
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( Visitor<? super 
AssociationModel, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        return visitor.visit( this );
-    }
-
-    @Override
-    public void checkConstraints( Object value )
-        throws ConstraintViolationException
-    {
-        constraints.checkConstraints( value, accessor );
-    }
-
-    public void checkAssociationConstraints( Association<?> association )
-        throws ConstraintViolationException
-    {
-        associationConstraints.checkConstraints( association, accessor );
-    }
-
-    @Override
-    public void bind( Resolution resolution )
-        throws BindingException
-    {
-        builderInfo = new AssociationInfo()
-        {
-            @Override
-            public boolean isImmutable()
-            {
-                return false;
-            }
-
-            @Override
-            public QualifiedName qualifiedName()
-            {
-                return qualifiedName;
-            }
-
-            @Override
-            public Type type()
-            {
-                return type;
-            }
-
-            @Override
-            public void checkConstraints( Object value )
-                throws ConstraintViolationException
-            {
-                AssociationModel.this.checkConstraints( value );
-            }
-        };
-
-        if( type instanceof TypeVariable )
-        {
-
-            Class mainType = resolution.model().types().findFirst().orElse( 
null );
-            type = Classes.resolveTypeVariable( (TypeVariable) type, ( 
(Member) accessor ).getDeclaringClass(), mainType );
-        }
-    }
-
-    @Override
-    public boolean equals( Object o )
-    {
-        if( this == o )
-        {
-            return true;
-        }
-        if( o == null || getClass() != o.getClass() )
-        {
-            return false;
-        }
-        AssociationModel that = (AssociationModel) o;
-        return accessor.equals( that.accessor );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return accessor.hashCode();
-    }
-
-    @Override
-    public String toString()
-    {
-        if( accessor instanceof Field )
-        {
-            return ( (Field) accessor ).toGenericString();
-        }
-        else
-        {
-            return ( (Method) accessor ).toGenericString();
-        }
+        super( accessor, valueConstraintsInstance, 
associationConstraintsInstance, metaInfo );
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
index e8dd66c..d10b950 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationInstance.java
@@ -38,8 +38,7 @@ import org.apache.polygene.spi.entity.ManyAssociationState;
 /**
  * JAVADOC
  */
-public class ManyAssociationInstance<T>
-    extends AbstractAssociationInstance<T>
+public class ManyAssociationInstance<T> extends AbstractAssociationInstance<T>
     implements ManyAssociation<T>
 {
     private ManyAssociationState manyAssociationState;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationModel.java
index e8fd0b6..98e2e2b 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationModel.java
@@ -20,34 +20,12 @@
 package org.apache.polygene.runtime.association;
 
 import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.List;
-import java.util.function.BiFunction;
-import java.util.stream.Stream;
-import org.apache.polygene.api.association.AssociationDescriptor;
-import org.apache.polygene.api.association.GenericAssociationInfo;
 import org.apache.polygene.api.association.ManyAssociation;
 import org.apache.polygene.api.common.MetaInfo;
-import org.apache.polygene.api.common.QualifiedName;
-import org.apache.polygene.api.constraint.ConstraintViolation;
-import org.apache.polygene.api.constraint.ConstraintViolationException;
-import org.apache.polygene.api.entity.Aggregated;
-import org.apache.polygene.api.entity.EntityReference;
-import org.apache.polygene.api.entity.Queryable;
-import org.apache.polygene.api.property.Immutable;
 import org.apache.polygene.api.util.Classes;
-import org.apache.polygene.api.util.Visitable;
-import org.apache.polygene.api.util.Visitor;
-import org.apache.polygene.bootstrap.BindingException;
 import org.apache.polygene.runtime.composite.ValueConstraintsInstance;
-import org.apache.polygene.runtime.model.Binder;
-import org.apache.polygene.runtime.model.Resolution;
-import org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork;
 import org.apache.polygene.runtime.unitofwork.BuilderEntityState;
+import org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork;
 import org.apache.polygene.spi.entity.EntityState;
 
 /**
@@ -55,211 +33,23 @@ import org.apache.polygene.spi.entity.EntityState;
  *
  * <p>Equality is based on the ManyAssociation accessor object (associated 
type and name), not on the QualifiedName.</p>
  */
-public final class ManyAssociationModel
-    implements AssociationDescriptor, AssociationInfo, Binder, 
Visitable<ManyAssociationModel>
+public final class ManyAssociationModel extends 
AbstractAssociationModel<ManyAssociationModel>
 {
-    private final ValueConstraintsInstance associationConstraints;
-    private final MetaInfo metaInfo;
-    private Type type;
-    private final AccessibleObject accessor;
-    private QualifiedName qualifiedName;
-    private final ValueConstraintsInstance constraints;
-    private boolean queryable;
-    private boolean immutable;
-    private boolean aggregated;
-    private AssociationInfo builderInfo;
-
     public ManyAssociationModel( AccessibleObject accessor,
                                  ValueConstraintsInstance 
valueConstraintsInstance,
                                  ValueConstraintsInstance 
associationConstraintsInstance,
                                  MetaInfo metaInfo
     )
     {
-        this.metaInfo = metaInfo;
-        this.constraints = valueConstraintsInstance;
-        this.associationConstraints = associationConstraintsInstance;
-        this.accessor = accessor;
-        initialize();
-    }
-
-    private void initialize()
-    {
-        this.type = GenericAssociationInfo.associationTypeOf( accessor );
-        this.qualifiedName = QualifiedName.fromAccessor( accessor );
-        this.immutable = metaInfo.get( Immutable.class ) != null;
-        this.aggregated = metaInfo.get( Aggregated.class ) != null;
-
-        final Queryable queryable = accessor.getAnnotation( Queryable.class );
-        this.queryable = queryable == null || queryable.value();
-    }
-
-    @Override
-    public <T> T metaInfo( Class<T> infoType )
-    {
-        return metaInfo.get( infoType );
-    }
-
-    @Override
-    public QualifiedName qualifiedName()
-    {
-        return qualifiedName;
-    }
-
-    @Override
-    public Type type()
-    {
-        return type;
-    }
-
-    @Override
-    public boolean isImmutable()
-    {
-        return immutable;
-    }
-
-    @Override
-    public boolean isAggregated()
-    {
-        return aggregated;
-    }
-
-    @Override
-    public AccessibleObject accessor()
-    {
-        return accessor;
-    }
-
-    @Override
-    public boolean queryable()
-    {
-        return queryable;
-    }
-
-    public AssociationInfo getBuilderInfo()
-    {
-        return builderInfo;
+        super( accessor, valueConstraintsInstance, 
associationConstraintsInstance, metaInfo );
     }
 
     public <T> ManyAssociation<T> newInstance( final ModuleUnitOfWork uow, 
EntityState state )
     {
-        return new ManyAssociationInstance<>( state instanceof 
BuilderEntityState ? builderInfo : this, new BiFunction<EntityReference, Type, 
Object>()
-        {
-            @Override
-            public Object apply( EntityReference entityReference, Type type )
-            {
-                return uow.get( Classes.RAW_CLASS.apply( type ), 
entityReference.identity() );
-            }
-        }, state.manyAssociationValueOf( qualifiedName ) );
-    }
-
-    @Override
-    public void checkConstraints( Object composite )
-        throws ConstraintViolationException
-    {
-        if( constraints != null )
-        {
-            List<ConstraintViolation> violations = 
constraints.checkConstraints( composite );
-            if( !violations.isEmpty() )
-            {
-                Stream<Class<?>> empty = Stream.empty();
-                throw new ConstraintViolationException( "", empty, (Member) 
accessor, violations );
-            }
-        }
-    }
-
-    public void checkAssociationConstraints( ManyAssociation manyAssociation )
-        throws ConstraintViolationException
-    {
-        if( associationConstraints != null )
-        {
-            List<ConstraintViolation> violations = 
associationConstraints.checkConstraints( manyAssociation );
-            if( !violations.isEmpty() )
-            {
-                Stream<Class<?>> empty = Stream.empty();
-                throw new ConstraintViolationException( "", empty, (Member) 
accessor, violations );
-            }
-        }
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( Visitor<? super 
ManyAssociationModel, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        return visitor.visit( this );
-    }
-
-    @Override
-    public void bind( Resolution resolution )
-        throws BindingException
-    {
-        builderInfo = new AssociationInfo()
-        {
-            @Override
-            public boolean isImmutable()
-            {
-                return false;
-            }
-
-            @Override
-            public QualifiedName qualifiedName()
-            {
-                return qualifiedName;
-            }
-
-            @Override
-            public Type type()
-            {
-                return type;
-            }
-
-            @Override
-            public void checkConstraints( Object value )
-                throws ConstraintViolationException
-            {
-                ManyAssociationModel.this.checkConstraints( value );
-            }
-        };
-
-        if( type instanceof TypeVariable )
-        {
-            Class mainType = resolution.model().types().findFirst().orElse( 
null );
-            type = Classes.resolveTypeVariable( (TypeVariable) type, ( 
(Member) accessor ).getDeclaringClass(), mainType );
-        }
-    }
-
-    @Override
-    public boolean equals( Object o )
-    {
-        if( this == o )
-        {
-            return true;
-        }
-        if( o == null || getClass() != o.getClass() )
-        {
-            return false;
-        }
-
-        ManyAssociationModel that = (ManyAssociationModel) o;
-
-        return accessor.equals( that.accessor );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return accessor.hashCode();
-    }
-
-    @Override
-    public String toString()
-    {
-        if( accessor instanceof Field )
-        {
-            return ( (Field) accessor ).toGenericString();
-        }
-        else
-        {
-            return ( (Method) accessor ).toGenericString();
-        }
+        return new ManyAssociationInstance<>(
+            state instanceof BuilderEntityState ? builderInfo() : this,
+            ( entityReference, type ) -> uow.get( Classes.RAW_CLASS.apply( 
type ), entityReference.identity() ),
+            state.manyAssociationValueOf( qualifiedName() )
+        );
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationsModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationsModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationsModel.java
index 090b180..8765f42 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationsModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/ManyAssociationsModel.java
@@ -120,7 +120,9 @@ public final class ManyAssociationsModel
     {
         for( ManyAssociationModel manyAssociationModel : 
mapAccessorAssociationModel.values() )
         {
-            manyAssociationModel.checkAssociationConstraints( 
state.manyAssociationFor( manyAssociationModel.accessor() ) );
+            AccessibleObject accessor = manyAssociationModel.accessor();
+            ManyAssociationInstance<?> instance = state.manyAssociationFor( 
accessor );
+            manyAssociationModel.checkAssociationConstraints( instance );
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
index 536a6ca..e855c57 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationInstance.java
@@ -37,17 +37,15 @@ import org.apache.polygene.api.entity.EntityReference;
 import org.apache.polygene.api.identity.HasIdentity;
 import org.apache.polygene.spi.entity.NamedAssociationState;
 
-public class NamedAssociationInstance<T>
-    extends AbstractAssociationInstance<T>
+public class NamedAssociationInstance<T> extends AbstractAssociationInstance<T>
     implements NamedAssociation<T>
 {
-
     private final NamedAssociationState namedAssociationState;
 
     public NamedAssociationInstance( AssociationInfo associationInfo,
                                      BiFunction<EntityReference, Type, Object> 
associationFunction,
                                      NamedAssociationState 
namedAssociationState
-    )
+                                   )
     {
         super( associationInfo, associationFunction );
         this.namedAssociationState = namedAssociationState;
@@ -78,7 +76,7 @@ public class NamedAssociationInstance<T>
         checkImmutable();
         checkType( entity );
         associationInfo.checkConstraints( entity );
-        return namedAssociationState.put( name, EntityReference.create( 
((HasIdentity) entity).identity().get() ) );
+        return namedAssociationState.put( name, EntityReference.create( ( 
(HasIdentity) entity ).identity().get() ) );
     }
 
     @Override
@@ -135,10 +133,9 @@ public class NamedAssociationInstance<T>
         return Collections.unmodifiableMap(
             StreamSupport.stream( namedAssociationState.spliterator(), false )
                          .collect( Collectors.toMap( Function.identity(), 
namedAssociationState::get ) )
-        ).entrySet();
+                                          ).entrySet();
     }
 
-
     @Override
     public boolean equals( Object o )
     {
@@ -195,5 +192,4 @@ public class NamedAssociationInstance<T>
         }
         return hash;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationModel.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationModel.java
index bfcec63..7c9b053 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationModel.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/association/NamedAssociationModel.java
@@ -20,246 +20,35 @@
 package org.apache.polygene.runtime.association;
 
 import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.List;
-import java.util.function.BiFunction;
-import java.util.stream.Stream;
-import org.apache.polygene.api.association.AssociationDescriptor;
-import org.apache.polygene.api.association.GenericAssociationInfo;
 import org.apache.polygene.api.association.NamedAssociation;
 import org.apache.polygene.api.common.MetaInfo;
-import org.apache.polygene.api.common.QualifiedName;
-import org.apache.polygene.api.constraint.ConstraintViolation;
-import org.apache.polygene.api.constraint.ConstraintViolationException;
-import org.apache.polygene.api.entity.Aggregated;
-import org.apache.polygene.api.entity.EntityReference;
-import org.apache.polygene.api.entity.Queryable;
-import org.apache.polygene.api.property.Immutable;
 import org.apache.polygene.api.util.Classes;
-import org.apache.polygene.api.util.Visitable;
-import org.apache.polygene.api.util.Visitor;
-import org.apache.polygene.bootstrap.BindingException;
 import org.apache.polygene.runtime.composite.ValueConstraintsInstance;
-import org.apache.polygene.runtime.model.Binder;
-import org.apache.polygene.runtime.model.Resolution;
-import org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork;
 import org.apache.polygene.runtime.unitofwork.BuilderEntityState;
+import org.apache.polygene.runtime.unitofwork.ModuleUnitOfWork;
 import org.apache.polygene.spi.entity.EntityState;
 
 /**
  * Model for a NamedAssociation.
- *
+ * <p>
  * <p>Equality is based on the NamedAssociation accessor object (associated 
type and name), not on the QualifiedName.</p>
  */
-public final class NamedAssociationModel
-    implements AssociationDescriptor, AssociationInfo, Binder, 
Visitable<NamedAssociationModel>
+public final class NamedAssociationModel extends 
AbstractAssociationModel<NamedAssociationModel>
 {
-    private final ValueConstraintsInstance associationConstraints;
-    private final MetaInfo metaInfo;
-    private Type type;
-    private final AccessibleObject accessor;
-    private QualifiedName qualifiedName;
-    private final ValueConstraintsInstance constraints;
-    private boolean queryable;
-    private boolean immutable;
-    private boolean aggregated;
-    private AssociationInfo builderInfo;
-
     public NamedAssociationModel( AccessibleObject accessor,
                                   ValueConstraintsInstance 
valueConstraintsInstance,
                                   ValueConstraintsInstance 
associationConstraintsInstance,
                                   MetaInfo metaInfo
-    )
-    {
-        this.metaInfo = metaInfo;
-        this.constraints = valueConstraintsInstance;
-        this.associationConstraints = associationConstraintsInstance;
-        this.accessor = accessor;
-        initialize();
-    }
-
-    private void initialize()
-    {
-        this.type = GenericAssociationInfo.associationTypeOf( accessor );
-        this.qualifiedName = QualifiedName.fromAccessor( accessor );
-        this.immutable = metaInfo.get( Immutable.class ) != null;
-        this.aggregated = metaInfo.get( Aggregated.class ) != null;
-
-        final Queryable queryable = accessor.getAnnotation( Queryable.class );
-        this.queryable = queryable == null || queryable.value();
-    }
-
-    @Override
-    public <T> T metaInfo( Class<T> infoType )
-    {
-        return metaInfo.get( infoType );
-    }
-
-    @Override
-    public QualifiedName qualifiedName()
-    {
-        return qualifiedName;
-    }
-
-    @Override
-    public Type type()
-    {
-        return type;
-    }
-
-    @Override
-    public boolean isImmutable()
-    {
-        return immutable;
-    }
-
-    @Override
-    public boolean isAggregated()
+                                )
     {
-        return aggregated;
-    }
-
-    @Override
-    public AccessibleObject accessor()
-    {
-        return accessor;
-    }
-
-    @Override
-    public boolean queryable()
-    {
-        return queryable;
-    }
-
-    public AssociationInfo getBuilderInfo()
-    {
-        return builderInfo;
+        super( accessor, valueConstraintsInstance, 
associationConstraintsInstance, metaInfo );
     }
 
     public <T> NamedAssociation<T> newInstance( final ModuleUnitOfWork uow, 
EntityState state )
     {
-        return new NamedAssociationInstance<>( state instanceof 
BuilderEntityState ? builderInfo : this, new BiFunction<EntityReference, Type, 
Object>()
-        {
-            @Override
-            public Object apply( EntityReference entityReference, Type type )
-            {
-                return uow.get( Classes.RAW_CLASS.apply( type ), 
entityReference.identity() );
-            }
-        }, state.namedAssociationValueOf( qualifiedName ) );
-    }
-
-    @Override
-    public void checkConstraints( Object composite )
-        throws ConstraintViolationException
-    {
-        if( constraints != null )
-        {
-            List<ConstraintViolation> violations = 
constraints.checkConstraints( composite );
-            if( !violations.isEmpty() )
-            {
-                Stream<Class<?>> empty = Stream.empty();
-                throw new ConstraintViolationException( "", empty, (Member) 
accessor, violations );
-            }
-        }
-    }
-
-    public void checkAssociationConstraints( NamedAssociation association )
-        throws ConstraintViolationException
-    {
-        if( associationConstraints != null )
-        {
-            List<ConstraintViolation> violations = 
associationConstraints.checkConstraints( association );
-            if( !violations.isEmpty() )
-            {
-                Stream<Class<?>> empty = Stream.empty();
-                throw new ConstraintViolationException( "", empty, (Member) 
accessor, violations );
-            }
-        }
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( Visitor<? super 
NamedAssociationModel, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        return visitor.visit( this );
-    }
-
-    @Override
-    public void bind( Resolution resolution )
-        throws BindingException
-    {
-        builderInfo = new AssociationInfo()
-        {
-            @Override
-            public boolean isImmutable()
-            {
-                return false;
-            }
-
-            @Override
-            public QualifiedName qualifiedName()
-            {
-                return qualifiedName;
-            }
-
-            @Override
-            public Type type()
-            {
-                return type;
-            }
-
-            @Override
-            public void checkConstraints( Object value )
-                throws ConstraintViolationException
-            {
-                NamedAssociationModel.this.checkConstraints( value );
-            }
-        };
-
-        if( type instanceof TypeVariable )
-        {
-            Class mainType = resolution.model().types().findFirst().orElse( 
null );
-            type = Classes.resolveTypeVariable( (TypeVariable) type, ( 
(Member) accessor ).getDeclaringClass(), mainType );
-        }
-    }
-
-    @Override
-    public boolean equals( Object o )
-    {
-        if( this == o )
-        {
-            return true;
-        }
-        if( o == null || getClass() != o.getClass() )
-        {
-            return false;
-        }
-
-        NamedAssociationModel that = (NamedAssociationModel) o;
-
-        return accessor.equals( that.accessor );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return accessor.hashCode();
-    }
-
-    @Override
-    public String toString()
-    {
-        if( accessor instanceof Field )
-        {
-            return ( (Field) accessor ).toGenericString();
-        }
-        else
-        {
-            return ( (Method) accessor ).toGenericString();
-        }
+        return new NamedAssociationInstance<>(
+            state instanceof BuilderEntityState ? builderInfo() : this,
+            ( entityReference, type ) -> uow.get( Classes.RAW_CLASS.apply( 
type ), entityReference.identity() ),
+            state.namedAssociationValueOf( qualifiedName() ) );
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/ValueConstraintsInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/ValueConstraintsInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/ValueConstraintsInstance.java
index 783a4ef..ff53af8 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/composite/ValueConstraintsInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/composite/ValueConstraintsInstance.java
@@ -107,12 +107,10 @@ public final class ValueConstraintsInstance
                 }
             }
         }
-
         if( violations == null )
         {
             violations = Collections.emptyList();
         }
-
         return violations;
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityStateInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityStateInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityStateInstance.java
index 3f1a05c..c726223 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityStateInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/entity/EntityStateInstance.java
@@ -55,7 +55,7 @@ public final class EntityStateInstance
     private EntityState entityState;
     private final BiFunction<EntityReference, Type, Object> entityFunction;
 
-    public EntityStateInstance( EntityStateModel stateModel, final UnitOfWork 
uow, EntityState entityState )
+    EntityStateInstance( EntityStateModel stateModel, final UnitOfWork uow, 
EntityState entityState )
     {
         this.stateModel = stateModel;
         this.entityState = entityState;
@@ -104,9 +104,7 @@ public final class EntityStateInstance
         {
             final AssociationModel associationModel = 
stateModel.getAssociation( accessor );
             association = new AssociationInstance<>(
-                entityState instanceof BuilderEntityState
-                ? associationModel.getBuilderInfo()
-                : associationModel,
+                entityState instanceof BuilderEntityState ? 
associationModel.builderInfo() : associationModel,
                 entityFunction,
                 new Property<EntityReference>()
                 {
@@ -125,7 +123,6 @@ public final class EntityStateInstance
                 } );
             state.put( accessor, association );
         }
-
         return association;
     }
 
@@ -140,21 +137,16 @@ public final class EntityStateInstance
     public <T> ManyAssociation<T> manyAssociationFor( AccessibleObject 
accessor )
     {
         Map<AccessibleObject, Object> state = state();
-
         ManyAssociation<T> manyAssociation = (ManyAssociation<T>) state.get( 
accessor );
-
         if( manyAssociation == null )
         {
             ManyAssociationModel associationModel = 
stateModel.getManyAssociation( accessor );
             manyAssociation = new ManyAssociationInstance<>(
-                entityState instanceof BuilderEntityState
-                ? associationModel.getBuilderInfo()
-                : associationModel,
+                entityState instanceof BuilderEntityState ? 
associationModel.builderInfo() : associationModel,
                 entityFunction,
                 entityState.manyAssociationValueOf( 
associationModel.qualifiedName() ) );
             state.put( accessor, manyAssociation );
         }
-
         return manyAssociation;
     }
 
@@ -169,21 +161,16 @@ public final class EntityStateInstance
     public <T> NamedAssociation<T> namedAssociationFor( AccessibleObject 
accessor )
     {
         Map<AccessibleObject, Object> state = state();
-
         NamedAssociation<T> namedAssociation = (NamedAssociation<T>) 
state.get( accessor );
-
         if( namedAssociation == null )
         {
             NamedAssociationModel associationModel = 
stateModel.getNamedAssociation( accessor );
             namedAssociation = new NamedAssociationInstance<>(
-                entityState instanceof BuilderEntityState
-                ? associationModel.getBuilderInfo()
-                : associationModel,
+                entityState instanceof BuilderEntityState ? 
associationModel.builderInfo() : associationModel,
                 entityFunction,
                 entityState.namedAssociationValueOf( 
associationModel.qualifiedName() ) );
             state.put( accessor, namedAssociation );
         }
-
         return namedAssociation;
     }
 
@@ -195,15 +182,17 @@ public final class EntityStateInstance
 
     public void checkConstraints()
     {
-        stateModel.properties().forEach( propertyDescriptor -> {
-            Property<Object> property = this.propertyFor( 
propertyDescriptor.accessor() );
-            propertyDescriptor.checkConstraints( property.get() );
-        } );
-
-        stateModel.associations().forEach( associationDescriptor -> {
-            Association<Object> association = this.associationFor( 
associationDescriptor.accessor() );
-            associationDescriptor.checkConstraints( association.get() );
-        } );
+        stateModel.properties().forEach( propertyDescriptor ->
+                                         {
+                                             Property<Object> property = 
this.propertyFor( propertyDescriptor.accessor() );
+                                             
propertyDescriptor.checkConstraints( property.get() );
+                                         } );
+
+        stateModel.associations().forEach( associationDescriptor ->
+                                           {
+                                               Association<Object> association 
= this.associationFor( associationDescriptor.accessor() );
+                                               
associationDescriptor.checkConstraints( association.get() );
+                                           } );
 
         // TODO Should ManyAssociations and NamedAssociations be checked too?
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
index fe2c838..47e8460 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueInstance.java
@@ -111,17 +111,17 @@ public final class ValueInstance
 
         descriptor().state().associations().forEach( associationDescriptor -> {
             state().associationFor( associationDescriptor.accessor() )
-                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+                   .setAssociationInfo( associationDescriptor.builderInfo() );
         } );
 
         descriptor().state().manyAssociations().forEach( associationDescriptor 
-> {
             state().manyAssociationFor( associationDescriptor.accessor() )
-                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+                   .setAssociationInfo( associationDescriptor.builderInfo() );
         } );
 
         descriptor().state().namedAssociations().forEach( 
associationDescriptor -> {
             state().namedAssociationFor( associationDescriptor.accessor() )
-                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+                   .setAssociationInfo( associationDescriptor.builderInfo() );
         } );
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/37251c5b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueStateInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueStateInstance.java
 
b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueStateInstance.java
index aab6597..23be1be 100644
--- 
a/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueStateInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/polygene/runtime/value/ValueStateInstance.java
@@ -81,7 +81,7 @@ public final class ValueStateInstance
 
         this.associations = new LinkedHashMap<>();
         valueModel.state().associations().forEach( associationDescriptor -> {
-            AssociationInfo builderInfo = 
associationDescriptor.getBuilderInfo();
+            AssociationInfo builderInfo = associationDescriptor.builderInfo();
             EntityReference value = stateResolver.getAssociationState( 
associationDescriptor );
             AssociationInstance<Object> associationInstance1 = new 
AssociationInstance<>(
                 builderInfo,
@@ -92,7 +92,7 @@ public final class ValueStateInstance
 
         this.manyAssociations = new LinkedHashMap<>();
         valueModel.state().manyAssociations().forEach( associationDescriptor 
-> {
-            AssociationInfo builderInfo = 
associationDescriptor.getBuilderInfo();
+            AssociationInfo builderInfo = associationDescriptor.builderInfo();
             List<EntityReference> value = 
stateResolver.getManyAssociationState( associationDescriptor )
                                                        .collect( toList() );
             ManyAssociationValueState manyAssociationState = new 
ManyAssociationValueState( value );
@@ -105,7 +105,7 @@ public final class ValueStateInstance
 
         this.namedAssociations = new LinkedHashMap<>();
         valueModel.state().namedAssociations().forEach( associationDescriptor 
-> {
-            AssociationInfo builderInfo = 
associationDescriptor.getBuilderInfo();
+            AssociationInfo builderInfo = associationDescriptor.builderInfo();
             Map<String, EntityReference> value = 
stateResolver.getNamedAssociationState( associationDescriptor )
                                                               .collect( toMap( 
LinkedHashMap::new ) );
             NamedAssociationValueState namedAssociationState = new 
NamedAssociationValueState( value );

Reply via email to