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>