You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/10/04 23:11:39 UTC

[isis] branch ISIS-1974 updated: ISIS-1974: further guards in ClassSubstitutor; synchronization of building of associations and actions (avoiding a probable race condition)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-1974
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1974 by this push:
     new 4919e6c  ISIS-1974: further guards in ClassSubstitutor; synchronization of building of associations and actions (avoiding a probable race condition)
4919e6c is described below

commit 4919e6cefd87aeb7da52f23a3f4e79f05c4a0fef
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Oct 5 00:10:58 2018 +0100

    ISIS-1974: further guards in ClassSubstitutor; synchronization of building of associations and actions (avoiding a probable race condition)
    
    ClassSubstitutor can now handle anonymous classes within nested classes whose class cannot be found
    Also allow tests to be disabled using isis.skipTests=true property
---
 .../core/metamodel/specloader/SpecificationLoader.java    |  4 +++-
 .../specloader/classsubstitutor/ClassSubstitutor.java     | 15 ++++++++++++++-
 .../specloader/specimpl/FacetedMethodsBuilder.java        |  6 ++++--
 .../specimpl/dflt/ObjectSpecificationDefault.java         | 10 ++++++----
 core/pom.xml                                              |  3 +++
 5 files changed, 30 insertions(+), 8 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 c9e6829..244ac15 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
@@ -279,7 +279,9 @@ public class SpecificationLoader implements ApplicationScopedComponent {
             ObjectSpecification objectSpecification =
                 internalLoadSpecification(domainType, natureOfServiceFallback, introspectionStrategy);
 
-            appendTo.add(objectSpecification);
+            if(objectSpecification != null) {
+                appendTo.add(objectSpecification);
+            }
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
index 2cb35d5..df2ac9a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
@@ -114,7 +114,20 @@ public class ClassSubstitutor {
             return true;
         }
 
-        return classesToIgnore.contains(cls) || classNamesToIgnore.contains(cls.getCanonicalName());
+        try{
+            return classesToIgnore.contains(cls) || classNamesToIgnore.contains(cls.getCanonicalName());
+        } catch(java.lang.NoClassDefFoundError e) {
+
+            try{
+                if(cls.isAnonymousClass()) {
+                    return shouldIgnore(cls.getSuperclass());
+                } else {
+                    return false;
+                }
+            } catch(java.lang.NoClassDefFoundError ex) {
+                return true;
+            }
+        }
     }
 
     //endregion
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 4446489..a76e312 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -69,9 +69,11 @@ public class FacetedMethodsBuilder {
 
     private static final class FacetedMethodsMethodRemover implements MethodRemover {
 
+        private final Class<?> introspectedClass;
         private final List<Method> methods;
 
-        private FacetedMethodsMethodRemover(final List<Method> methods) {
+        private FacetedMethodsMethodRemover(final Class<?> introspectedClass, final List<Method> methods) {
+            this.introspectedClass = introspectedClass;
             this.methods = methods;
         }
 
@@ -163,7 +165,7 @@ public class FacetedMethodsBuilder {
         this.introspectedClass = spec.getCorrespondingClass();
         this.methods = Arrays.asList(introspectedClass.getMethods());
 
-        this.methodRemover = new FacetedMethodsMethodRemover(methods);
+        this.methodRemover = new FacetedMethodsMethodRemover(introspectedClass, methods);
 
         this.facetProcessor = facetedMethodsBuilderContext.facetProcessor;
         this.specificationLoader = facetedMethodsBuilderContext.specificationLoader;
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 ca56568..119c8f4 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
@@ -162,6 +162,11 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
             updateInterfaces(interfaceSpecList);
         }
 
+        updateAssociationsAndActions();
+    }
+
+    private synchronized void updateAssociationsAndActions() {
+
         // associations and actions
         if(isNotIntrospected()) {
             final List<ObjectAssociation> associations = createAssociations(metadataProperties);
@@ -173,11 +178,8 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
             sortCacheAndUpdateActions(actions);
         }
 
-
-
-
         if(isNotIntrospected()) {
-            updateFromFacetValues();    
+            updateFromFacetValues();
         }
     }
 
diff --git a/core/pom.xml b/core/pom.xml
index 4a5a7a5..88e31a9 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -49,6 +49,9 @@
         <revision>1.0.0-SNAPSHOT</revision>
         <isis.version>${revision}</isis.version>
 
+        <isis.skipTests>false</isis.skipTests>
+        <maven.test.skip>${isis.skipTests}</maven.test.skip>
+
         <jar-plugin.automaticModuleName>org.apache.isis.core</jar-plugin.automaticModuleName>
         <git-plugin.propertiesDir>org/apache/isis/core</git-plugin.propertiesDir>