public OclConstraint   createAssociationEndInitConstraint(string source, CoreClassifier contextualClassifier, CoreAssociationEnd assocEnd, ExpressionInOcl initialValue)
        {
            OclAssocEndInitConstraint constraint = new OclAssocEndInitConstraintImpl();

            constraint.setSource(source);
            constraint.setContextualClassifier(contextualClassifier);
            constraint.setInitializedAssocEnd(assocEnd);
            constraint.setExpression(initialValue);

            contextualClassifier.addInitConstraint(assocEnd.getName(), constraint);

//		cachedObjects.add(constraint);

            return(constraint);
        }
        private void getOneMultiplicityAssociationReference(AssociationEndCallExp exp, CoreAssociationEnd associationEnd, out string otherTypeName, out string otherKeyName, out string typeName, out string name)
        {
            var otherType = associationEnd.getType();

            otherTypeName = otherType.getName();

            var otherKeyAttribute =
                (CoreAttributeImpl)otherType.getAllAttributes().FirstOrDefault(a => ((CoreAttributeImpl)a).hasStereotype("Id")) ??
                (CoreAttributeImpl)otherType.getAllAttributes().FirstOrDefault();

            otherKeyName = otherKeyAttribute != null?otherKeyAttribute.getName() : "";

            var expsource = (VariableExp)exp.getSource();
            var variable  = expsource.getReferredVariable();
            var type      = variable.getType();

            typeName = type.getName();

            name = associationEnd.getName();
        }