From b8c84886a8f339b4dabd942de2aa9ac7549e488b Mon Sep 17 00:00:00 2001 From: Skylot Date: Mon, 24 Jan 2022 14:11:40 +0000 Subject: [PATCH] fix: correct use of class names for inner types (#1340) --- .../src/main/java/jadx/core/codegen/ClassGen.java | 12 ++++++++---- .../types/TestGenericsInFullInnerCls.java | 8 ++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java index 95c01031..10df14db 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/ClassGen.java @@ -537,14 +537,18 @@ public class ClassGen { ArgType innerType = baseType.getInnerType(); ArgType outerType = innerType.getOuterType(); if (outerType != null) { - useClass(code, outerType); + useClassWithShortName(code, baseType, outerType); code.add('.'); addInnerType(code, innerType); return; } + useClassWithShortName(code, baseType, innerType); + } + + private void useClassWithShortName(ICodeWriter code, ArgType baseType, ArgType type) { String fullNameObj; - if (innerType.getObject().contains(".")) { - fullNameObj = innerType.getObject(); + if (type.getObject().contains(".")) { + fullNameObj = type.getObject(); } else { fullNameObj = baseType.getObject(); } @@ -554,7 +558,7 @@ public class ClassGen { code.attachAnnotation(classNode); } code.add(classInfo.getAliasShortName()); - addGenerics(code, innerType); + addGenerics(code, type); } private void addGenerics(ICodeWriter code, ArgType type) { diff --git a/jadx-core/src/test/java/jadx/tests/integration/types/TestGenericsInFullInnerCls.java b/jadx-core/src/test/java/jadx/tests/integration/types/TestGenericsInFullInnerCls.java index 97a2232d..ba0d3729 100644 --- a/jadx-core/src/test/java/jadx/tests/integration/types/TestGenericsInFullInnerCls.java +++ b/jadx-core/src/test/java/jadx/tests/integration/types/TestGenericsInFullInnerCls.java @@ -40,4 +40,12 @@ public class TestGenericsInFullInnerCls extends SmaliTest { loadFromSmaliFiles(); // compilation should pass } + + @Test + public void testWithFullNames() { + getArgs().setUseImports(false); + getArgs().setCommentsLevel(CommentsLevel.WARN); + loadFromSmaliFiles(); + // compilation should pass + } } -- GitLab