Skip to content

Commit 53a5f8e

Browse files
committed
plugin-dev, repository: Use new mammoth additions to reduce duplication
1 parent 4ad19cd commit 53a5f8e

File tree

8 files changed

+58
-65
lines changed

8 files changed

+58
-65
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ subprojects {
114114
standardOptions()
115115
formatAnnotations()
116116
importOrderFile(rootProject.file(".spotless/sponge.importorder"))
117+
removeUnusedImports()
117118
}
118119

119120
project.plugins.withId("groovy") {

gradle/libs.versions.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ version = "1.0"
55
indra = "3.0.0"
66
pluginPublish = "1.0.0"
77
spotless = "6.11.0"
8-
junit = "5.9.0"
9-
mammoth = "1.2.0"
8+
junit = "5.9.1"
9+
mammoth = "1.3.0"
1010

1111
[libraries]
1212
gson = { module = "com.google.code.gson:gson", version = "2.9.1" }

plugin-development/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ dependencies {
22
implementation(libs.pluginMeta) {
33
exclude(group = "org.checkerframework", module = "checker-qual")
44
}
5+
api(libs.mammoth)
56
// implementation("org.spongepowered:vanillagradle:0.2-SNAPSHOT")
67
// implementation("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.10")
78
}

plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginGradle.java

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@
2424
*/
2525
package org.spongepowered.gradle.plugin;
2626

27+
import net.kyori.mammoth.ProjectOrSettingsPlugin;
2728
import org.gradle.api.Action;
28-
import org.gradle.api.GradleException;
2929
import org.gradle.api.NamedDomainObjectProvider;
30-
import org.gradle.api.Plugin;
3130
import org.gradle.api.Project;
3231
import org.gradle.api.Task;
3332
import org.gradle.api.artifacts.Configuration;
@@ -39,14 +38,16 @@
3938
import org.gradle.api.file.Directory;
4039
import org.gradle.api.file.FileCollection;
4140
import org.gradle.api.initialization.Settings;
42-
import org.gradle.api.invocation.Gradle;
41+
import org.gradle.api.plugins.ExtensionContainer;
4342
import org.gradle.api.plugins.JavaLibraryPlugin;
4443
import org.gradle.api.plugins.JavaPlugin;
44+
import org.gradle.api.plugins.PluginContainer;
4545
import org.gradle.api.provider.Property;
4646
import org.gradle.api.provider.Provider;
4747
import org.gradle.api.tasks.JavaExec;
4848
import org.gradle.api.tasks.SourceSet;
4949
import org.gradle.api.tasks.SourceSetContainer;
50+
import org.gradle.api.tasks.TaskContainer;
5051
import org.gradle.api.tasks.TaskProvider;
5152
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
5253
import org.gradle.process.CommandLineArgumentProvider;
@@ -62,42 +63,31 @@
6263
import java.nio.file.Path;
6364
import java.util.Collections;
6465

65-
public final class SpongePluginGradle implements Plugin<Object> {
66+
public final class SpongePluginGradle implements ProjectOrSettingsPlugin {
6667

6768
private @UnknownNullability Project project;
6869

6970
@Override
70-
public void apply(final @NotNull Object target) {
71-
if (target instanceof Project) {
72-
this.applyToProject((Project) target);
73-
} else if (target instanceof Settings) {
74-
this.applyToSettings((Settings) target);
75-
} else if (target instanceof Gradle) {
76-
// no-op
77-
} else {
78-
throw new GradleException(
79-
"Sponge gradle plugin target '" + target
80-
+ "' is of unexpected type " + target.getClass()
81-
+ ", expecting a Project or Settings instance"
82-
);
83-
}
84-
}
85-
86-
public void applyToProject(final Project project) {
87-
this.project = project;
71+
public void applyToProject(
72+
final @NotNull Project target,
73+
final @NotNull PluginContainer plugins,
74+
final @NotNull ExtensionContainer extensions,
75+
final @NotNull TaskContainer tasks
76+
) {
77+
this.project = target;
8878

8979
project.getLogger().lifecycle("SpongePowered Plugin 'GRADLE' Toolset Version '{}'", Constants.VERSION);
90-
project.getPlugins().apply(JavaLibraryPlugin.class);
80+
plugins.apply(JavaLibraryPlugin.class);
9181
// project.getPlugins().apply(ProvideMinecraftPlugin.class);
9282
// project.getPlugins().apply(IdeaExtPlugin.class);
9383
// project.getPlugins().apply(EclipsePlugin.class);
9484

9585
// final MinecraftExtension minecraft = project.getExtensions().getByType(MinecraftExtension.class);
96-
final SpongePluginExtension sponge = project.getExtensions().create("sponge", SpongePluginExtension.class);
86+
final SpongePluginExtension sponge = extensions.create("sponge", SpongePluginExtension.class);
9787

9888
// Only inject repositories if the project does not have sponge repos from other sources
9989
sponge.injectRepositories().convention(
100-
!project.getGradle().getPlugins().hasPlugin(SpongePluginGradle.class)
90+
!this.isAppliedToSettingsOf(target)
10191
&& !project.getGradle().getPlugins().hasPlugin("org.spongepowered.gradle.repository")
10292
);
10393

@@ -134,9 +124,9 @@ public void applyToProject(final Project project) {
134124
});
135125
}
136126

137-
private void applyToSettings(final Settings settings) {
138-
SpongePluginGradle.addRepository(settings.getDependencyResolutionManagement().getRepositories());
139-
settings.getGradle().getPlugins().apply(SpongePluginGradle.class);
127+
@Override
128+
public void applyToSettings(@NotNull Settings target, @NotNull PluginContainer plugins, @NotNull ExtensionContainer extensions) {
129+
SpongePluginGradle.addRepository(target.getDependencyResolutionManagement().getRepositories());
140130
}
141131

142132
private static void addRepository(final RepositoryHandler handler) {

repository/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
dependencies {
2+
api(libs.mammoth)
3+
}
4+
15
indraPluginPublishing {
26
plugin(
37
"repository",

repository/src/functionalTest/java/org/spongepowered/gradle/repository/RepositoriesFunctionalTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424
*/
2525
package org.spongepowered.gradle.repository;
2626

27-
import net.kyori.mammoth.test.GradleFunctionalTest;
2827
import net.kyori.mammoth.test.TestContext;
29-
import org.junit.jupiter.api.Disabled;
30-
import org.junit.jupiter.api.DisplayName;
3128
import org.junit.jupiter.api.DisplayNameGeneration;
3229
import org.spongepowered.gradle.build.FunctionalTestDisplayNameGenerator;
3330
import org.spongepowered.gradle.build.SpongeGradleFunctionalTest;

repository/src/main/java/org/spongepowered/gradle/repository/RepositoryPlugin.java

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,50 +24,52 @@
2424
*/
2525
package org.spongepowered.gradle.repository;
2626

27-
import org.gradle.api.GradleException;
28-
import org.gradle.api.Plugin;
27+
import net.kyori.mammoth.ProjectOrSettingsPlugin;
2928
import org.gradle.api.Project;
3029
import org.gradle.api.artifacts.dsl.RepositoryHandler;
3130
import org.gradle.api.initialization.Settings;
32-
import org.gradle.api.invocation.Gradle;
3331
import org.gradle.api.plugins.ExtensionAware;
32+
import org.gradle.api.plugins.ExtensionContainer;
33+
import org.gradle.api.plugins.PluginContainer;
34+
import org.gradle.api.tasks.TaskContainer;
35+
import org.gradle.util.GradleVersion;
3436
import org.jetbrains.annotations.NotNull;
37+
import org.jetbrains.annotations.Nullable;
3538

36-
public class RepositoryPlugin implements Plugin<Object> {
39+
public class RepositoryPlugin implements ProjectOrSettingsPlugin {
3740

38-
@Override
39-
public void apply(final @NotNull Object target) {
40-
if (target instanceof Project) {
41-
this.applyToProject((Project) target);
42-
} else if (target instanceof Settings) {
43-
this.applyToSettings((Settings) target);
44-
} else if (target instanceof Gradle) {
45-
// no-op
46-
} else {
47-
throw new GradleException(
48-
"Sponge repository plugin target '" + target
49-
+ "' is of unexpected type " + target.getClass()
50-
+ ", expecting a Project or Settings instance"
51-
);
52-
}
53-
}
41+
private static final GradleVersion MINIMUM_VERSION = GradleVersion.version("7.4"); // when kts codegen was added for extensions on repositories
5442

55-
private void applyToProject(final Project project) {
56-
this.registerExtension(project.getRepositories());
43+
@Override
44+
public void applyToProject(
45+
final @NotNull Project target,
46+
final @NotNull PluginContainer plugins,
47+
final @NotNull ExtensionContainer extensions,
48+
final @NotNull TaskContainer tasks
49+
) {
50+
this.registerExtension(target.getRepositories());
5751
}
5852

59-
private void applyToSettings(final Settings settings) {
60-
settings.getGradle().getPlugins().apply(RepositoryPlugin.class);
61-
this.registerExtension(settings.getDependencyResolutionManagement().getRepositories());
53+
@Override
54+
public void applyToSettings(
55+
final @NotNull Settings target,
56+
final @NotNull PluginContainer plugins,
57+
final @NotNull ExtensionContainer extensions
58+
) {
59+
this.registerExtension(target.getDependencyResolutionManagement().getRepositories());
6260
}
6361

6462
private void registerExtension(final RepositoryHandler repositories) {
6563
((ExtensionAware) repositories).getExtensions().create(
66-
SpongeRepositoryExtension.class,
67-
"sponge",
68-
SpongeRepositoryExtensionImpl.class,
69-
repositories
64+
SpongeRepositoryExtension.class,
65+
"sponge",
66+
SpongeRepositoryExtensionImpl.class,
67+
repositories
7068
);
7169
}
7270

71+
@Override
72+
public @Nullable GradleVersion minimumGradleVersion() {
73+
return MINIMUM_VERSION;
74+
}
7375
}

settings.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ pluginManagement {
88

99
dependencyResolutionManagement {
1010
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
11-
repositories {
12-
pluginManagement.repositories.forEach { add(it) }
13-
}
11+
repositories { pluginManagement.repositories.forEach { add(it) } }
1412
}
1513

1614
rootProject.name = "SpongeGradle"

0 commit comments

Comments
 (0)