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"; 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(); +}