diff --git a/build.gradle b/build.gradle index acc4b52a..06917ca6 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ dependencies { compileOnly "org.springframework.boot:spring-boot-starter-actuator" compileOnly "org.springframework.boot:spring-boot-autoconfigure" compileOnly "org.springframework.boot:spring-boot-starter-tomcat" - compileOnly "org.grails:grails-dependencies" + compileOnly "org.grails:grails-plugin-controllers" compileOnly "org.grails.plugins:gsp:${grailsVersion}" testImplementation "org.grails:grails-web-testing-support" diff --git a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy index 0c297e54..c40ab652 100644 --- a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy +++ b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy @@ -16,12 +16,11 @@ package grails.plugin.formfields -import grails.core.GrailsApplication +import grails.util.GrailsStringUtils import groovy.transform.CompileStatic import groovy.util.logging.Slf4j import groovy.xml.MarkupBuilder import groovy.xml.MarkupBuilderHelper -import org.apache.commons.lang.StringUtils import org.grails.buffer.FastStringWriter import org.grails.datastore.mapping.model.MappingContext import org.grails.datastore.mapping.model.PersistentEntity @@ -713,7 +712,7 @@ class FormFieldsTagLib { return g.field(attrs + [type: "file"]) } else if (model.type in [TimeZone, Currency, Locale]) { if (!model.required) attrs.noSelection = ["": ""] - return g."${StringUtils.uncapitalize(model.type.simpleName)}Select"(attrs) + return g."${GrailsStringUtils.uncapitalize(model.type.simpleName)}Select"(attrs) } else { return null } diff --git a/src/main/groovy/grails/plugin/formfields/BeanPropertyAccessorImpl.groovy b/src/main/groovy/grails/plugin/formfields/BeanPropertyAccessorImpl.groovy index 63160989..795d869b 100644 --- a/src/main/groovy/grails/plugin/formfields/BeanPropertyAccessorImpl.groovy +++ b/src/main/groovy/grails/plugin/formfields/BeanPropertyAccessorImpl.groovy @@ -20,15 +20,14 @@ import grails.core.GrailsApplication import grails.core.GrailsDomainClass import grails.gorm.Entity import grails.gorm.validation.ConstrainedProperty +import grails.util.GrailsClassUtils import grails.util.GrailsNameUtils import grails.validation.Validateable import grails.web.databinding.WebDataBinding import groovy.transform.Canonical -import groovy.transform.CompileDynamic import groovy.transform.CompileStatic import groovy.transform.Memoized import groovy.transform.TupleConstructor -import org.apache.commons.lang.ClassUtils import org.grails.datastore.gorm.GormEntity import org.grails.datastore.gorm.GormValidateable import org.grails.datastore.mapping.dirty.checking.DirtyCheckable @@ -125,17 +124,22 @@ class BeanPropertyAccessorImpl implements BeanPropertyAccessor { !errors.isEmpty() } - @CompileDynamic - private static List getSuperclassesAndInterfaces(Class type) { + private static List> getAllSuperclasses(Class clazz) { + List> superclasses = [] + Class current = clazz + while ((current = current.getSuperclass()) != null) { + superclasses.add(current) + } + return superclasses + } + + protected static List getSuperclassesAndInterfaces(Class type) { List superclasses = [] - superclasses.addAll(ClassUtils.getAllSuperclasses(ClassUtils.primitiveToWrapper(type))) - for (Object it in ClassUtils.getAllInterfaces(type)) { - Class interfaceCls = (Class) it + superclasses.addAll(getAllSuperclasses(org.springframework.util.ClassUtils.resolvePrimitiveIfNecessary(type))) + for (Class interfaceCls : GrailsClassUtils.getAllInterfacesForClass(type)) { String name = interfaceCls.name - if (name.indexOf('$') == -1) { - if (interfaceCls.package != GormEntity.package) { - superclasses.add(interfaceCls) - } + if (!name.contains('$') && interfaceCls.package != GormEntity.package) { + superclasses.add(interfaceCls) } } superclasses.removeAll([Object, GroovyObject, Serializable, Cloneable, Comparable, WebDataBinding, DirtyCheckable, Entity]) diff --git a/src/main/groovy/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.groovy b/src/main/groovy/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.groovy index 0ec3c429..821fc181 100644 --- a/src/main/groovy/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.groovy +++ b/src/main/groovy/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.groovy @@ -1,18 +1,12 @@ package grails.plugin.formfields import grails.core.GrailsDomainClass -import grails.gorm.Entity import grails.util.GrailsNameUtils import grails.validation.Validateable -import grails.web.databinding.WebDataBinding import groovy.transform.Canonical -import groovy.transform.CompileDynamic import groovy.transform.CompileStatic import groovy.transform.ToString -import org.apache.commons.lang.ClassUtils -import org.grails.datastore.gorm.GormEntity import org.grails.datastore.gorm.GormValidateable -import org.grails.datastore.mapping.dirty.checking.DirtyCheckable import org.grails.datastore.mapping.model.PersistentEntity import org.grails.datastore.mapping.model.PersistentProperty import org.grails.scaffolding.model.property.Constrained @@ -72,12 +66,12 @@ class DelegatingBeanPropertyAccessorImpl implements BeanPropertyAccessor { @Override List getBeanSuperclasses() { - getSuperclassesAndInterfaces(beanType) + BeanPropertyAccessorImpl.getSuperclassesAndInterfaces(beanType) } @Override List getPropertyTypeSuperclasses() { - getSuperclassesAndInterfaces(propertyType) + BeanPropertyAccessorImpl.getSuperclassesAndInterfaces(propertyType) } @Override @@ -142,21 +136,4 @@ class DelegatingBeanPropertyAccessorImpl implements BeanPropertyAccessor { boolean equals(Object obj) { this.hashCode() == obj?.hashCode() } - - @CompileDynamic - private List getSuperclassesAndInterfaces(Class type) { - List superclasses = [] - superclasses.addAll(ClassUtils.getAllSuperclasses(ClassUtils.primitiveToWrapper(type))) - for (Object it in ClassUtils.getAllInterfaces(type)) { - Class interfaceCls = (Class) it - String name = interfaceCls.name - if (name.indexOf('$') == -1) { - if (interfaceCls.package != GormEntity.package) { - superclasses.add(interfaceCls) - } - } - } - superclasses.removeAll([Object, GroovyObject, Serializable, Cloneable, Comparable, WebDataBinding, DirtyCheckable, Entity]) - return superclasses.unique() - } } diff --git a/src/main/groovy/grails/plugin/formfields/PropertyPathAccessor.groovy b/src/main/groovy/grails/plugin/formfields/PropertyPathAccessor.groovy index 4071e479..9c393150 100644 --- a/src/main/groovy/grails/plugin/formfields/PropertyPathAccessor.groovy +++ b/src/main/groovy/grails/plugin/formfields/PropertyPathAccessor.groovy @@ -15,7 +15,7 @@ import org.springframework.validation.FieldError import static grails.plugin.formfields.BeanPropertyAccessorFactory.stripIndex import static java.util.Collections.EMPTY_LIST -import static org.apache.commons.lang.StringUtils.substringAfterLast +import static grails.util.GrailsStringUtils.substringAfterLast @CompileStatic @Canonical