Skip to content

Commit e9a329e

Browse files
committed
Add the ability to rename annotations added by the Scala compiler.
1 parent 24c371c commit e9a329e

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

gradle/dependencies.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ dependencies {
1414
implementation('org.vafer:jdependency:2.7.0') {
1515
exclude group: 'org.ow2.asm'
1616
}
17+
// For Scala annotation remapping
18+
implementation 'com.eed3si9n.jarjarabrams:jarjar-abrams-core_2.13:1.8.1'
1719

1820
testImplementation('org.spockframework:spock-core:2.0-groovy-3.0') {
1921
exclude group: 'org.codehaus.groovy'

src/main/groovy/com/github/jengelman/gradle/plugins/shadow/impl/RelocatorRemapper.groovy

+11
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ import com.github.jengelman.gradle.plugins.shadow.relocation.RelocatePathContext
2525
import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator
2626
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowCopyAction.RelativeArchivePath
2727
import org.objectweb.asm.commons.Remapper
28+
import scala.Function1
29+
import scala.Option
30+
import scala.jdk.FunctionWrappers
2831

2932
import java.util.regex.Matcher
3033
import java.util.regex.Pattern
@@ -40,10 +43,18 @@ class RelocatorRemapper extends Remapper {
4043

4144
List<Relocator> relocators
4245
ShadowStats stats
46+
Function1<String, Option<String>> scalaRenamer
4347

4448
RelocatorRemapper(List<Relocator> relocators, ShadowStats stats) {
4549
this.relocators = relocators
4650
this.stats = stats
51+
this.scalaRenamer =
52+
new FunctionWrappers.FromJavaFunction(
53+
(String string) -> {
54+
Optional<Relocator> maybe = relocators.stream().filter(x -> x.canRelocateClass(string)).findAny()
55+
Option.apply(maybe.map(it.relocateClass(new RelocateClassContext(string, stats))).orElse(null))
56+
}
57+
)
4758
}
4859

4960
boolean hasRelocators() {

src/main/groovy/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.groovy

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.jengelman.gradle.plugins.shadow.tasks
22

3+
import com.eed3si9n.jarjarabrams.scalasig.ScalaSigClassVisitor
34
import com.github.jengelman.gradle.plugins.shadow.ShadowStats
45
import com.github.jengelman.gradle.plugins.shadow.impl.RelocatorRemapper
56
import com.github.jengelman.gradle.plugins.shadow.internal.GradleVersionUtil
@@ -348,7 +349,7 @@ class ShadowCopyAction implements CopyAction {
348349
// that use the constant pool to determine the dependencies of a class.
349350
ClassWriter cw = new ClassWriter(0)
350351

351-
ClassVisitor cv = new ClassRemapper(cw, remapper)
352+
ClassVisitor cv = new ScalaSigClassVisitor(new ClassRemapper(cw, remapper), remapper.scalaRenamer)
352353

353354
try {
354355
cr.accept(cv, ClassReader.EXPAND_FRAMES)

0 commit comments

Comments
 (0)