Skip to content

Commit 7b6a5f7

Browse files
fix: support hook org/gradle/wrapper/WrapperExecutor.getProperty with args
1 parent e5cf79a commit 7b6a5f7

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group = "org.tingy"
12-
version = "1.4"
12+
version = "1.5"
1313

1414
dependencies {
1515
implementation("org.ow2.asm:asm:9.7")

src/main/kotlin/org/tingy/agent/gradle/WrapperExecutorTransformer.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ object WrapperExecutorTransformer {
4343
* key instruction:
4444
* ```
4545
* INVOKESPECIAL org/tingy/agent/gradle/WrapperExecutor.getProperty (Ljava/lang/String;)Ljava/lang/String;
46+
* INVOKEVIRTUAL org/tingy/agent/gradle/WrapperExecutor.getProperty (Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;
4647
* ```
4748
* @param targetOrder The order of the target instruction should be replaced, start from 1.
4849
*/
@@ -63,10 +64,10 @@ object WrapperExecutorTransformer {
6364
super.visitMethodInsn(opcode, owner, name, descriptor, isInterface)
6465
// stack [... String]
6566

66-
if (opcode == Opcodes.INVOKESPECIAL
67-
&& "org/gradle/wrapper/WrapperExecutor" == owner
67+
if ("org/gradle/wrapper/WrapperExecutor" == owner
6868
&& "getProperty" == name
69-
&& "(Ljava/lang/String;)Ljava/lang/String;" == descriptor
69+
&& TARGET_OPCODES.contains(opcode)
70+
&& TARGET_DESCRIPTORS.contains(descriptor)
7071
) {
7172
if (++count == targetOrder) {
7273
super.visitFieldInsn(
@@ -89,5 +90,13 @@ object WrapperExecutorTransformer {
8990
}
9091
}
9192
}
93+
94+
companion object {
95+
private val TARGET_OPCODES = intArrayOf(Opcodes.INVOKESPECIAL, Opcodes.INVOKEVIRTUAL)
96+
private val TARGET_DESCRIPTORS = listOf(
97+
"(Ljava/lang/String;)Ljava/lang/String;",
98+
"(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;",
99+
)
100+
}
92101
}
93102
}

src/test/kotlin/WrapperExecutorTransformerTest.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ class WrapperExecutorTransformerTest {
1212
}
1313

1414
private val bWrapperExecutorV1: ByteArray
15-
get() = ClassLoader.getSystemResourceAsStream("WrapperExecutor.v1.class")!!.readBytes()
15+
get() = readClassBytes("WrapperExecutor.v1.class")
1616

1717
private val bWrapperExecutorV2: ByteArray
18-
get() = ClassLoader.getSystemResourceAsStream("WrapperExecutor.v2.class")!!.readBytes()
18+
get() = readClassBytes("WrapperExecutor.v2.class")
19+
20+
private val bWrapperExecutorV3: ByteArray
21+
get() = readClassBytes("WrapperExecutor.v3.class")
1922

2023
@Test
2124
fun `transform wrapper v1`() {
@@ -30,4 +33,13 @@ class WrapperExecutorTransformerTest {
3033
assertNotNull(bytes)
3134
File(classDir, "WrapperExecutor.v2.class").writeBytes(bytes)
3235
}
36+
37+
@Test
38+
fun `transform wrapper v3`() {
39+
val bytes = WrapperExecutorTransformer.transform(bWrapperExecutorV3)
40+
assertNotNull(bytes)
41+
File(classDir, "WrapperExecutor.v3.class").writeBytes(bytes)
42+
}
43+
44+
private fun readClassBytes(name: String) = ClassLoader.getSystemResourceAsStream(name)!!.readBytes()
3345
}
3.19 KB
Binary file not shown.

0 commit comments

Comments
 (0)