danhaywood <>
on 18 Dec 18
ISIS-2050: reworks order and depth of introspection.
Squashed from previous commits:

ISIS-2050: uses simpler overload that defaults Int… Show more
ISIS-2050: reworks order and depth of introspection.

Squashed from previous commits:

   ISIS-2050: uses simpler overload that defaults IntrospectionState to TYPE_INTROSPECTED.

   Also introduces overload for className as well as Class<?>

   ISIS-2050: only contribute to entities and view models; improves MetaModel exporter

   to also dump out the facets of any "discovered" domain types.

   ISIS-2050: load specs only to TYPE (not MEMBERS) everywhere; only adds described as facet (derived from type) if is do-op.

   ISIS-2050: fixes for unit tests and reorder introspection slightly in order to fix lockdown

   ISIS-2050: adds ValueFacet for Joda LocalTime

   Uses a very simple implementation, because I suspect that the other capabilities of ValueFacet simply aren't needed anymore...


   - removes contributingDomainServiceTypes from AppManifest.Registry once more ... will just eagerly introspect type and members for all domain services

   - fixes introspectUpTo algorithm

   - skip type hierarchy traversal for domain services with natureOfService=DOMAIN

   - improves/reduces logging

   - lazily introspect up to type and members whenever any of the members (properties/collections/actions) are referenced of an ObjectSpecAbstract

   ISIS-2050: introduces config property to enable/disable full introspection of metamodel

   If disabled, then metamodel validation is skipped

   ISIS-2050: moves introspectObjectSpecId() so called directly from constructor of ObjectSpec.

   ISIS-2050: postProcessor now called by ObjectSpecAbstract after fully introspected, rather than by SpecificationLoader

   ISIS-2050: passes PostProcessor into ObjectSpecificationAbstract's constructor

   ISIS-2050: scales back the depth of introspection when introspecting members

   - only need to introspect the type for parameters and return types.

   ISIS-2050: removes SpecificationLoader#state; now responsibility of each ObjectSpecification to keep track of its own introspectionState.

   ISIS-2050: eagerly introspects contributing specs, lazily introspecs the remainder.

   ISIS-2050: updates AppManifest.Registry to also hold all contributingDomainServiceTypes

   This is so that we can eagerly build the ObjectSpecs for these types and mixins, but leave everything else to be built lazily.

   ISIS-2050: when traversing type hierarchy, now only introspect super types up to the TYPE, not their MEMBERs as well.

   ISIS-2050: renames two of the IntrospectionStates

   ISIS-2050: pulls upTo introspectionState into a parameter for all of SpecificationLoaders methods

   ... so that the caller can decide the level of introspection that needs to be performed.

   ISIS-2050: extends IntrospectionState with additional states for type vs member introspection; inlining methods to simplify

   ... with the aim of exposing the IntrospectionState upTo so can pass through and honour the phases.

   Removed the guards in introspectTypeHierarchy, don't think they are needed any more since only ever called from its caller which checks the introspectionState anyway

   ISIS-2050: breaks out introspectTypeHierarchyAndMembers into two.

   ISIS-2050: replaces IntrospectionStrategy with the concept of introspecting "up to" a certain state.

   ISIS-2050: refactors responsibilities of SpecLoader vs ObjectSpec

   just the management of introspectionState on ObjectSpec

   ISIS-2050: introduces ObjectSpecIdFacetFactory

   and additional process(ProcessObjectSpecIdContext) for FacetProcessor

Show less

master + 20 more