MCPcopy Create free account
hub / github.com/FabricMC/Matcher / Procyon

Class Procyon

src/main/java/matcher/srcprocess/Procyon.java:18–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16import matcher.type.ClassInstance;
17
18public class Procyon implements Decompiler {
19 @Override
20 public String decompile(ClassInstance cls, ClassFeatureExtractor env, NameType nameType) {
21 DecompilerSettings settings = DecompilerSettings.javaDefaults();
22 settings.setShowSyntheticMembers(true);
23 settings.setTypeLoader(new CompositeTypeLoader(
24 new TypeLoader(env, nameType),
25 new ClasspathTypeLoader()));
26
27 PlainTextOutput out = new PlainTextOutput();
28
29 com.strobel.decompiler.Decompiler.decompile(cls.getName(nameType), out, settings);
30
31 return out.toString();
32 }
33
34 private static class TypeLoader implements ITypeLoader {
35 TypeLoader(ClassFeatureExtractor env, NameType nameType) {
36 this.env = env;
37 this.nameType = nameType;
38 }
39
40 @Override
41 public boolean tryLoadType(String internalName, Buffer buffer) {
42 ClassInstance cls = env.getClsByName(internalName, nameType);
43
44 if (cls == null) {
45 if (checkWarn(internalName)) {
46 Matcher.LOGGER.debug("Missing cls: {}", internalName);
47 }
48
49 return false;
50 }
51
52 if (cls.getAsmNodes() == null) {
53 if (checkWarn(internalName)) {
54 Matcher.LOGGER.debug("Unknown cls: {}", internalName);
55 }
56
57 return false;
58 }
59
60 byte[] data = cls.serialize(nameType);
61
62 buffer.reset(data.length);
63 buffer.putByteArray(data, 0, data.length);
64 buffer.position(0);
65
66 return true;
67 }
68
69 private boolean checkWarn(String name) {
70 if (name.startsWith("java/") || name.startsWith("sun/")) return false;
71
72 return warnedClasses.add(name);
73 }
74
75 private final ClassFeatureExtractor env;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected