Skip to content

Commit

Permalink
feat(gui): disk code cache and search rewrite (PR #1483)
Browse files Browse the repository at this point in the history
* feat: implement disk code cache
* feat: rewrite code metadata handling, remove code index
* feat: rewrite search
* fix: code cleanup and fixes for previous commits
* feat: run code search in parallel
* fix: reset code strings cache on low memory, code cleanup
* fix: include input files timestamp into code hash
  • Loading branch information
skylot committed May 18, 2022
1 parent 65ade37 commit 0606c90
Show file tree
Hide file tree
Showing 166 changed files with 4,393 additions and 2,902 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,5 @@ jadx-output/
*.orig
quark.json

cliff.toml
cliff.toml
jadx-gui/src/main/resources/logback.xml
65 changes: 0 additions & 65 deletions jadx-core/src/main/java/jadx/api/CodePosition.java

This file was deleted.

12 changes: 10 additions & 2 deletions jadx-core/src/main/java/jadx/api/ICodeCache.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package jadx.api;

import java.io.Closeable;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public interface ICodeCache {
public interface ICodeCache extends Closeable {

void add(String clsFullName, ICodeInfo codeInfo);

void remove(String clsFullName);

@Nullable
@NotNull
ICodeInfo get(String clsFullName);

@Nullable
String getCode(String clsFullName);

boolean contains(String clsFullName);
}
7 changes: 3 additions & 4 deletions jadx-core/src/main/java/jadx/api/ICodeInfo.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package jadx.api;

import java.util.Map;

import jadx.api.impl.SimpleCodeInfo;
import jadx.api.metadata.ICodeMetadata;

public interface ICodeInfo {

ICodeInfo EMPTY = new SimpleCodeInfo("");

String getCodeStr();

Map<Integer, Integer> getLineMapping();
ICodeMetadata getCodeMetadata();

Map<CodePosition, Object> getAnnotations();
boolean hasMetadata();
}
22 changes: 17 additions & 5 deletions jadx-core/src/main/java/jadx/api/ICodeWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import java.util.Map;

import jadx.core.dex.attributes.ILineAttributeNode;
import org.jetbrains.annotations.ApiStatus;

import jadx.api.metadata.ICodeAnnotation;
import jadx.api.metadata.ICodeNodeRef;

public interface ICodeWriter {
String NL = System.getProperty("line.separator");
Expand Down Expand Up @@ -38,13 +41,21 @@ public interface ICodeWriter {

void setIndent(int indent);

/**
* Return current line (only if metadata is supported)
*/
int getLine();

void attachDefinition(ILineAttributeNode obj);
/**
* Return start line position (only if metadata is supported)
*/
int getLineStartPos();

void attachDefinition(ICodeNodeRef obj);

void attachAnnotation(Object obj);
void attachAnnotation(ICodeAnnotation obj);

void attachLineAnnotation(Object obj);
void attachLineAnnotation(ICodeAnnotation obj);

void attachSourceLine(int sourceLine);

Expand All @@ -56,5 +67,6 @@ public interface ICodeWriter {

StringBuilder getRawBuf();

Map<CodePosition, Object> getRawAnnotations();
@ApiStatus.Internal
Map<Integer, ICodeAnnotation> getRawAnnotations();
}
19 changes: 19 additions & 0 deletions jadx-core/src/main/java/jadx/api/JadxArgs.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package jadx.api;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
Expand All @@ -15,6 +16,7 @@
import jadx.api.data.ICodeData;
import jadx.api.impl.AnnotatedCodeWriter;
import jadx.api.impl.InMemoryCodeCache;
import jadx.core.utils.files.FileUtils;

public class JadxArgs {

Expand Down Expand Up @@ -514,6 +516,21 @@ public void setPluginOptions(Map<String, String> pluginOptions) {
this.pluginOptions = pluginOptions;
}

/**
* Hash of all options that can change result code
*/
public String makeCodeArgsHash() {
String argStr = "args:" + decompilationMode + useImports + showInconsistentCode
+ inlineAnonymousClasses + inlineMethods
+ deobfuscationOn + deobfuscationMinLength + deobfuscationMaxLength
+ parseKotlinMetadata + useKotlinMethodsForVarNames
+ insertDebugLines + extractFinally
+ debugInfo + useSourceNameAsClassAlias + escapeUnicode + replaceConsts
+ respectBytecodeAccModifiers + fsCaseSensitive + renameFlags
+ commentsLevel + useDxInput + pluginOptions;
return FileUtils.md5Sum(argStr.getBytes(StandardCharsets.US_ASCII));
}

@Override
public String toString() {
return "JadxArgs{" + "inputFiles=" + inputFiles
Expand All @@ -533,6 +550,8 @@ public String toString() {
+ ", useSourceNameAsClassAlias=" + useSourceNameAsClassAlias
+ ", parseKotlinMetadata=" + parseKotlinMetadata
+ ", useKotlinMethodsForVarNames=" + useKotlinMethodsForVarNames
+ ", insertDebugLines=" + insertDebugLines
+ ", extractFinally=" + extractFinally
+ ", deobfuscationMinLength=" + deobfuscationMinLength
+ ", deobfuscationMaxLength=" + deobfuscationMaxLength
+ ", escapeUnicode=" + escapeUnicode
Expand Down
Loading

0 comments on commit 0606c90

Please sign in to comment.