Skip to content

Commit

Permalink
Allow non-eager application of Gradle plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
shanman190 committed Apr 30, 2024
1 parent cfed3dc commit 662b5d3
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ public class AddBuildPlugin extends Recipe {
@Nullable
String versionPattern;

@Option(displayName = "Apply plugin",
description = "Immediate apply the plugin. Defaults to `true`.",
valid = {"true", "false"},
required = false)
@Nullable
Boolean apply;

@Override
public String getDisplayName() {
return "Add Gradle plugin";
Expand All @@ -71,7 +78,7 @@ public Validated<Object> validate() {
public TreeVisitor<?, ExecutionContext> getVisitor() {
return Preconditions.check(
new FindGradleProject(FindGradleProject.SearchCriteria.Marker),
new AddPluginVisitor(pluginId, version, versionPattern)
new AddPluginVisitor(pluginId, version, versionPattern, apply)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ private G.CompilationUnit withPlugin(G.CompilationUnit cu, String pluginId, Vers
return cu;
}

cu = (G.CompilationUnit) new AddPluginVisitor(pluginId, newVersion, null)
cu = (G.CompilationUnit) new AddPluginVisitor(pluginId, newVersion, null, null)
.visitNonNull(cu, ctx);
cu = (G.CompilationUnit) new UpgradePluginVersion(pluginId, newVersion, null).getVisitor()
.visitNonNull(cu, ctx);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ public class AddPluginVisitor extends GroovyIsoVisitor<ExecutionContext> {
@Nullable
String versionPattern;

@Nullable
Boolean apply;

private static @Nullable Comment getLicenseHeader(G.CompilationUnit cu) {
if (!cu.getStatements().isEmpty()) {
Statement firstStatement = cu.getStatements().get(0);
Expand Down Expand Up @@ -136,7 +139,7 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, Integ

String delimiter = singleQuote.get() < doubleQuote.get() ? "\"" : "'";
String source = "plugins {\n" +
" id " + delimiter + pluginId + delimiter + (version != null ? " version " + delimiter + version + delimiter : "") + "\n" +
" id " + delimiter + pluginId + delimiter + (version != null ? " version " + delimiter + version + delimiter : "") + (version != null && (apply == null || Boolean.TRUE.equals(apply)) ? " apply " + apply : "") + "\n" +
"}";
Statement statement = GradleParser.builder().build()
.parseInputs(singletonList(Parser.Input.fromString(source)), null, ctx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ public class AddSettingsPlugin extends Recipe {
@Nullable
String versionPattern;

@Option(displayName = "Apply plugin",
description = "Immediate apply the plugin. Defaults to `true`.",
valid = {"true", "false"},
required = false)
@Nullable
Boolean apply;

@Override
public String getDisplayName() {
return "Add Gradle settings plugin";
Expand All @@ -73,7 +80,7 @@ public Validated<Object> validate() {
public TreeVisitor<?, ExecutionContext> getVisitor() {
return Preconditions.check(
new IsSettingsGradle<>(),
new AddPluginVisitor(pluginId, StringUtils.isBlank(version) ? "latest.release" : version, versionPattern)
new AddPluginVisitor(pluginId, StringUtils.isBlank(version) ? "latest.release" : version, versionPattern, apply)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void defaults(RecipeSpec spec) {
@Test
void addPluginWithoutVersionToNewBlock() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("java-library", null, null)),
spec -> spec.recipe(new AddBuildPlugin("java-library", null, null, null)),
buildGradle(
"",
"""
Expand All @@ -50,7 +50,7 @@ void addPluginWithoutVersionToNewBlock() {
@Test
void addPluginWithoutVersionToExistingBlock() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("java-library", null, null)),
spec -> spec.recipe(new AddBuildPlugin("java-library", null, null, null)),
buildGradle(
"""
plugins {
Expand All @@ -70,7 +70,7 @@ void addPluginWithoutVersionToExistingBlock() {
@Test
void addThirdPartyPluginWithoutVersion() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("org.openrewrite.rewrite", null, null)),
spec -> spec.recipe(new AddBuildPlugin("org.openrewrite.rewrite", null, null, null)),
buildGradle(
"""
plugins {
Expand All @@ -90,7 +90,7 @@ void addThirdPartyPluginWithoutVersion() {
@Test
void addPluginWithVersionToNewBlock() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null)),
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, null)),
buildGradle(
"",
"""
Expand All @@ -105,7 +105,7 @@ void addPluginWithVersionToNewBlock() {
@Test
void addPluginWithVersionToExistingBlock() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null)),
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, null)),
buildGradle(
"""
plugins {
Expand All @@ -125,7 +125,7 @@ void addPluginWithVersionToExistingBlock() {
@Test
void addPluginAfterBuildscriptBlock() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null)),
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, null)),
buildGradle(
"""
import java.util.List
Expand All @@ -151,7 +151,7 @@ void addPluginAfterBuildscriptBlock() {
void addPluginToNewBlockWithLicenseHeader() {
rewriteRun(
spec -> {
spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null));
spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, null));
spec.allSources(s -> s.markers(new BuildTool(randomId(), BuildTool.Type.Gradle, "7.6.1")));
},
buildGradle(
Expand Down Expand Up @@ -182,7 +182,7 @@ void addPluginToNewBlockWithLicenseHeader() {
void addPluginToNewBlockWithLicenseHeaderAndComment() {
rewriteRun(
spec -> {
spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null));
spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, null));
spec.allSources(s -> s.markers(new BuildTool(randomId(), BuildTool.Type.Gradle, "7.6.1")));
},
buildGradle(
Expand Down Expand Up @@ -215,7 +215,7 @@ void addPluginToNewBlockWithLicenseHeaderAndComment() {
void addPluginToNewBlockWithOnlyLicenseHeader() {
rewriteRun(
spec -> {
spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null));
spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, null));
spec.allSources(s -> s.markers(new BuildTool(randomId(), BuildTool.Type.Gradle, "7.6.1")));
},
buildGradle(
Expand All @@ -235,4 +235,24 @@ void addPluginToNewBlockWithOnlyLicenseHeader() {
)
);
}

@Test
void addPluginApplyFalse() {
rewriteRun(
spec -> spec.recipe(new AddBuildPlugin("com.jfrog.bintray", "1.0", null, false)),
buildGradle(
"""
plugins {
id "java"
}
""",
"""
plugins {
id "java"
id "com.jfrog.bintray" version "1.0" apply false
}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class AddSettingsPluginTest implements RewriteTest {
@Override
public void defaults(RecipeSpec spec) {
spec.beforeRecipe(withToolingApi())
.recipe(new AddSettingsPlugin("com.gradle.enterprise", "3.11.x", null));
.recipe(new AddSettingsPlugin("com.gradle.enterprise", "3.11.x", null, null));
}

@Test
Expand Down Expand Up @@ -128,6 +128,24 @@ void addPluginWithPluginManagementBlock() {
);
}

@Test
void addPluginApplyFalse() {
rewriteRun(
spec -> spec.beforeRecipe(withToolingApi())
.recipe(new AddSettingsPlugin("com.gradle.enterprise", "3.11.x", null, null)),
settingsGradle(
"",
interpolateResolvedVersion(
"""
plugins {
id 'com.gradle.enterprise' version '%s' apply false
}
"""
)
)
);
}

private static Consumer<SourceSpec<G.CompilationUnit>> interpolateResolvedVersion(@Language("groovy") String after) {
return spec -> spec.after(actual -> {
assertThat(actual).isNotNull();
Expand Down

0 comments on commit 662b5d3

Please sign in to comment.