diff --git a/rewrite-gradle/src/main/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepository.java b/rewrite-gradle/src/main/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepository.java index 3173d10183..25b3490d47 100644 --- a/rewrite-gradle/src/main/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepository.java +++ b/rewrite-gradle/src/main/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepository.java @@ -138,12 +138,31 @@ private List addPluginManagementRepos(List statements, J p if (mapped != statements) { return mapped; } - // No existing pluginManagement found — insert a new block + // No existing pluginManagement found — insert after any leading imports Statement pluginManagementStatement = pluginManagement instanceof J.Block ? ((J.Block) pluginManagement).getStatements().get(0) : (J.MethodInvocation) pluginManagement; - List result = ListUtils.concat(pluginManagementStatement, statements); - return ListUtils.map(result, (i, s) -> i == 1 ? s.withPrefix(Space.format("\n\n")) : s); + + int insertIdx = 0; + for (int i = 0; i < statements.size(); i++) { + if (statements.get(i) instanceof J.Import) { + insertIdx = i + 1; + } else { + break; + } + } + + if (insertIdx == 0) { + List result = ListUtils.concat(pluginManagementStatement, statements); + return ListUtils.map(result, (i, s) -> i == 1 ? s.withPrefix(Space.format("\n\n")) : s); + } else { + List result = ListUtils.insert(statements, pluginManagementStatement.withPrefix(Space.format("\n\n")), insertIdx); + if (insertIdx < result.size() - 1) { + int nextIdx = insertIdx + 1; + result = ListUtils.map(result, (i, s) -> i == nextIdx ? s.withPrefix(Space.format("\n\n")) : s); + } + return result; + } } private J.@Nullable MethodInvocation unwrapMethodCall(Statement statement, String methodName) { diff --git a/rewrite-gradle/src/test/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepositoryTest.java b/rewrite-gradle/src/test/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepositoryTest.java index 0ff67c87f1..3ea6f65d87 100644 --- a/rewrite-gradle/src/test/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepositoryTest.java +++ b/rewrite-gradle/src/test/java/org/openrewrite/gradle/plugins/AddSettingsPluginRepositoryTest.java @@ -504,35 +504,6 @@ void skipWhenExistsGradlePluginPortalAloneKts() { ); } - @Test - void addToExistingPluginManagementNotFirstStatement() { - rewriteRun( - spec -> spec.recipe(new AddSettingsPluginRepository("gradlePluginPortal", null)) - .expectedCyclesThatMakeChanges(1).cycles(3), - settingsGradle( - """ - rootProject.name = "demo" - - pluginManagement { - repositories { - mavenLocal() - } - } - """, - """ - rootProject.name = "demo" - - pluginManagement { - repositories { - mavenLocal() - gradlePluginPortal() - } - } - """ - ) - ); - } - @Test void addToExistingPluginManagementNotFirstStatementKts() { rewriteRun( @@ -563,10 +534,10 @@ void addToExistingPluginManagementNotFirstStatementKts() { } @Test - void skipWhenExistsPluginManagementNotFirstStatement() { + void skipWhenExistsPluginManagementNotFirstStatementKts() { rewriteRun( spec -> spec.recipe(new AddSettingsPluginRepository("gradlePluginPortal", null)), - settingsGradle( + settingsGradleKts( """ rootProject.name = "demo" @@ -581,18 +552,33 @@ void skipWhenExistsPluginManagementNotFirstStatement() { } @Test - void skipWhenExistsPluginManagementNotFirstStatementKts() { + void noPluginManagementBlockWithBuildCacheKts() { rewriteRun( - spec -> spec.recipe(new AddSettingsPluginRepository("gradlePluginPortal", null)), + spec -> spec.recipe(new AddSettingsPluginRepository("mavenCentral", null)), settingsGradleKts( """ - rootProject.name = "demo" + buildCache { + local { + isEnabled = false + } + } + rootProject.name = "demo" + """, + """ pluginManagement { repositories { - gradlePluginPortal() + mavenCentral() } } + + buildCache { + local { + isEnabled = false + } + } + + rootProject.name = "demo" """ ) );