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

Reply via email to