From 7b0c7ec40099a74932dcc88a0d27a6f4d90a05d4 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Thu, 25 Oct 2018 19:41:19 +0300 Subject: [PATCH] Get rid of bunch 191 for build scripts (Continuation of "Replace bunch copies for some of build.gradle.kts files with a DSL") --- build.gradle.kts | 5 +- build.gradle.kts.191 | 713 ------------------ .../src/main/kotlin/IdeCompatibilityDsl.kt | 7 +- idea/idea-core/build.gradle.kts | 6 +- idea/idea-core/build.gradle.kts.191 | 36 - prepare/compiler/build.gradle.kts | 16 +- prepare/compiler/build.gradle.kts.173 | 155 ---- prepare/compiler/build.gradle.kts.181 | 155 ---- 8 files changed, 24 insertions(+), 1069 deletions(-) delete mode 100644 idea/idea-core/build.gradle.kts.191 delete mode 100644 prepare/compiler/build.gradle.kts.173 delete mode 100644 prepare/compiler/build.gradle.kts.181 diff --git a/build.gradle.kts b/build.gradle.kts index 515ef0c4293..6ad88ce9cfc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -133,6 +133,7 @@ rootProject.apply { from(rootProject.file("versions.gradle.kts")) from(rootProject.file("report.gradle.kts")) } +IdeVersionConfigurator.setCurrentIde(this) extra["versions.protobuf-java"] = "2.6.1" extra["versions.javax.inject"] = "1" @@ -165,7 +166,7 @@ extra["intellijSeparateSdks"] = intellijSeparateSdks extra["IntellijCoreDependencies"] = listOf("annotations", - "asm-all", + if (Platform[191].orHigher()) "asm-all-7.0-beta" else "asm-all", "guava", "jdom", "jna", @@ -264,8 +265,6 @@ fun Task.listConfigurationContents(configName: String) { } } -IdeVersionConfigurator.setCurrentIde(this) - val defaultJvmTarget = "1.8" val defaultJavaHome = jdkPath(defaultJvmTarget) val ignoreTestFailures by extra(project.findProperty("ignoreTestFailures")?.toString()?.toBoolean() ?: project.hasProperty("teamcity")) diff --git a/build.gradle.kts.191 b/build.gradle.kts.191 index 3e8d6c92627..e69de29bb2d 100644 --- a/build.gradle.kts.191 +++ b/build.gradle.kts.191 @@ -1,713 +0,0 @@ - -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.gradle.api.Project -import java.util.* -import java.io.File -import org.gradle.api.tasks.bundling.Jar -import org.gradle.plugins.ide.idea.model.IdeaModel -import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile -import proguard.gradle.ProGuardTask - -buildscript { - extra["defaultSnapshotVersion"] = "1.3-SNAPSHOT" - - kotlinBootstrapFrom(BootstrapOption.TeamCity("1.3.20-dev-564", onlySuccessBootstrap = false)) - - repositories.withRedirector(project) { - bootstrapKotlinRepo?.let(::maven) - maven("https://plugins.gradle.org/m2") - } - - // a workaround for kotlin compiler classpath in kotlin project: sometimes gradle substitutes - // kotlin-stdlib external dependency with local project :kotlin-stdlib in kotlinCompilerClasspath configuration. - // see also configureCompilerClasspath@ - val bootstrapCompilerClasspath by configurations.creating - - dependencies { - bootstrapCompilerClasspath(kotlin("compiler-embeddable", bootstrapKotlinVersion)) - - classpath("com.gradle.publish:plugin-publish-plugin:0.9.7") - classpath(kotlin("gradle-plugin", bootstrapKotlinVersion)) - classpath("net.sf.proguard:proguard-gradle:5.3.3") - classpath("org.jetbrains.dokka:dokka-gradle-plugin:0.9.13") - } -} - -plugins { - `build-scan` version "1.15" - idea - id("jps-compatible") -} - -pill { - excludedDirs( - "out", - "buildSrc/build", - "buildSrc/prepare-deps/android-dx/build", - "buildSrc/prepare-deps/intellij-sdk/build" - ) -} - -buildScan { - setTermsOfServiceUrl("https://gradle.com/terms-of-service") - setTermsOfServiceAgree("yes") -} - -val configuredJdks: List = - getConfiguredJdks().also { - it.forEach { - logger.info("Using ${it.majorVersion} home: ${it.homeDir}") - } - } - -val defaultSnapshotVersion: String by extra -val buildNumber by extra(findProperty("build.number")?.toString() ?: defaultSnapshotVersion) -val kotlinVersion by extra(findProperty("deployVersion")?.toString() ?: buildNumber) - -val kotlinLanguageVersion by extra("1.3") - -allprojects { - group = "org.jetbrains.kotlin" - version = kotlinVersion -} - -extra["kotlin_root"] = rootDir - -val cidrKotlinPlugin by configurations.creating - -dependencies { - cidrKotlinPlugin(project(":prepare:cidr-plugin", "runtimeJar")) -} - -val commonBuildDir = File(rootDir, "build") -val distDir by extra("$rootDir/dist") -val distKotlinHomeDir by extra("$distDir/kotlinc") -val distLibDir = "$distKotlinHomeDir/lib" -val commonLocalDataDir = "$rootDir/local" -val ideaSandboxDir = "$commonLocalDataDir/ideaSandbox" -val ideaUltimateSandboxDir = "$commonLocalDataDir/ideaUltimateSandbox" -val ideaPluginDir = "$distDir/artifacts/ideaPlugin/Kotlin" -val ideaUltimatePluginDir = "$distDir/artifacts/ideaUltimatePlugin/Kotlin" -val cidrPluginDir = "$distDir/artifacts/cidrPlugin/Kotlin" - -// TODO: use "by extra()" syntax where possible -extra["distLibDir"] = project.file(distLibDir) -extra["libsDir"] = project.file(distLibDir) -extra["commonLocalDataDir"] = project.file(commonLocalDataDir) -extra["ideaSandboxDir"] = project.file(ideaSandboxDir) -extra["ideaUltimateSandboxDir"] = project.file(ideaUltimateSandboxDir) -extra["ideaPluginDir"] = project.file(ideaPluginDir) -extra["ideaUltimatePluginDir"] = project.file(ideaUltimatePluginDir) -extra["cidrPluginDir"] = project.file(cidrPluginDir) -extra["isSonatypeRelease"] = false - -extra["JDK_16"] = jdkPath("1.6") -extra["JDK_17"] = jdkPath("1.7") -extra["JDK_18"] = jdkPath("1.8") -extra["JDK_9"] = jdkPath("9") -extra["JDK_10"] = jdkPathIfFound("10") -extra["JDK_11"] = jdkPathIfFound("11") - -rootProject.apply { - from(rootProject.file("versions.gradle.kts")) - from(rootProject.file("report.gradle.kts")) -} - -extra["versions.protobuf-java"] = "2.6.1" -extra["versions.javax.inject"] = "1" -extra["versions.jsr305"] = "1.3.9" -extra["versions.jansi"] = "1.16" -extra["versions.jline"] = "3.3.1" -extra["versions.junit"] = "4.12" -extra["versions.javaslang"] = "2.0.6" -extra["versions.ant"] = "1.8.2" -extra["versions.android"] = "2.3.1" -extra["versions.kotlinx-coroutines-core"] = "0.26.1-eap13" -extra["versions.kotlinx-coroutines-jdk8"] = "0.26.1-eap13" -extra["versions.json"] = "20160807" -extra["versions.native-platform"] = "0.14" -extra["versions.ant-launcher"] = "1.8.0" -extra["versions.robolectric"] = "3.1" -extra["versions.org.springframework"] = "4.2.0.RELEASE" -extra["versions.jflex"] = "1.7.0" -extra["versions.markdown"] = "0.1.25" - -val isTeamcityBuild = project.hasProperty("teamcity") || System.getenv("TEAMCITY_VERSION") != null -val intellijUltimateEnabled = project.getBooleanProperty("intellijUltimateEnabled") ?: isTeamcityBuild -val effectSystemEnabled by extra(project.getBooleanProperty("kotlin.compiler.effectSystemEnabled") ?: false) -val newInferenceEnabled by extra(project.getBooleanProperty("kotlin.compiler.newInferenceEnabled") ?: false) - -val intellijSeparateSdks = project.getBooleanProperty("intellijSeparateSdks") ?: false - -extra["intellijUltimateEnabled"] = intellijUltimateEnabled -extra["intellijSeparateSdks"] = intellijSeparateSdks - -extra["IntellijCoreDependencies"] = - listOf("annotations", - "asm-all-7.0-beta", - "guava", - "jdom", - "jna", - "log4j", - "picocontainer", - "snappy-in-java", - "streamex", - "trove4j") - - -extra["compilerModules"] = arrayOf( - ":compiler:util", - ":compiler:container", - ":compiler:resolution", - ":compiler:serialization", - ":compiler:psi", - ":compiler:frontend", - ":compiler:frontend.java", - ":compiler:frontend.script", - ":compiler:cli-common", - ":compiler:daemon-common", - ":compiler:daemon", - ":compiler:ir.tree", - ":compiler:ir.psi2ir", - ":compiler:ir.backend.common", - ":compiler:backend.js", - ":compiler:backend-common", - ":compiler:backend", - ":compiler:plugin-api", - ":compiler:light-classes", - ":compiler:cli", - ":compiler:incremental-compilation-impl", - ":js:js.ast", - ":js:js.serializer", - ":js:js.parser", - ":js:js.frontend", - ":js:js.translator", - ":js:js.dce", - ":compiler", - ":kotlin-build-common", - ":core:metadata", - ":core:metadata.jvm", - ":core:descriptors", - ":core:descriptors.jvm", - ":core:deserialization", - ":core:util.runtime" -) - -val coreLibProjects = listOf( - ":kotlin-stdlib", - ":kotlin-stdlib-common", - ":kotlin-stdlib-js", - ":kotlin-stdlib-jre7", - ":kotlin-stdlib-jre8", - ":kotlin-stdlib-jdk7", - ":kotlin-stdlib-jdk8", - ":kotlin-test:kotlin-test-common", - ":kotlin-test:kotlin-test-jvm", - ":kotlin-test:kotlin-test-junit", - ":kotlin-test:kotlin-test-junit5", - ":kotlin-test:kotlin-test-testng", - ":kotlin-test:kotlin-test-js", - ":kotlin-reflect" -) - -val gradlePluginProjects = listOf( - ":kotlin-gradle-plugin", - ":kotlin-gradle-plugin:plugin-marker", - ":kotlin-gradle-plugin-api", -// ":kotlin-gradle-plugin-integration-tests", // TODO: build fails - ":kotlin-allopen", - ":kotlin-allopen:plugin-marker", - ":kotlin-annotation-processing-gradle", - ":kotlin-noarg", - ":kotlin-noarg:plugin-marker", - ":kotlin-sam-with-receiver" -) - -apply { - from("libraries/commonConfiguration.gradle") - from("libraries/configureGradleTools.gradle") -} - -apply { - if (extra["isSonatypeRelease"] as? Boolean == true) { - logger.info("Applying configuration for sonatype release") - from("libraries/prepareSonatypeStaging.gradle") - } -} - -fun Task.listConfigurationContents(configName: String) { - doFirst { - project.configurations.findByName(configName)?.let { - println("$configName configuration files:\n${it.allArtifacts.files.files.joinToString("\n ", " ")}") - } - } -} - -val defaultJvmTarget = "1.8" -val defaultJavaHome = jdkPath(defaultJvmTarget!!) -val ignoreTestFailures by extra(project.findProperty("ignoreTestFailures")?.toString()?.toBoolean() ?: project.hasProperty("teamcity")) - -allprojects { - - jvmTarget = defaultJvmTarget - javaHome = defaultJavaHome - - // There are problems with common build dir: - // - some tests (in particular js and binary-compatibility-validator depend on the fixed (default) location - // - idea seems unable to exclude common builddir from indexing - // therefore it is disabled by default - // buildDir = File(commonBuildDir, project.name) - - val mirrorRepo: String? = findProperty("maven.repository.mirror")?.toString() - - repositories.withRedirector(project) { - intellijSdkRepo(project) - androidDxJarRepo(project) - mirrorRepo?.let(::maven) - bootstrapKotlinRepo?.let(::maven) - jcenter() - } - - configureJvmProject(javaHome!!, jvmTarget!!) - - val commonCompilerArgs = listOfNotNull( - "-Xallow-kotlin-package", - "-Xread-deserialized-contracts", - "-Xprogressive".takeIf { hasProperty("test.progressive.mode") } // TODO: change to "-progressive" after bootstrap - ) - - tasks.withType> { - kotlinOptions { - languageVersion = kotlinLanguageVersion - apiVersion = kotlinLanguageVersion - freeCompilerArgs = commonCompilerArgs - } - } - - tasks.withType { - kotlinOptions { - freeCompilerArgs = commonCompilerArgs + listOf("-Xnormalize-constructor-calls=enable") - } - } - - tasks.withType(VerificationTask::class.java as Class) { - (this as VerificationTask).ignoreFailures = ignoreTestFailures - } - - tasks.withType { - enabled = false - } - - task("javadocJar") { - classifier = "javadoc" - } - - tasks.withType { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - } - - task("listArchives") { listConfigurationContents("archives") } - - task("listRuntimeJar") { listConfigurationContents("runtimeJar") } - - task("listDistJar") { listConfigurationContents("distJar") } - - afterEvaluate { - logger.info("configuring project $name to compile to the target jvm version $jvmTarget using jdk: $javaHome") - if (javaHome != defaultJavaHome || jvmTarget != defaultJvmTarget) { - configureJvmProject(javaHome!!, jvmTarget!!) - } - - fun File.toProjectRootRelativePathOrSelf() = (relativeToOrNull(rootDir)?.takeUnless { it.startsWith("..") } ?: this).path - - fun FileCollection.printClassPath(role: String) = - println("${project.path} $role classpath:\n ${joinToString("\n ") { it.toProjectRootRelativePathOrSelf() } }") - - try { javaPluginConvention() } catch (_: UnknownDomainObjectException) { null }?.let { javaConvention -> - task("printCompileClasspath") { doFirst { javaConvention.sourceSets["main"].compileClasspath.printClassPath("compile") } } - task("printRuntimeClasspath") { doFirst { javaConvention.sourceSets["main"].runtimeClasspath.printClassPath("runtime") } } - task("printTestCompileClasspath") { doFirst { javaConvention.sourceSets["test"].compileClasspath.printClassPath("test compile") } } - task("printTestRuntimeClasspath") { doFirst { javaConvention.sourceSets["test"].runtimeClasspath.printClassPath("test runtime") } } - } - - run configureCompilerClasspath@ { - val bootstrapCompilerClasspath by rootProject.buildscript.configurations - configurations.findByName("kotlinCompilerClasspath")?.let { - dependencies.add(it.name, files(bootstrapCompilerClasspath)) - } - } - } -} - -gradle.taskGraph.whenReady { - if (isTeamcityBuild) { - logger.warn("CI build profile is active (IC is off, proguard is on). Use -Pteamcity=false to reproduce local build") - for (task in allTasks) { - when (task) { - is AbstractKotlinCompile<*> -> task.incremental = false - is JavaCompile -> task.options.isIncremental = false - } - } - } else { - logger.warn("Local build profile is active (IC is on, proguard is off). Use -Pteamcity=true to reproduce TC build") - for (task in allTasks) { - when (task) { - // todo: remove when Gradle 4.10+ is used (Java IC on by default) - is JavaCompile -> task.options.isIncremental = true - is org.gradle.jvm.tasks.Jar -> task.entryCompression = ZipEntryCompression.STORED - } - } - } -} - -val dist by task { - val childDistTasks = getTasksByName("dist", true) - this@task - dependsOn(childDistTasks) - - into(distDir) - from(files("compiler/cli/bin")) { into("kotlinc/bin") } - from(files("license")) { into("kotlinc/license") } -} - -val copyCompilerToIdeaPlugin by task { - dependsOn(dist) - into(ideaPluginDir) - from(distDir) { include("kotlinc/**") } -} - -val ideaPlugin by task { - dependsOn(copyCompilerToIdeaPlugin) - val childIdeaPluginTasks = getTasksByName("ideaPlugin", true) - this@task - dependsOn(childIdeaPluginTasks) -} - -tasks { - create("clean") { - doLast { - delete("$buildDir/repo") - delete(distDir) - } - } - - create("cleanupArtifacts") { - doLast { - delete(ideaPluginDir) - delete(ideaUltimatePluginDir) - delete(cidrPluginDir) - } - } - - create("coreLibsTest") { - (coreLibProjects + listOf( - ":kotlin-stdlib:samples", - ":kotlin-test:kotlin-test-js:kotlin-test-js-it", - ":kotlinx-metadata-jvm", - ":tools:binary-compatibility-validator" - )).forEach { - dependsOn(it + ":check") - } - } - - create("gradlePluginTest") { - gradlePluginProjects.forEach { - dependsOn(it + ":check") - } - } - - create("gradlePluginIntegrationTest") { - dependsOn(":kotlin-gradle-plugin-integration-tests:check") - } - - create("jvmCompilerTest") { - dependsOn("dist") - dependsOn(":compiler:test", - ":compiler:container:test", - ":compiler:tests-java8:test", - ":compiler:tests-spec:remoteRunTests") - } - - create("jsCompilerTest") { - dependsOn(":js:js.tests:test") - dependsOn(":js:js.tests:runMocha") - } - - create("scriptingTest") { - dependsOn("dist") - dependsOn(":kotlin-script-util:test") - } - - create("compilerTest") { - dependsOn("jvmCompilerTest") - dependsOn("jsCompilerTest") - - dependsOn("scriptingTest") - dependsOn(":kotlin-build-common:test") - dependsOn(":compiler:incremental-compilation-impl:test") - } - - create("toolsTest") { - dependsOn(":tools:kotlinp:test") - } - - create("examplesTest") { - dependsOn("dist") - (project(":examples").subprojects + project(":kotlin-gradle-subplugin-example")).forEach { p -> - dependsOn("${p.path}:check") - } - } - - create("distTest") { - dependsOn("compilerTest") - dependsOn("toolsTest") - dependsOn("gradlePluginTest") - dependsOn("examplesTest") - } - - create("specTest") { - dependsOn("dist") - dependsOn(":compiler:tests-spec:test") - } - - create("androidCodegenTest") { - dependsOn(":compiler:android-tests:test") - } - - create("jps-tests") { - dependsOn("dist") - dependsOn(":jps-plugin:test") - } - - create("idea-plugin-main-tests") { - dependsOn("dist") - dependsOn(":idea:test") - } - - create("idea-plugin-additional-tests") { - dependsOn("dist") - dependsOn(":idea:idea-gradle:test", - ":idea:idea-maven:test", - ":j2k:test", - ":eval4j:test") - } - - create("idea-plugin-tests") { - dependsOn("dist") - dependsOn("idea-plugin-main-tests", - "idea-plugin-additional-tests") - } - - create("android-ide-tests") { - dependsOn("dist") - dependsOn(":plugins:android-extensions-ide:test", - ":idea:idea-android:test", - ":kotlin-annotation-processing:test") - } - - create("plugins-tests") { - dependsOn("dist") - dependsOn(":kotlin-annotation-processing:test", - ":kotlin-source-sections-compiler-plugin:test", - ":kotlin-allopen-compiler-plugin:test", - ":kotlin-noarg-compiler-plugin:test", - ":kotlin-sam-with-receiver-compiler-plugin:test", - ":plugins:uast-kotlin:test", - ":kotlin-annotation-processing-gradle:test", - ":kotlinx-serialization-ide-plugin:test") - } - - - create("ideaPluginTest") { - dependsOn( - "idea-plugin-tests", - "jps-tests", - "plugins-tests", - "android-ide-tests", - ":generators:test" - ) - } - - - create("test") { - doLast { - throw GradleException("Don't use directly, use aggregate tasks *-check instead") - } - } - - create("check") { - dependsOn("test") - } -} - -fun CopySpec.setExecutablePermissions() { - filesMatching("**/bin/*") { mode = 0b111101101 } - filesMatching("**/bin/*.bat") { mode = 0b110100100 } -} - -val zipCompiler by task { - dependsOn(dist) - destinationDir = file(distDir) - archiveName = "kotlin-compiler-$kotlinVersion.zip" - - from(distKotlinHomeDir) - into("kotlinc") - setExecutablePermissions() - - doLast { - logger.lifecycle("Compiler artifacts packed to $archivePath") - } -} - -val zipTestData by task { - destinationDir = file(distDir) - archiveName = "kotlin-test-data.zip" - from("compiler/testData") { into("compiler") } - from("idea/testData") { into("ide") } - from("idea/idea-completion/testData") { into("ide/completion") } - from("libraries/stdlib/common/test") { into("stdlib/common") } - from("libraries/stdlib/test") { into("stdlib/test") } - doLast { - logger.lifecycle("Test data packed to $archivePath") - } -} - -val zipPlugin by task { - val src = when (project.findProperty("pluginArtifactDir") as String?) { - "Kotlin" -> ideaPluginDir - "KotlinUltimate" -> ideaUltimatePluginDir - null -> if (project.hasProperty("ultimate")) ideaUltimatePluginDir else ideaPluginDir - else -> error("Unsupported plugin artifact dir") - } - val destPath = project.findProperty("pluginZipPath") as String? - val dest = File(destPath ?: "$buildDir/kotlin-plugin.zip") - destinationDir = dest.parentFile - archiveName = dest.name - doFirst { - if (destPath == null) throw GradleException("Specify target zip path with 'pluginZipPath' property") - } - - from(src) - into("Kotlin") - setExecutablePermissions() - - doLast { - logger.lifecycle("Plugin artifacts packed to $archivePath") - } -} - -val cidrPlugin by task { - dependsOn(ideaPlugin) - into(cidrPluginDir) - from(ideaPluginDir) { - exclude("lib/kotlin-plugin.jar") - - exclude("lib/android-lint.jar") - exclude("lib/android-ide.jar") - exclude("lib/android-output-parser-ide.jar") - exclude("lib/android-extensions-ide.jar") - exclude("lib/android-extensions-compiler.jar") - exclude("lib/kapt3-idea.jar") - exclude("lib/jps-ide.jar") - exclude("lib/jps/**") - exclude("kotlinc/**") - exclude("lib/maven-ide.jar") - } - from(cidrKotlinPlugin) { into("lib") } -} - -val zipCidrPlugin by task { - val destPath = project.findProperty("pluginZipPath") as String? - ?: "$distDir/artifacts/kotlin-plugin-$kotlinVersion-CIDR.zip" - val destFile = File(destPath) - - destinationDir = destFile.parentFile - archiveName = destFile.name - - from(cidrPlugin) - into("Kotlin") - setExecutablePermissions() - - doLast { - logger.lifecycle("Plugin artifacts packed to $archivePath") - } -} - -configure { - module { - excludeDirs = files( - project.buildDir, - commonLocalDataDir, - ".gradle", - "dependencies", - "dist" - ).toSet() - } -} - -fun jdkPathIfFound(version: String): String? { - val jdkName = "JDK_${version.replace(".", "")}" - val jdkMajorVersion = JdkMajorVersion.valueOf(jdkName) - return configuredJdks.find { it.majorVersion == jdkMajorVersion }?.homeDir?.canonicalPath -} - -fun jdkPath(version: String): String = jdkPathIfFound(version) - ?: throw GradleException ("Please set environment variable JDK_${version.replace(".", "")} to point to JDK $version installation") - -fun Project.configureJvmProject(javaHome: String, javaVersion: String) { - tasks.withType { - if (name != "compileJava9Java") { - options.isFork = true - options.forkOptions.javaHome = file(javaHome) - options.compilerArgs.add("-proc:none") - options.encoding = "UTF-8" - } - } - - tasks.withType { - kotlinOptions.jdkHome = javaHome - kotlinOptions.jvmTarget = javaVersion - } - - tasks.withType { - executable = File(javaHome, "bin/java").canonicalPath - } -} - -tasks.create("findShadowJarsInClasspath").doLast { - fun Collection.printSorted(indent: String = " ") { - sortedBy { it.path }.forEach { println(indent + it.relativeTo(rootProject.projectDir)) } - } - - val shadowJars = hashSetOf() - for (project in rootProject.allprojects) { - for (task in project.tasks) { - when (task) { - is ShadowJar -> { - shadowJars.add(fileFrom(task.archivePath)) - } - is ProGuardTask -> { - shadowJars.addAll(task.outputs.files.toList()) - } - } - } - } - - println("Shadow jars:") - shadowJars.printSorted() - - fun Project.checkConfig(configName: String) { - val config = configurations.findByName(configName) ?: return - val shadowJarsInConfig = config.resolvedConfiguration.files.filter { it in shadowJars } - if (shadowJarsInConfig.isNotEmpty()) { - println() - println("Project $project contains shadow jars in configuration '$configName':") - shadowJarsInConfig.printSorted() - } - } - - for (project in rootProject.allprojects) { - project.checkConfig("compileClasspath") - project.checkConfig("testCompileClasspath") - } -} diff --git a/buildSrc/src/main/kotlin/IdeCompatibilityDsl.kt b/buildSrc/src/main/kotlin/IdeCompatibilityDsl.kt index 162fd33083c..8b4948077e2 100644 --- a/buildSrc/src/main/kotlin/IdeCompatibilityDsl.kt +++ b/buildSrc/src/main/kotlin/IdeCompatibilityDsl.kt @@ -8,13 +8,12 @@ import org.gradle.api.Project interface CompatibilityPredicate { fun matches(ide: Ide): Boolean - operator fun invoke(block: () -> Unit): Any? { + operator fun invoke(): Boolean = matches(IdeVersionConfigurator.currentIde) + + operator fun invoke(block: () -> Unit): Unit { if (matches(IdeVersionConfigurator.currentIde)) { block() - return emptyList() } - - return null } } diff --git a/idea/idea-core/build.gradle.kts b/idea/idea-core/build.gradle.kts index cc5f6664d89..3ab6b1a9b9c 100644 --- a/idea/idea-core/build.gradle.kts +++ b/idea/idea-core/build.gradle.kts @@ -22,7 +22,11 @@ dependencies { compile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false } compile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-jdk8")) { isTransitive = false } compileOnly(intellijCoreDep()) { includeJars("intellij-core") } - compileOnly(intellijDep()) + compileOnly(intellijDep()) { + Ide.IJ191.orHigher { + this@compileOnly.includeJars("platform-api") + } + } compileOnly(intellijPluginDep("gradle")) } diff --git a/idea/idea-core/build.gradle.kts.191 b/idea/idea-core/build.gradle.kts.191 deleted file mode 100644 index cc79a8ffa88..00000000000 --- a/idea/idea-core/build.gradle.kts.191 +++ /dev/null @@ -1,36 +0,0 @@ - -plugins { - kotlin("jvm") - id("jps-compatible") -} - -dependencies { - compile(project(":kotlin-stdlib")) - compileOnly(project(":kotlin-reflect-api")) - compile(project(":core:descriptors")) - compile(project(":core:descriptors.jvm")) - compile(project(":compiler:frontend")) - compile(project(":compiler:frontend.java")) - compile(project(":compiler:frontend.script")) - compile(project(":compiler:light-classes")) - compile(project(":compiler:util")) - compile(project(":j2k")) - compile(project(":idea:ide-common")) - compile(project(":idea:idea-jps-common")) - compile(project(":plugins:android-extensions-compiler")) - compile(project(":kotlin-scripting-compiler")) - compile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false } - compile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-jdk8")) { isTransitive = false } - compileOnly(intellijCoreDep()) { includeJars("intellij-core") } - compileOnly(intellijDep()) { includeJars("platform-api") } - compileOnly(intellijPluginDep("gradle")) -} - -sourceSets { - "main" { - projectDefault() - java.srcDir("../idea-analysis/src") - resources.srcDir("../idea-analysis/src").apply { include("**/*.properties") } - } - "test" {} -} diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index 36234a0ec21..2fe52bd8235 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -80,9 +80,21 @@ dependencies { fatJarContents(intellijCoreDep()) { includeJars("intellij-core") } fatJarContents(intellijDep()) { includeIntellijCoreJarDependencies(project, { !(it.startsWith("jdom") || it.startsWith("log4j")) }) } - fatJarContents(intellijDep()) { includeJars("jna-platform", "lz4-1.3.0") } + when { + Platform[173].orLower() -> { + fatJarContents(intellijDep()) { includeJars("jna-platform") } + fatJarContentsStripMetadata(intellijDep()) { includeJars("oromatcher", "jdom", "log4j") } + } + Platform[181].orLower() -> { + fatJarContents(intellijDep()) { includeJars("jna-platform", "lz4-java-1.3") } + fatJarContentsStripMetadata(intellijDep()) { includeJars("oro-2.0.8", "jdom", "log4j") } + } + else -> { + fatJarContents(intellijDep()) { includeJars("jna-platform", "lz4-1.3.0") } + fatJarContentsStripMetadata(intellijDep()) { includeJars("oro-2.0.8", "jdom", "log4j") } + } + } fatJarContentsStripServices(intellijDep("jps-standalone")) { includeJars("jps-model") } - fatJarContentsStripMetadata(intellijDep()) { includeJars("oro-2.0.8", "jdom", "log4j") } } noDefaultJar() diff --git a/prepare/compiler/build.gradle.kts.173 b/prepare/compiler/build.gradle.kts.173 deleted file mode 100644 index a3ac95ea820..00000000000 --- a/prepare/compiler/build.gradle.kts.173 +++ /dev/null @@ -1,155 +0,0 @@ -import java.io.File -import proguard.gradle.ProGuardTask -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.gradle.api.artifacts.maven.Conf2ScopeMappingContainer.COMPILE -import org.gradle.api.file.DuplicatesStrategy - -description = "Kotlin Compiler" - -plugins { - // HACK: java plugin makes idea import dependencies on this project as source (with empty sources however), - // this prevents reindexing of kotlin-compiler.jar after build on every change in compiler modules - java -} - -// You can run Gradle with "-Pkotlin.build.proguard=true" to enable ProGuard run on kotlin-compiler.jar (on TeamCity, ProGuard always runs) -val shrink = - findProperty("kotlin.build.proguard")?.toString()?.toBoolean() - ?: hasProperty("teamcity") - -val compilerManifestClassPath = "kotlin-stdlib.jar kotlin-reflect.jar kotlin-script-runtime.jar" - -val fatJarContents by configurations.creating - -val fatJarContentsStripMetadata by configurations.creating -val fatJarContentsStripServices by configurations.creating -val fatSourcesJarContents by configurations.creating -val fatJar by configurations.creating -val compilerJar by configurations.creating -val runtimeJar by configurations.creating -val compile by configurations // maven plugin writes pom compile scope from compile configuration by default -val libraries by configurations.creating { - extendsFrom(compile) -} - -val default by configurations -default.extendsFrom(runtimeJar) - -val compilerBaseName = name - -val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName.jar") - -val compilerModules: Array by rootProject.extra - -compilerModules.forEach { evaluationDependsOn(it) } - -val compiledModulesSources = compilerModules.map { - project(it).mainSourceSet.allSource -} - -dependencies { - compile(project(":kotlin-stdlib")) - compile(project(":kotlin-script-runtime")) - compile(project(":kotlin-reflect")) - - libraries(project(":kotlin-annotations-jvm")) - libraries( - files( - firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar"), - firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar"), - toolsJar() - ) - ) - - compilerModules.forEach { - fatJarContents(project(it)) { isTransitive = false } - } - - compiledModulesSources.forEach { - fatSourcesJarContents(it) - } - - fatJarContents(project(":core:builtins", configuration = "builtins")) - fatJarContents(commonDep("javax.inject")) - fatJarContents(commonDep("org.jline", "jline")) - fatJarContents(commonDep("org.fusesource.jansi", "jansi")) - fatJarContents(protobufFull()) - fatJarContents(commonDep("com.google.code.findbugs", "jsr305")) - fatJarContents(commonDep("io.javaslang", "javaslang")) - fatJarContents(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false } - - fatJarContents(intellijCoreDep()) { includeJars("intellij-core") } - fatJarContents(intellijDep()) { includeIntellijCoreJarDependencies(project, { !(it.startsWith("jdom") || it.startsWith("log4j")) }) } - fatJarContents(intellijDep()) { includeJars("jna-platform") } - fatJarContentsStripServices(intellijDep("jps-standalone")) { includeJars("jps-model") } - fatJarContentsStripMetadata(intellijDep()) { includeJars("oromatcher", "jdom", "log4j") } -} - -noDefaultJar() - -val packCompiler by task { - configurations = listOf(fatJar) - setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE) - destinationDir = File(buildDir, "libs") - - setupPublicJar(compilerBaseName, "before-proguard") - - from(fatJarContents) - - dependsOn(fatJarContentsStripServices) - from { - fatJarContentsStripServices.files.map { - zipTree(it).matching { exclude("META-INF/services/**") } - } - } - - dependsOn(fatJarContentsStripMetadata) - from { - fatJarContentsStripMetadata.files.map { - zipTree(it).matching { exclude("META-INF/jb/**", "META-INF/LICENSE") } - } - } - - manifest.attributes["Class-Path"] = compilerManifestClassPath - manifest.attributes["Main-Class"] = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler" -} - -val proguard by task { - dependsOn(packCompiler) - configuration("$rootDir/compiler/compiler.pro") - - val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar") - - inputs.files(packCompiler.outputs.files.singleFile) - outputs.file(outputJar) - - // TODO: remove after dropping compatibility with ant build - doFirst { - System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.outputs.files.singleFile.canonicalPath) - System.setProperty("kotlin-compiler-jar", outputJar.canonicalPath) - } - - libraryjars(mapOf("filter" to "!META-INF/versions/**"), libraries) - - printconfiguration("$buildDir/compiler.pro.dump") -} - -val pack = if (shrink) proguard else packCompiler - -dist( - targetName = "$compilerBaseName.jar", - fromTask = pack -) - -runtimeJarArtifactBy(pack, pack.outputs.files.singleFile) { - name = compilerBaseName - classifier = "" -} - -sourcesJar { - from(fatSourcesJarContents) -} - -javadocJar() - -publish() diff --git a/prepare/compiler/build.gradle.kts.181 b/prepare/compiler/build.gradle.kts.181 deleted file mode 100644 index 938d17f414c..00000000000 --- a/prepare/compiler/build.gradle.kts.181 +++ /dev/null @@ -1,155 +0,0 @@ -import java.io.File -import proguard.gradle.ProGuardTask -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.gradle.api.artifacts.maven.Conf2ScopeMappingContainer.COMPILE -import org.gradle.api.file.DuplicatesStrategy - -description = "Kotlin Compiler" - -plugins { - // HACK: java plugin makes idea import dependencies on this project as source (with empty sources however), - // this prevents reindexing of kotlin-compiler.jar after build on every change in compiler modules - java -} - -// You can run Gradle with "-Pkotlin.build.proguard=true" to enable ProGuard run on kotlin-compiler.jar (on TeamCity, ProGuard always runs) -val shrink = - findProperty("kotlin.build.proguard")?.toString()?.toBoolean() - ?: hasProperty("teamcity") - -val compilerManifestClassPath = "kotlin-stdlib.jar kotlin-reflect.jar kotlin-script-runtime.jar" - -val fatJarContents by configurations.creating - -val fatJarContentsStripMetadata by configurations.creating -val fatJarContentsStripServices by configurations.creating -val fatSourcesJarContents by configurations.creating -val fatJar by configurations.creating -val compilerJar by configurations.creating -val runtimeJar by configurations.creating -val compile by configurations // maven plugin writes pom compile scope from compile configuration by default -val libraries by configurations.creating { - extendsFrom(compile) -} - -val default by configurations -default.extendsFrom(runtimeJar) - -val compilerBaseName = name - -val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName.jar") - -val compilerModules: Array by rootProject.extra - -compilerModules.forEach { evaluationDependsOn(it) } - -val compiledModulesSources = compilerModules.map { - project(it).mainSourceSet.allSource -} - -dependencies { - compile(project(":kotlin-stdlib")) - compile(project(":kotlin-script-runtime")) - compile(project(":kotlin-reflect")) - - libraries(project(":kotlin-annotations-jvm")) - libraries( - files( - firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar"), - firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar"), - toolsJar() - ) - ) - - compilerModules.forEach { - fatJarContents(project(it)) { isTransitive = false } - } - - compiledModulesSources.forEach { - fatSourcesJarContents(it) - } - - fatJarContents(project(":core:builtins", configuration = "builtins")) - fatJarContents(commonDep("javax.inject")) - fatJarContents(commonDep("org.jline", "jline")) - fatJarContents(commonDep("org.fusesource.jansi", "jansi")) - fatJarContents(protobufFull()) - fatJarContents(commonDep("com.google.code.findbugs", "jsr305")) - fatJarContents(commonDep("io.javaslang", "javaslang")) - fatJarContents(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-core")) { isTransitive = false } - - fatJarContents(intellijCoreDep()) { includeJars("intellij-core") } - fatJarContents(intellijDep()) { includeIntellijCoreJarDependencies(project, { !(it.startsWith("jdom") || it.startsWith("log4j")) }) } - fatJarContents(intellijDep()) { includeJars("jna-platform", "lz4-java-1.3") } - fatJarContentsStripServices(intellijDep("jps-standalone")) { includeJars("jps-model") } - fatJarContentsStripMetadata(intellijDep()) { includeJars("oro-2.0.8", "jdom", "log4j") } -} - -noDefaultJar() - -val packCompiler by task { - configurations = listOf(fatJar) - setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE) - destinationDir = File(buildDir, "libs") - - setupPublicJar(compilerBaseName, "before-proguard") - - from(fatJarContents) - - dependsOn(fatJarContentsStripServices) - from { - fatJarContentsStripServices.files.map { - zipTree(it).matching { exclude("META-INF/services/**") } - } - } - - dependsOn(fatJarContentsStripMetadata) - from { - fatJarContentsStripMetadata.files.map { - zipTree(it).matching { exclude("META-INF/jb/**", "META-INF/LICENSE") } - } - } - - manifest.attributes["Class-Path"] = compilerManifestClassPath - manifest.attributes["Main-Class"] = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler" -} - -val proguard by task { - dependsOn(packCompiler) - configuration("$rootDir/compiler/compiler.pro") - - val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar") - - inputs.files(packCompiler.outputs.files.singleFile) - outputs.file(outputJar) - - // TODO: remove after dropping compatibility with ant build - doFirst { - System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.outputs.files.singleFile.canonicalPath) - System.setProperty("kotlin-compiler-jar", outputJar.canonicalPath) - } - - libraryjars(mapOf("filter" to "!META-INF/versions/**"), libraries) - - printconfiguration("$buildDir/compiler.pro.dump") -} - -val pack = if (shrink) proguard else packCompiler - -dist( - targetName = "$compilerBaseName.jar", - fromTask = pack -) - -runtimeJarArtifactBy(pack, pack.outputs.files.singleFile) { - name = compilerBaseName - classifier = "" -} - -sourcesJar { - from(fatSourcesJarContents) -} - -javadocJar() - -publish()