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:28 UTC
(grails-core) branch cleanup-post-15150 created (now 79ab9c07b1)
This is an automated email from the ASF dual-hosted git repository.
matrei pushed a change to branch cleanup-post-15150
in repository https://gitbox.apache.org/repos/asf/grails-core.git
at 79ab9c07b1 chore: formatting and cleanup
This branch includes the following new commits:
new 79ab9c07b1 chore: formatting and cleanup
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(grails-core) 01/01: chore: formatting and cleanup
Posted by ma...@apache.org.
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 {}