4646import org .openrewrite .gradle .GradleProjectParser ;
4747import org .openrewrite .gradle .RewriteExtension ;
4848import org .openrewrite .gradle .SanitizedMarkerPrinter ;
49- import org .openrewrite .gradle .marker .GradleProject ;
50- import org .openrewrite .gradle .marker .GradleProjectBuilder ;
51- import org .openrewrite .gradle .marker .GradleSettings ;
52- import org .openrewrite .gradle .marker .GradleSettingsBuilder ;
49+ import org .openrewrite .gradle .marker .*;
5350import org .openrewrite .groovy .GroovyParser ;
5451import org .openrewrite .internal .InMemoryLargeSourceSet ;
5552import org .openrewrite .internal .ListUtils ;
6562import org .openrewrite .kotlin .tree .K ;
6663import org .openrewrite .marker .*;
6764import org .openrewrite .marker .ci .BuildEnvironment ;
65+ import org .openrewrite .maven .tree .MavenRepository ;
6866import org .openrewrite .polyglot .*;
6967import org .openrewrite .properties .PropertiesParser ;
7068import org .openrewrite .quark .Quark ;
@@ -1379,6 +1377,8 @@ protected ResultsContainer listResults(ExecutionContext ctx) {
13791377 }
13801378 }
13811379
1380+ Set <MavenRepository > allBuildscriptRepositories = new LinkedHashSet <>();
1381+ Set <MavenRepository > allRepositories = new LinkedHashSet <>();
13821382 org .openrewrite .java .style .Autodetect .Detector javaDetector = org .openrewrite .java .style .Autodetect .detector ();
13831383 org .openrewrite .kotlin .style .Autodetect .Detector kotlinDetector = org .openrewrite .kotlin .style .Autodetect .detector ();
13841384 org .openrewrite .xml .style .Autodetect .Detector xmlDetector = org .openrewrite .xml .style .Autodetect .detector ();
@@ -1389,14 +1389,24 @@ protected ResultsContainer listResults(ExecutionContext ctx) {
13891389 } else if (s instanceof J .CompilationUnit ) {
13901390 javaDetector .sample (s );
13911391 }
1392+ s .getMarkers ()
1393+ .findFirst (GradleProject .class )
1394+ .ifPresent (gp -> {
1395+ allBuildscriptRepositories .addAll (gp .getBuildscript ().getMavenRepositories ());
1396+ allRepositories .addAll (gp .getMavenRepositories ());
1397+ });
13921398 })
13931399 .peek (xmlDetector ::sample )
13941400 .collect (toList ());
1395- Map <Class <? extends Tree >, NamedStyles > stylesByType = new HashMap <>();
1401+ Map <Class <? extends SourceFile >, NamedStyles > stylesByType = new HashMap <>();
13961402 stylesByType .put (J .CompilationUnit .class , javaDetector .build ());
13971403 stylesByType .put (K .CompilationUnit .class , kotlinDetector .build ());
13981404 stylesByType .put (Xml .Document .class , xmlDetector .build ());
1399- sourceFiles = ListUtils .map (sourceFiles , applyAutodetectedStyle (stylesByType ));
1405+ // Construct a synthetic marker to apply to freestanding Gradle scripts to aid recipes in resolving dependencies
1406+ GradleProject freestandingScriptMarker = new GradleProject (
1407+ randomId (), "" , "" , "" , "" , emptyList (), new ArrayList <>(allRepositories ),
1408+ emptyList (), emptyMap (), new GradleBuildscript (randomId (), new ArrayList <>(allBuildscriptRepositories ), emptyMap ()));
1409+ sourceFiles = ListUtils .map (sourceFiles , applyAutodetected (stylesByType , freestandingScriptMarker ));
14001410
14011411 logger .lifecycle ("All sources parsed, running active recipes: {}" , String .join (", " , getActiveRecipes ()));
14021412 RecipeRun recipeRun = recipe .run (new InMemoryLargeSourceSet (sourceFiles ), ctx );
@@ -1417,13 +1427,22 @@ public void shutdownRewrite() {
14171427 GradleProjectBuilder .clearCaches ();
14181428 }
14191429
1420- private UnaryOperator <SourceFile > applyAutodetectedStyle (Map <Class <? extends Tree >, NamedStyles > stylesByType ) {
1430+ private UnaryOperator <SourceFile > applyAutodetected (
1431+ Map <Class <? extends SourceFile >, NamedStyles > stylesByType ,
1432+ GradleProject freestandingScriptMarker ) {
14211433 return before -> {
1422- for (Map .Entry <Class <? extends Tree >, NamedStyles > styleTypeEntry : stylesByType .entrySet ()) {
1434+ for (Map .Entry <Class <? extends SourceFile >, NamedStyles > styleTypeEntry : stylesByType .entrySet ()) {
14231435 if (styleTypeEntry .getKey ().isAssignableFrom (before .getClass ())) {
14241436 before = before .withMarkers (before .getMarkers ().add (styleTypeEntry .getValue ()));
14251437 }
14261438 }
1439+ // Add the synthetic GradleProject marker to any freestanding Gradle scripts
1440+ String path = before .getSourcePath ().toString ();
1441+ if ((path .endsWith (".gradle" ) || path .endsWith (".gradle.kts" ))
1442+ && !before .getMarkers ().findFirst (GradleProject .class ).isPresent ()
1443+ && !before .getMarkers ().findFirst (GradleSettings .class ).isPresent ()) {
1444+ before = before .withMarkers (before .getMarkers ().add (freestandingScriptMarker ));
1445+ }
14271446 return before ;
14281447 };
14291448 }
0 commit comments