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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 1e652fb  ISIS-2679: revert fail fast guard from prev. commit, instead 
let MM validation handle it
1e652fb is described below

commit 1e652fb3c6b90dcecd2100855e440e21df5c4b56
Author: [email protected] <[email protected]@luna>
AuthorDate: Sat May 15 00:17:02 2021 +0200

    ISIS-2679: revert fail fast guard from prev. commit, instead let MM
    validation handle it
---
 .../DomainObjectAnnotationFacetFactory.java        |  3 +-
 .../specloader/LogicalTypeResolverDefault.java     |  6 +-
 .../DomainModelTest_usingBadDomain.java            | 86 +++++++++++-----------
 3 files changed, 48 insertions(+), 47 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 446098f..abcfa7f 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -495,7 +495,8 @@ implements
                     @Override
                     public void validate(ObjectSpecification objSpec) {
                         if(objSpec.isManagedBean()
-                                || objSpec.isAbstract()) {
+                                // || objSpec.isAbstract() // we allow 
abstract types now to have their own logical name
+                                ) {
                             return;
                         }
                         
collidingSpecsByLogicalTypeName.putElement(objSpec.getLogicalTypeName() , 
objSpec);
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/LogicalTypeResolverDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/LogicalTypeResolverDefault.java
index 025bf55..6f10747 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/LogicalTypeResolverDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/LogicalTypeResolverDefault.java
@@ -24,13 +24,14 @@ import java.util.Optional;
 
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import 
org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import lombok.NonNull;
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
+@Log4j2
 class LogicalTypeResolverDefault implements LogicalTypeResolver {
 
     private final Map<String, LogicalType> logicalTypeByName = 
_Maps.newConcurrentHashMap();
@@ -53,7 +54,6 @@ class LogicalTypeResolverDefault implements 
LogicalTypeResolver {
 
             val previousMapping = logicalTypeByName.put(key, 
spec.getLogicalType());
 
-            // fail fast
             if(previousMapping!=null) {
 
                 val msg = String.format("failed to register mapping\n"
@@ -65,7 +65,7 @@ class LogicalTypeResolverDefault implements 
LogicalTypeResolver {
                         key,
                         previousMapping.getCorrespondingClass());
 
-                throw _Exceptions.unrecoverable(msg);
+                log.warn(msg);
             }
 
         }
diff --git 
a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
 
b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
index 59bb838..3a91f57 100644
--- 
a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
+++ 
b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
@@ -32,9 +32,6 @@ import org.junit.jupiter.params.provider.MethodSource;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -61,11 +58,14 @@ import 
org.apache.isis.testdomain.model.bad.InvalidOrphanedPropertySupport;
 import org.apache.isis.testdomain.model.bad.InvalidPropertyAnnotationOnAction;
 import 
org.apache.isis.testing.integtestsupport.applib.validate.DomainModelValidator;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 @SpringBootTest(
-        classes = { 
+        classes = {
                 Configuration_headless.class,
                 Configuration_usingInvalidDomain.class
-        }, 
+        },
         properties = {
                 "isis.core.meta-model.introspector.mode=FULL"
         })
@@ -76,112 +76,112 @@ import 
org.apache.isis.testing.integtestsupport.applib.validate.DomainModelValid
     IsisPresets.SilenceProgrammingModel
 })
 class DomainModelTest_usingBadDomain {
-    
+
     @Inject private IsisConfiguration configuration;
     @Inject private IsisSystemEnvironment isisSystemEnvironment;
     @Inject private SpecificationLoader specificationLoader;
-    
+
     private DomainModelValidator validator;
-    
+
     @BeforeEach
     void setup() {
         validator = new DomainModelValidator(specificationLoader, 
configuration, isisSystemEnvironment);
         assertThrows(DomainModelException.class, validator::throwIfInvalid);
     }
-    
-    
+
+
     @Test
     void fullIntrospection_shouldBeEnabledByThisTestClass() {
         assertTrue(IntrospectionMode.isFullIntrospect(configuration, 
isisSystemEnvironment));
     }
-    
+
     @Test
     void ambiguousTitle_shouldFail() {
         assertTrue(validator.anyMatchesContaining(
                 
Identifier.classIdentifier(LogicalType.fqcn(AmbiguousTitle.class)),
                 "conflict for determining a strategy for retrieval of title"));
     }
-    
+
     @Test
     void orphanedActionSupport_shouldFail() {
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedActionSupport.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedActionSupport.class)),
                 "InvalidOrphanedActionSupport#hideOrphaned: has annotation 
@MemberSupport, "
                 + "is assumed to support"));
-        
+
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedActionSupport.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedActionSupport.class)),
                 "InvalidOrphanedActionSupport#hideMe: "
                 + "is assumed to support a property, collection or action. "
                 + "Unmet constraint(s): unsupported method signature or 
orphaned "
                 + "(not associated with a member)"));
     }
-    
+
 
     @Test
     void orphanedPropertySupport_shouldFail() {
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedPropertySupport.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedPropertySupport.class)),
                 "InvalidOrphanedPropertySupport#hideMyProperty: has annotation 
@MemberSupport, "
                 + "is assumed to support"));
-        
+
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedPropertySupport.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedPropertySupport.class)),
                 "InvalidOrphanedPropertySupport#hideMe: "
                 + "is assumed to support a property, collection or action. "
                 + "Unmet constraint(s): unsupported method signature or 
orphaned "
                 + "(not associated with a member)"));
     }
-    
+
     @Test
     void orphanedCollectionSupport_shouldFail() {
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedCollectionSupport.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedCollectionSupport.class)),
                 "InvalidOrphanedCollectionSupport#hideMyCollection: has 
annotation @MemberSupport, "
                 + "is assumed to support"));
-        
+
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedCollectionSupport.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedCollectionSupport.class)),
                 "InvalidOrphanedCollectionSupport#hideMe: "
                 + "is assumed to support a property, collection or action. "
                 + "Unmet constraint(s): unsupported method signature or 
orphaned "
                 + "(not associated with a member)"));
     }
-    
+
     @Test
     void actionOverloading_shouldFail() {
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidActionOverloading.class)), 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidActionOverloading.class)),
                 "Action method overloading is not allowed"));
     }
-    
-    @Test
+
+    @Test// @Disabled("there is a fail fast guard now in 
LogicalTypeResolverDefault.register(...) that breaks this test")
     void logicalTypeNameClash_shouldFail() {
         assertTrue(
             validator.anyMatchesContaining(
-                    
Identifier.classIdentifier(LogicalType.fqcn(InvalidLogicalTypeNameClash.VariantA.class)),
 
+                    
Identifier.classIdentifier(LogicalType.fqcn(InvalidLogicalTypeNameClash.VariantA.class)),
                     "Logical-type-name (aka. object-type) 
'isis.testdomain.InvalidLogicalTypeNameClash' "
                     + "mapped to multiple classes:")
             || validator.anyMatchesContaining(
-                    
Identifier.classIdentifier(LogicalType.fqcn(InvalidLogicalTypeNameClash.VariantB.class)),
 
+                    
Identifier.classIdentifier(LogicalType.fqcn(InvalidLogicalTypeNameClash.VariantB.class)),
                     "Logical-type-name (aka. object-type) 
'isis.testdomain.InvalidLogicalTypeNameClash' "
                     + "mapped to multiple classes:"));
     }
-    
-    
+
+
     @ParameterizedTest
     @MethodSource("provideAmbiguousMixins")
     void ambiguousMixinAnnotions_shouldFailValidation(
-            final Class<?> mixinClass, 
-            final Class<? extends Annotation> annotationType, 
+            final Class<?> mixinClass,
+            final Class<? extends Annotation> annotationType,
             final String mixinMethodName) {
-        
+
         final String annotationLiteral = "@" + annotationType.getSimpleName();
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.propertyOrCollectionIdentifier(LogicalType.fqcn(mixinClass), 
mixinMethodName), 
+                
Identifier.propertyOrCollectionIdentifier(LogicalType.fqcn(mixinClass), 
mixinMethodName),
                 String.format("Annotation %s on both method and type level is 
not allowed", annotationLiteral)));
     }
-    
+
     private static Stream<Arguments> provideAmbiguousMixins() {
         return Stream.of(
           Arguments.of(AmbiguousMixinAnnotations.InvalidMixinA.class, 
Action.class, "act"),
@@ -192,24 +192,24 @@ class DomainModelTest_usingBadDomain {
           Arguments.of(AmbiguousMixinAnnotations.InvalidMixinCL.class, 
CollectionLayout.class, "coll")
         );
     }
-    
+
     // -- INCUBATING
-    
+
     @Test @Disabled("this case has no vaildation refiner yet")
     void invalidPropertyAnnotationOnAction_shouldFail() {
         assertTrue(validator.anyMatchesContaining(
-                
Identifier.classIdentifier(LogicalType.fqcn(InvalidPropertyAnnotationOnAction.class)),
 
+                
Identifier.classIdentifier(LogicalType.fqcn(InvalidPropertyAnnotationOnAction.class)),
                 "TODO"));
     }
-    
+
 //    @Test
 //    void orphanedActionSupportNotEnforced_shouldFail() {
-//           
+//
 //        val validateDomainModel = new DomainModelValidator();
-//        
+//
 //        assertThrows(DomainModelException.class, validateDomainModel::run);
 //        assertTrue(validateDomainModel.anyMatchesContaining(
-//                OrphanedPrefixedAction.class, 
+//                OrphanedPrefixedAction.class,
 //                "is assumed to support"));
 //    }
 }

Reply via email to