mirror of
https://github.com/skylot/jadx.git
synced 2024-11-23 04:39:46 +00:00
fix: use correct type printer in json output mode (#2053)
This commit is contained in:
parent
3e57dacfd3
commit
e723c245ee
@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import jadx.api.JadxArgs;
|
||||
import jadx.api.JadxDecompiler;
|
||||
import jadx.api.impl.AnnotatedCodeWriter;
|
||||
import jadx.api.impl.NoOpCodeCache;
|
||||
import jadx.api.impl.SimpleCodeWriter;
|
||||
import jadx.cli.LogHelper.LogLevelEnum;
|
||||
@ -44,8 +45,8 @@ public class JadxCLI {
|
||||
LogHelper.setLogLevelsForLoadingStage();
|
||||
JadxArgs jadxArgs = cliArgs.toJadxArgs();
|
||||
jadxArgs.setCodeCache(new NoOpCodeCache());
|
||||
jadxArgs.setCodeWriterProvider(SimpleCodeWriter::new);
|
||||
jadxArgs.setPluginLoader(new JadxExternalPluginsLoader());
|
||||
initCodeWriterProvider(jadxArgs);
|
||||
try (JadxDecompiler jadx = new JadxDecompiler(jadxArgs)) {
|
||||
jadx.load();
|
||||
if (checkForErrors(jadx)) {
|
||||
@ -66,6 +67,18 @@ public class JadxCLI {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static void initCodeWriterProvider(JadxArgs jadxArgs) {
|
||||
switch (jadxArgs.getOutputFormat()) {
|
||||
case JAVA:
|
||||
jadxArgs.setCodeWriterProvider(SimpleCodeWriter::new);
|
||||
break;
|
||||
case JSON:
|
||||
// needed for code offsets and source lines
|
||||
jadxArgs.setCodeWriterProvider(AnnotatedCodeWriter::new);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean checkForErrors(JadxDecompiler jadx) {
|
||||
if (jadx.getRoot().getClasses().isEmpty()) {
|
||||
if (jadx.getArgs().isSkipResources()) {
|
||||
|
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@ -77,11 +76,14 @@ public class JsonCodeGen {
|
||||
}
|
||||
jsonCls.setType(getClassTypeStr(cls));
|
||||
jsonCls.setAccessFlags(cls.getAccessFlags().rawValue());
|
||||
if (!Objects.equals(cls.getSuperClass(), ArgType.OBJECT)) {
|
||||
jsonCls.setSuperClass(getTypeAlias(cls.getSuperClass()));
|
||||
ArgType superClass = cls.getSuperClass();
|
||||
if (superClass != null
|
||||
&& !superClass.equals(ArgType.OBJECT)
|
||||
&& !cls.contains(AFlag.REMOVE_SUPER_CLASS)) {
|
||||
jsonCls.setSuperClass(getTypeAlias(classGen, superClass));
|
||||
}
|
||||
if (!cls.getInterfaces().isEmpty()) {
|
||||
jsonCls.setInterfaces(Utils.collectionMap(cls.getInterfaces(), this::getTypeAlias));
|
||||
jsonCls.setInterfaces(Utils.collectionMap(cls.getInterfaces(), clsType -> getTypeAlias(classGen, clsType)));
|
||||
}
|
||||
|
||||
ICodeWriter cw = new SimpleCodeWriter();
|
||||
@ -148,8 +150,8 @@ public class JsonCodeGen {
|
||||
jsonMth.setAlias(mth.getAlias());
|
||||
}
|
||||
jsonMth.setSignature(mth.getMethodInfo().getShortId());
|
||||
jsonMth.setReturnType(getTypeAlias(mth.getReturnType()));
|
||||
jsonMth.setArguments(Utils.collectionMap(mth.getMethodInfo().getArgumentsTypes(), this::getTypeAlias));
|
||||
jsonMth.setReturnType(getTypeAlias(classGen, mth.getReturnType()));
|
||||
jsonMth.setArguments(Utils.collectionMap(mth.getMethodInfo().getArgumentsTypes(), clsType -> getTypeAlias(classGen, clsType)));
|
||||
|
||||
MethodGen mthGen = new MethodGen(classGen, mth);
|
||||
ICodeWriter cw = new AnnotatedCodeWriter();
|
||||
@ -205,15 +207,10 @@ public class JsonCodeGen {
|
||||
return codeLines;
|
||||
}
|
||||
|
||||
private String getTypeAlias(ArgType clsType) {
|
||||
if (Objects.equals(clsType, ArgType.OBJECT)) {
|
||||
return ArgType.OBJECT.getObject();
|
||||
}
|
||||
if (clsType.isObject()) {
|
||||
ClassInfo classInfo = ClassInfo.fromType(root, clsType);
|
||||
return classInfo.getAliasFullName();
|
||||
}
|
||||
return clsType.toString();
|
||||
private String getTypeAlias(ClassGen classGen, ArgType clsType) {
|
||||
ICodeWriter code = new SimpleCodeWriter();
|
||||
classGen.useType(code, clsType);
|
||||
return code.getCodeStr();
|
||||
}
|
||||
|
||||
private String getClassTypeStr(ClassNode cls) {
|
||||
|
Loading…
Reference in New Issue
Block a user