Rewrite kotlin-reflect build script from Groovy to Kotlin
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
||||||
|
|
||||||
|
import groovy.lang.Closure
|
||||||
import org.gradle.api.*
|
import org.gradle.api.*
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.kotlin.dsl.*
|
import org.gradle.kotlin.dsl.*
|
||||||
@@ -11,6 +12,9 @@ import java.io.File
|
|||||||
|
|
||||||
inline fun <reified T : Task> Project.task(noinline configuration: T.() -> Unit) = tasks.creating(T::class, configuration)
|
inline fun <reified T : Task> Project.task(noinline configuration: T.() -> Unit) = tasks.creating(T::class, configuration)
|
||||||
|
|
||||||
|
fun Project.callGroovy(name: String, vararg args: Any?): Any? {
|
||||||
|
return (property(name) as Closure<*>).call(*args)
|
||||||
|
}
|
||||||
|
|
||||||
fun AbstractTask.dependsOnTaskIfExists(task: String, project: Project?, parentProject: Project?) {
|
fun AbstractTask.dependsOnTaskIfExists(task: String, project: Project?, parentProject: Project?) {
|
||||||
val thisTask = this
|
val thisTask = this
|
||||||
|
|||||||
@@ -521,7 +521,8 @@
|
|||||||
":kotlin-annotation-processing": {
|
":kotlin-annotation-processing": {
|
||||||
"conventions": {
|
"conventions": {
|
||||||
"base": "org.gradle.api.plugins.BasePluginConvention",
|
"base": "org.gradle.api.plugins.BasePluginConvention",
|
||||||
"java": "org.gradle.api.plugins.JavaPluginConvention"
|
"java": "org.gradle.api.plugins.JavaPluginConvention",
|
||||||
|
"maven": "org.gradle.api.plugins.MavenPluginConvention"
|
||||||
},
|
},
|
||||||
"configurations": [
|
"configurations": [
|
||||||
"apiElements",
|
"apiElements",
|
||||||
@@ -539,6 +540,7 @@
|
|||||||
"runtimeElements",
|
"runtimeElements",
|
||||||
"runtimeJar",
|
"runtimeJar",
|
||||||
"runtimeOnly",
|
"runtimeOnly",
|
||||||
|
"signatures",
|
||||||
"testCompile",
|
"testCompile",
|
||||||
"testCompileClasspath",
|
"testCompileClasspath",
|
||||||
"testCompileOnly",
|
"testCompileOnly",
|
||||||
@@ -553,7 +555,27 @@
|
|||||||
"kotlin": "org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension",
|
"kotlin": "org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension",
|
||||||
"kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension",
|
"kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension",
|
||||||
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
||||||
"reporting": "org.gradle.api.reporting.ReportingExtension"
|
"reporting": "org.gradle.api.reporting.ReportingExtension",
|
||||||
|
"signing": "org.gradle.plugins.signing.SigningExtension"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
":kotlin-annotation-processing-embeddable": {
|
||||||
|
"conventions": {
|
||||||
|
"base": "org.gradle.api.plugins.BasePluginConvention",
|
||||||
|
"maven": "org.gradle.api.plugins.MavenPluginConvention"
|
||||||
|
},
|
||||||
|
"configurations": [
|
||||||
|
"archives",
|
||||||
|
"compilerDummyJar",
|
||||||
|
"default",
|
||||||
|
"packedJars",
|
||||||
|
"runtimeJar",
|
||||||
|
"signatures"
|
||||||
|
],
|
||||||
|
"extensions": {
|
||||||
|
"ext": "org.gradle.api.plugins.ExtraPropertiesExtension",
|
||||||
|
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
||||||
|
"signing": "org.gradle.plugins.signing.SigningExtension"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
":kotlin-annotation-processing-gradle": {
|
":kotlin-annotation-processing-gradle": {
|
||||||
@@ -1263,8 +1285,6 @@
|
|||||||
"default",
|
"default",
|
||||||
"distJar",
|
"distJar",
|
||||||
"implementation",
|
"implementation",
|
||||||
"kapt",
|
|
||||||
"kaptTest",
|
|
||||||
"mainJar",
|
"mainJar",
|
||||||
"proguardDeps",
|
"proguardDeps",
|
||||||
"runtime",
|
"runtime",
|
||||||
@@ -1285,13 +1305,46 @@
|
|||||||
"extensions": {
|
"extensions": {
|
||||||
"ext": "org.gradle.api.plugins.ExtraPropertiesExtension",
|
"ext": "org.gradle.api.plugins.ExtraPropertiesExtension",
|
||||||
"shadow": "com.github.jengelman.gradle.plugins.shadow.ShadowExtension",
|
"shadow": "com.github.jengelman.gradle.plugins.shadow.ShadowExtension",
|
||||||
"kotlin": "org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension",
|
|
||||||
"kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension",
|
|
||||||
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
||||||
"reporting": "org.gradle.api.reporting.ReportingExtension",
|
"reporting": "org.gradle.api.reporting.ReportingExtension",
|
||||||
"signing": "org.gradle.plugins.signing.SigningExtension"
|
"signing": "org.gradle.plugins.signing.SigningExtension"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
":kotlin-reflect-api": {
|
||||||
|
"conventions": {
|
||||||
|
"base": "org.gradle.api.plugins.BasePluginConvention",
|
||||||
|
"java": "org.gradle.api.plugins.JavaPluginConvention"
|
||||||
|
},
|
||||||
|
"configurations": [
|
||||||
|
"apiElements",
|
||||||
|
"archives",
|
||||||
|
"compile",
|
||||||
|
"compileClasspath",
|
||||||
|
"compileOnly",
|
||||||
|
"default",
|
||||||
|
"implementation",
|
||||||
|
"kapt",
|
||||||
|
"kaptTest",
|
||||||
|
"runtime",
|
||||||
|
"runtimeClasspath",
|
||||||
|
"runtimeElements",
|
||||||
|
"runtimeOnly",
|
||||||
|
"testCompile",
|
||||||
|
"testCompileClasspath",
|
||||||
|
"testCompileOnly",
|
||||||
|
"testImplementation",
|
||||||
|
"testRuntime",
|
||||||
|
"testRuntimeClasspath",
|
||||||
|
"testRuntimeOnly"
|
||||||
|
],
|
||||||
|
"extensions": {
|
||||||
|
"ext": "org.gradle.api.plugins.ExtraPropertiesExtension",
|
||||||
|
"kotlin": "org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension",
|
||||||
|
"kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension",
|
||||||
|
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
||||||
|
"reporting": "org.gradle.api.reporting.ReportingExtension"
|
||||||
|
}
|
||||||
|
},
|
||||||
":kotlin-runner": {
|
":kotlin-runner": {
|
||||||
"conventions": {
|
"conventions": {
|
||||||
"base": "org.gradle.api.plugins.BasePluginConvention",
|
"base": "org.gradle.api.plugins.BasePluginConvention",
|
||||||
@@ -3904,6 +3957,7 @@
|
|||||||
],
|
],
|
||||||
"extensions": {
|
"extensions": {
|
||||||
"ext": "org.gradle.api.plugins.ExtraPropertiesExtension",
|
"ext": "org.gradle.api.plugins.ExtraPropertiesExtension",
|
||||||
|
"idea": "org.gradle.plugins.ide.idea.model.IdeaModel",
|
||||||
"kotlin": "org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension",
|
"kotlin": "org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension",
|
||||||
"kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension",
|
"kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension",
|
||||||
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
"defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet",
|
||||||
|
|||||||
+100
-103
@@ -1,177 +1,174 @@
|
|||||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||||
|
import proguard.gradle.ProGuardTask
|
||||||
|
|
||||||
description = 'Kotlin Full Reflection Library'
|
description = "Kotlin Full Reflection Library"
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'net.sf.proguard:proguard-gradle:5.2.1'
|
classpath("net.sf.proguard:proguard-gradle:5.2.1")
|
||||||
classpath "com.github.jengelman.gradle.plugins:shadow:${property("versions.shadow")}"
|
classpath("com.github.jengelman.gradle.plugins:shadow:${property("versions.shadow")}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.github.johnrengelman.shadow'
|
plugins { java }
|
||||||
apply plugin: 'java'
|
|
||||||
|
|
||||||
configureJavaOnlyJvm6Project(project)
|
callGroovy("configureJavaOnlyJvm6Project", this)
|
||||||
configurePublishing(project)
|
publish()
|
||||||
|
|
||||||
def core = "${rootDir}/core"
|
val core = "$rootDir/core"
|
||||||
def annotationsSrc = "${buildDir}/annotations"
|
val annotationsSrc = "$buildDir/annotations"
|
||||||
def relocatedCoreSrc = "${buildDir}/core-relocated"
|
val relocatedCoreSrc = "$buildDir/core-relocated"
|
||||||
|
val libsDir = property("libsDir")
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
"main" {
|
||||||
java {
|
java.srcDir(annotationsSrc)
|
||||||
srcDir annotationsSrc
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
val proguardDeps by configurations.creating
|
||||||
proguardDeps
|
val shadows by configurations.creating {
|
||||||
shadows { transitive = false }
|
isTransitive = false
|
||||||
compileOnly.extendsFrom(shadows)
|
|
||||||
mainJar
|
|
||||||
}
|
}
|
||||||
|
configurations.getByName("compileOnly").extendsFrom(shadows)
|
||||||
|
val mainJar by configurations.creating
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile project(':kotlin-stdlib')
|
compile(project(":kotlin-stdlib"))
|
||||||
|
|
||||||
proguardDeps project(':kotlin-stdlib')
|
proguardDeps(project(":kotlin-stdlib"))
|
||||||
|
|
||||||
shadows project(':kotlin-reflect-api')
|
shadows(project(":kotlin-reflect-api"))
|
||||||
shadows project(':core:descriptors')
|
shadows(project(":core:descriptors"))
|
||||||
shadows project(':core:descriptors.jvm')
|
shadows(project(":core:descriptors.jvm"))
|
||||||
shadows project(':core:deserialization')
|
shadows(project(":core:deserialization"))
|
||||||
shadows project(':core:descriptors.runtime')
|
shadows(project(":core:descriptors.runtime"))
|
||||||
shadows project(':core:util.runtime')
|
shadows(project(":core:util.runtime"))
|
||||||
shadows 'javax.inject:javax.inject:1'
|
shadows("javax.inject:javax.inject:1")
|
||||||
shadows project(path: ':custom-dependencies:protobuf-lite', configuration: 'default')
|
shadows(project(":custom-dependencies:protobuf-lite", configuration = "default"))
|
||||||
}
|
}
|
||||||
|
|
||||||
task copyAnnotations(type: Sync) {
|
val copyAnnotations by task<Sync> {
|
||||||
// copy just two missing annotations
|
// copy just two missing annotations
|
||||||
from("${core}/runtime.jvm/src") {
|
from("$core/runtime.jvm/src") {
|
||||||
include "**/Mutable.java"
|
include("**/Mutable.java")
|
||||||
include "**/ReadOnly.java"
|
include("**/ReadOnly.java")
|
||||||
}
|
}
|
||||||
into(annotationsSrc)
|
into(annotationsSrc)
|
||||||
includeEmptyDirs false
|
includeEmptyDirs = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.getByName("compileJava").dependsOn(copyAnnotations)
|
||||||
|
|
||||||
compileJava {
|
val reflectShadowJar by task<ShadowJar> {
|
||||||
dependsOn copyAnnotations
|
classifier = "shadow"
|
||||||
// options.compilerArgs.addAll(["-Xlint:unchecked"])
|
|
||||||
}
|
|
||||||
|
|
||||||
task reflectShadowJar(type: ShadowJar) {
|
|
||||||
classifier = 'shadow'
|
|
||||||
version = null
|
version = null
|
||||||
manifestAttributes(manifest, project, 'Main')
|
callGroovy("manifestAttributes", manifest, project, "Main")
|
||||||
|
|
||||||
from(sourceSets.main.output)
|
from(the<JavaPluginConvention>().sourceSets.getByName("main").output)
|
||||||
from(project(":core:descriptors.jvm").sourceSets.main.resources) {
|
from(project(":core:descriptors.jvm").the<JavaPluginConvention>().sourceSets.getByName("main").resources) {
|
||||||
include 'META-INF/services/**'
|
include("META-INF/services/**")
|
||||||
}
|
}
|
||||||
from(project(":core:deserialization").sourceSets.main.resources) {
|
from(project(":core:deserialization").the<JavaPluginConvention>().sourceSets.getByName("main").resources) {
|
||||||
include 'META-INF/services/**'
|
include("META-INF/services/**")
|
||||||
}
|
}
|
||||||
|
|
||||||
transform(new KotlinModuleShadowTransformer(logger))
|
transform(KotlinModuleShadowTransformer(logger))
|
||||||
|
|
||||||
configurations = [project.configurations.shadows]
|
configurations = listOf(shadows)
|
||||||
relocate 'org.jetbrains.kotlin', 'kotlin.reflect.jvm.internal.impl'
|
relocate("org.jetbrains.kotlin", "kotlin.reflect.jvm.internal.impl")
|
||||||
relocate 'javax.inject', 'kotlin.reflect.jvm.internal.impl.javax.inject'
|
relocate("javax.inject", "kotlin.reflect.jvm.internal.impl.javax.inject")
|
||||||
mergeServiceFiles()
|
mergeServiceFiles()
|
||||||
}
|
}
|
||||||
|
|
||||||
task stripMetadata {
|
val stripMetadata by tasks.creating {
|
||||||
dependsOn reflectShadowJar
|
dependsOn("reflectShadowJar")
|
||||||
def inputJar = reflectShadowJar.archivePath
|
val inputJar = reflectShadowJar.archivePath
|
||||||
def outputJar = new File("${libsDir}/kotlin-reflect-stripped.jar")
|
val outputJar = File("$libsDir/kotlin-reflect-stripped.jar")
|
||||||
inputs.file(inputJar)
|
inputs.file(inputJar)
|
||||||
outputs.file(outputJar)
|
outputs.file(outputJar)
|
||||||
doLast {
|
doLast {
|
||||||
StripMetadataKt.stripMetadata(logger, "kotlin/reflect/jvm/internal/impl/.*", inputJar, outputJar)
|
stripMetadata(logger, "kotlin/reflect/jvm/internal/impl/.*", inputJar, outputJar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def mainArchiveName = "${archivesBaseName}-${project.version}.jar"
|
val mainArchiveName = "${property("archivesBaseName")}-$version.jar"
|
||||||
def outputJarPath = "${libsDir}/${mainArchiveName}"
|
val outputJarPath = "$libsDir/$mainArchiveName"
|
||||||
def rtJar = ['jre/lib/rt.jar', '../Classes/classes.jar'].collect { new File(JDK_16, it) }.find { it.isFile() }
|
val rtJar = listOf("jre/lib/rt.jar", "../Classes/classes.jar").map { File("${property("JDK_16")}/$it") }.first(File::isFile)
|
||||||
|
|
||||||
task proguard(type: proguard.gradle.ProGuardTask) {
|
val proguard by task<ProGuardTask> {
|
||||||
dependsOn stripMetadata
|
dependsOn(stripMetadata)
|
||||||
inputs.files(stripMetadata.outputs.files)
|
inputs.files(stripMetadata.outputs.files)
|
||||||
outputs.file(outputJarPath)
|
outputs.file(outputJarPath)
|
||||||
|
|
||||||
injars stripMetadata.outputs.files
|
injars(stripMetadata.outputs.files)
|
||||||
outjars outputJarPath
|
outjars(outputJarPath)
|
||||||
|
|
||||||
libraryjars configurations.proguardDeps
|
libraryjars(proguardDeps)
|
||||||
libraryjars rtJar
|
libraryjars(rtJar)
|
||||||
|
|
||||||
configuration "${core}/reflection.jvm/reflection.pro"
|
configuration("$core/reflection.jvm/reflection.pro")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val relocateCoreSources by task<Copy> {
|
||||||
task relocateCoreSources(type: Copy) {
|
|
||||||
def commonPackage = "org/jetbrains/kotlin"
|
|
||||||
|
|
||||||
doFirst {
|
doFirst {
|
||||||
delete(relocatedCoreSrc)
|
delete(relocatedCoreSrc)
|
||||||
}
|
}
|
||||||
|
|
||||||
from "${core}/descriptors/src/${commonPackage}"
|
from("$core/descriptors/src")
|
||||||
from "${core}/descriptors.jvm/src/${commonPackage}"
|
from("$core/descriptors.jvm/src")
|
||||||
from "${core}/descriptors.runtime/src/${commonPackage}"
|
from("$core/descriptors.runtime/src")
|
||||||
from "${core}/deserialization/src/${commonPackage}"
|
from("$core/deserialization/src")
|
||||||
from "${core}/util.runtime/src/${commonPackage}"
|
from("$core/util.runtime/src")
|
||||||
|
|
||||||
into "${relocatedCoreSrc}/kotlin/reflect/jvm/internal/impl"
|
into(relocatedCoreSrc)
|
||||||
|
includeEmptyDirs = false
|
||||||
|
|
||||||
doLast {
|
eachFile {
|
||||||
ant.replaceregexp(
|
path = path.replace("org/jetbrains/kotlin", "kotlin/reflect/jvm/internal/impl")
|
||||||
match: 'org\\.jetbrains\\.kotlin',
|
}
|
||||||
replace: 'kotlin.reflect.jvm.internal.impl',
|
|
||||||
flags: 'g'
|
filter { line ->
|
||||||
) {
|
line.replace("org.jetbrains.kotlin", "kotlin.reflect.jvm.internal.impl")
|
||||||
fileset(dir: relocatedCoreSrc)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jar.enabled false
|
tasks.getByName("jar").enabled = false
|
||||||
|
|
||||||
task relocatedSourcesJar(type: Jar) {
|
val relocatedSourcesJar by task<Jar> {
|
||||||
dependsOn relocateCoreSources
|
dependsOn(relocateCoreSources)
|
||||||
classifier 'sources'
|
classifier = "sources"
|
||||||
from relocatedCoreSrc
|
from(relocatedCoreSrc)
|
||||||
from "${core}/reflection.jvm/src"
|
from("$core/reflection.jvm/src")
|
||||||
}
|
}
|
||||||
|
|
||||||
def artifactJar = [file: file(outputJarPath), builtBy: proguard, name: archivesBaseName]
|
val result = proguard
|
||||||
|
|
||||||
task dexMethodCount(type: DexMethodCount) {
|
val dexMethodCount by task<DexMethodCount> {
|
||||||
dependsOn(artifactJar.builtBy)
|
dependsOn(result)
|
||||||
jarFile = artifactJar.file
|
jarFile = File(outputJarPath)
|
||||||
ownPackages = ['kotlin.reflect']
|
ownPackages = listOf("kotlin.reflect")
|
||||||
}
|
}
|
||||||
check.dependsOn(dexMethodCount)
|
tasks.getByName("check").dependsOn(dexMethodCount)
|
||||||
|
|
||||||
artifacts {
|
artifacts {
|
||||||
mainJar artifactJar
|
val artifactJar = mapOf(
|
||||||
runtime artifactJar
|
"file" to File(outputJarPath),
|
||||||
archives artifactJar
|
"builtBy" to result,
|
||||||
archives relocatedSourcesJar
|
"name" to property("archivesBaseName")
|
||||||
archives javadocJar
|
)
|
||||||
|
|
||||||
|
add(mainJar.name, artifactJar)
|
||||||
|
add("runtime", artifactJar)
|
||||||
|
add("archives", artifactJar)
|
||||||
|
add("archives", relocatedSourcesJar)
|
||||||
}
|
}
|
||||||
|
|
||||||
dist {
|
javadocJar()
|
||||||
from(proguard)
|
|
||||||
|
dist(fromTask = result) {
|
||||||
from(relocatedSourcesJar)
|
from(relocatedSourcesJar)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user