From e3c2f1101435c4779ff9854f42b35bb257147157 Mon Sep 17 00:00:00 2001 From: MaartenS Date: Wed, 12 Jul 2023 23:31:58 +0200 Subject: [PATCH 1/2] Adjusted AssemblyConstants to use fully qualified names --- .../proguard/assembler/AssemblyConstants.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pga-lib/src/main/java/com/guardsquare/proguard/assembler/AssemblyConstants.java b/pga-lib/src/main/java/com/guardsquare/proguard/assembler/AssemblyConstants.java index 73b34e3..026becb 100644 --- a/pga-lib/src/main/java/com/guardsquare/proguard/assembler/AssemblyConstants.java +++ b/pga-lib/src/main/java/com/guardsquare/proguard/assembler/AssemblyConstants.java @@ -36,14 +36,14 @@ public final class AssemblyConstants public static final String ACC_ANNOTATION = "annotation"; - public static final String TYPE_STRING = "String"; - public static final String TYPE_CLASS = "Class"; - public static final String TYPE_METHOD_HANDLE = "MethodHandle"; - public static final String TYPE_METHOD_TYPE = "MethodType"; + public static final String TYPE_STRING = "java.lang.String"; + public static final String TYPE_CLASS = "java.lang.Class"; + public static final String TYPE_METHOD_HANDLE = "java.lang.invoke.MethodHandle"; + public static final String TYPE_METHOD_TYPE = "java.lang.invoke.MethodType"; public static final String TYPE_DYNAMIC = "Dynamic"; - public static final String TYPE_ANNOTATION = "Annotation"; - public static final String TYPE_ENUM = "Enum"; - public static final String TYPE_ARRAY = "Array"; + public static final String TYPE_ANNOTATION = "java.lang.Annotation"; + public static final String TYPE_ENUM = "java.lang.Enum"; + public static final String TYPE_ARRAY = "java.lang.reflect.Array"; public static final String TYPE_DOUBLE = "D"; public static final String TYPE_FLOAT = "F"; public static final String TYPE_LONG = "L"; From 78425749308a544b7eec9d26a993715a6c2cc690 Mon Sep 17 00:00:00 2001 From: MaartenS11 Date: Fri, 15 Sep 2023 14:09:54 +0200 Subject: [PATCH 2/2] Added a test that would break with the old constants but not with the updated constants --- .../proguard/AssembleDisassembleTest.kt | 29 ++++++++++++++ .../proguard/AssemblerErrorsTest.kt | 14 ------- .../com/guardsquare/proguard/TestUtils.kt | 38 +++++++++++++++++++ 3 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 pga-lib/src/test/kotlin/com/guardsquare/proguard/AssembleDisassembleTest.kt create mode 100644 pga-lib/src/test/kotlin/com/guardsquare/proguard/TestUtils.kt diff --git a/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssembleDisassembleTest.kt b/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssembleDisassembleTest.kt new file mode 100644 index 0000000..af1b176 --- /dev/null +++ b/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssembleDisassembleTest.kt @@ -0,0 +1,29 @@ +package com.guardsquare.proguard + +import io.kotest.core.spec.style.FreeSpec +import proguard.testutils.ClassPoolBuilder +import proguard.testutils.JavaSource + +class AssembleDisassembleTest : FreeSpec({ + "Test TYPE_METHOD_TYPE constant" { + val classBPools = ClassPoolBuilder.fromSource( + JavaSource( + "Main.java", + """ + import java.util.function.Consumer; + + public class Main { + public static void test(Consumer lambda) { + lambda.accept("Hello world!"); + } + + public static void main(String[] args) { + test(System.out::println); + } + } + """.trimIndent()) + ) + + buildProgramClass(disassembleClass(classBPools.programClassPool.getClass("Main"))) + } +}) diff --git a/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssemblerErrorsTest.kt b/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssemblerErrorsTest.kt index 41a7168..1987d0e 100644 --- a/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssemblerErrorsTest.kt +++ b/pga-lib/src/test/kotlin/com/guardsquare/proguard/AssemblerErrorsTest.kt @@ -114,17 +114,3 @@ class AssemblerErrorsTest : FreeSpec({ } } }) - -/** - * Helper function to build and parse a java bytecode class from a string - */ -fun buildProgramClass(jbc: String) { - val programClass = ProgramClass() - programClass.accept( - ClassParser( - Parser( - StringReader(jbc), - ), - ), - ) -} diff --git a/pga-lib/src/test/kotlin/com/guardsquare/proguard/TestUtils.kt b/pga-lib/src/test/kotlin/com/guardsquare/proguard/TestUtils.kt new file mode 100644 index 0000000..295318b --- /dev/null +++ b/pga-lib/src/test/kotlin/com/guardsquare/proguard/TestUtils.kt @@ -0,0 +1,38 @@ +package com.guardsquare.proguard + +import com.guardsquare.proguard.assembler.ClassParser +import com.guardsquare.proguard.assembler.Parser +import com.guardsquare.proguard.disassembler.ClassPrinter +import com.guardsquare.proguard.disassembler.Printer +import proguard.classfile.Clazz +import proguard.classfile.ProgramClass +import java.io.StringReader +import java.io.StringWriter + +/** + * Helper function to build and parse a java bytecode class from a string + */ +fun buildProgramClass(jbc: String) { + val programClass = ProgramClass() + programClass.accept( + ClassParser( + Parser( + StringReader(jbc), + ), + ), + ) +} + +/** + * Helper function to disassemble a [Clazz] object. + */ +fun disassembleClass(clazz: Clazz): String { + val writer = StringWriter() + clazz.accept( + ClassPrinter( + Printer(writer) + ) + ) + + return writer.toString(); +}