Skip to content

Commit 6185579

Browse files
authored
[6.0] Version catalog version support (re-try) (#980)
This reapplies commit 0b1f02a. `GString` and other subclasses of `CharSequence` exists. The solution is to run `Object#toString` on the resultant value rather than casting it to a string. This is the same behavior as before, the only difference is that the enforcement on `CharSequence` is removed.
1 parent 0b1f02a commit 6185579

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import groovy.lang.Closure;
1717
import groovy.lang.GroovyObjectSupport;
1818
import groovy.lang.MissingPropertyException;
19+
import org.gradle.api.provider.ProviderConvertible;
20+
1921
import java.util.Map;
2022

2123
import javax.inject.Inject;
@@ -85,15 +87,33 @@ public void mappings(String channel, String version) {
8587
getMappingVersion().set(version);
8688
}
8789

88-
public void mappings(Map<String, ? extends CharSequence> mappings) {
89-
CharSequence channel = mappings.get("channel");
90-
CharSequence version = mappings.get("version");
90+
public void mappings(Object channel, Object version) {
91+
setMappingProperty(getMappingChannel(), channel);
92+
setMappingProperty(getMappingVersion(), version);
93+
}
94+
95+
public void mappings(Map<String, ?> mappings) {
96+
Object channel = mappings.get("channel");
97+
Object version = mappings.get("version");
9198

9299
if (channel == null || version == null) {
93100
throw new IllegalArgumentException("Must specify both mappings channel and version");
94101
}
95102

96-
mappings(channel.toString(), version.toString());
103+
mappings(channel, version);
104+
}
105+
106+
// Using Object#toString on the value will account for weird cases of GString and non-String CharSequences
107+
private void setMappingProperty(Property<String> property, Object value) {
108+
Provider<?> provider;
109+
if (value instanceof ProviderConvertible<?>)
110+
provider = ((ProviderConvertible<?>) value).asProvider();
111+
else if (value instanceof Provider<?>)
112+
provider = (Provider<?>) value;
113+
else
114+
provider = project.provider(() -> value);
115+
116+
property.set(provider.map(Object::toString));
97117
}
98118

99119
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)