This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch ISIS-2050 in repository https://gitbox.apache.org/repos/asf/isis.git
commit ec5781494b6ba9769618ef9acd52de94bbe3cb29 Author: danhaywood <d...@haywood-associates.co.uk> AuthorDate: Wed Dec 12 23:11:17 2018 +0100 ISIS-2050: breaks out introspectTypeHierarchyAndMembers into two. --- .../metamodel/specloader/SpecificationLoader.java | 4 +-- .../specimpl/ObjectSpecificationAbstract.java | 36 +++++++--------------- .../specimpl/dflt/ObjectSpecificationDefault.java | 19 +++++++----- .../ObjectSpecificationOnStandaloneList.java | 6 +++- 4 files changed, 29 insertions(+), 36 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java index 8b21cce..6c5632c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java @@ -240,7 +240,7 @@ public class SpecificationLoader implements ApplicationScopedComponent { public Object call() { final ObjectSpecificationAbstract specSpi = (ObjectSpecificationAbstract) specification; - specSpi.introspectIfRequired(IntrospectionState.INTROSPECTED); + specSpi.introspectUpTo(IntrospectionState.INTROSPECTED); return null; } @@ -478,7 +478,7 @@ public class SpecificationLoader implements ApplicationScopedComponent { if (state == State.INTROSPECTING) { final ObjectSpecificationAbstract specSpi = (ObjectSpecificationAbstract) specification; - specSpi.introspectIfRequired(upTo); + specSpi.introspectUpTo(upTo); } return specification; diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java index 81460d8..f4a8f89 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java @@ -265,16 +265,19 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem /** * Keeps introspecting up to the level required. */ - public void introspectIfRequired(final IntrospectionState upTo) { + public void introspectUpTo(final IntrospectionState upTo) { while(this.introspectionState.compareTo(upTo) < 0) { switch (introspectionState) { case NOT_INTROSPECTED: - // avoid infinite loops + + // set to avoid infinite loops this.introspectionState = IntrospectionState.BEING_INTROSPECTED; try { - introspectTypeHierarchyAndMembers(); + introspectTypeHierarchy(); updateFromFacetValues(); + + introspectMembers(); this.introspectionState = IntrospectionState.INTROSPECTED; } catch(Exception ex) { this.introspectionState = IntrospectionState.NOT_INTROSPECTED; @@ -289,12 +292,10 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem } } - public abstract void introspectTypeHierarchyAndMembers(); + protected abstract void introspectTypeHierarchy(); + protected abstract void introspectMembers(); + - /** - * Intended to be called within {@link #introspectTypeHierarchyAndMembers()} - * . - */ protected void updateSuperclass(final Class<?> superclass) { if (superclass == null) { return; @@ -308,20 +309,12 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem } } - /** - * Intended to be called within {@link #introspectTypeHierarchyAndMembers()} - * . - */ protected void updateInterfaces(final List<ObjectSpecification> interfaces) { this.interfaces.clear(); this.interfaces.addAll(interfaces); } - /** - * Intended to be called within {@link #introspectTypeHierarchyAndMembers()} - * . - */ - protected void updateAsSubclassTo(final ObjectSpecification supertypeSpec) { + private void updateAsSubclassTo(final ObjectSpecification supertypeSpec) { if (!(supertypeSpec instanceof ObjectSpecificationAbstract)) { return; } @@ -331,10 +324,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem introspectableSpec.updateSubclasses(this); } - /** - * Intended to be called within {@link #introspectTypeHierarchyAndMembers()} - * . - */ protected void updateAsSubclassTo(final List<ObjectSpecification> supertypeSpecs) { for (final ObjectSpecification supertypeSpec : supertypeSpecs) { updateAsSubclassTo(supertypeSpec); @@ -367,11 +356,8 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem } } - //endregion - - //region > Introspection (part 2) - public void updateFromFacetValues() { + private void updateFromFacetValues() { titleFacet = getFacet(TitleFacet.class); iconFacet = getFacet(IconFacet.class); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java index 28b5a39..1c98335 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java @@ -109,14 +109,15 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl //endregion //region > introspectTypeHierarchyAndMembers + @Override - public void introspectTypeHierarchyAndMembers() { + protected void introspectTypeHierarchy() { metadataProperties = null; if(isNotIntrospected()) { metadataProperties = facetedMethodsBuilder.introspectClass(); } - + // name if(isNotIntrospected()) { addNamedFacetAndPluralFacetIfRequired(); @@ -136,7 +137,6 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl updateSuperclass(superclass); } - // walk superinterfaces // @@ -165,10 +165,16 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl updateInterfaces(interfaceSpecList); } - updateAssociationsAndActions(); } - private synchronized void updateAssociationsAndActions() { + protected synchronized void introspectMembers() { + + if(this.containsFacet(ValueFacet.class)) { + if (LOG.isDebugEnabled()) { + LOG.debug("skipping full introspection for value type {}", getFullIdentifier()); + } + return; + } // associations and actions if(isNotIntrospected()) { @@ -181,9 +187,6 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl sortCacheAndUpdateActions(actions); } - if(isNotIntrospected()) { - updateFromFacetValues(); - } } private void addNamedFacetAndPluralFacetIfRequired() { diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java index 3545d28..63a432c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java @@ -66,7 +66,7 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst } @Override - public void introspectTypeHierarchyAndMembers() { + protected void introspectTypeHierarchy() { updateSuperclass(Object.class); addFacet(new CollectionFacetOnStandaloneList(this)); @@ -81,6 +81,10 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst // don't install anything for NotPersistableFacet } + protected void introspectMembers() { + // no-op. + } + //endregion //region > isXxx