An interface and a variable may share a name, so AddressSpace is both the type you
annotate with and the value you call create() on, while the implementation class stays
unexported and undocumented.
This was a conversion for a while, and it no longer needs to be: the compiler now agrees
that AddressSpaceImpl provides the published shape. It could not before, because
getOwnNamespace() returned a NamespacePrivate that extended INamespace rather than
the published Namespace, hiding the alarm-and-condition, data-access and machine-state
methods NamespaceImpl really has; and correcting that ran into the data-access classes not
statically satisfying their own Ex interfaces. Both are fixed, so the annotation is
checked rather than asserted.
An interface and a variable may share a name, so
AddressSpaceis both the type you annotate with and the value you callcreate()on, while the implementation class stays unexported and undocumented.This was a conversion for a while, and it no longer needs to be: the compiler now agrees that AddressSpaceImpl provides the published shape. It could not before, because
getOwnNamespace()returned aNamespacePrivatethat extendedINamespacerather than the publishedNamespace, hiding the alarm-and-condition, data-access and machine-state methods NamespaceImpl really has; and correcting that ran into the data-access classes not statically satisfying their ownExinterfaces. Both are fixed, so the annotation is checked rather than asserted.