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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new 3324ba7941 CAUSEWAY-3767: prepare fix for v3
3324ba7941 is described below
commit 3324ba79416f7e6ae123393b49b33512f743efd8
Author: andi-huber <[email protected]>
AuthorDate: Mon Jun 10 09:08:42 2024 +0200
CAUSEWAY-3767: prepare fix for v3
- that is, skip validation if spec refs a Java record
---
.../LogicalTypeFacetFromClassNameFactory.java | 10 ++++++----
.../core/metamodel/object/MmSpecUtils.java | 23 +++++++++++++++-------
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
index 2d4c46c72f..43a863cb02 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/logicaltype/classname/LogicalTypeFacetFromClassNameFactory.java
@@ -73,7 +73,7 @@ implements
if(skip(objectSpec)) return;
val logicalType = objectSpec.getLogicalType();
-
+
//XXX has a slight chance to be a false positive; would need to
check whether annotated with @Named
if(logicalType.getClassName().equals(logicalType.getLogicalTypeName())) {
ValidationFailure.raise(objectSpec,
MessageTemplate.LOGICAL_TYPE_NAME_IS_NOT_EXPLICIT
@@ -85,22 +85,24 @@ implements
}
});
}
-
+
// -- HELPER
private boolean skip(final ObjectSpecification objectSpec) {
if (objectSpec.isAbstract()
- || objectSpec.isMixin()
+ || MmSpecUtils.isJavaRecord(objectSpec)
|| objectSpec.isValue()
+ || objectSpec.isMixin()
|| MmSpecUtils.isFixtureScript(objectSpec)) return true;
if (objectSpec.isEntity()) return false;
if (objectSpec.isViewModel()) {
+ // with
// skip JAXB DTOs
return
objectSpec.getCorrespondingClass().getAnnotation(XmlType.class) != null;
}
if (objectSpec.isInjectable()) {
// only check if its a domain service (that is potentially
contributing to UI or Web-API(s).
- if(!objectSpec.isDomainService()) return true;
+ if(!objectSpec.isDomainService()) return true;
// skip if domain service has only programmatic methods
return
objectSpec.streamAnyActions(MixedIn.INCLUDED).findAny().isEmpty();
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
index fd66476383..bcbf4733b3 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
@@ -109,25 +109,34 @@ public final class MmSpecUtils {
return sb.toString();
}
-
+
+ /**
+ * Whether given {@link ObjectSpecification} represents a Java record
+ * (as supported since 3.0.0, which map to view-models).
+ */
+ public boolean isJavaRecord(final @Nullable ObjectSpecification spec) {
+ if(spec==null) return false;
+ return /*spec.getCorrespondingClass().isRecord();*/ false;
+ }
+
/**
- * Whether given {@link ObjectSpecification} represents a FixtureScript
(from testing.fixtures.applib).
+ * Whether given {@link ObjectSpecification} represents a FixtureScript
(from testing.fixtures.applib).
*/
public boolean isFixtureScript(final @Nullable ObjectSpecification spec) {
if(spec==null) return false;
return
getFixtureScriptClass().isAssignableFrom(spec.getCorrespondingClass());
}
-
- // -- HELPER
-
+
+ // -- HELPER
+
@Getter(lazy = true, value = AccessLevel.PRIVATE)
private final Class<?> fixtureScriptClass = loadFixtureScriptClass();
-
+
@SneakyThrows
private Class<?> loadFixtureScriptClass() {
return _Context.loadClass(
"org.apache.causeway.testing.fixtures.applib.fixturescripts.FixtureScript");
}
-
+
}
\ No newline at end of file