Skip to content

Commit 5497d13

Browse files
authored
Update RelocatorRemapper class pattern to cover more Java method descriptors (#1731)
* Test more cases like `void method(boolean arg1, org.package.ClassA arg2)` in `relocateSignaturePatterns` * Update `classPattern` * Update changelog
1 parent b873c70 commit 5497d13

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

docs/changes/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
- Move injecting `Main-Class` manifest attr logic from `doFirst` into `copy`. ([#1724](https://github.com/GradleUp/shadow/pull/1724))
2626
- Deprecate `InheritManifest`. ([#1722](https://github.com/GradleUp/shadow/pull/1722))
2727
- Use default `JavaExec` error message when main class is not set. ([#1725](https://github.com/GradleUp/shadow/pull/1725))
28+
- Update `RelocatorRemapper` class pattern to cover more Java method descriptors. ([#1731](https://github.com/GradleUp/shadow/pull/1731))
2829

2930
### Fixed
3031

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ internal class RelocatorRemapper(
6565
}
6666

6767
private companion object {
68-
val classPattern: Pattern = Pattern.compile("([\\[()]*)?L([^;]+);?")
68+
/**
69+
* https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html
70+
*/
71+
val classPattern: Pattern = Pattern.compile("([\\[()BCDFIJSZ]*)?L([^;]+);?")
6972
}
7073
}

src/test/kotlin/com/github/jengelman/gradle/plugins/shadow/relocation/RelocatorRemapperTest.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ class RelocatorRemapperTest {
2020
}
2121

2222
private companion object {
23+
val primitiveTypes = setOf('B', 'C', 'D', 'F', 'I', 'J', 'S', 'Z')
24+
25+
val primitiveTypeArguments = primitiveTypes.map {
26+
// Methods like `void method(boolean arg1, org.package.ClassA arg2)`
27+
Arguments.of("(${it}Lorg/package/ClassA;)V", "(${it}Lshadow/org/package/ClassA;)V")
28+
}
29+
2330
@JvmStatic
2431
fun classSignatureStringConstants() = listOf(
2532
// Normal class.
@@ -36,6 +43,6 @@ class RelocatorRemapperTest {
3643
Arguments.of("(Lorg/package/ClassA;Lorg/package/ClassB;)", "(Lshadow/org/package/ClassA;Lshadow/org/package/ClassB;)"),
3744
// Method return types.
3845
Arguments.of("()Lorg/package/ClassA;Lorg/package/ClassB;", "()Lshadow/org/package/ClassA;Lshadow/org/package/ClassB;"),
39-
)
46+
) + primitiveTypeArguments
4047
}
4148
}

0 commit comments

Comments
 (0)