mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-03-28 04:07:01 -05:00
Add extension option to configure known INVOKEDYNAMIC BSMs (#945)
* Set up configuration for known indy bsms * Make ignoredIndyBsms apply to service remapper * Add groovy indy instruction to default known BSMs * Address feedback --------- Co-authored-by: modmuss <modmuss50@gmail.com>
This commit is contained in:
@@ -35,6 +35,7 @@ import org.gradle.api.file.ConfigurableFileCollection;
|
||||
import org.gradle.api.file.RegularFileProperty;
|
||||
import org.gradle.api.provider.ListProperty;
|
||||
import org.gradle.api.provider.Property;
|
||||
import org.gradle.api.provider.SetProperty;
|
||||
import org.gradle.api.publish.maven.MavenPublication;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
@@ -129,6 +130,8 @@ public interface LoomGradleExtensionAPI {
|
||||
|
||||
Property<String> getCustomMinecraftManifest();
|
||||
|
||||
SetProperty<String> getKnownIndyBsms();
|
||||
|
||||
/**
|
||||
* Disables the deprecated POM generation for a publication.
|
||||
* This is useful if you want to suppress deprecation warnings when you're not using software components.
|
||||
|
||||
@@ -133,6 +133,7 @@ public class ModProcessor {
|
||||
.stream().map(File::toPath).toArray(Path[]::new);
|
||||
|
||||
TinyRemapper.Builder builder = TinyRemapper.newRemapper()
|
||||
.withKnownIndyBsm(extension.getKnownIndyBsms().get())
|
||||
.withMappings(TinyRemapperHelper.create(mappingConfiguration.getMappingsService(serviceManager).getMappingTree(), fromM, toM, false))
|
||||
.renameInvalidLocals(false)
|
||||
.extraAnalyzeVisitor(AccessWidenerAnalyzeVisitorProvider.createFromMods(fromM, remapList));
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
package net.fabricmc.loom.extension;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Set;
|
||||
|
||||
import org.gradle.api.Action;
|
||||
import org.gradle.api.NamedDomainObjectContainer;
|
||||
@@ -35,6 +36,7 @@ import org.gradle.api.file.ConfigurableFileCollection;
|
||||
import org.gradle.api.file.RegularFileProperty;
|
||||
import org.gradle.api.provider.ListProperty;
|
||||
import org.gradle.api.provider.Property;
|
||||
import org.gradle.api.provider.SetProperty;
|
||||
import org.gradle.api.publish.maven.MavenPublication;
|
||||
import org.gradle.api.tasks.SourceSet;
|
||||
|
||||
@@ -71,6 +73,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
protected final ConfigurableFileCollection log4jConfigs;
|
||||
protected final RegularFileProperty accessWidener;
|
||||
protected final Property<String> customManifest;
|
||||
protected final SetProperty<String> knownIndyBsms;
|
||||
protected final Property<Boolean> transitiveAccessWideners;
|
||||
protected final Property<Boolean> modProvidedJavadoc;
|
||||
protected final Property<String> intermediary;
|
||||
@@ -98,6 +101,12 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
this.log4jConfigs = project.files(directories.getDefaultLog4jConfigFile());
|
||||
this.accessWidener = project.getObjects().fileProperty();
|
||||
this.customManifest = project.getObjects().property(String.class);
|
||||
this.knownIndyBsms = project.getObjects().setProperty(String.class).convention(Set.of(
|
||||
"java/lang/invoke/StringConcatFactory",
|
||||
"java/lang/runtime/ObjectMethods",
|
||||
"org/codehaus/groovy/vmplugin/v8/IndyInterface"
|
||||
));
|
||||
this.knownIndyBsms.finalizeValueOnRead();
|
||||
this.transitiveAccessWideners = project.getObjects().property(Boolean.class)
|
||||
.convention(true);
|
||||
this.transitiveAccessWideners.finalizeValueOnRead();
|
||||
@@ -228,6 +237,11 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||
return customManifest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SetProperty<String> getKnownIndyBsms() {
|
||||
return knownIndyBsms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getModVersion() {
|
||||
return versionParser.getModVersion();
|
||||
|
||||
@@ -34,6 +34,7 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
import org.gradle.api.Project;
|
||||
@@ -77,6 +78,8 @@ public class TinyRemapperService implements SharedService {
|
||||
joiner.add(project.getPath());
|
||||
}
|
||||
|
||||
extension.getKnownIndyBsms().get().stream().sorted().forEach(joiner::add);
|
||||
|
||||
final String id = joiner.toString();
|
||||
|
||||
TinyRemapperService service = serviceManager.getOrCreateService(id, () -> {
|
||||
@@ -87,7 +90,7 @@ public class TinyRemapperService implements SharedService {
|
||||
mappings.add(gradleMixinMappingProvider(serviceManager, project.getGradle(), extension.getMappingConfiguration().mappingsIdentifier, from, to));
|
||||
}
|
||||
|
||||
return new TinyRemapperService(mappings, !legacyMixin, kotlinClasspathService);
|
||||
return new TinyRemapperService(mappings, !legacyMixin, kotlinClasspathService, extension.getKnownIndyBsms().get());
|
||||
});
|
||||
|
||||
service.readClasspath(remapJarTask.getClasspath().getFiles().stream().map(File::toPath).filter(Files::exists).toList());
|
||||
@@ -126,8 +129,8 @@ public class TinyRemapperService implements SharedService {
|
||||
// Set to true once remapping has started, once set no inputs can be read.
|
||||
private boolean isRemapping = false;
|
||||
|
||||
public TinyRemapperService(List<IMappingProvider> mappings, boolean useMixinExtension, @Nullable KotlinClasspath kotlinClasspath) {
|
||||
TinyRemapper.Builder builder = TinyRemapper.newRemapper();
|
||||
public TinyRemapperService(List<IMappingProvider> mappings, boolean useMixinExtension, @Nullable KotlinClasspath kotlinClasspath, Set<String> knownIndyBsms) {
|
||||
TinyRemapper.Builder builder = TinyRemapper.newRemapper().withKnownIndyBsm(knownIndyBsms);
|
||||
|
||||
for (IMappingProvider provider : mappings) {
|
||||
builder.withMappings(provider);
|
||||
|
||||
@@ -82,6 +82,7 @@ public final class TinyRemapperHelper {
|
||||
.rebuildSourceFilenames(true)
|
||||
.invalidLvNamePattern(MC_LV_PATTERN)
|
||||
.inferNameFromSameLvIndex(true)
|
||||
.withKnownIndyBsm(extension.getKnownIndyBsms().get())
|
||||
.extraPreApplyVisitor((cls, next) -> {
|
||||
if (fixRecords && !cls.isRecord() && "java/lang/Record".equals(cls.getSuperName())) {
|
||||
return new RecordComponentFixVisitor(next, mappingTree, intermediaryNsId);
|
||||
|
||||
Reference in New Issue
Block a user