   listProperties
   listItems
   listValues
+  listVariableValues
   isRequired
   isFixed
   isOrInheritsFixed
+  hasVariableValues
+  haveVariableValues
   hasMultipleValues
   hasAnyMemberSections
+  areIdenticalAndPrimitive
   listPossibleHeritages
   getHeritage
 }

  else
    filter = (val) -> true
  (elementNode.content.valueDefinition?.values or []).filter filter


# Takes *Element* node and lists its attributes, such as `required`, `fixed`, etc.

  listNestedElements arrayElementNode, ['value']


# Convenience function.
hasVariableValues = (elementNode) ->
  !!listVariableValues(elementNode).length


# Convenience function.
haveVariableValues = (elementNodes) ->
  for elementNode in elementNodes
    if hasVariableValues elementNode
      return true
  false


# Takes type node and finds out whether it has more than one value
# in value definition.
hasMultipleValues = (elementNode) ->
