Use JvmPackageTable from bootstrap compiler in KotlinModuleShadowTransformer
Instead of generating another copy of it into buildSrc. Also move KotlinModuleShadowTransformer to kotlin-reflect's build script, to its only usage
This commit is contained in:
@@ -3,7 +3,6 @@ buildscript {
|
||||
val buildSrcKotlinVersion: String by extra(findProperty("buildSrc.kotlin.version")?.toString() ?: embeddedKotlinVersion)
|
||||
val buildSrcKotlinRepo: String? by extra(findProperty("buildSrc.kotlin.repo") as String?)
|
||||
extra["versions.shadow"] = "2.0.1"
|
||||
extra["versions.protobuf-java"] = "2.6.1"
|
||||
|
||||
repositories {
|
||||
buildSrcKotlinRepo?.let {
|
||||
@@ -47,7 +46,6 @@ dependencies {
|
||||
// compile("org.jetbrains.kotlin:kotlin-gradle-plugin:${rootProject.extra["bootstrap_kotlin_version"]}")
|
||||
compile("com.github.jengelman.gradle.plugins:shadow:${property("versions.shadow")}")
|
||||
compile("org.ow2.asm:asm-all:6.0_BETA")
|
||||
compile("com.google.protobuf:protobuf-java:${property("versions.protobuf-java")}")
|
||||
}
|
||||
|
||||
samWithReceiver {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,62 +0,0 @@
|
||||
import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer
|
||||
import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext
|
||||
import org.gradle.api.file.FileTreeElement
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable
|
||||
import shadow.org.apache.tools.zip.ZipEntry
|
||||
import shadow.org.apache.tools.zip.ZipOutputStream
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.DataInputStream
|
||||
import java.io.DataOutputStream
|
||||
|
||||
class KotlinModuleShadowTransformer(private val logger: Logger) : Transformer {
|
||||
private data class Entry(val path: String, val bytes: ByteArray)
|
||||
private val data = mutableListOf<Entry>()
|
||||
|
||||
override fun canTransformResource(element: FileTreeElement): Boolean =
|
||||
element.path.substringAfterLast(".") == KOTLIN_MODULE
|
||||
|
||||
override fun transform(context: TransformerContext) {
|
||||
fun relocate(content: String): String =
|
||||
context.relocators.fold(content) { acc, relocator -> relocator.applyToSourceContent(acc) }
|
||||
|
||||
val input = DataInputStream(context.`is`)
|
||||
val version = IntArray(input.readInt()) { input.readInt() }
|
||||
logger.info("Transforming ${context.path} with version ${version.toList()}")
|
||||
|
||||
val table = JvmPackageTable.PackageTable.parseFrom(context.`is`).toBuilder()
|
||||
|
||||
val newTable = JvmPackageTable.PackageTable.newBuilder().apply {
|
||||
for (packageParts in table.packagePartsList + table.metadataPartsList) {
|
||||
addPackageParts(JvmPackageTable.PackageParts.newBuilder(packageParts).apply {
|
||||
packageFqName = relocate(packageFqName)
|
||||
})
|
||||
}
|
||||
addAllJvmPackageName(table.jvmPackageNameList.map(::relocate))
|
||||
}
|
||||
|
||||
val baos = ByteArrayOutputStream()
|
||||
val output = DataOutputStream(baos)
|
||||
output.writeInt(version.size)
|
||||
version.forEach(output::writeInt)
|
||||
newTable.build().writeTo(output)
|
||||
output.flush()
|
||||
|
||||
data += Entry(context.path, baos.toByteArray())
|
||||
}
|
||||
|
||||
override fun hasTransformedResource(): Boolean =
|
||||
data.isNotEmpty()
|
||||
|
||||
override fun modifyOutputStream(os: ZipOutputStream) {
|
||||
for ((path, bytes) in data) {
|
||||
os.putNextEntry(ZipEntry(path))
|
||||
os.write(bytes)
|
||||
}
|
||||
data.clear()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val KOTLIN_MODULE = "kotlin_module"
|
||||
}
|
||||
}
|
||||
@@ -73,8 +73,6 @@ fun main(args: Array<String>) {
|
||||
modifyAndExecProtoc(protoPath)
|
||||
}
|
||||
|
||||
generateJvmPackageTableToBuildSrc()
|
||||
|
||||
println()
|
||||
println("Do not forget to run GenerateProtoBufCompare")
|
||||
}
|
||||
@@ -161,7 +159,3 @@ private fun modifyForDebug(protoPath: ProtoPath): String {
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
private fun generateJvmPackageTableToBuildSrc() {
|
||||
execProtoc("core/descriptors.jvm/src/jvm_package_table.proto", "buildSrc/src/main/java")
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmPackageTable
|
||||
import proguard.gradle.ProGuardTask
|
||||
import shadow.org.apache.tools.zip.ZipEntry
|
||||
import shadow.org.apache.tools.zip.ZipOutputStream
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.DataInputStream
|
||||
import java.io.DataOutputStream
|
||||
|
||||
description = "Kotlin Full Reflection Library"
|
||||
|
||||
@@ -63,6 +71,59 @@ val copyAnnotations by task<Sync> {
|
||||
|
||||
tasks.getByName("compileJava").dependsOn(copyAnnotations)
|
||||
|
||||
class KotlinModuleShadowTransformer(private val logger: Logger) : Transformer {
|
||||
@Suppress("ArrayInDataClass")
|
||||
private data class Entry(val path: String, val bytes: ByteArray)
|
||||
private val data = mutableListOf<Entry>()
|
||||
|
||||
override fun canTransformResource(element: FileTreeElement): Boolean =
|
||||
element.path.substringAfterLast(".") == KOTLIN_MODULE
|
||||
|
||||
override fun transform(context: TransformerContext) {
|
||||
fun relocate(content: String): String =
|
||||
context.relocators.fold(content) { acc, relocator -> relocator.applyToSourceContent(acc) }
|
||||
|
||||
val input = DataInputStream(context.`is`)
|
||||
val version = IntArray(input.readInt()) { input.readInt() }
|
||||
logger.info("Transforming ${context.path} with version ${version.toList()}")
|
||||
|
||||
val table = JvmPackageTable.PackageTable.parseFrom(context.`is`).toBuilder()
|
||||
|
||||
val newTable = JvmPackageTable.PackageTable.newBuilder().apply {
|
||||
for (packageParts in table.packagePartsList + table.metadataPartsList) {
|
||||
addPackageParts(JvmPackageTable.PackageParts.newBuilder(packageParts).apply {
|
||||
packageFqName = relocate(packageFqName)
|
||||
})
|
||||
}
|
||||
addAllJvmPackageName(table.jvmPackageNameList.map(::relocate))
|
||||
}
|
||||
|
||||
val baos = ByteArrayOutputStream()
|
||||
val output = DataOutputStream(baos)
|
||||
output.writeInt(version.size)
|
||||
version.forEach(output::writeInt)
|
||||
newTable.build().writeTo(output)
|
||||
output.flush()
|
||||
|
||||
data += Entry(context.path, baos.toByteArray())
|
||||
}
|
||||
|
||||
override fun hasTransformedResource(): Boolean =
|
||||
data.isNotEmpty()
|
||||
|
||||
override fun modifyOutputStream(os: ZipOutputStream) {
|
||||
for ((path, bytes) in data) {
|
||||
os.putNextEntry(ZipEntry(path))
|
||||
os.write(bytes)
|
||||
}
|
||||
data.clear()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val KOTLIN_MODULE = "kotlin_module"
|
||||
}
|
||||
}
|
||||
|
||||
val reflectShadowJar by task<ShadowJar> {
|
||||
classifier = "shadow"
|
||||
version = null
|
||||
|
||||
Reference in New Issue
Block a user