Maxlib-GradlePlugin/src/main/groovy/io/izzel/taboolib/gradle/RelocateRemapper.groovy

40 lines
1.1 KiB
Groovy

package io.izzel.taboolib.gradle
import groovy.transform.Canonical
import org.objectweb.asm.commons.ClassRemapper
import org.objectweb.asm.commons.Remapper
@Canonical
class RelocateRemapper extends Remapper {
Map<String, String> dot
Map<String, String> slash
Map<String, Set<String>> use = new TreeMap()
ClassRemapper remapper
@Override
Object mapValue(Object value) {
if (value instanceof String) {
def match = dot.find { (value as String).startsWith(it.key) }
if (match) {
return (match.value + (value as String).substring(match.key.length())).toString()
}
}
return super.mapValue(value)
}
@SuppressWarnings('GroovyAccessibility')
@Override
String map(String internalName) {
if (remapper != null) {
use.computeIfAbsent(remapper.className) { new HashSet() }.add(internalName)
}
def match = slash.find { internalName.startsWith(it.key) }
if (match) {
return match.value + internalName.substring(match.key.length())
} else {
return internalName
}
}
}