2020import org .gradle .api .file .RegularFile ;
2121import org .gradle .api .provider .Property ;
2222import org .gradle .api .provider .Provider ;
23+ import org .gradle .api .tasks .Input ;
2324import org .gradle .api .tasks .OutputFile ;
2425import org .gradle .api .tasks .SourceSet ;
2526import org .gradle .api .tasks .SourceSetContainer ;
3435 * @author Steve Ebersole
3536 */
3637public abstract class DialectReportTask extends AbstractJandexAwareTask {
38+ private final Property <String > sourceProject ;
39+ private final Property <String > sourcePackage ;
3740private final Property <RegularFile > reportFile ;
3841
3942public DialectReportTask () {
40- setDescription ( "Generates a report of the supported Dialects" );
43+ setDescription ( "Generates a report of Dialects" );
44+ sourceProject = getProject ().getObjects ().property (String .class );
45+ sourcePackage = getProject ().getObjects ().property (String .class );
4146reportFile = getProject ().getObjects ().fileProperty ();
4247}
4348
49+ @ Input
50+ public Property <String > getSourceProject () {
51+ return sourceProject ;
52+ }
53+
54+ @ Input
55+ public Property <String > getSourcePackage () {
56+ return sourcePackage ;
57+ }
58+
4459@ OutputFile
4560public Property <RegularFile > getReportFile () {
4661return reportFile ;
@@ -53,16 +68,19 @@ protected Provider<RegularFile> getTaskReportFileReference() {
5368
5469@ TaskAction
5570public void generateDialectReport () {
56- // the ones we want are all in the hibernate-core project
57- final Project coreProject = getProject ().getRootProject ().project ( "hibernate-core" );
58- final SourceSetContainer sourceSets = coreProject .getExtensions ().getByType ( SourceSetContainer .class );
71+ // TODO this probably messes up the cache since we don't declare an explicit dependency to a source set
72+ // but the problem is pre-existing and I don't have time to investigate.
73+ Project sourceProject = getProject ().getRootProject ().project ( this .sourceProject .get () );
74+ final SourceSetContainer sourceSets = sourceProject .getExtensions ().getByType ( SourceSetContainer .class );
5975final SourceSet sourceSet = sourceSets .getByName ( SourceSet .MAIN_SOURCE_SET_NAME );
60- final ClassLoader classLoader = Helper .asClassLoader ( sourceSet , coreProject .getConfigurations ().getByName ( "testRuntimeClasspath" ) );
76+ final ClassLoader classLoader = Helper .asClassLoader ( sourceSet , sourceProject .getConfigurations ().getByName ( "testRuntimeClasspath" ) );
6177
6278final DialectClassDelegate dialectClassDelegate = new DialectClassDelegate ( classLoader );
6379
6480final Index index = getIndexManager ().getIndex ();
6581final Collection <ClassInfo > allDialectClasses = index .getAllKnownSubclasses ( DialectClassDelegate .DIALECT_CLASS_NAME );
82+ String sourcePackagePrefix = this .sourcePackage .get () + "." ;
83+ allDialectClasses .removeIf ( c -> !c .name ().toString ().startsWith ( sourcePackagePrefix ) );
6684if ( allDialectClasses .isEmpty () ) {
6785throw new RuntimeException ( "Unable to find Dialects" );
6886}
0 commit comments