Skip to content

Commit

Permalink
Small clean-up
Browse files Browse the repository at this point in the history
  • Loading branch information
NebelNidas committed Mar 10, 2024
1 parent 9f72330 commit 30eaa0c
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 16 deletions.
11 changes: 11 additions & 0 deletions src/main/java/matcher/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.io.Closeable;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UncheckedIOException;
import java.net.URI;
import java.net.URISyntaxException;
Expand Down Expand Up @@ -48,6 +50,15 @@ public static <T> Set<T> copySet(Set<T> set) {
}
}

public static String getStackTrace(Throwable t) {
if (t == null) return null;

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
return sw.toString();
}

public static FileSystem iterateJar(Path archive, boolean autoClose, Consumer<Path> handler) {
boolean existing = false;
FileSystem fs = null;
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/matcher/gui/tab/SourcecodeTab.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import matcher.gui.Gui;
import matcher.gui.ISelectionProvider;
import matcher.srcprocess.HtmlUtil;
import matcher.srcprocess.Jadx;
import matcher.srcprocess.SrcDecorator;
import matcher.srcprocess.SrcDecorator.SrcParseException;
import matcher.type.ClassInstance;
Expand Down Expand Up @@ -88,7 +89,7 @@ private void update() {
NameType nameType = gui.getNameType().withUnmatchedTmp(unmatchedTmp);

//Gui.runAsyncTask(() -> gui.getEnv().decompile(selectedClass, true))
Gui.runAsyncTask(() -> SrcDecorator.decorate(gui.getEnv().decompile(gui.getDecompiler().get(), selectedClass, nameType), selectedClass, nameType))
Gui.runAsyncTask(() -> SrcDecorator.decorate(gui.getEnv().decompile(gui.getDecompiler().get(), selectedClass, nameType), selectedClass, nameType, gui.getDecompiler().get() instanceof Jadx))
.whenComplete((res, exc) -> {
if (cDecompId == decompId) {
if (exc != null) {
Expand Down
16 changes: 5 additions & 11 deletions src/main/java/matcher/srcprocess/Jadx.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package matcher.srcprocess;

import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;

import jadx.api.CommentsLevel;
Expand All @@ -11,11 +10,11 @@
import jadx.api.plugins.input.data.IClassData;
import jadx.api.plugins.input.data.ILoadResult;
import jadx.api.plugins.input.data.IResourceData;
import jadx.core.utils.Utils;
import jadx.plugins.input.java.JavaClassReader;
import jadx.plugins.input.java.data.JavaClassData;

import matcher.NameType;
import matcher.Util;
import matcher.type.ClassFeatureExtractor;
import matcher.type.ClassInstance;

Expand All @@ -28,20 +27,16 @@ public String decompile(ClassInstance cls, ClassFeatureExtractor env, NameType n
try (JadxDecompiler jadx = new JadxDecompiler(jadxArgs)) {
jadx.addCustomLoad(new ILoadResult() {
@Override
public void close() throws IOException {
return;
}
public void close() throws IOException { }

@Override
public void visitClasses(Consumer<IClassData> consumer) {
consumer.accept(new JavaClassData(new JavaClassReader(idGenerator.getAndIncrement(),
consumer.accept(new JavaClassData(new JavaClassReader(0,
fullClassName + ".class", cls.serialize(nameType))));
}

@Override
public void visitResources(Consumer<IResourceData> consumer) {
return;
}
public void visitResources(Consumer<IResourceData> consumer) { }

@Override
public boolean isEmpty() {
Expand All @@ -53,14 +48,13 @@ public boolean isEmpty() {
assert jadx.getClassesWithInners().size() == 1;
return jadx.getClassesWithInners().get(0).getCode();
} catch (Exception e) {
errorMessage = Utils.getStackTrace(e);
errorMessage = Util.getStackTrace(e);
}

throw new RuntimeException(errorMessage != null ? errorMessage : "JADX couldn't find the requested class");
}

private static final JadxArgs jadxArgs;
private static final AtomicInteger idGenerator = new AtomicInteger();

static {
jadxArgs = new JadxArgs() {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/matcher/srcprocess/SrcDecorator.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import matcher.type.MethodVarInstance;

public class SrcDecorator {
public static String decorate(String src, ClassInstance cls, NameType nameType) {
public static String decorate(String src, ClassInstance cls, NameType nameType, boolean decompiledByJadx) {
String name = cls.getName(nameType);

if (cls.getOuterClass() != null && name.contains("$")) {
Expand Down Expand Up @@ -93,7 +93,7 @@ public static String decorate(String src, ClassInstance cls, NameType nameType)
}
}

TypeResolver resolver = new TypeResolver();
TypeResolver resolver = new TypeResolver(decompiledByJadx);
resolver.setup(cls, nameType, cu);

cu.accept(remapVisitor, resolver);
Expand Down
9 changes: 7 additions & 2 deletions src/main/java/matcher/srcprocess/TypeResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@
import matcher.type.MethodInstance;

class TypeResolver {
TypeResolver(boolean decmpiledByJadx) {
this.decompiledByJadx = decmpiledByJadx;
}

public void setup(ClassInstance rootCls, NameType nameType, CompilationUnit cu) {
this.rootCls = rootCls;
this.env = rootCls.getEnv();
Expand Down Expand Up @@ -66,10 +70,10 @@ public ClassInstance getCls(Node node) {
StringBuilder sb = new StringBuilder();
String jadxDefaultPackage = jadx.core.Consts.DEFAULT_PACKAGE_NAME;

if (pkg != null && !pkg.equals(jadxDefaultPackage)) {
if (pkg != null && (!decompiledByJadx || !pkg.equals(jadxDefaultPackage))) {
String pkgCleaned = pkg;

if (pkg.startsWith(jadxDefaultPackage)) {
if (decompiledByJadx && pkg.startsWith(jadxDefaultPackage)) {
pkgCleaned = pkg.substring(jadxDefaultPackage.length() + 1);
}

Expand Down Expand Up @@ -275,4 +279,5 @@ public String getName(Matchable<?> e) {
private String pkg;
private final Map<String, String> imports = new HashMap<>();
private final List<String> wildcardImports = new ArrayList<>();
private final boolean decompiledByJadx;
}

0 comments on commit 30eaa0c

Please sign in to comment.