From a9e03fa0e75b5b338021de982acbbb8277e08706 Mon Sep 17 00:00:00 2001 From: Fudge Date: Mon, 2 Dec 2019 15:43:23 +0200 Subject: Allow attaching class, method, field, and parameter javadocs (#185) * bring liach pr to modern enigma * bump version * fuck off vscode * switch to COMMENT and write comments before * it was already after, what do you want * oops * put inner classes at the end * remove indents and use all caps * add refreshmappings command * Update src/main/java/cuchaz/enigma/translation/mapping/serde/EnigmaMappingsWriter.java * Delete RefreshEnigmaMappingsCommand.java * Update CommandMain.java * ok --- src/main/java/cuchaz/enigma/SourceProvider.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/main/java/cuchaz/enigma/SourceProvider.java') diff --git a/src/main/java/cuchaz/enigma/SourceProvider.java b/src/main/java/cuchaz/enigma/SourceProvider.java index 704424a..d3d3003 100644 --- a/src/main/java/cuchaz/enigma/SourceProvider.java +++ b/src/main/java/cuchaz/enigma/SourceProvider.java @@ -19,8 +19,10 @@ import oml.ast.transformers.*; import java.io.StringWriter; import java.io.Writer; +import java.lang.ref.WeakReference; import java.util.Arrays; import java.util.List; +import java.util.Objects; public class SourceProvider { private final DecompilerSettings settings; @@ -28,6 +30,9 @@ public class SourceProvider { private final ITypeLoader typeLoader; private final MetadataSystem metadataSystem; + private String lastLookUpName; + private WeakReference lastDecompiled; + public SourceProvider(DecompilerSettings settings, ITypeLoader typeLoader, MetadataSystem metadataSystem) { this.settings = settings; this.typeLoader = typeLoader; @@ -55,6 +60,13 @@ public class SourceProvider { } public CompilationUnit getSources(String name) { + // Optimization for javadoc-caused decompilations + if (Objects.equals(lastLookUpName, name)) { + CompilationUnit last = lastDecompiled.get(); + if (last != null) + return last; + } + TypeReference type = metadataSystem.lookupType(name); if (type == null) { throw new Error(String.format("Unable to find desc: %s", name)); @@ -74,7 +86,10 @@ public class SourceProvider { builder.runTransformations(null); runCustomTransforms(builder, context); - return builder.getCompilationUnit(); + CompilationUnit ret = builder.getCompilationUnit(); + lastLookUpName = name; + lastDecompiled = new WeakReference<>(ret); + return ret; } public void writeSource(Writer writer, CompilationUnit sourceTree) { -- cgit v1.2.3