Skip to content

Commit b19f62e

Browse files
authored
Allow enabling extensions from the classpath via CLI args (#127)
* Allow enabling extensions from the classpath via CLI args * Change from arbitrary args to --ext(ension)=name arg * Add MixinExtension$CLIProvider * System.err
1 parent d65d8bc commit b19f62e

File tree

4 files changed

+51
-5
lines changed

4 files changed

+51
-5
lines changed

src/main/java/net/fabricmc/tinyremapper/Main.java

+31-5
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,16 @@
2929
import java.nio.file.Paths;
3030
import java.util.ArrayList;
3131
import java.util.Collections;
32+
import java.util.HashMap;
3233
import java.util.HashSet;
3334
import java.util.List;
3435
import java.util.Locale;
36+
import java.util.Map;
37+
import java.util.ServiceLoader;
3538
import java.util.Set;
3639
import java.util.regex.Pattern;
3740

3841
import net.fabricmc.tinyremapper.TinyRemapper.LinkedMethodPropagation;
39-
import net.fabricmc.tinyremapper.extension.mixin.MixinExtension;
4042

4143
public class Main {
4244
public static void main(String[] rawArgs) {
@@ -60,7 +62,12 @@ public static void main(String[] rawArgs) {
6062
boolean inferNameFromSameLvIndex = false;
6163
NonClassCopyMode ncCopyMode = NonClassCopyMode.FIX_META_INF;
6264
int threads = -1;
63-
boolean enableMixin = false;
65+
66+
Map<String, TinyRemapper.CLIExtensionProvider> providerMap = new HashMap<>();
67+
List<TinyRemapper.Extension> providedExtensions = new ArrayList<>();
68+
ServiceLoader<TinyRemapper.CLIExtensionProvider> cliProviderLoader =
69+
ServiceLoader.load(TinyRemapper.CLIExtensionProvider.class);
70+
cliProviderLoader.iterator().forEachRemaining(provider -> providerMap.put(provider.name(), provider));
6471

6572
for (String arg : rawArgs) {
6673
if (arg.startsWith("--")) {
@@ -143,7 +150,11 @@ public static void main(String[] rawArgs) {
143150

144151
break;
145152
case "mixin":
146-
enableMixin = true;
153+
handleExtension(providerMap, "mixin", providedExtensions);
154+
break;
155+
case "ext":
156+
case "extension":
157+
handleExtension(providerMap, arg.substring(valueSepPos + 1), providedExtensions);
147158
break;
148159
default:
149160
System.out.println("invalid argument: "+arg+".");
@@ -255,8 +266,8 @@ public static void main(String[] rawArgs) {
255266
.inferNameFromSameLvIndex(inferNameFromSameLvIndex)
256267
.threads(threads);
257268

258-
if (enableMixin) {
259-
builder = builder.extension(new MixinExtension());
269+
for (TinyRemapper.Extension ext : providedExtensions) {
270+
ext.attach(builder);
260271
}
261272

262273
TinyRemapper remapper = builder.build();
@@ -276,4 +287,19 @@ public static void main(String[] rawArgs) {
276287

277288
System.out.printf("Finished after %.2f ms.\n", (System.nanoTime() - startTime) / 1e6);
278289
}
290+
291+
private static void handleExtension(Map<String, TinyRemapper.CLIExtensionProvider> providerMap, String extName, List<TinyRemapper.Extension> providedExtensions) {
292+
TinyRemapper.CLIExtensionProvider provider = providerMap.get(extName);
293+
294+
if (provider == null) {
295+
System.err.println("No such extension: " + extName);
296+
System.exit(1);
297+
}
298+
299+
TinyRemapper.Extension extension = provider.provideExtension();
300+
301+
if (extension != null) {
302+
providedExtensions.add(extension);
303+
}
304+
}
279305
}

src/main/java/net/fabricmc/tinyremapper/TinyRemapper.java

+7
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,13 @@ public interface Extension {
258258
void attach(TinyRemapper.Builder builder);
259259
}
260260

261+
public interface CLIExtensionProvider {
262+
String name();
263+
264+
// nullable return
265+
Extension provideExtension();
266+
}
267+
261268
public interface AnalyzeVisitorProvider {
262269
/**
263270
* @deprecated use {@link #insertAnalyzeVisitor(boolean, int, String, ClassVisitor, InputTag[])} instead

src/main/java/net/fabricmc/tinyremapper/extension/mixin/MixinExtension.java

+12
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ public class MixinExtension implements TinyRemapper.Extension {
5757
private final Set<AnnotationTarget> targets;
5858
private final /* @Nullable */ Predicate<InputTag> inputTagFilter;
5959

60+
public static final class CLIProvider implements TinyRemapper.CLIExtensionProvider {
61+
@Override
62+
public String name() {
63+
return "mixin";
64+
}
65+
66+
@Override
67+
public TinyRemapper.Extension provideExtension() {
68+
return new MixinExtension();
69+
}
70+
}
71+
6072
public enum AnnotationTarget {
6173
/**
6274
* The string literal in mixin annotation. E.g. Mixin, Invoker, Accessor, Inject,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
net.fabricmc.tinyremapper.extension.mixin.MixinExtension$CLIProvider

0 commit comments

Comments
 (0)