diff --git a/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle b/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle index 879e6448b993..37095d5508ae 100644 --- a/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle +++ b/tooling/hibernate-gradle-plugin/hibernate-gradle-plugin.gradle @@ -62,6 +62,8 @@ test { if ( project.hasProperty( 'excludeTests' ) ) { exclude project.property( 'excludeTests' ) as String } + jvmArgs("--add-opens", "java.base/java.lang.invoke=ALL-UNNAMED", + "--add-opens", "java.base/java.util=ALL-UNNAMED") } def releasePrepareTask = tasks.register("releasePrepare") { diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Helper.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Helper.java index ea1e8679c65c..818ca6b58bd4 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Helper.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Helper.java @@ -15,10 +15,7 @@ import java.util.Set; import org.gradle.api.GradleException; -import org.gradle.api.Project; -import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.FileCollection; -import org.gradle.api.tasks.SourceSet; import org.hibernate.bytecode.enhance.spi.Enhancer; @@ -27,18 +24,13 @@ */ public class Helper { - public static ClassLoader toClassLoader(SourceSet sourceSet, Project project) { + public static ClassLoader toClassLoader(FileCollection classesDirs, Set dependencyFiles) { final List urls = new ArrayList<>(); - final FileCollection classesDirs = sourceSet.getOutput().getClassesDirs(); for ( File classesDir : classesDirs ) { urls.add( toUrl( classesDir ) ); } - final Configuration compileConfig = project - .getConfigurations() - .getByName( sourceSet.getCompileClasspathConfigurationName() ); - final Set dependencyFiles = compileConfig.getResolvedConfiguration().getFiles(); for ( File dependencyFile : dependencyFiles ) { urls.add( toUrl( dependencyFile ) ); } diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmPlugin.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmPlugin.java index a9503b37f34c..d4ef8c4ef330 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmPlugin.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmPlugin.java @@ -4,6 +4,7 @@ */ package org.hibernate.orm.tooling.gradle; +import java.io.File; import java.lang.reflect.Method; import java.util.Set; @@ -11,7 +12,11 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.file.FileCollection; +import org.gradle.api.logging.Logger; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.tasks.SourceSet; import org.hibernate.orm.tooling.gradle.enhance.EnhancementHelper; @@ -27,8 +32,7 @@ public void apply(Project project) { project.getLogger().debug( "Adding Hibernate extensions to the build [{}]", project.getPath() ); final HibernateOrmSpec ormDsl = project.getExtensions().create( HibernateOrmSpec.DSL_NAME, - HibernateOrmSpec.class, - project + HibernateOrmSpec.class ); prepareEnhancement( ormDsl, project ); @@ -52,7 +56,8 @@ private void prepareEnhancement(HibernateOrmSpec ormDsl, Project project) { return; } - final SourceSet sourceSet = ormDsl.getSourceSet().get(); + Injected injected = project.getObjects().newInstance(Injected.class); + SourceSet sourceSet = resolveSourceSet( ormDsl.getSourceSet().get(), project ); final Set languages = ormDsl.getLanguages().getOrNull(); if ( languages == null ) { return; @@ -65,6 +70,12 @@ private void prepareEnhancement(HibernateOrmSpec ormDsl, Project project) { continue; } + FileCollection classesDirs = sourceSet.getOutput().getClassesDirs(); + Configuration compileConfig = project + .getConfigurations() + .getByName( sourceSet.getCompileClasspathConfigurationName() ); + Set dependencyFiles = compileConfig.getFiles(); + Logger logger = project.getLogger(); //noinspection Convert2Lambda languageCompileTask.doLast(new Action<>() { @Override @@ -72,8 +83,8 @@ public void execute(Task t) { try { final Method getDestinationDirectory = languageCompileTask.getClass().getMethod("getDestinationDirectory"); final DirectoryProperty classesDirectory = (DirectoryProperty) getDestinationDirectory.invoke(languageCompileTask); - final ClassLoader classLoader = Helper.toClassLoader(sourceSet, project); - EnhancementHelper.enhance(classesDirectory, classLoader, ormDsl, project); + final ClassLoader classLoader = Helper.toClassLoader(classesDirs, dependencyFiles); + EnhancementHelper.enhance(classesDirectory, classLoader, ormDsl, logger, injected.getFileOperations()); } catch (Exception e) { throw new RuntimeException(e); @@ -84,6 +95,11 @@ public void execute(Task t) { } ); } + private SourceSet resolveSourceSet(String name, Project project) { + final JavaPluginExtension javaPluginExtension = project.getExtensions().getByType( JavaPluginExtension.class ); + return javaPluginExtension.getSourceSets().getByName( name ); + } + private void prepareHbmTransformation(HibernateOrmSpec ormDsl, Project project) { } diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmSpec.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmSpec.java index 08b7b26423f8..34a58b78caea 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmSpec.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/HibernateOrmSpec.java @@ -5,16 +5,11 @@ package org.hibernate.orm.tooling.gradle; import java.util.Arrays; -import javax.inject.Inject; import org.gradle.api.Action; -import org.gradle.api.Project; -import org.gradle.api.plugins.ExtensionAware; -import org.gradle.api.plugins.ExtensionContainer; -import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; import org.gradle.api.provider.SetProperty; +import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.SourceSet; import org.hibernate.orm.tooling.gradle.enhance.EnhancementSpec; @@ -22,51 +17,23 @@ /** * Main DSL extension for Hibernate ORM. Available as `project.hibernate` */ -public abstract class HibernateOrmSpec implements ExtensionAware { - public static final String HIBERNATE = "hibernate"; +public abstract class HibernateOrmSpec { + public static final String DSL_NAME = "hibernate"; - public static final String DSL_NAME = HIBERNATE; + private boolean enhancementConfigured = false; - private final Project project; - - private EnhancementSpec enhancementDsl; - - private final Property useSameVersion; - private final Property sourceSet; - private final SetProperty languages; - - private final Provider enhancementDslAccess; - - - @Inject - public HibernateOrmSpec(Project project) { - this.project = project; - - useSameVersion = project.getObjects().property( Boolean.class ); - useSameVersion.convention( true ); - - sourceSet = project.getObjects().property( SourceSet.class ); - sourceSet.convention( mainSourceSet( project ) ); - - languages = project.getObjects().setProperty( String.class ); - languages.convention( Arrays.asList( "java", "kotlin" ) ); - - enhancementDslAccess = project.provider( () -> enhancementDsl ); + public HibernateOrmSpec() { + getUseSameVersion().convention( true ); + getSourceSet().convention( SourceSet.MAIN_SOURCE_SET_NAME ); + getLanguages().convention( Arrays.asList( "java", "kotlin" ) ); } - private static SourceSet mainSourceSet(Project project) { - return resolveSourceSet( SourceSet.MAIN_SOURCE_SET_NAME, project ); - } - - private static SourceSet resolveSourceSet(String name, Project project) { - final JavaPluginExtension javaPluginExtension = project.getExtensions().getByType( JavaPluginExtension.class ); - return javaPluginExtension.getSourceSets().getByName( name ); - } - - @Override - public abstract ExtensionContainer getExtensions(); - - + /** + * DSL extension for configuring bytecode enhancement. Also acts as the trigger for + * opting into bytecode enhancement + */ + @Nested + abstract public EnhancementSpec getEnhancement(); /** * Should the plugin inject a dependency on the same version of `hibernate-core` @@ -77,137 +44,29 @@ private static SourceSet resolveSourceSet(String name, Project project) { * that Hibernate generally only supports using classes enhanced using matching * versions between tooling and runtime. In other words, be careful. */ - public Property getUseSameVersion() { - return useSameVersion; - } + abstract public Property getUseSameVersion(); /** - * The source-set containing the domain model. Defaults to the `main` source-set + * The source-set name containing the domain model. Defaults to the `main` source-set */ - public Property getSourceSet() { - return sourceSet; - } + abstract public Property getSourceSet(); /** * The languages used in the project */ - public SetProperty getLanguages() { - return languages; - } - - - /** - * DSL extension for configuring bytecode enhancement. Also acts as the trigger for - * opting into bytecode enhancement - */ - public EnhancementSpec getEnhancement() { - if ( enhancementDsl == null ) { - enhancementDsl = getExtensions().create( EnhancementSpec.DSL_NAME, EnhancementSpec.class, this, project ); - } - - return enhancementDsl; - } + abstract public SetProperty getLanguages(); /** * @see #getEnhancement() */ + @SuppressWarnings("unused") public void enhancement(Action action) { + enhancementConfigured = true; action.execute( getEnhancement() ); } public boolean isEnhancementEnabled() { - return enhancementDsl != null; - } - - - /** - * @see #getUseSameVersion() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setUseSameVersion(boolean value) { - useSameVersion.set( value ); - } - - /** - * @see #getUseSameVersion() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void useSameVersion() { - useSameVersion.set( true ); - } - - /** - * @see #getSourceSet() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setSourceSet(String name) { - setSourceSet( resolveSourceSet( name, project ) ); - } - - /** - * @see #getSourceSet() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setSourceSet(SourceSet sourceSet) { - this.sourceSet.set( sourceSet ); - } - - /** - * @see #getSourceSet() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void sourceSet(String name) { - setSourceSet( resolveSourceSet( name, project ) ); - } - - /** - * @see #getSourceSet() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void sourceSet(SourceSet sourceSet) { - setSourceSet( sourceSet ); - } - - /** - * @see #getLanguages() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setLanguages(Iterable languages) { - this.languages.set( languages ); - } - - /** - * @see #getLanguages() - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated - public void languages(String language) { - this.languages.add( language ); - } - - /** - * Provider access to {@link #getEnhancement()} - * - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated - public Provider getEnhancementDslAccess() { - return enhancementDslAccess; + return enhancementConfigured; } } diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Injected.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Injected.java new file mode 100644 index 000000000000..623178fee7fe --- /dev/null +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/Injected.java @@ -0,0 +1,14 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.tooling.gradle; + +import org.gradle.api.internal.file.FileOperations; + +import javax.inject.Inject; + +public interface Injected { + @Inject + FileOperations getFileOperations(); +} diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementHelper.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementHelper.java index 2e484024a8f5..ac3f69e2efe3 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementHelper.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementHelper.java @@ -11,9 +11,9 @@ import java.util.List; import org.gradle.api.GradleException; -import org.gradle.api.Project; import org.gradle.api.file.Directory; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.internal.file.FileOperations; import org.gradle.api.logging.Logger; import org.hibernate.bytecode.enhance.spi.DefaultEnhancementContext; @@ -34,7 +34,7 @@ public static void enhance( DirectoryProperty classesDirectoryProperty, ClassLoader classLoader, HibernateOrmSpec ormDsl, - Project project) { + Logger logger, FileOperations fileOperations) { final Directory classesDirectory = classesDirectoryProperty.get(); final File classesDir = classesDirectory.getAsFile(); @@ -43,41 +43,41 @@ public static void enhance( List classesToEnhance = enhancementDsl.getClassNames().get(); if ( !enhancementDsl.getEnableLazyInitialization().get() ) { - project.getLogger().warn( "The 'enableLazyInitialization' configuration is deprecated and will be removed. Set the value to 'true' to get rid of this warning" ); + logger.warn( "The 'enableLazyInitialization' configuration is deprecated and will be removed. Set the value to 'true' to get rid of this warning" ); } if ( !enhancementDsl.getEnableDirtyTracking().get() ) { - project.getLogger().warn( "The 'enableDirtyTracking' configuration is deprecated and will be removed. Set the value to 'true' to get rid of this warning" ); + logger.warn( "The 'enableDirtyTracking' configuration is deprecated and will be removed. Set the value to 'true' to get rid of this warning" ); } final Enhancer enhancer = generateEnhancer( classLoader, ormDsl ); - discoverTypes( classesDir, classesDir, enhancer, project ); - doEnhancement( classesDir, classesDir, enhancer, project, classesToEnhance ); + discoverTypes( classesDir, classesDir, enhancer, logger, fileOperations ); + doEnhancement( classesDir, classesDir, enhancer, logger, fileOperations, classesToEnhance ); } - private static void discoverTypes(File classesDir, File dir, Enhancer enhancer, Project project) { + private static void discoverTypes(File classesDir, File dir, Enhancer enhancer, Logger logger, FileOperations fileOperations) { for ( File subLocation : dir.listFiles() ) { if ( subLocation.isDirectory() ) { - discoverTypes( classesDir, subLocation, enhancer, project ); + discoverTypes( classesDir, subLocation, enhancer, logger, fileOperations ); } else if ( subLocation.isFile() && subLocation.getName().endsWith( ".class" ) ) { final String className = determineClassName( classesDir, subLocation ); final long lastModified = subLocation.lastModified(); - discoverTypes( subLocation, className, enhancer, project ); + discoverTypes( subLocation, className, enhancer, logger ); final boolean timestampReset = subLocation.setLastModified( lastModified ); if ( !timestampReset ) { - project.getLogger().debug( "`{}`.setLastModified failed", project.relativePath( subLocation ) ); + logger.debug( "`{}`.setLastModified failed", fileOperations.relativePath( subLocation ) ); } } } } - private static void doEnhancement(File classesDir, File dir, Enhancer enhancer, Project project, List classesToEnhance) { + private static void doEnhancement(File classesDir, File dir, Enhancer enhancer, Logger logger, FileOperations fileOperations, List classesToEnhance) { for ( File subLocation : dir.listFiles() ) { if ( subLocation.isDirectory() ) { - doEnhancement( classesDir, subLocation, enhancer, project, classesToEnhance ); + doEnhancement( classesDir, subLocation, enhancer, logger, fileOperations, classesToEnhance ); } else if ( subLocation.isFile() && subLocation.getName().endsWith( ".class" ) ) { final String className = determineClassName( classesDir, subLocation ); @@ -87,11 +87,11 @@ else if ( subLocation.isFile() && subLocation.getName().endsWith( ".class" ) ) { continue; } - enhance( subLocation, className, enhancer, project ); + enhance( subLocation, className, enhancer, logger ); final boolean timestampReset = subLocation.setLastModified( lastModified ); if ( !timestampReset ) { - project.getLogger().debug( "`{}`.setLastModified failed", project.relativePath( subLocation ) ); + logger.debug( "`{}`.setLastModified failed", fileOperations.relativePath( subLocation ) ); } } @@ -102,10 +102,10 @@ private static void discoverTypes( File javaClassFile, String className, Enhancer enhancer, - Project project) { + Logger logger) { try { enhancer.discoverTypes( className, Files.readAllBytes( javaClassFile.toPath() ) ); - project.getLogger().info( "Successfully discovered types for class : " + className ); + logger.info( "Successfully discovered types for class : " + className ); } catch (Exception e) { throw new GradleException( "Unable to discover types for class : " + className, e ); @@ -116,14 +116,14 @@ private static void enhance( File javaClassFile, String className, Enhancer enhancer, - Project project) { + Logger logger) { final byte[] enhancedBytecode = doEnhancement( javaClassFile, className, enhancer ); if ( enhancedBytecode != null ) { - writeOutEnhancedClass( enhancedBytecode, javaClassFile, project.getLogger() ); - project.getLogger().info( "Successfully enhanced class : " + className ); + writeOutEnhancedClass( enhancedBytecode, javaClassFile, logger ); + logger.info( "Successfully enhanced class : " + className ); } else { - project.getLogger().info( "Skipping class : " + className ); + logger.info( "Skipping class : " + className ); } } diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementSpec.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementSpec.java index 95031866483d..e93510d204e1 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementSpec.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/enhance/EnhancementSpec.java @@ -4,219 +4,46 @@ */ package org.hibernate.orm.tooling.gradle.enhance; -import javax.inject.Inject; - -import org.gradle.api.Project; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; -import org.gradle.api.provider.Provider; -import org.gradle.api.tasks.SourceSetContainer; - -import org.hibernate.orm.tooling.gradle.HibernateOrmSpec; import java.util.ArrayList; -import java.util.List; /** * DSL extension for configuring bytecode enhancement - available as `project.hibernateOrm.enhancement` */ -@SuppressWarnings( { "unused", "RedundantSuppression" } ) -public class EnhancementSpec { - public static final String ENHANCE = "enhance"; - public static final String ENHANCEMENT = "enhancement"; - - public static final String DSL_NAME = ENHANCEMENT; - - private final Property enableLazyInitialization; - private final Property enableDirtyTracking; - private final Property enableAssociationManagement; - private final Property enableExtendedEnhancement; - private final ListProperty classNames; - - - @Inject - public EnhancementSpec(HibernateOrmSpec ormDsl, Project project) { - final SourceSetContainer sourceSets = project.getExtensions().getByType( SourceSetContainer.class ); - - enableLazyInitialization = makeProperty( project ).convention( true ); - enableDirtyTracking = makeProperty( project ).convention( true ); - enableAssociationManagement = makeProperty( project ).convention( false ); - enableExtendedEnhancement = makeProperty( project ).convention( false ); - classNames = project.getObjects().listProperty(String.class).convention(new ArrayList<>()); - } - - @SuppressWarnings( "UnstableApiUsage" ) - public static Property makeProperty(Project project) { - return project.getObjects().property( Boolean.class ); - } +abstract public class EnhancementSpec { - /** - * Whether any property values indicate work to be done. - */ - public boolean hasAnythingToDo() { - return enableLazyInitialization.get() - || enableDirtyTracking.get() - || enableAssociationManagement.get() - || enableExtendedEnhancement.get(); + public EnhancementSpec() { + getEnableLazyInitialization().convention( true ); + getEnableDirtyTracking().convention( true ); + getEnableAssociationManagement().convention( false ); + getEnableExtendedEnhancement().convention( false ); + getClassNames().convention(new ArrayList<>()); } /** * Whether lazy-initialization handling should be incorporated into the enhanced bytecode */ - public Property getEnableLazyInitialization() { - return enableLazyInitialization; - } + abstract public Property getEnableLazyInitialization(); /** * Whether dirty-tracking should be incorporated into the enhanced bytecode */ - public Property getEnableDirtyTracking() { - return enableDirtyTracking; - } + abstract public Property getEnableDirtyTracking(); /** * Whether bidirectional association-management handling should be incorporated into the enhanced bytecode */ - public Property getEnableAssociationManagement() { - return enableAssociationManagement; - } + abstract public Property getEnableAssociationManagement(); /** * Whether extended enhancement should be performed. */ - public Property getEnableExtendedEnhancement() { - return enableExtendedEnhancement; - } + abstract public Property getEnableExtendedEnhancement(); /** * Returns the classes on which enhancement needs to be done */ - public ListProperty getClassNames() { - return classNames; - } - - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setEnableLazyInitialization(boolean enable) { - enableLazyInitialization.set( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void enableLazyInitialization(boolean enable) { - setEnableLazyInitialization( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void lazyInitialization(boolean enable) { - setEnableLazyInitialization( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setLazyInitialization(boolean enable) { - setEnableLazyInitialization( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setEnableDirtyTracking(boolean enable) { - enableDirtyTracking.set( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void enableDirtyTracking(boolean enable) { - setEnableDirtyTracking( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void dirtyTracking(boolean enable) { - setEnableDirtyTracking( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setDirtyTracking(boolean enable) { - setEnableDirtyTracking( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setEnableAssociationManagement(boolean enable) { - enableAssociationManagement.set( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void enableAssociationManagement(boolean enable) { - setEnableAssociationManagement( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void associationManagement(boolean enable) { - setEnableAssociationManagement( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void setEnableExtendedEnhancement(boolean enable) { - enableExtendedEnhancement.set( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void enableExtendedEnhancement(boolean enable) { - setEnableExtendedEnhancement( enable ); - } - - /** - * @deprecated See the Gradle property naming guidelines - */ - @Deprecated(forRemoval = true) - public void extendedEnhancement(boolean enable) { - setEnableExtendedEnhancement( enable ); - } - - public void setClassNames(List classNames) { - this.classNames.set(classNames); - } - - public void setClassNames(Provider> classNames) { - this.classNames.set(classNames); - } - - public void includeClassName(String className) { - this.classNames.add(className); - } + abstract public ListProperty getClassNames(); } diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformHbmXmlTask.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformHbmXmlTask.java index 9a2251ad9d8b..bd8e9c51aa15 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformHbmXmlTask.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformHbmXmlTask.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.List; +import org.gradle.api.Action; import org.gradle.api.file.DirectoryProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.CacheableTask; @@ -61,62 +62,37 @@ */ @CacheableTask public abstract class TransformHbmXmlTask extends SourceTask { - private final TransformationNaming renaming; - private final Property targetDatabaseName; - private final Property unsupportedFeatures; - private final Property deleteHbmFiles; - - private final DirectoryProperty outputDirectory; public TransformHbmXmlTask() { - this.outputDirectory = getProject().getObjects().directoryProperty(); - - this.renaming = new TransformationNaming( getProject().getObjects() ); - - this.targetDatabaseName = getProject().getObjects().property( String.class ); - this.targetDatabaseName.convention( "H2" ); - - this.unsupportedFeatures = getProject().getObjects().property( UnsupportedFeatureHandling.class ); - this.unsupportedFeatures.convention( UnsupportedFeatureHandling.ERROR ); - - this.deleteHbmFiles = getProject().getObjects().property( Boolean.class ); - this.deleteHbmFiles.convention( false ); + getTargetDatabaseName().convention( "H2" ); + getUnsupportedFeatures().convention( UnsupportedFeatureHandling.ERROR ); + getDeleteHbmFiles().convention( false ); } /** * Ability to create copies of the original with specific naming. */ - @SuppressWarnings("unused") @Nested - public TransformationNaming getRenaming() { - return renaming; - } + abstract public TransformationNaming getRenaming(); /** * @see Database */ - @SuppressWarnings("unused") @Input - public Property getTargetDatabaseName() { - return targetDatabaseName; - } + abstract public Property getTargetDatabaseName(); /** * How should features supported in `hbm.xml` files, which are not supported for transformation, be handled? */ @Input - public Property getUnsupportedFeatures() { - return unsupportedFeatures; - } + abstract public Property getUnsupportedFeatures(); /** * Should the {@code hbm.xml} files be deleted on successful transformation? * Default is false. */ @Input - public Property getDeleteHbmFiles() { - return deleteHbmFiles; - } + abstract public Property getDeleteHbmFiles(); /** * If set, transformed xml is written, relatively, to this directory. @@ -127,15 +103,19 @@ public Property getDeleteHbmFiles() { * on {@link #getRenaming() naming} config) */ @OutputDirectory - public DirectoryProperty getOutputDirectory() { - return outputDirectory; + abstract public DirectoryProperty getOutputDirectory(); + + @SuppressWarnings("unused") + public void renaming(Action action) { + action.execute( getRenaming() ); } + @TaskAction public void transformFiles() { final MappingBinder mappingBinder = new MappingBinder( MappingBinder.class.getClassLoader()::getResourceAsStream, - unsupportedFeatures.getOrElse( UnsupportedFeatureHandling.ERROR ) + getUnsupportedFeatures().get() ); final List> hbmBindings = new ArrayList<>(); @@ -147,7 +127,7 @@ public void transformFiles() { try ( StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .clearSettings() - .applySetting( JdbcSettings.JAKARTA_HBM2DDL_DB_NAME, targetDatabaseName.get() ) + .applySetting( JdbcSettings.JAKARTA_HBM2DDL_DB_NAME, getTargetDatabaseName().get() ) .applySetting( JdbcSettings.ALLOW_METADATA_ON_BOOT, false ) .build() ) { performTransformation( hbmBindings, mappingBinder, serviceRegistry ); @@ -163,7 +143,7 @@ private void performTransformation( final List> transformedBindings = HbmXmlTransformer.transform( hbmBindings, (MetadataImplementor) metadataSources.buildMetadata(), - unsupportedFeatures.get() + getUnsupportedFeatures().get() ); for ( int i = 0; i < hbmBindings.size(); i++ ) { @@ -173,7 +153,7 @@ private void performTransformation( final OriginImpl origin = (OriginImpl) hbmBinding.getOrigin(); final File hbmXmlFile = origin.getHbmXmlFile(); - if ( deleteHbmFiles.getOrElse( false ) ) { + if ( getDeleteHbmFiles().get() ) { final boolean deleted = hbmXmlFile.delete(); if ( !deleted ) { getProject().getLogger().warn( "Unable to delete hbm.xml file `{}`", hbmXmlFile.getAbsoluteFile() ); @@ -218,8 +198,8 @@ private Binding bindMapping(MappingBinder mappingBinder } private File determineCopyFile(String copyName, File hbmXmlFile) { - if ( outputDirectory.isPresent() ) { - return outputDirectory.get().file( copyName ).getAsFile(); + if ( getOutputDirectory().isPresent() ) { + return getOutputDirectory().get().file( copyName ).getAsFile(); } else { return new File( hbmXmlFile.getParentFile(), copyName ); @@ -228,7 +208,7 @@ private File determineCopyFile(String copyName, File hbmXmlFile) { private String determineCopyName(File hbmXmlFile) { final String hbmXmlFileName = hbmXmlFile.getName(); - if ( renaming.areNoneDefined() ) { + if ( getRenaming().areNoneDefined() ) { return hbmXmlFileName; } @@ -253,17 +233,17 @@ private String determineCopyName(File hbmXmlFile) { String copyName = copyBaseName; - final String prefix = renaming.getPrefix().getOrNull(); + final String prefix = getRenaming().getPrefix().getOrNull(); if ( prefix != null ) { - copyName = renaming.getPrefix().get() + copyName; + copyName = getRenaming().getPrefix().get() + copyName; } - final String suffix = renaming.getSuffix().getOrNull(); + final String suffix = getRenaming().getSuffix().getOrNull(); if ( suffix != null ) { copyName += suffix; } - final String extension = renaming.getExtension().getOrNull(); + final String extension = getRenaming().getExtension().getOrNull(); if ( extension != null ) { copyName += "."; copyName += extension; diff --git a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformationNaming.java b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformationNaming.java index 51e3a789dea8..2dba3956824c 100644 --- a/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformationNaming.java +++ b/tooling/hibernate-gradle-plugin/src/main/java/org/hibernate/orm/tooling/gradle/misc/TransformationNaming.java @@ -4,10 +4,6 @@ */ package org.hibernate.orm.tooling.gradle.misc; -import java.io.Serializable; -import javax.inject.Inject; - -import org.gradle.api.model.ObjectFactory; import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; @@ -20,16 +16,9 @@ * specified, this would mean replacing the original rather than making a * copy (effectively, {@link TransformHbmXmlTask#getDeleteHbmFiles `deleteHbmFiles=true`}) */ -public class TransformationNaming implements Serializable { - private final Property prefix; - private final Property suffix; - private final Property extension; +abstract public class TransformationNaming { - @Inject - public TransformationNaming(ObjectFactory objectFactory) { - prefix = objectFactory.property( String.class ); - suffix = objectFactory.property( String.class ); - extension = objectFactory.property( String.class ); + public TransformationNaming() { } /** @@ -43,9 +32,7 @@ public TransformationNaming(ObjectFactory objectFactory) { */ @Input @Optional - public Property getPrefix() { - return prefix; - } + abstract public Property getPrefix(); /** * A suffix to apply to the file name. @@ -58,21 +45,13 @@ public Property getPrefix() { */ @Input @Optional - public Property getSuffix() { - return suffix; - } + abstract public Property getSuffix(); @Input @Optional - public Property getExtension() { - return extension; - } - - public boolean areAnyDefined() { - return prefix.isPresent() || suffix.isPresent() || extension.isPresent(); - } + abstract public Property getExtension(); public boolean areNoneDefined() { - return !prefix.isPresent() && !suffix.isPresent() && !extension.isPresent(); + return !getPrefix().isPresent() && !getSuffix().isPresent() && !getExtension().isPresent(); } } diff --git a/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/HbmTransformerTests.java b/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/HbmTransformerTests.java index 3709d3a5a252..60c3704de013 100644 --- a/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/HbmTransformerTests.java +++ b/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/HbmTransformerTests.java @@ -37,7 +37,7 @@ void testSimpleTransformation(@TempDir Path projectDir) throws IOException { .withProjectDir( projectDir.toFile() ) .withPluginClasspath() .withDebug( true ) - .withArguments( "clean", "hbmTransform", "--stacktrace", "--no-build-cache" ) + .withArguments( "clean", "hbmTransform", "--stacktrace", "--no-build-cache", "--configuration-cache" ) .forwardOutput(); final BuildResult result = gradleRunner.build(); diff --git a/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/TestsBase.java b/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/TestsBase.java index 16d67737e8c0..ac7e0c187127 100644 --- a/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/TestsBase.java +++ b/tooling/hibernate-gradle-plugin/src/test/java/org/hibernate/orm/tooling/gradle/TestsBase.java @@ -39,7 +39,7 @@ public void testEnhancement(Path projectDir) throws Exception { .withProjectDir( projectDir.toFile() ) .withPluginClasspath() .withDebug( true ) - .withArguments( "clean", compileTaskName, "--stacktrace", "--no-build-cache" ) + .withArguments( compileTaskName, "--stacktrace", "--no-build-cache", "--configuration-cache" ) .forwardOutput(); final BuildResult result = gradleRunner.build(); @@ -69,7 +69,7 @@ public void testEnhancementUpToDate(Path projectDir) throws Exception { .withProjectDir( projectDir.toFile() ) .withPluginClasspath() .withDebug( true ) - .withArguments( "clean", compileTaskName, "--stacktrace", "--no-build-cache" ) + .withArguments( compileTaskName, "--stacktrace", "--no-build-cache", "--configuration-cache" ) .forwardOutput(); final BuildResult result = gradleRunner.build(); @@ -88,7 +88,7 @@ public void testEnhancementUpToDate(Path projectDir) throws Exception { .withProjectDir( projectDir.toFile() ) .withPluginClasspath() .withDebug( true ) - .withArguments( compileTaskName, "--stacktrace", "--no-build-cache" ) + .withArguments( compileTaskName, "--stacktrace", "--no-build-cache", "--configuration-cache" ) .forwardOutput(); final BuildResult result = gradleRunner.build(); final BuildTask task = result.task( ":" + compileTaskName ); diff --git a/tooling/hibernate-gradle-plugin/src/test/resources/projects/hbm/build.gradle b/tooling/hibernate-gradle-plugin/src/test/resources/projects/hbm/build.gradle index 7a1b072fd6a8..d74360bc88aa 100644 --- a/tooling/hibernate-gradle-plugin/src/test/resources/projects/hbm/build.gradle +++ b/tooling/hibernate-gradle-plugin/src/test/resources/projects/hbm/build.gradle @@ -13,8 +13,8 @@ repositories { mavenCentral() maven { - name 'jboss-snapshots-repository' - url 'https://repository.jboss.org/nexus/content/repositories/snapshots' + name = 'ossrh-snapshots-repository' + url = 'https://oss.sonatype.org/content/repositories/snapshots' } } diff --git a/tooling/hibernate-gradle-plugin/src/test/resources/projects/multi-part-source-set-name/build.gradle b/tooling/hibernate-gradle-plugin/src/test/resources/projects/multi-part-source-set-name/build.gradle index 4eb7ceb471e7..1aea211140bc 100644 --- a/tooling/hibernate-gradle-plugin/src/test/resources/projects/multi-part-source-set-name/build.gradle +++ b/tooling/hibernate-gradle-plugin/src/test/resources/projects/multi-part-source-set-name/build.gradle @@ -12,8 +12,8 @@ repositories { mavenCentral() maven { - name 'jboss-snapshots-repository' - url 'https://repository.jboss.org/nexus/content/repositories/snapshots' + name = 'ossrh-snapshots-repository' + url = 'https://oss.sonatype.org/content/repositories/snapshots' } } @@ -36,9 +36,9 @@ hibernate { sourceSet = 'mySpecialSourceSet' enhancement { enableLazyInitialization.set(true) - lazyInitialization = true + enableLazyInitialization = true enableDirtyTracking.set(true) - dirtyTracking = true + enableDirtyTracking = true } } diff --git a/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-kotlin/build.gradle b/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-kotlin/build.gradle index 1334ed85e15c..43827c54a908 100644 --- a/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-kotlin/build.gradle +++ b/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-kotlin/build.gradle @@ -4,7 +4,8 @@ */ plugins { - id 'org.jetbrains.kotlin.jvm' version '1.6.21' + //NOTE : kotlin version updated for configuration cache support + id 'org.jetbrains.kotlin.jvm' version '1.8.20' id 'org.hibernate.orm' } @@ -12,8 +13,8 @@ repositories { mavenCentral() maven { - name 'jboss-snapshots-repository' - url 'https://repository.jboss.org/nexus/content/repositories/snapshots' + name = 'ossrh-snapshots-repository' + url = 'https://oss.sonatype.org/content/repositories/snapshots' } } @@ -27,9 +28,9 @@ hibernate { useSameVersion = false enhancement { enableLazyInitialization.set(true) - lazyInitialization = true + enableLazyInitialization = true enableDirtyTracking.set(true) - dirtyTracking = true + enableDirtyTracking = true } } diff --git a/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-moduleinfo/build.gradle b/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-moduleinfo/build.gradle index d539fc6350a2..1e96207e91dc 100644 --- a/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-moduleinfo/build.gradle +++ b/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple-moduleinfo/build.gradle @@ -12,8 +12,8 @@ repositories { mavenCentral() maven { - name 'jboss-snapshots-repository' - url 'https://repository.jboss.org/nexus/content/repositories/snapshots' + name = 'ossrh-snapshots-repository' + url = 'https://oss.sonatype.org/content/repositories/snapshots' } } @@ -28,10 +28,10 @@ hibernate { useSameVersion = false enhancement { enableLazyInitialization.set(true) - lazyInitialization = true + enableLazyInitialization = true enableDirtyTracking.set(true) - dirtyTracking = true + enableDirtyTracking = true enableExtendedEnhancement.set(true) } diff --git a/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple/build.gradle b/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple/build.gradle index 93db7c4ccbe5..16a2ea2c5c88 100644 --- a/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple/build.gradle +++ b/tooling/hibernate-gradle-plugin/src/test/resources/projects/simple/build.gradle @@ -12,8 +12,8 @@ repositories { mavenCentral() maven { - name 'jboss-snapshots-repository' - url 'https://repository.jboss.org/nexus/content/repositories/snapshots' + name = 'ossrh-snapshots-repository' + url = 'https://oss.sonatype.org/content/repositories/snapshots' } } @@ -27,9 +27,9 @@ hibernate { useSameVersion = false enhancement { enableLazyInitialization.set(true) - lazyInitialization = true + enableLazyInitialization = true enableDirtyTracking.set(true) - dirtyTracking = true + enableDirtyTracking = true } }