diff --git a/grails-encoder/src/main/groovy/org/grails/encoder/CodecMetaClassSupport.groovy b/grails-encoder/src/main/groovy/org/grails/encoder/CodecMetaClassSupport.groovy index a5c79e02eee..d5e70a8ba71 100644 --- a/grails-encoder/src/main/groovy/org/grails/encoder/CodecMetaClassSupport.groovy +++ b/grails-encoder/src/main/groovy/org/grails/encoder/CodecMetaClassSupport.groovy @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap import com.github.benmanes.caffeine.cache.Cache import com.github.benmanes.caffeine.cache.Caffeine +import groovy.transform.CompileDynamic import groovy.transform.CompileStatic import groovy.transform.EqualsAndHashCode import org.codehaus.groovy.runtime.GStringImpl @@ -39,6 +40,7 @@ import grails.util.GrailsMetaClassUtils * @author Lari Hotari * @since 2.3 */ +@CompileStatic class CodecMetaClassSupport { static final Object[] EMPTY_ARGS = [] @@ -53,7 +55,6 @@ class CodecMetaClassSupport { * * @param codecClass the codec class */ - @CompileStatic void configureCodecMethods(CodecFactory codecFactory, boolean cacheLookup = !Environment.getCurrent().isDevelopmentMode(), List targetMetaClasses = resolveDefaultMetaClasses()) { Closure encodeMethodNameClosure = { String codecName -> "${ENCODE_AS_PREFIX}${codecName}".toString() } Closure decodeMethodNameClosure = { String codecName -> "${DECODE_PREFIX}${codecName}".toString() } @@ -133,12 +134,10 @@ class CodecMetaClassSupport { * @param delegate * @return */ - @CompileStatic private static Object filterNullObject(Object delegate) { delegate != null && delegate.getClass() != NullObject ? delegate : null } - @CompileStatic private addAliasMetaMethods(List targetMetaClasses, Set aliases, Closure methodNameClosure, Closure methodClosure, boolean cacheLookup, Set registeredMetaMethodKeys) { aliases?.each { String aliasName -> @@ -162,6 +161,9 @@ class CodecMetaClassSupport { } } + // The metamethod name is only known at run time, and a GString property name is the one + // thing static compilation cannot express. + @CompileDynamic protected void addMetaMethod(List targetMetaClasses, String methodName, Closure closure) { targetMetaClasses.each { ExpandoMetaClass emc -> emc."${methodName}" << closure @@ -185,18 +187,15 @@ class CodecMetaClassSupport { } } - @CompileStatic private static boolean shouldRegisterMetaMethod(ExpandoMetaClass emc, String methodName, Set registeredMetaMethodKeys) { MetaMethodRegistrationKey key = registrationKey(emc, methodName) registeredMetaMethodKeys.add(key) || emc.getMetaMethod(methodName, EMPTY_ARGS) == null } - @CompileStatic private static MetaMethodRegistrationKey registrationKey(ExpandoMetaClass emc, String methodName) { new MetaMethodRegistrationKey(emc.getTheClass(), methodName) } - @CompileStatic private static Set registeredMetaMethodKeys(CodecFactory codecFactory) { REGISTERED_META_METHODS.get(codecFactory) { CodecFactory ignored -> Collections.newSetFromMap(new ConcurrentHashMap()) diff --git a/grails-forge/gradle.properties b/grails-forge/gradle.properties index 936cc5e2ad4..f9666505fbd 100644 --- a/grails-forge/gradle.properties +++ b/grails-forge/gradle.properties @@ -46,7 +46,7 @@ postgresSocketFactoryVersion=1.17.1 picocliVersion=4.7.6 reflectionsVersion=0.10.2 rockerVersion=2.2.1 -shadowVersion=8.3.6 +shadowVersion=8.3.11 spotlessVersion=6.25.0 testcontainersVersion=1.20.4 testRetryVersion=1.6.2