Skip to content

Commit edf7bf3

Browse files
authored
Add support for version catalog versions in minecraft.mappings, jarJar.pin and jarJar.ranged (#979)
```groovy minecraft { mappings channel: libs.versions.mappings.channel, version: libs.versions.mappings.version } ```
1 parent 600a5ea commit edf7bf3

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

src/common/java/net/minecraftforge/gradle/common/util/MinecraftExtension.java

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
import groovy.lang.Closure;
1717
import groovy.lang.GroovyObjectSupport;
1818
import groovy.lang.MissingPropertyException;
19+
import org.gradle.api.provider.ProviderConvertible;
20+
import org.jetbrains.annotations.Contract;
21+
import org.jetbrains.annotations.Nullable;
22+
1923
import java.util.Map;
2024

2125
import javax.inject.Inject;
@@ -85,15 +89,43 @@ public void mappings(String channel, String version) {
8589
getMappingVersion().set(version);
8690
}
8791

88-
public void mappings(Map<String, ? extends CharSequence> mappings) {
89-
CharSequence channel = mappings.get("channel");
90-
CharSequence version = mappings.get("version");
92+
public void mappings(Object channel, Object version) {
93+
try {
94+
getMappingChannel().set(valueOf(channel, String.class));
95+
getMappingVersion().set(valueOf(version, String.class));
96+
} catch (IllegalArgumentException e) {
97+
throw new IllegalArgumentException("Tried to set mappings using non-Strings", e);
98+
}
99+
}
100+
101+
public void mappings(Map<String, ?> mappings) {
102+
Object channel = mappings.get("channel");
103+
Object version = mappings.get("version");
91104

92105
if (channel == null || version == null) {
93106
throw new IllegalArgumentException("Must specify both mappings channel and version");
94107
}
95108

96-
mappings(channel.toString(), version.toString());
109+
mappings(channel, version);
110+
}
111+
112+
@Contract("!null, _ -> !null")
113+
private static <T> @Nullable T valueOf(@Nullable Object object, Class<T> castTo) {
114+
if (object instanceof ProviderConvertible<?>)
115+
object = ((ProviderConvertible<?>) object).asProvider().get();
116+
else if (object instanceof Provider<?>)
117+
object = ((Provider<?>) object).get();
118+
119+
if (object == null)
120+
return null;
121+
122+
try {
123+
return castTo.cast(object);
124+
} catch (ClassCastException e) {
125+
throw new IllegalArgumentException(String.format(
126+
"Expected class %s but got class %s for value: %s", castTo.getName(), object.getClass().getName(), object)
127+
);
128+
}
97129
}
98130

99131
public ConfigurableFileCollection getAccessTransformers() {

src/userdev/java/net/minecraftforge/gradle/userdev/jarjar/JarJarProjectExtension.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import org.gradle.api.Task;
1919
import org.gradle.api.artifacts.*;
2020
import org.gradle.api.attributes.Attribute;
21+
import org.gradle.api.provider.Provider;
22+
import org.gradle.api.provider.ProviderConvertible;
2123
import org.gradle.api.publish.maven.MavenPublication;
2224

2325
import java.util.List;
@@ -78,6 +80,14 @@ public void fromRuntimeConfiguration() {
7880
project.getTasks().withType(JarJar.class).configureEach(JarJar::fromRuntimeConfiguration);
7981
}
8082

83+
public void pin(Dependency dependency, ProviderConvertible<String> version) {
84+
pin(dependency, version.asProvider());
85+
}
86+
87+
public void pin(Dependency dependency, Provider<String> version) {
88+
pin(dependency, version.get());
89+
}
90+
8191
public void pin(Dependency dependency, String version) {
8292
enable();
8393
if (dependency instanceof ModuleDependency) {
@@ -94,6 +104,14 @@ public Optional<String> getPin(Dependency dependency) {
94104
return Optional.empty();
95105
}
96106

107+
public void ranged(Dependency dependency, ProviderConvertible<String> version) {
108+
ranged(dependency, version.asProvider());
109+
}
110+
111+
public void ranged(Dependency dependency, Provider<String> version) {
112+
ranged(dependency, version.get());
113+
}
114+
97115
public void ranged(Dependency dependency, String range) {
98116
enable();
99117
if (dependency instanceof ModuleDependency) {

0 commit comments

Comments
 (0)