You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by ma...@apache.org on 2025/10/28 14:08:29 UTC
(grails-core) 01/01: chore: formatting and cleanup
This is an automated email from the ASF dual-hosted git repository.
matrei pushed a commit to branch cleanup-post-15150
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 79ab9c07b1c43ce28efd553607203bf08fb1c2ae
Author: Mattias Reichel <ma...@gmail.com>
AuthorDate: Tue Oct 28 15:08:08 2025 +0100
chore: formatting and cleanup
---
.../groovy/grails/gorm/async/AsyncEntity.groovy | 1 +
.../schemaless/ImplementsDynamicAttributes.groovy | 38 ++-
.../src/main/groovy/grails/gorm/MultiTenant.groovy | 1 +
.../grails/gorm/time/TemporalConverter.groovy | 4 +-
.../grails/gorm/time/ZonedDateTimeConverter.groovy | 4 +-
.../compiler/gorm/DirtyCheckingTransformer.groovy | 3 +-
.../compiler/gorm/GormEntityTransformation.groovy | 1 -
.../org/grails/datastore/gorm/GormEntity.groovy | 3 +-
.../datastore/gorm/GormEntityDirtyCheckable.groovy | 4 +-
.../grails/datastore/gorm/GormValidateable.groovy | 2 +
.../gorm/schemaless/DynamicAttributes.groovy | 1 +
.../AbstractReadOperationImplementer.groovy | 2 -
.../AbstractWriteOperationImplementer.groovy | 2 -
.../IterableInterfaceProjectionBuilder.groovy | 2 +-
.../transform/ServiceTransformation.groovy | 2 +-
.../transform/TransactionalTransform.groovy | 3 +-
...tDatastoreMethodDecoratingTransformation.groovy | 7 +-
.../AbstractMethodDecoratingTransformation.groovy | 2 +-
.../jakarta/services/ValidatedService.groovy | 1 +
.../services/MethodValidationTransformSpec.groovy | 113 +++++----
.../grails/gorm/time/InstantConverterSpec.groovy | 22 +-
.../grails/gorm/time/LocalDateConverterSpec.groovy | 27 +-
.../gorm/time/LocalDateTimeConverterSpec.groovy | 38 +--
.../grails/gorm/time/LocalTimeConverterSpec.groovy | 28 ++-
.../gorm/time/OffsetDateTimeConverterSpec.groovy | 46 ++--
.../gorm/time/OffsetTimeConverterSpec.groovy | 39 +--
.../grails/gorm/time/PeriodConverterSpec.groovy | 21 +-
.../gorm/time/ZonedDateTimeConverterSpec.groovy | 45 ++--
.../gorm/EntityWithGenericSignaturesSpec.groovy | 84 +++----
.../compiler/gorm/GormEntityTransformSpec.groovy | 273 +++++++++++----------
.../compiler/gorm/JpaEntityTransformSpec.groovy | 63 ++---
.../main/groovy/grails/gorm/rx/MultiTenant.groovy | 7 +-
.../src/main/groovy/grails/gorm/rx/RxEntity.groovy | 19 +-
.../datastore/rx/collection/RxCollection.groovy | 4 +-
.../transform/DelegateAsyncTransformation.java | 1 -
.../gorm/async/transform/DelegateAsyncSpec.groovy | 41 ++--
.../mapping/dirty/checking/DirtyCheckable.groovy | 1 +
.../datastore/mapping/services/Service.groovy | 1 +
.../dirty/checking/DirtyCheckableSpec.groovy | 34 +--
.../services/DefaultServiceRegistrySpec.groovy | 30 +--
40 files changed, 524 insertions(+), 496 deletions(-)
diff --git a/grails-datamapping-async/src/main/groovy/grails/gorm/async/AsyncEntity.groovy b/grails-datamapping-async/src/main/groovy/grails/gorm/async/AsyncEntity.groovy
index 8263d9443a..f941a2f686 100644
--- a/grails-datamapping-async/src/main/groovy/grails/gorm/async/AsyncEntity.groovy
+++ b/grails-datamapping-async/src/main/groovy/grails/gorm/async/AsyncEntity.groovy
@@ -21,6 +21,7 @@ package grails.gorm.async
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import org.grails.datastore.gorm.GormEnhancer
import org.grails.datastore.gorm.GormEntity
import org.grails.datastore.gorm.async.GormAsyncStaticApi
diff --git a/grails-datamapping-core-test/src/test/groovy/org/grails/datastore/gorm/schemaless/ImplementsDynamicAttributes.groovy b/grails-datamapping-core-test/src/test/groovy/org/grails/datastore/gorm/schemaless/ImplementsDynamicAttributes.groovy
index a0469bede3..447bfc02f8 100644
--- a/grails-datamapping-core-test/src/test/groovy/org/grails/datastore/gorm/schemaless/ImplementsDynamicAttributes.groovy
+++ b/grails-datamapping-core-test/src/test/groovy/org/grails/datastore/gorm/schemaless/ImplementsDynamicAttributes.groovy
@@ -18,46 +18,44 @@
*/
package org.grails.datastore.gorm.schemaless
+import java.lang.reflect.Method
+
import groovy.transform.Generated
+
import spock.lang.Issue
import spock.lang.Specification
-import java.lang.reflect.Method
-
-
class DynamicDomainSpec extends Specification {
- @Issue("GDM-769")
- void "Test a domain with dynamic attributes doesn't try to set readonly properties"() {
+ @Issue('GDM-769')
+ void 'test a domain with dynamic attributes does not try to set readonly properties'() {
given:
- DynamicEntity entity = new DynamicEntity()
+ def entity = new DynamicEntity()
when:
- entity.putAt("foo", 123)
- entity.putAt("name", "Sally")
+ entity.putAt('foo', 123)
+ entity.putAt('name', 'Sally')
then:
- entity.foo == "foo"
- entity.name == "Sally"
- entity.getAt("foo") == "foo"
- !entity.attributes().containsKey("name")
+ entity.foo == 'foo'
+ entity.name == 'Sally'
+ entity.getAt('foo') == 'foo'
+ !entity.attributes().containsKey('name')
entity.attributes().foo == 123
}
- void "test that all DynamicAttributes trait methods are marked as Generated"() {
- expect: "all DynamicAttributes methods are marked as Generated on implementation class"
- DynamicAttributes.getMethods().each { Method traitMethod ->
- assert DynamicEntity.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all DynamicAttributes trait methods are marked as Generated'() {
+
+ expect: 'all DynamicAttributes methods are marked as Generated on implementation class'
+ DynamicAttributes.methods.each { Method traitMethod ->
+ assert DynamicEntity.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
class DynamicEntity implements DynamicAttributes {
-
String name
-
String getFoo() {
- "foo"
+ 'foo'
}
-
}
diff --git a/grails-datamapping-core/src/main/groovy/grails/gorm/MultiTenant.groovy b/grails-datamapping-core/src/main/groovy/grails/gorm/MultiTenant.groovy
index 4e93062bc6..7f429caca1 100644
--- a/grails-datamapping-core/src/main/groovy/grails/gorm/MultiTenant.groovy
+++ b/grails-datamapping-core/src/main/groovy/grails/gorm/MultiTenant.groovy
@@ -21,6 +21,7 @@ package grails.gorm
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import grails.gorm.api.GormAllOperations
import org.grails.datastore.gorm.GormEnhancer
import org.grails.datastore.mapping.core.connections.ConnectionSource
diff --git a/grails-datamapping-core/src/main/groovy/grails/gorm/time/TemporalConverter.groovy b/grails-datamapping-core/src/main/groovy/grails/gorm/time/TemporalConverter.groovy
index be4092e6af..8f26fba149 100644
--- a/grails-datamapping-core/src/main/groovy/grails/gorm/time/TemporalConverter.groovy
+++ b/grails-datamapping-core/src/main/groovy/grails/gorm/time/TemporalConverter.groovy
@@ -19,12 +19,12 @@
package grails.gorm.time
-import groovy.transform.Generated
-
import java.time.Instant
import java.time.ZoneId
import java.time.ZoneOffset
+import groovy.transform.Generated
+
trait TemporalConverter<T> {
abstract Long convert(T value)
diff --git a/grails-datamapping-core/src/main/groovy/grails/gorm/time/ZonedDateTimeConverter.groovy b/grails-datamapping-core/src/main/groovy/grails/gorm/time/ZonedDateTimeConverter.groovy
index 8e6b4fa65f..70fb9946ab 100644
--- a/grails-datamapping-core/src/main/groovy/grails/gorm/time/ZonedDateTimeConverter.groovy
+++ b/grails-datamapping-core/src/main/groovy/grails/gorm/time/ZonedDateTimeConverter.groovy
@@ -33,14 +33,14 @@ import groovy.transform.Generated
@CompileStatic
trait ZonedDateTimeConverter implements TemporalConverter<ZonedDateTime> {
- @Generated
@Override
+ @Generated
Long convert(ZonedDateTime value) {
value.toInstant().toEpochMilli()
}
- @Generated
@Override
+ @Generated
ZonedDateTime convert(Long value) {
ZonedDateTime.ofInstant(Instant.ofEpochMilli(value), systemOffset)
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/DirtyCheckingTransformer.groovy b/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/DirtyCheckingTransformer.groovy
index cad27db9b5..cae27a0f4c 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/DirtyCheckingTransformer.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/DirtyCheckingTransformer.groovy
@@ -56,6 +56,7 @@ import org.grails.datastore.mapping.reflect.ReflectionUtils
import static java.lang.reflect.Modifier.PUBLIC
import static java.lang.reflect.Modifier.isFinal
import static java.lang.reflect.Modifier.isTransient
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.codehaus.groovy.ast.tools.GeneralUtils.args
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS
import static org.codehaus.groovy.ast.tools.GeneralUtils.block
@@ -72,7 +73,6 @@ import static org.grails.datastore.mapping.reflect.AstUtils.ZERO_PARAMETERS
import static org.grails.datastore.mapping.reflect.AstUtils.addAnnotationIfNecessary
import static org.grails.datastore.mapping.reflect.AstUtils.hasAnnotation
import static org.grails.datastore.mapping.reflect.AstUtils.isDomainClass
-import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
/**
*
@@ -218,7 +218,6 @@ class DirtyCheckingTransformer implements CompilationUnitAware {
null,
GeneralUtils.returnS(GeneralUtils.varX(propertyField))
)
-
markAsGenerated(classNode, getIdMethod)
classNode.addMethod(getIdMethod)
getIdMethod.addAnnotation(GormEntityTransformation.JPA_TRANSIENT_ANNOTATION_NODE)
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/GormEntityTransformation.groovy b/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/GormEntityTransformation.groovy
index d20647c2b5..121cc89575 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/GormEntityTransformation.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/compiler/gorm/GormEntityTransformation.groovy
@@ -350,7 +350,6 @@ class GormEntityTransformation extends AbstractASTTransformation implements Comp
}
methodBody.addStatement(returnS(createNamedQueryCall))
MethodNode newMethod = new MethodNode(methodName, Modifier.PUBLIC | Modifier.STATIC, queryOperationsClassNode, newParams, null, methodBody)
-
markAsGenerated(thisClassNode, newMethod)
thisClassNode.addMethod(newMethod)
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy
index f0ceb2b4e8..8bdba0199a 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntity.groovy
@@ -21,6 +21,7 @@ package org.grails.datastore.gorm
import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import jakarta.persistence.Transient
import org.springframework.transaction.TransactionDefinition
@@ -58,8 +59,8 @@ trait GormEntity<D> implements GormValidateable, DirtyCheckable, GormEntityApi<D
* @param name The property name
* @return The property value
*/
- @CompileDynamic
@Generated
+ @CompileDynamic
def propertyMissing(String name) {
GormEnhancer.findInstanceApi(getClass()).propertyMissing(this, name)
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntityDirtyCheckable.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntityDirtyCheckable.groovy
index 9b5edc66e0..8d09901092 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntityDirtyCheckable.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormEntityDirtyCheckable.groovy
@@ -19,9 +19,8 @@
package org.grails.datastore.gorm
import groovy.transform.CompileStatic
+import groovy.transform.Generated
-import jakarta.annotation.Generated
-import groovy.transform.Generated as GroovyGenerated
import org.grails.datastore.mapping.config.Property
import org.grails.datastore.mapping.dirty.checking.DirtyCheckable
import org.grails.datastore.mapping.model.PersistentEntity
@@ -39,7 +38,6 @@ trait GormEntityDirtyCheckable extends DirtyCheckable {
@Override
@Generated
- @GroovyGenerated
boolean hasChanged(String propertyName) {
PersistentEntity entity = currentGormInstanceApi().persistentEntity
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormValidateable.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormValidateable.groovy
index 2baf26e05e..6b6be5e917 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormValidateable.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/GormValidateable.groovy
@@ -20,6 +20,7 @@ package org.grails.datastore.gorm
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import jakarta.persistence.Transient
import org.springframework.validation.Errors
@@ -38,6 +39,7 @@ trait GormValidateable {
@Transient
private transient boolean skipValidate = false
+
/**
* The validation errors object
*/
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/schemaless/DynamicAttributes.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/schemaless/DynamicAttributes.groovy
index 2003abc726..84240b5547 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/schemaless/DynamicAttributes.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/schemaless/DynamicAttributes.groovy
@@ -21,6 +21,7 @@ package org.grails.datastore.gorm.schemaless
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import org.grails.datastore.mapping.dirty.checking.DirtyCheckable
/**
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractReadOperationImplementer.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractReadOperationImplementer.groovy
index 08cf9aeffe..bbfbb3a6b5 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractReadOperationImplementer.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractReadOperationImplementer.groovy
@@ -66,9 +66,7 @@ abstract class AbstractReadOperationImplementer extends AbstractServiceImplement
domainClassNode = domainClassFromSignature
}
doImplement(domainClassNode, abstractMethodNode, newMethodNode, targetClassNode)
-
markAsGenerated(targetClassNode, newMethodNode)
-
abstractMethodNode.putNodeMetaData(IMPLEMENTED, Boolean.TRUE)
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractWriteOperationImplementer.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractWriteOperationImplementer.groovy
index a08205afb3..882c1c3274 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractWriteOperationImplementer.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/AbstractWriteOperationImplementer.groovy
@@ -57,9 +57,7 @@ abstract class AbstractWriteOperationImplementer extends AbstractServiceImplemen
}
doImplement(domainClassNode, abstractMethodNode, newMethodNode, targetClassNode)
-
markAsGenerated(targetClassNode, newMethodNode)
-
abstractMethodNode.putNodeMetaData(IMPLEMENTED, Boolean.TRUE)
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.groovy
index 000c71283f..78bda7209a 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/implementers/IterableInterfaceProjectionBuilder.groovy
@@ -65,8 +65,8 @@ trait IterableInterfaceProjectionBuilder extends InterfaceProjectionBuilder {
* @param returnType
* @return True if it is
*/
- @Generated
@Override
+ @Generated
boolean isInterfaceProjection(ClassNode domainClass, MethodNode methodNode, ClassNode returnType) {
if (AstUtils.isSubclassOfOrImplementsInterface(returnType, Iterable.name) || returnType.isArray()) {
ClassNode genericType = AstGenericsUtils.resolveSingleGenericType(returnType)
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/transform/ServiceTransformation.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/transform/ServiceTransformation.groovy
index b0808d594b..ce8c338fd2 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/transform/ServiceTransformation.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/services/transform/ServiceTransformation.groovy
@@ -88,6 +88,7 @@ import org.grails.datastore.gorm.validation.jakarta.services.implementers.Method
import org.grails.datastore.mapping.core.Datastore
import org.grails.datastore.mapping.core.order.OrderedComparator
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignX
import static org.codehaus.groovy.ast.tools.GeneralUtils.block
@@ -108,7 +109,6 @@ import static org.grails.datastore.mapping.reflect.AstUtils.error
import static org.grails.datastore.mapping.reflect.AstUtils.findAllUnimplementedAbstractMethods
import static org.grails.datastore.mapping.reflect.AstUtils.findAnnotation
import static org.grails.datastore.mapping.reflect.AstUtils.hasAnnotation
-import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.grails.datastore.mapping.reflect.AstUtils.warning
/**
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transactions/transform/TransactionalTransform.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transactions/transform/TransactionalTransform.groovy
index a4fcbaa100..050d12ca46 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transactions/transform/TransactionalTransform.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transactions/transform/TransactionalTransform.groovy
@@ -55,6 +55,7 @@ import org.grails.datastore.mapping.multitenancy.MultiTenantCapableDatastore
import org.grails.datastore.mapping.transactions.CustomizableRollbackTransactionAttribute
import org.grails.datastore.mapping.transactions.TransactionCapableDatastore
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.codehaus.groovy.ast.ClassHelper.CLASS_Type
import static org.codehaus.groovy.ast.ClassHelper.STRING_TYPE
import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE
@@ -86,7 +87,6 @@ import static org.grails.datastore.mapping.reflect.AstUtils.findAnnotation
import static org.grails.datastore.mapping.reflect.AstUtils.hasOrInheritsProperty
import static org.grails.datastore.mapping.reflect.AstUtils.implementsInterface
import static org.grails.datastore.mapping.reflect.AstUtils.isSubclassOf
-import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.grails.datastore.mapping.reflect.AstUtils.nonGeneric
import static org.grails.datastore.mapping.reflect.AstUtils.varThis
@@ -339,7 +339,6 @@ class TransactionalTransform extends AbstractDatastoreMethodDecoratingTransforma
parameters,
null,
setterBody)
-
markAsGenerated(declaringClassNode, setterNode)
}
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractDatastoreMethodDecoratingTransformation.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractDatastoreMethodDecoratingTransformation.groovy
index 1dcd715cad..7bfa704ea0 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractDatastoreMethodDecoratingTransformation.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractDatastoreMethodDecoratingTransformation.groovy
@@ -41,6 +41,7 @@ import org.grails.datastore.gorm.internal.RuntimeSupport
import org.grails.datastore.mapping.core.Datastore
import org.grails.datastore.mapping.core.connections.MultipleConnectionSourceCapableDatastore
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.codehaus.groovy.ast.ClassHelper.STRING_TYPE
import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE
import static org.codehaus.groovy.ast.ClassHelper.make
@@ -61,7 +62,6 @@ import static org.grails.datastore.mapping.reflect.AstUtils.ZERO_PARAMETERS
import static org.grails.datastore.mapping.reflect.AstUtils.addAnnotationOrGetExisting
import static org.grails.datastore.mapping.reflect.AstUtils.implementsInterface
import static org.grails.datastore.mapping.reflect.AstUtils.isSpockTest
-import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
/**
* An abstract implementation for transformations that decorate a method invocation such that
@@ -208,17 +208,14 @@ abstract class AbstractDatastoreMethodDecoratingTransformation extends AbstractM
returnS(datastoreFieldVar),
returnS(datastoreLookupDefaultCall))
)
-
markAsGenerated(declaringClassNode, mn)
+
if (!isSpockTest) {
compileMethodStatically(source, mn)
}
-
}
}
-
}
-
}
protected void weaveSetTargetDatastoreBody(SourceUnit source, AnnotationNode annotationNode, ClassNode declaringClassNode, Expression datastoreVar, BlockStatement setTargetDatastoreBody) {
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractMethodDecoratingTransformation.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractMethodDecoratingTransformation.groovy
index 16f608bbdb..9141abb453 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractMethodDecoratingTransformation.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/transform/AbstractMethodDecoratingTransformation.groovy
@@ -47,6 +47,7 @@ import jakarta.annotation.PreDestroy
import org.grails.datastore.mapping.reflect.NameUtils
+import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE
import static org.codehaus.groovy.ast.tools.GeneralUtils.args
import static org.codehaus.groovy.ast.tools.GeneralUtils.block
@@ -56,7 +57,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.closureX
import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX
-import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated
import static org.grails.datastore.gorm.transform.AstMethodDispatchUtils.paramsForArgs
import static org.grails.datastore.mapping.reflect.AstUtils.COMPILE_STATIC_TYPE
import static org.grails.datastore.mapping.reflect.AstUtils.EMPTY_CLASS_ARRAY
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/validation/jakarta/services/ValidatedService.groovy b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/validation/jakarta/services/ValidatedService.groovy
index 16d5f29e91..10e7232f21 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/validation/jakarta/services/ValidatedService.groovy
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/validation/jakarta/services/ValidatedService.groovy
@@ -23,6 +23,7 @@ import java.lang.reflect.Method
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import jakarta.validation.Configuration
import jakarta.validation.ConstraintViolation
import jakarta.validation.ConstraintViolationException
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/services/MethodValidationTransformSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/services/MethodValidationTransformSpec.groovy
index c4cb871f9c..001de02cf6 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/services/MethodValidationTransformSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/services/MethodValidationTransformSpec.groovy
@@ -18,100 +18,97 @@
*/
package grails.gorm.services
-import groovy.transform.Generated
+import java.lang.reflect.Method
-import grails.gorm.annotation.Entity
-import grails.validation.ValidationException
-import jakarta.validation.constraints.NotNull
-import org.grails.datastore.gorm.validation.jakarta.services.ValidatedService
-import spock.lang.Specification
+import groovy.transform.Generated
import jakarta.validation.ConstraintViolationException
import jakarta.validation.ParameterNameProvider
-import java.lang.reflect.Method
+import jakarta.validation.constraints.NotNull
-/**
- * Created by graemerocher on 14/02/2017.
- */
-class MethodValidationTransformSpec extends Specification {
+import spock.lang.Specification
- void "test simple validated property"() {
- when:"The service transform is applied to an interface it can't implement"
- Class service = new GroovyClassLoader().parseClass('''
-import grails.gorm.services.*
import grails.gorm.annotation.Entity
-import jakarta.validation.constraints.*
-
-@Service(Foo)
-interface MyService {
+import grails.validation.ValidationException
+import org.grails.datastore.gorm.validation.jakarta.services.ValidatedService
- @grails.gorm.transactions.NotTransactional
- Foo find(@NotNull String title) throws jakarta.validation.ConstraintViolationException
-
- @grails.gorm.transactions.NotTransactional
- Foo findAgain(@NotNull @NotBlank String title)
-}
-@Entity
-class Foo {
- String title
-}
+class MethodValidationTransformSpec extends Specification {
-''')
+ void 'test simple validated property'() {
+
+ when: 'the service transform is applied to an interface it cannot implement'
+ def serviceClass = new GroovyClassLoader().parseClass('''
+ import grails.gorm.services.*
+ import grails.gorm.annotation.Entity
+ import jakarta.validation.constraints.*
+
+ @Service(Foo)
+ interface MyService {
+
+ @grails.gorm.transactions.NotTransactional
+ Foo find(@NotNull String title) throws jakarta.validation.ConstraintViolationException
+
+ @grails.gorm.transactions.NotTransactional
+ Foo findAgain(@NotNull @NotBlank String title)
+ }
+ @Entity
+ class Foo {
+ String title
+ }
+ ''')
then:
- service.isInterface()
- println service.classLoader.loadedClasses
+ serviceClass.isInterface()
- when:"the impl is obtained"
- Class impl = service.classLoader.loadClass("\$MyServiceImplementation")
+ when: 'the impl is obtained'
+ def implClass = serviceClass.classLoader.loadClass('$MyServiceImplementation')
- then:"The impl is valid"
- org.grails.datastore.mapping.services.Service.isAssignableFrom(impl)
- ValidatedService.isAssignableFrom(impl)
+ then: 'the impl is valid'
+ org.grails.datastore.mapping.services.Service.isAssignableFrom(implClass)
+ ValidatedService.isAssignableFrom(implClass)
- and: "All implemented Trait methods are marked as Generated"
- ValidatedService.getMethods().each { Method traitMethod ->
- assert impl.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all implemented Trait methods are marked as Generated'
+ ValidatedService.methods.each { Method traitMethod ->
+ assert implClass.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- when:"The parameter data is obtained"
- ParameterNameProvider parameterNameProvider = service.classLoader.loadClass("\$MyServiceImplementation\$ParameterNameProvider").newInstance()
- def instance = impl.newInstance()
+ when: 'the parameter data is obtained'
+ def parameterNameProvider = (ParameterNameProvider) serviceClass.classLoader.loadClass('$MyServiceImplementation$ParameterNameProvider').newInstance()
+ def instance = implClass.newInstance()
- then:"It is correct"
+ then: 'it is correct'
parameterNameProvider != null
- parameterNameProvider.getParameterNames(impl.getMethod("find", String)) == ["title"]
+ parameterNameProvider.getParameterNames(implClass.getMethod('find', String)) == ['title']
instance.parameterNameProvider != null
- instance.parameterNameProvider.getParameterNames(impl.getMethod("find", String)) == ["title"]
+ instance.parameterNameProvider.getParameterNames(implClass.getMethod('find', String)) == ['title']
instance.validatorFactory != null
-
when:
instance.find(null)
then:
- def e = thrown( ConstraintViolationException)
- e.constraintViolations.size() == 1
- e.constraintViolations.first().messageTemplate == '{jakarta.validation.constraints.NotNull.message}'
- e.constraintViolations.first().propertyPath.toString() == 'find.title'
+ def constraintViolationException = thrown(ConstraintViolationException)
+ constraintViolationException.constraintViolations.size() == 1
+ constraintViolationException.constraintViolations.first().messageTemplate == '{jakarta.validation.constraints.NotNull.message}'
+ constraintViolationException.constraintViolations.first().propertyPath.toString() == 'find.title'
when:
- instance.findAgain("")
+ instance.findAgain('')
then:
- def e2 = thrown( ValidationException )
- e2.message
- e2.errors.hasErrors()
- e2.errors.hasFieldErrors('title')
- e2.errors.getFieldValue('title') == ""
+ def validationException = thrown(ValidationException)
+ validationException.message
+ validationException.errors.hasErrors()
+ validationException.errors.hasFieldErrors('title')
+ validationException.errors.getFieldValue('title') == ''
}
}
@Service(Foo)
interface MyService {
-
Foo find(@NotNull String title)
}
+
@Entity
class Foo {
String title
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/InstantConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/InstantConverterSpec.groovy
index 3ccd2f0421..20729af85d 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/InstantConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/InstantConverterSpec.groovy
@@ -18,13 +18,14 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import groovy.transform.Generated
-import spock.lang.Specification
-
import java.lang.reflect.Method
import java.time.Instant
+import groovy.transform.Generated
+
+import spock.lang.Shared
+import spock.lang.Specification
+
class InstantConverterSpec extends Specification implements InstantConverter {
@Shared
@@ -34,20 +35,21 @@ class InstantConverterSpec extends Specification implements InstantConverter {
instant = Instant.ofEpochMilli(100)
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(instant) == 100L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
expect:
convert(100L) == instant
}
- void "test that all InstantConverter trait methods are marked as Generated"() {
- expect: "all InstantConverter methods are marked as Generated on implementation class"
- InstantConverter.getMethods().each { Method traitMethod ->
- assert InstantConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all InstantConverter trait methods are marked as Generated'() {
+
+ expect: 'all InstantConverter methods are marked as Generated on implementation class'
+ InstantConverter.methods.each { Method traitMethod ->
+ assert InstantConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateConverterSpec.groovy
index 538fbb2489..b1ba813714 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateConverterSpec.groovy
@@ -18,13 +18,13 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
+import java.lang.reflect.Method
+import java.time.LocalDate
import groovy.transform.Generated
-import java.lang.reflect.Method
-import java.time.LocalDate
+import spock.lang.Shared
+import spock.lang.Specification
class LocalDateConverterSpec extends Specification implements LocalDateConverter {
@@ -35,25 +35,26 @@ class LocalDateConverterSpec extends Specification implements LocalDateConverter
localDate = LocalDate.of(1941, 1, 5)
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(localDate) == -914803200000L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
expect:
convert(-914803200000L) == localDate
}
- void "test that all LocalDateConverter/TemporalConverter trait methods are marked as Generated"() {
- expect: "all LocalDateConverter methods are marked as Generated on implementation class"
- LocalDateConverter.getMethods().each { Method traitMethod ->
- assert LocalDateConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all LocalDateConverter/TemporalConverter trait methods are marked as Generated'() {
+
+ expect: 'all LocalDateConverter methods are marked as Generated on implementation class'
+ LocalDateConverter.methods.each { Method traitMethod ->
+ assert LocalDateConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all TemporalConverter methods are marked as Generated on implementation class"
- TemporalConverter.getMethods().each { Method traitMethod ->
- assert LocalDateConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all TemporalConverter methods are marked as Generated on implementation class'
+ TemporalConverter.methods.each { Method traitMethod ->
+ assert LocalDateConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateTimeConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateTimeConverterSpec.groovy
index a9521589ac..c209612fcb 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateTimeConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalDateTimeConverterSpec.groovy
@@ -18,47 +18,49 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
-
-import groovy.transform.Generated
-
import java.lang.reflect.Method
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
+import groovy.transform.Generated
+
+import spock.lang.Shared
+import spock.lang.Specification
+
class LocalDateTimeConverterSpec extends Specification implements LocalDateTimeConverter {
@Shared
LocalDateTime localDateTime
void setupSpec() {
- TimeZone.default = TimeZone.getTimeZone("America/Los_Angeles")
- LocalTime localTime = LocalTime.of(6,5,4,3)
- LocalDate localDate = LocalDate.of(1941, 1, 5)
- localDateTime = LocalDateTime.of(localDate, localTime)
+ TimeZone.default = TimeZone.getTimeZone('America/Los_Angeles')
+ localDateTime = LocalDateTime.of(
+ LocalDate.of(1941, 1, 5),
+ LocalTime.of(6,5,4,3)
+ )
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(localDateTime) == -914781296000L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
expect:
convert(-914781296000L) == localDateTime.withNano(0)
}
- void "test that all LocalDateTimeConverter/TemporalConverter trait methods are marked as Generated"() {
- expect: "all LocalDateTimeConverter methods are marked as Generated on implementation class"
- LocalDateTimeConverter.getMethods().each { Method traitMethod ->
- assert LocalDateTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all LocalDateTimeConverter/TemporalConverter trait methods are marked as Generated'() {
+
+ expect: 'all LocalDateTimeConverter methods are marked as Generated on implementation class'
+ LocalDateTimeConverter.methods.each { Method traitMethod ->
+ assert LocalDateTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all TemporalConverter methods are marked as Generated on implementation class"
- TemporalConverter.getMethods().each { Method traitMethod ->
- assert LocalDateTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all TemporalConverter methods are marked as Generated on implementation class'
+ TemporalConverter.methods.each { Method traitMethod ->
+ assert LocalDateTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalTimeConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalTimeConverterSpec.groovy
index 282f20801d..33a6755bb2 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalTimeConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/LocalTimeConverterSpec.groovy
@@ -18,13 +18,14 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
-import groovy.transform.Generated
-
import java.lang.reflect.Method
import java.time.LocalTime
+import groovy.transform.Generated
+
+import spock.lang.Shared
+import spock.lang.Specification
+
class LocalTimeConverterSpec extends Specification implements LocalTimeConverter {
@Shared
@@ -34,25 +35,26 @@ class LocalTimeConverterSpec extends Specification implements LocalTimeConverter
localTime = LocalTime.of(6,5,4,3)
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(localTime) == 21904000000003L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
expect:
convert(21904000000003L) == localTime
}
- void "test that all LocalTimeConverter/TemporalConverter trait methods are marked as Generated"() {
- expect: "all LocalTimeConverter methods are marked as Generated on implementation class"
- LocalTimeConverter.getMethods().each { Method traitMethod ->
- assert LocalTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all LocalTimeConverter/TemporalConverter trait methods are marked as Generated'() {
+
+ expect: 'all LocalTimeConverter methods are marked as Generated on implementation class'
+ LocalTimeConverter.methods.each { Method traitMethod ->
+ assert LocalTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all TemporalConverter methods are marked as Generated on implementation class"
- TemporalConverter.getMethods().each { Method traitMethod ->
- assert LocalTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all TemporalConverter methods are marked as Generated on implementation class'
+ TemporalConverter.methods.each { Method traitMethod ->
+ assert LocalTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetDateTimeConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetDateTimeConverterSpec.groovy
index afc47bea35..c08a69bf18 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetDateTimeConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetDateTimeConverterSpec.groovy
@@ -18,13 +18,17 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
+import java.lang.reflect.Method
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.OffsetDateTime
+import java.time.ZoneOffset
import groovy.transform.Generated
-import java.lang.reflect.Method
-import java.time.*
+import spock.lang.Shared
+import spock.lang.Specification
class OffsetDateTimeConverterSpec extends Specification implements OffsetDateTimeConverter {
@@ -32,36 +36,40 @@ class OffsetDateTimeConverterSpec extends Specification implements OffsetDateTim
OffsetDateTime offsetDateTime
void setupSpec() {
- TimeZone.default = TimeZone.getTimeZone("America/Los_Angeles")
- LocalTime localTime = LocalTime.of(6,5,4,3)
- LocalDate localDate = LocalDate.of(1941, 1, 5)
- LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime)
- offsetDateTime = OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(-6))
+ TimeZone.default = TimeZone.getTimeZone('America/Los_Angeles')
+ offsetDateTime = OffsetDateTime.of(
+ LocalDateTime.of(
+ LocalDate.of(1941, 1, 5),
+ LocalTime.of(6,5,4,3)
+ ),
+ ZoneOffset.ofHours(-6)
+ )
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(offsetDateTime) == -914759696000L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
given:
- OffsetDateTime converted = convert(-914759696000L)
+ def converted = convert(-914759696000L)
expect:
converted == offsetDateTime.withNano(0).withOffsetSameInstant(ZoneOffset.ofHours(-7)) ||
converted == offsetDateTime.withNano(0).withOffsetSameInstant(ZoneOffset.ofHours(-8))
}
- void "test that all OffsetDateTimeConverter/TemporalConverter trait methods are marked as Generated"() {
- expect: "all OffsetDateTimeConverter methods are marked as Generated on implementation class"
- OffsetDateTimeConverter.getMethods().each { Method traitMethod ->
- assert OffsetDateTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all OffsetDateTimeConverter/TemporalConverter trait methods are marked as Generated'() {
+
+ expect: 'all OffsetDateTimeConverter methods are marked as Generated on implementation class'
+ OffsetDateTimeConverter.methods.each { Method traitMethod ->
+ assert OffsetDateTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all TemporalConverter methods are marked as Generated on implementation class"
- TemporalConverter.getMethods().each { Method traitMethod ->
- assert OffsetDateTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all TemporalConverter methods are marked as Generated on implementation class'
+ TemporalConverter.methods.each { Method traitMethod ->
+ assert OffsetDateTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetTimeConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetTimeConverterSpec.groovy
index 372f5dc9e3..83acef8cb3 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetTimeConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/OffsetTimeConverterSpec.groovy
@@ -18,50 +18,53 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
-
-import groovy.transform.Generated
-
import java.lang.reflect.Method
import java.time.LocalTime
import java.time.OffsetTime
import java.time.ZoneOffset
+import groovy.transform.Generated
+
+import spock.lang.Shared
+import spock.lang.Specification
+
class OffsetTimeConverterSpec extends Specification implements OffsetTimeConverter {
@Shared
OffsetTime offsetTime
void setupSpec() {
- TimeZone.default = TimeZone.getTimeZone("America/Los_Angeles")
- LocalTime localTime = LocalTime.of(6,5,4,3)
- offsetTime = OffsetTime.of(localTime, ZoneOffset.ofHours(-6))
+ TimeZone.default = TimeZone.getTimeZone('America/Los_Angeles')
+ offsetTime = OffsetTime.of(
+ LocalTime.of(6,5,4,3),
+ ZoneOffset.ofHours(-6)
+ )
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(offsetTime) == 43504000000003L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
given:
- OffsetTime converted = convert(43504000000003L)
+ def converted = convert(43504000000003L)
expect:
converted == offsetTime.withOffsetSameInstant(ZoneOffset.ofHours(-7)) ||
converted == offsetTime.withOffsetSameInstant(ZoneOffset.ofHours(-8))
}
- void "test that all OffsetTimeConverter/TemporalConverter trait methods are marked as Generated"() {
- expect: "all OffsetTimeConverter methods are marked as Generated on implementation class"
- OffsetTimeConverter.getMethods().each { Method traitMethod ->
- assert OffsetTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all OffsetTimeConverter/TemporalConverter trait methods are marked as Generated'() {
+
+ expect: 'all OffsetTimeConverter methods are marked as Generated on implementation class'
+ OffsetTimeConverter.methods.each { Method traitMethod ->
+ assert OffsetTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all TemporalConverter methods are marked as Generated on implementation class"
- TemporalConverter.getMethods().each { Method traitMethod ->
- assert OffsetTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all TemporalConverter methods are marked as Generated on implementation class'
+ TemporalConverter.methods.each { Method traitMethod ->
+ assert OffsetTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/PeriodConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/PeriodConverterSpec.groovy
index cdb1fb5776..64051e9764 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/PeriodConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/PeriodConverterSpec.groovy
@@ -18,13 +18,13 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
+import java.lang.reflect.Method
+import java.time.Period
import groovy.transform.Generated
-import java.lang.reflect.Method
-import java.time.Period
+import spock.lang.Shared
+import spock.lang.Specification
class PeriodConverterSpec extends Specification implements PeriodConverter {
@@ -35,20 +35,21 @@ class PeriodConverterSpec extends Specification implements PeriodConverter {
period = Period.of(1941, 1, 5)
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(period) == 'P1941Y1M5D'
}
- void "test convert from long"() {
+ void 'test convert from long'() {
expect:
convert('P1941Y1M5D') == period
}
- void "test that all PeriodConverter trait methods are marked as Generated"() {
- expect: "all PeriodConverter methods are marked as Generated on implementation class"
- PeriodConverter.getMethods().each { Method traitMethod ->
- assert PeriodConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all PeriodConverter trait methods are marked as Generated'() {
+
+ expect: 'all PeriodConverter methods are marked as Generated on implementation class'
+ PeriodConverter.methods.each { Method traitMethod ->
+ assert PeriodConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/grails/gorm/time/ZonedDateTimeConverterSpec.groovy b/grails-datamapping-core/src/test/groovy/grails/gorm/time/ZonedDateTimeConverterSpec.groovy
index 9f19b9fc7d..bb3dd5e5c4 100644
--- a/grails-datamapping-core/src/test/groovy/grails/gorm/time/ZonedDateTimeConverterSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/grails/gorm/time/ZonedDateTimeConverterSpec.groovy
@@ -18,13 +18,17 @@
*/
package grails.gorm.time
-import spock.lang.Shared
-import spock.lang.Specification
+import java.lang.reflect.Method
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.ZoneOffset
+import java.time.ZonedDateTime
import groovy.transform.Generated
-import java.lang.reflect.Method
-import java.time.*
+import spock.lang.Shared
+import spock.lang.Specification
class ZonedDateTimeConverterSpec extends Specification implements ZonedDateTimeConverter {
@@ -33,34 +37,39 @@ class ZonedDateTimeConverterSpec extends Specification implements ZonedDateTimeC
void setupSpec() {
TimeZone.default = TimeZone.getTimeZone("America/Los_Angeles")
- LocalTime localTime = LocalTime.of(6,5,4,3)
- LocalDate localDate = LocalDate.of(1941, 1, 5)
- LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime)
- zonedDateTime = ZonedDateTime.of(localDateTime, ZoneOffset.ofHours(-6))
+ zonedDateTime = ZonedDateTime.of(
+ LocalDateTime.of(
+ LocalDate.of(1941, 1, 5),
+ LocalTime.of(6,5,4,3)
+ ),
+ ZoneOffset.ofHours(-6)
+ )
}
- void "test convert to long"() {
+ void 'test convert to long'() {
expect:
convert(zonedDateTime) == -914759696000L
}
- void "test convert from long"() {
+ void 'test convert from long'() {
given:
ZonedDateTime converted = convert(-914759696000L)
expect:
- converted == zonedDateTime.withNano(0).withZoneSameInstant(ZoneOffset.ofHours(-7)) || converted == zonedDateTime.withNano(0).withZoneSameInstant(ZoneOffset.ofHours(-8))
+ converted == zonedDateTime.withNano(0).withZoneSameInstant(ZoneOffset.ofHours(-7)) ||
+ converted == zonedDateTime.withNano(0).withZoneSameInstant(ZoneOffset.ofHours(-8))
}
- void "test that all ZonedDateTimeConverter/TemporalConverter trait methods are marked as Generated"() {
- expect: "all ZonedDateTimeConverter methods are marked as Generated on implementation class"
- ZonedDateTimeConverter.getMethods().each { Method traitMethod ->
- assert ZonedDateTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all ZonedDateTimeConverter/TemporalConverter trait methods are marked as Generated'() {
+
+ expect: 'all ZonedDateTimeConverter methods are marked as Generated on implementation class'
+ ZonedDateTimeConverter.methods.each { Method traitMethod ->
+ assert ZonedDateTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all TemporalConverter methods are marked as Generated on implementation class"
- TemporalConverter.getMethods().each { Method traitMethod ->
- assert ZonedDateTimeConverterSpec.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all TemporalConverter methods are marked as Generated on implementation class'
+ TemporalConverter.methods.each { Method traitMethod ->
+ assert ZonedDateTimeConverterSpec.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/EntityWithGenericSignaturesSpec.groovy b/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/EntityWithGenericSignaturesSpec.groovy
index 5fd385470a..157ab85faf 100644
--- a/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/EntityWithGenericSignaturesSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/EntityWithGenericSignaturesSpec.groovy
@@ -19,61 +19,55 @@
package org.grails.compiler.gorm
import groovy.transform.Generated
-import org.grails.datastore.mapping.keyvalue.mapping.config.KeyValueMappingContext
-import org.grails.datastore.mapping.keyvalue.mapping.config.KeyValuePersistentEntity
-import org.grails.datastore.mapping.model.MappingContext
-import org.grails.datastore.mapping.model.PersistentEntity
-import spock.lang.Specification
-
-/**
- * Created by graemerocher on 16/09/2016.
- */
-class EntityWithGenericSignaturesSpec extends Specification {
-
- void "Test compile entity with generic signatures"() {
-
- when:"An entity with generic signatures is compiled"
- def gcl = new GroovyClassLoader()
- Class cls = gcl.parseClass('''
-package test
-import grails.gorm.annotation.Entity
-import grails.gorm.dirty.checking.DirtyCheck
+import spock.lang.Specification
-@Entity
-class Widget<SettingType extends WidgetSetting> {
- SettingType setting
+import org.grails.datastore.mapping.keyvalue.mapping.config.KeyValueMappingContext
-}
+class EntityWithGenericSignaturesSpec extends Specification {
-@Entity
-abstract class WidgetSetting {
- String name
-}
+ void 'test compile entity with generic signatures'() {
-@Entity
-class HotWidgetSetting extends WidgetSetting {
- Integer temperature
-}
-''')
+ when: 'an entity with generic signatures is compiled'
+ def cls = new GroovyClassLoader().parseClass('''
+ package test
+
+ import grails.gorm.annotation.Entity
+ import grails.gorm.dirty.checking.DirtyCheck
+
+ @Entity
+ class Widget<SettingType extends WidgetSetting> {
+ SettingType setting
+
+ }
+
+ @Entity
+ abstract class WidgetSetting {
+ String name
+ }
+
+ @Entity
+ class HotWidgetSetting extends WidgetSetting {
+ Integer temperature
+ }
+ ''')
- then:"The entity is compiled correctly"
+ then: 'the entity is compiled correctly'
cls.name == 'test.Widget'
- cls.getMethod("getSetting").returnType.name == 'test.WidgetSetting'
+ cls.getMethod('getSetting').returnType.name == 'test.WidgetSetting'
- when:"A mapping context is created"
- MappingContext mappingContext = new KeyValueMappingContext("test")
- PersistentEntity entity = mappingContext.addPersistentEntity(cls)
+ when: 'a mapping context is created'
+ def mappingContext = new KeyValueMappingContext('test')
+ def entity = mappingContext.addPersistentEntity(cls)
- then:"The entity is has a setting property"
- entity.getPropertyByName("setting")
- entity.getPropertyByName("setting")
- entity.getPropertyByName("setting").type.name == 'test.WidgetSetting'
+ then: 'the entity has a setting property'
+ entity.getPropertyByName('setting')
+ entity.getPropertyByName('setting').type.name == 'test.WidgetSetting'
- and: "generated methods are marked as Generated"
- cls.getMethod("getSetting").isAnnotationPresent(Generated)
- cls.getMethod("getId").isAnnotationPresent(Generated)
- cls.getMethod("getVersion").isAnnotationPresent(Generated)
+ and: 'generated methods are marked as Generated'
+ cls.getMethod('getSetting').isAnnotationPresent(Generated)
+ cls.getMethod('getId').isAnnotationPresent(Generated)
+ cls.getMethod('getVersion').isAnnotationPresent(Generated)
}
}
diff --git a/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/GormEntityTransformSpec.groovy b/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/GormEntityTransformSpec.groovy
index 2f6b97e797..3e1d65cfdd 100644
--- a/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/GormEntityTransformSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/GormEntityTransformSpec.groovy
@@ -18,48 +18,48 @@
*/
package org.grails.compiler.gorm
-import grails.gorm.annotation.Entity
+import java.lang.reflect.Method
+
import groovy.transform.Generated
import org.codehaus.groovy.ast.ClassNode
+
+import spock.lang.Specification
+
+import grails.gorm.annotation.Entity
import org.grails.datastore.gorm.GormEntity
import org.grails.datastore.gorm.GormValidateable
import org.grails.datastore.mapping.dirty.checking.DirtyCheckable
-import spock.lang.Specification
-
-import java.lang.reflect.Method
/**
* @author graemerocher
*/
class GormEntityTransformSpec extends Specification{
-
- void "test parse named queries"() {
- def classLoader = new GroovyClassLoader()
+ void 'test parse named queries'() {
when:
- Class bookClass = classLoader.parseClass('''
-import grails.gorm.annotation.Entity
-@Entity
-class Book {
- String title
-
- static namedQueries = {
- startsWithA {->
- like 'title', 'A%'
- }
-
- startsWithB {
- like 'title', 'B%'
- }
-
- startsWithLetter { String letter ->
- like 'title', letter
- }
- }
-}
-
-
-''')
+ def bookClass = new GroovyClassLoader().parseClass('''
+ import grails.gorm.annotation.Entity
+
+ @Entity
+ class Book {
+
+ String title
+
+ static namedQueries = {
+ startsWithA { ->
+ like('title', 'A%')
+ }
+
+ startsWithB {
+ like('title', 'B%')
+ }
+
+ startsWithLetter { String letter ->
+ like('title', letter)
+ }
+ }
+ }
+ ''')
then:
new ClassNode(bookClass).methods
@@ -68,7 +68,7 @@ class Book {
bookClass.getMethod('getStartsWithB')
bookClass.getMethod('startsWithB')
- and: "they are all marked as Generated"
+ and: 'they are all marked as Generated'
bookClass.getMethod('getStartsWithA').isAnnotationPresent(Generated)
bookClass.getMethod('startsWithA').isAnnotationPresent(Generated)
bookClass.getMethod('getStartsWithB').isAnnotationPresent(Generated)
@@ -76,107 +76,109 @@ class Book {
bookClass.getMethod('startsWithLetter', String).isAnnotationPresent(Generated)
}
- void "test parse withTransaction usage in spock"() {
- def classLoader = new GroovyClassLoader()
- when:
- Class bookClass = classLoader.parseClass('''
-import grails.gorm.annotation.Entity
-@Entity
-class Book {
- String title
-
- static constraints = {
- title validator: { val ->
- val.asBoolean()
- }
- }
-}
-
-
-''')
- Class spockClass = classLoader.parseClass('''
-class HibernateSpecSpec extends spock.lang.Specification {
-
- void setupSpec() {
- Book.withTransaction {
- new Book(title: "The Stand").save(flush:true)
- }
- }
- void "test hibernate spec"() {
- expect:
- Book.count() == 1
- !new Book().validate()
- !new Book(title: "").validate()
- }
-}
-
-''')
-
- then:"The classes are valid"
+ void 'test parse withTransaction usage in spock'() {
+ when:
+ def classLoader = new GroovyClassLoader()
+ def bookClass = classLoader.parseClass('''
+ import grails.gorm.annotation.Entity
+
+ @Entity
+ class Book {
+
+ String title
+
+ static constraints = {
+ title(validator: { val ->
+ val.asBoolean()
+ })
+ }
+ }
+ ''')
+ def spockClass = classLoader.parseClass('''
+ class HibernateSpecSpec extends spock.lang.Specification {
+
+ void setupSpec() {
+ Book.withTransaction {
+ new Book(title: 'The Stand').save(flush: true)
+ }
+ }
+
+ void 'test hibernate spec'() {
+ expect:
+ Book.count() == 1
+ !new Book().validate()
+ !new Book(title: '').validate()
+ }
+ }
+ ''')
+
+ then: 'the classes are valid'
new ClassNode(bookClass).methods
new ClassNode(spockClass).methods
-
}
- void "Test parse abstract GORM entity with getters and setters"() {
+ void 'test parse abstract GORM entity with getters and setters'() {
when:
def cls = new GroovyClassLoader().parseClass('''
-import grails.gorm.annotation.Entity
-
-@Entity
-abstract class AbstractDomain {
-
- abstract String getStringValue()
- abstract void setStringValue(String value)
-
-}
-
-
-''')
- then:"It is a valid class"
+ import grails.gorm.annotation.Entity
+
+ @Entity
+ abstract class AbstractDomain {
+
+ abstract String getStringValue()
+ abstract void setStringValue(String value)
+
+ }
+ ''')
+
+ then: 'it is a valid class'
new ClassNode(cls).methods
}
- void "Test parse GORM entity with single char properties"() {
- when:"A gorm entity is parsed"
- def cls = new GroovyClassLoader().parseClass('''
-import grails.gorm.annotation.Entity
-
-@Entity
-class Person {
- String firstName
- String lastName
-}
-
-@Entity
-class PersonLink {
- Person a
- Person b
+ void 'test parse GORM entity with single char properties'() {
- String toString() {
- "$a -> $b"
- }
-}
-''')
- then:"It is a valid class"
+ when: 'a gorm entity is parsed'
+ def cls = new GroovyClassLoader().parseClass('''
+ import grails.gorm.annotation.Entity
+
+ @Entity
+ class Person {
+ String firstName
+ String lastName
+ }
+
+ @Entity
+ class PersonLink {
+ Person a
+ Person b
+
+ String toString() {
+ "$a -> $b"
+ }
+ }
+ ''')
+
+ then: 'it is a valid class'
new ClassNode(cls).methods
}
- void "Test parse GORM entity"() {
- when:"A gorm entity is parsed"
- def cls = new GroovyClassLoader().parseClass('''
-import grails.gorm.annotation.Entity
+ void 'test parse GORM entity'() {
-@Entity
-class Foo {
- String name
-}
-''')
- then:"It is a valid class"
+ when: 'a gorm entity is parsed'
+ def cls = new GroovyClassLoader().parseClass('''
+ import grails.gorm.annotation.Entity
+
+ @Entity
+ class Foo {
+ String name
+ }
+ ''')
+
+ then: 'it is a valid class'
new ClassNode(cls).methods
}
- void "Test GORM entity transformation implements"() {
+ void 'test GORM entity transformation implements'() {
expect:
GormEntity.isAssignableFrom(Book)
GormValidateable.isAssignableFrom(Book)
@@ -184,53 +186,57 @@ class Foo {
Book.getAnnotation(Entity)
new Author().respondsTo('addToBooks', Book)
new Book().hasProperty('authorId')
-
Author.getDeclaredMethod('addToBooks', Object).isAnnotationPresent(Generated)
Author.getDeclaredMethod('removeFromBooks', Object).isAnnotationPresent(Generated)
Author.getDeclaredMethod('setBooks', Set).isAnnotationPresent(Generated)
Author.getDeclaredMethod('getBooks').isAnnotationPresent(Generated)
-
Book.getDeclaredMethod('getAuthorId').isAnnotationPresent(Generated)
}
- void "Test property/method missing"() {
-
+ void 'test property/method missing'() {
when:
Book.foo()
+
then:
- thrown IllegalStateException
+ thrown(IllegalStateException)
+
when:
- def var = Book.bar
+ Book.bar
+
then:
Book.getDeclaredMethod('$static_propertyMissing', String)
Book.getDeclaredMethod('$static_propertyMissing', String).isAnnotationPresent(Generated)
- thrown MissingPropertyException
+ thrown(MissingPropertyException)
+
when:
Book.bar = 'blah'
+
then:
Book.getDeclaredMethod('$static_propertyMissing', String, Object)
Book.getDeclaredMethod('$static_propertyMissing', String, Object).isAnnotationPresent(Generated)
- thrown MissingPropertyException
+ thrown(MissingPropertyException)
}
- void "test that all GormEntity/GormValidateable trait methods are marked as Generated"() {
- expect: "all GormEntity methods are marked as Generated on implementation class"
- GormEntity.getMethods().each { Method traitMethod ->
- assert Book.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all GormEntity/GormValidateable trait methods are marked as Generated'() {
+
+ expect: 'all GormEntity methods are marked as Generated on implementation class'
+ GormEntity.methods.each { Method traitMethod ->
+ assert Book.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
- and: "all GormValidateable methods are marked as Generated on implementation class"
- GormValidateable.getMethods().each { Method traitMethod ->
- assert Book.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ and: 'all GormValidateable methods are marked as Generated on implementation class'
+ GormValidateable.methods.each { Method traitMethod ->
+ assert Book.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
- void "test that all DirtyCheckingTransformer added methods are marked as Generated"() {
- expect: "added getId and getVersion methods are marked"
+ void 'test that all DirtyCheckingTransformer added methods are marked as Generated'() {
+
+ expect: 'added getId and getVersion methods are marked'
Book.getMethod('getId').isAnnotationPresent(Generated)
Book.getMethod('getVersion').isAnnotationPresent(Generated)
- and: "getter and setter methods are marked"
+ and: 'getter and setter methods are marked'
Book.getMethod('getTitle').isAnnotationPresent(Generated)
Book.getMethod('setTitle', String).isAnnotationPresent(Generated)
Book.getMethod('getAuthor').isAnnotationPresent(Generated)
@@ -241,7 +247,6 @@ class Foo {
@Entity
class Book {
String title
-
static belongsTo = [author:Author]
}
diff --git a/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/JpaEntityTransformSpec.groovy b/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/JpaEntityTransformSpec.groovy
index 897bfd6345..2c693d43b5 100644
--- a/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/JpaEntityTransformSpec.groovy
+++ b/grails-datamapping-core/src/test/groovy/org/grails/compiler/gorm/JpaEntityTransformSpec.groovy
@@ -19,52 +19,53 @@
package org.grails.compiler.gorm
import groovy.transform.Generated
-import org.grails.datastore.gorm.GormEntity
-import org.grails.datastore.mapping.model.config.GormProperties
-import org.grails.datastore.mapping.reflect.ClassPropertyFetcher
-import org.springframework.validation.annotation.Validated
-import spock.lang.Specification
import jakarta.persistence.Transient
+import spock.lang.Specification
+
+import org.springframework.validation.annotation.Validated
+
+import org.grails.datastore.gorm.GormEntity
+import org.grails.datastore.mapping.model.config.GormProperties
+import org.grails.datastore.mapping.reflect.ClassPropertyFetcher
-/**
- * Created by graemerocher on 22/12/16.
- */
class JpaEntityTransformSpec extends Specification {
- void "test the JPA entity transform the entity correctly"() {
+ void 'test the JPA entity transform the entity correctly'() {
given:
- GroovyClassLoader gcl = new GroovyClassLoader()
- Class customerClass = gcl.parseClass('''
-import jakarta.persistence.*
-import jakarta.validation.constraints.Digits
-@Entity
-class Customer {
+ def customerClass = new GroovyClassLoader().parseClass('''
+ import jakarta.persistence.*
+ import jakarta.validation.constraints.Digits
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- Long myId
- @Digits
- String firstName;
- String lastName;
-
- @jakarta.persistence.OneToMany
- Set<Customer> related
+ @Entity
+ class Customer {
-}
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ Long myId
-''')
- ClassPropertyFetcher cpf = ClassPropertyFetcher.forClass(customerClass)
- def instance = customerClass.newInstance()
+ @Digits
+ String firstName
+
+ String lastName
+
+ @jakarta.persistence.OneToMany
+ Set<Customer> related
+
+ }
+ ''')
+ def cpf = ClassPropertyFetcher.forClass(customerClass)
+ def instance = customerClass.getDeclaredConstructor().newInstance()
instance.myId = 1L
+
expect:
instance.id == 1L
GormEntity.isAssignableFrom(customerClass)
customerClass.getAnnotation(Validated)
- customerClass.getDeclaredMethod("getId").returnType == Long
- customerClass.getDeclaredMethod("getId").getAnnotation(Transient)
- customerClass.getDeclaredMethod("getId").isAnnotationPresent(Generated)
+ customerClass.getDeclaredMethod('getId').returnType == Long
+ customerClass.getDeclaredMethod('getId').getAnnotation(Transient)
+ customerClass.getDeclaredMethod('getId').isAnnotationPresent(Generated)
cpf.getPropertyDescriptor(GormProperties.IDENTITY)
customerClass.getDeclaredMethod('addToRelated', Object)
customerClass.getDeclaredMethod('addToRelated', Object).isAnnotationPresent(Generated)
diff --git a/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/MultiTenant.groovy b/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/MultiTenant.groovy
index 1bc2181bd9..77429be4ee 100644
--- a/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/MultiTenant.groovy
+++ b/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/MultiTenant.groovy
@@ -19,11 +19,11 @@
package grails.gorm.rx
-import grails.gorm.api.GormAllOperations
-import grails.gorm.rx.api.RxGormAllOperations
import groovy.transform.CompileStatic
import groovy.transform.Generated
-import org.grails.datastore.gorm.GormEnhancer
+
+import grails.gorm.api.GormAllOperations
+import grails.gorm.rx.api.RxGormAllOperations
import org.grails.datastore.mapping.core.connections.ConnectionSource
import org.grails.gorm.rx.api.RxGormEnhancer
@@ -35,6 +35,7 @@ import org.grails.gorm.rx.api.RxGormEnhancer
*/
@CompileStatic
trait MultiTenant<D> extends RxEntity<D> {
+
/**
* Execute the closure with the given tenantId
*
diff --git a/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/RxEntity.groovy b/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/RxEntity.groovy
index e5c572fd50..96bb1c6713 100644
--- a/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/RxEntity.groovy
+++ b/grails-datamapping-rx/src/main/groovy/grails/gorm/rx/RxEntity.groovy
@@ -19,13 +19,15 @@
package grails.gorm.rx
+import groovy.transform.CompileStatic
+import groovy.transform.Generated
+
+import rx.Subscriber
+
import grails.gorm.rx.api.RxGormAllOperations
-import grails.gorm.rx.api.RxGormInstanceOperations
import grails.gorm.rx.api.RxGormOperations
import grails.gorm.rx.api.RxGormStaticOperations
import grails.gorm.rx.proxy.ObservableProxy
-import groovy.transform.CompileStatic
-import groovy.transform.Generated
import org.grails.datastore.gorm.GormValidateable
import org.grails.datastore.gorm.finders.FinderMethod
import org.grails.datastore.mapping.dirty.checking.DirtyCheckable
@@ -41,8 +43,6 @@ import org.grails.datastore.mapping.validation.ValidationException
import org.grails.gorm.rx.api.RxGormEnhancer
import org.grails.gorm.rx.api.RxGormInstanceApi
import org.grails.gorm.rx.api.RxGormStaticApi
-import rx.Observable
-import rx.Subscriber
/**
* Represents a reactive GORM entity
@@ -54,26 +54,27 @@ import rx.Subscriber
*/
@CompileStatic
trait RxEntity<D> implements RxGormOperations<D>, GormValidateable, DirtyCheckable, Serializable {
- @Generated
+
@Override
+ @Generated
boolean validate(Map arguments) {
RxGormEnhancer.findValidationApi((Class<D>)getClass()).validate((D)this, arguments)
}
- @Generated
@Override
+ @Generated
boolean validate(List fields) {
RxGormEnhancer.findValidationApi((Class<D>)getClass()).validate((D)this, fields)
}
- @Generated
@Override
+ @Generated
boolean validate() {
RxGormEnhancer.findValidationApi((Class<D>)getClass()).validate((D)this)
}
- @Generated
@Override
+ @Generated
Observable<D> insert(Map arguments = Collections.emptyMap()) {
return doSave(arguments, true)
}
diff --git a/grails-datamapping-rx/src/main/groovy/org/grails/datastore/rx/collection/RxCollection.groovy b/grails-datamapping-rx/src/main/groovy/org/grails/datastore/rx/collection/RxCollection.groovy
index 4a9dbb631e..08dc2bef28 100644
--- a/grails-datamapping-rx/src/main/groovy/org/grails/datastore/rx/collection/RxCollection.groovy
+++ b/grails-datamapping-rx/src/main/groovy/org/grails/datastore/rx/collection/RxCollection.groovy
@@ -18,13 +18,15 @@
*/
package org.grails.datastore.rx.collection
-import grails.gorm.rx.collection.ObservableCollection
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import rx.Observable
import rx.Subscriber
import rx.Subscription
+import grails.gorm.rx.collection.ObservableCollection
+
/**
* A trait that can be implemented by collection types to make them observable
*
diff --git a/grails-datastore-async/src/main/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncTransformation.java b/grails-datastore-async/src/main/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncTransformation.java
index 1d2083a1ac..11e20dbad3 100644
--- a/grails-datastore-async/src/main/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncTransformation.java
+++ b/grails-datastore-async/src/main/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncTransformation.java
@@ -164,7 +164,6 @@ public class DelegateAsyncTransformation implements ASTTransformation, Transform
MethodCallExpression delegateMethodCall = new MethodCallExpression(new VariableExpression(fieldName), candidate.getName(), arguments);
promiseBody.addStatement(new ExpressionStatement(delegateMethodCall));
MethodNode newMethodNode = new MethodNode(candidate.getName(), Modifier.PUBLIC, promiseNode, parameters, null, methodBody);
-
markAsGenerated(classNode, newMethodNode);
classNode.addMethod(newMethodNode);
}
diff --git a/grails-datastore-async/src/test/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncSpec.groovy b/grails-datastore-async/src/test/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncSpec.groovy
index e88b657f78..2347da7cf0 100644
--- a/grails-datastore-async/src/test/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncSpec.groovy
+++ b/grails-datastore-async/src/test/groovy/org/grails/datastore/gorm/async/transform/DelegateAsyncSpec.groovy
@@ -18,40 +18,41 @@
*/
package org.grails.datastore.gorm.async.transform
-import grails.async.Promise
+import java.lang.reflect.Method
+
import groovy.transform.Generated
import org.codehaus.groovy.ast.ClassNode
+
import spock.lang.Specification
-import java.lang.reflect.Method
+import grails.async.Promise
/**
* Created by graemerocher on 01/07/16.
*/
class DelegateAsyncSpec extends Specification {
- void "Test DelegateAsync with parameterized return types"() {
- given:"a class with parameterized return types"
- GroovyClassLoader gcl = new GroovyClassLoader()
- def cls = gcl.parseClass('''
-import org.grails.datastore.gorm.async.transform.*
-class Bar<D>{
- @DelegateAsync Foo<D> foo
-}
-interface Foo<D> {
- public <T> T withTransaction(Closure<T> callable)
-}
-
-
-''')
- expect:"The method is retrieved"
+ void 'test DelegateAsync with parameterized return types'() {
+
+ given: 'a class with parameterized return types'
+ def cls = new GroovyClassLoader().parseClass('''
+ import org.grails.datastore.gorm.async.transform.*
+ class Bar<D> {
+ @DelegateAsync Foo<D> foo
+ }
+
+ interface Foo<D> {
+ public <T> T withTransaction(Closure<T> callable)
+ }
+ ''')
+
+ expect: 'the method is retrieved'
new ClassNode(cls).methods
- Method method = cls.getMethod("withTransaction", Closure)
- Promise.isAssignableFrom( method.returnType )
+ def method = cls.getMethod('withTransaction', Closure)
+ Promise.isAssignableFrom(method.returnType)
and: 'marked as Generated'
method.isAnnotationPresent(Generated)
}
-
}
diff --git a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckable.groovy b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckable.groovy
index 5b4fffcbca..e0cbccbbf4 100644
--- a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckable.groovy
+++ b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckable.groovy
@@ -21,6 +21,7 @@ package org.grails.datastore.mapping.dirty.checking
import groovy.transform.CompileStatic
import groovy.transform.Generated
+
import jakarta.persistence.Transient
import org.grails.datastore.mapping.proxy.EntityProxy
diff --git a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/services/Service.groovy b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/services/Service.groovy
index 969299ec89..337718115b 100644
--- a/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/services/Service.groovy
+++ b/grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/services/Service.groovy
@@ -19,6 +19,7 @@
package org.grails.datastore.mapping.services
import groovy.transform.Generated
+
import org.grails.datastore.mapping.core.Datastore
/**
diff --git a/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckableSpec.groovy b/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckableSpec.groovy
index e1cc92e860..656ca41c89 100644
--- a/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckableSpec.groovy
+++ b/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/dirty/checking/DirtyCheckableSpec.groovy
@@ -18,17 +18,19 @@
*/
package org.grails.datastore.mapping.dirty.checking
-import groovy.transform.Sortable
+import java.lang.reflect.Method
+
import groovy.transform.Generated
+import groovy.transform.Sortable
+
import spock.lang.Issue
import spock.lang.Specification
-import java.lang.reflect.Method
-
class DirtyCheckableSpec extends Specification {
@Issue('https://github.com/apache/grails-data-mapping/issues/1231')
def 'setting a field that implements Comparable dirty checks properly'() {
+
given: 'a person'
def person = new Person(name: 'John Doe')
@@ -55,35 +57,37 @@ class DirtyCheckableSpec extends Specification {
}
def 'setting a field that is a boolean dirty checks properly'() {
+
given: 'a class with a boolean property'
def animal = new Animal()
animal.trackChanges()
- when:"A boolean property is changed"
+ when: 'a boolean property is changed'
animal.barks = true
- animal.markDirty("barks", true, false)
+ animal.markDirty('barks', true, false)
- then:"the property changed"
+ then: 'the property changed'
animal.barks
animal.hasChanged()
- animal.hasChanged("barks")
+ animal.hasChanged('barks')
- when:"it is set to false"
+ when: 'it is set to false'
animal.trackChanges() // reset
animal.barks = false
- animal.markDirty("barks", false, true)
+ animal.markDirty('barks', false, true)
- then:"the property changed"
+ then: 'the property changed'
!animal.barks
animal.hasChanged()
- animal.hasChanged("barks")
+ animal.hasChanged('barks')
}
- void "test that all DirtyCheckable trait methods are marked as Generated"() {
- expect: "all DirtyCheckable methods are marked as Generated on implementation class"
- DirtyCheckable.getMethods().each { Method traitMethod ->
- assert Animal.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all DirtyCheckable trait methods are marked as Generated'() {
+
+ expect: 'all DirtyCheckable methods are marked as Generated on implementation class'
+ DirtyCheckable.methods.each { Method traitMethod ->
+ assert Animal.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
diff --git a/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/services/DefaultServiceRegistrySpec.groovy b/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/services/DefaultServiceRegistrySpec.groovy
index 83e9feeb2d..16f6864bc3 100644
--- a/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/services/DefaultServiceRegistrySpec.groovy
+++ b/grails-datastore-core/src/test/groovy/org/grails/datastore/mapping/services/DefaultServiceRegistrySpec.groovy
@@ -18,24 +18,23 @@
*/
package org.grails.datastore.mapping.services
+import java.lang.reflect.Method
+
import groovy.transform.Generated
-import org.grails.datastore.mapping.core.Datastore
-import org.grails.datastore.mapping.dirty.checking.DirtyCheckable
+
import spock.lang.Specification
-import java.lang.reflect.Method
+import org.grails.datastore.mapping.core.Datastore
-/**
- * Created by graemerocher on 11/01/2017.
- */
class DefaultServiceRegistrySpec extends Specification {
- void "test load services into service registry"() {
+ void 'test load services into service registry'() {
given:
- ServiceRegistry reg = new DefaultServiceRegistry(Mock(Datastore))
+ def reg = new DefaultServiceRegistry(Mock(Datastore))
reg.initialize()
- ServiceRegistry reg2 = new DefaultServiceRegistry(Mock(Datastore))
+ def reg2 = new DefaultServiceRegistry(Mock(Datastore))
reg2.initialize()
+
expect:
reg.getService(TestService) != null
reg.getService(TestService).datastore != null
@@ -45,14 +44,15 @@ class DefaultServiceRegistrySpec extends Specification {
reg.getService(TestService).datastore != reg2.getService(TestService).datastore
}
- void "test that all Service trait methods are marked as Generated"() {
- expect: "all Service methods are marked as Generated on implementation class"
- Service.getMethods().each { Method traitMethod ->
- assert TestService.class.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
+ void 'test that all Service trait methods are marked as Generated'() {
+
+ expect: 'all Service methods are marked as Generated on implementation class'
+ Service.methods.each { Method traitMethod ->
+ assert TestService.getMethod(traitMethod.name, traitMethod.parameterTypes).isAnnotationPresent(Generated)
}
}
}
-class TestService implements Service, ITestService {
-}
+class TestService implements Service, ITestService {}
+
interface ITestService {}