Build changes to support Android Studio

This commit is contained in:
Dmitry Jemerov
2017-12-28 19:41:36 +01:00
committed by Vyacheslav Gerasimov
parent b2ca302bf7
commit e83845ea72
17 changed files with 118 additions and 40 deletions
+1 -1
View File
@@ -162,7 +162,7 @@ extra["IntellijCoreDependencies"] =
"log4j",
"picocontainer",
"snappy-in-java-0.5.1",
"streamex-0.6.2",
"streamex",
"trove4j",
"xpp3-1.1.4-min",
"xstream-1.4.8")
@@ -12,8 +12,8 @@ val intellijUltimateEnabled: Boolean by rootProject.extra
val intellijRepo: String by rootProject.extra
val intellijReleaseType: String by rootProject.extra
val intellijVersion = rootProject.extra["versions.intellijSdk"] as String
val androidStudioRelease = rootProject.extra["versions.androidStudioRelease"] as String?
val androidStudioBuild = rootProject.extra["versions.androidStudioBuild"] as String?
val androidStudioRelease = if (rootProject.extra.has("versions.androidStudioRelease")) rootProject.extra["versions.androidStudioRelease"] as String else null
val androidStudioBuild = if (rootProject.extra.has("versions.androidStudioBuild")) rootProject.extra["versions.androidStudioBuild"] as String else null
val intellijSeparateSdks: Boolean by rootProject.extra
val installIntellijCommunity = !intellijUltimateEnabled || intellijSeparateSdks
val installIntellijUltimate = intellijUltimateEnabled
@@ -64,8 +64,8 @@ dependencies {
if (installIntellijUltimate) {
intellijUltimate("com.jetbrains.intellij.idea:ideaIU:$intellijVersion")
}
sources("com.jetbrains.intellij.idea:ideaIC:$intellijVersion:sources@jar")
}
sources("com.jetbrains.intellij.idea:ideaIC:$intellijVersion:sources@jar")
`jps-standalone`("com.jetbrains.intellij.idea:jps-standalone:$intellijVersion")
`jps-build-test`("com.jetbrains.intellij.idea:jps-build-test:$intellijVersion")
`intellij-core`("com.jetbrains.intellij.idea:intellij-core:$intellijVersion")
@@ -74,7 +74,9 @@ dependencies {
}
}
fun Task.configureExtractFromConfigurationTask(sourceConfig: Configuration, extractor: (Configuration) -> Any) {
fun Task.configureExtractFromConfigurationTask(sourceConfig: Configuration,
pathRemap: (String) -> String = { it },
extractor: (Configuration) -> Any) {
dependsOn(sourceConfig)
inputs.files(sourceConfig)
val targetDir = File(repoDir, sourceConfig.name)
@@ -83,11 +85,26 @@ fun Task.configureExtractFromConfigurationTask(sourceConfig: Configuration, extr
project.copy {
from(extractor(sourceConfig))
into(targetDir)
eachFile {
path = pathRemap(path)
}
}
}
}
val unzipIntellijSdk by tasks.creating { configureExtractFromConfigurationTask(intellij) { zipTree(it.singleFile) } }
fun removePathPrefix(path: String): String {
if (androidStudioRelease == null) return path
val slashes = if (studioOs == "mac") 2 else 1
var result = path
repeat(slashes) {
result = result.substringAfter('/')
}
return result
}
val unzipIntellijSdk by tasks.creating {
configureExtractFromConfigurationTask(intellij, pathRemap = { removePathPrefix(it) }) { zipTree(it.singleFile) }
}
val unzipIntellijUltimateSdk by tasks.creating { configureExtractFromConfigurationTask(intellijUltimate) { zipTree(it.singleFile) } }
@@ -96,9 +113,7 @@ val unzipIntellijCore by tasks.creating { configureExtractFromConfigurationTask(
val unzipJpsStandalone by tasks.creating { configureExtractFromConfigurationTask(`jps-standalone`) { zipTree(it.singleFile) } }
val copyIntellijSdkSources by tasks.creating {
if (androidStudioRelease == null) {
configureExtractFromConfigurationTask(sources) { it.singleFile }
}
configureExtractFromConfigurationTask(sources) { it.singleFile }
}
val copyJpsBuildTest by tasks.creating { configureExtractFromConfigurationTask(`jps-build-test`) { it.singleFile } }
@@ -1,3 +1,19 @@
/*
* Copyright 2010-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("unused") // usages in build scripts are not tracked properly
import org.gradle.api.GradleException
@@ -6,6 +22,7 @@ import org.gradle.api.artifacts.ModuleDependency
import org.gradle.kotlin.dsl.extra
import org.gradle.api.artifacts.dsl.RepositoryHandler
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
import org.gradle.kotlin.dsl.DependencyHandlerScope
private fun Project.intellijRepoDir() = File("${project.rootDir.absoluteFile}/buildSrc/prepare-deps/intellij-sdk/build/repo")
@@ -36,10 +53,17 @@ fun Project.intellijUltimateDep() = intellijDep("intellij")
fun Project.intellijUltimatePluginDep(plugin: String) = intellijDep(plugin)
fun ModuleDependency.includeJars(vararg names: String) {
fun ModuleDependency.includeJars(vararg names: String, rootProject: Project? = null) {
names.forEach {
var baseName = it.removeSuffix(".jar")
if (rootProject != null && rootProject.extra.has("ignore.jar.$baseName")) {
return@forEach
}
if (rootProject != null && rootProject.extra.has("versions.jar.$baseName")) {
baseName += "-${rootProject.extra["versions.jar.$baseName"]}"
}
artifact {
name = it.removeSuffix(".jar")
name = baseName
type = "jar"
extension = "jar"
}
@@ -47,10 +71,10 @@ fun ModuleDependency.includeJars(vararg names: String) {
}
fun ModuleDependency.includeIntellijCoreJarDependencies(project: Project) =
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).toTypedArray())
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).toTypedArray(), rootProject = project.rootProject)
fun ModuleDependency.includeIntellijCoreJarDependencies(project: Project, jarsFilterPredicate: (String) -> Boolean) =
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).filter { jarsFilterPredicate(it) }.toTypedArray())
includeJars(*(project.rootProject.extra["IntellijCoreDependencies"] as List<String>).filter { jarsFilterPredicate(it) }.toTypedArray(), rootProject = project.rootProject)
fun Project.isIntellijCommunityAvailable() = !(rootProject.extra["intellijUltimateEnabled"] as Boolean) || rootProject.extra["intellijSeparateSdks"] as Boolean
@@ -65,3 +89,8 @@ fun Project.intellijUltimateRootDir() =
else
throw GradleException("intellij ultimate SDK is not available")
fun DependencyHandlerScope.excludeInAndroidStudio(rootProject: Project, block: DependencyHandlerScope.() -> Unit) {
if (!rootProject.extra.has("versions.androidStudioRelease")) {
block()
}
}
+2 -2
View File
@@ -36,8 +36,8 @@ dependencies {
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
compileOnly(intellijDep()) {
includeJars("annotations", "openapi", "idea", "velocity", "boot", "gson-2.5", "log4j", "asm-all",
"swingx-core-1.6.2", "forms_rt", "util", "jdom", "trove4j", "guava-21.0")
includeJars("annotations", "openapi", "idea", "velocity", "boot", "gson", "log4j", "asm-all",
"swingx-core-1.6.2", "forms_rt", "util", "jdom", "trove4j", "guava-21.0", rootProject = rootProject)
}
compileOnly(commonDep("com.google.code.findbugs", "jsr305"))
compileOnly(intellijPluginDep("IntelliLang"))
+2 -1
View File
@@ -1,3 +1,4 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
apply { plugin("kotlin") }
@@ -21,7 +22,7 @@ dependencies {
compile(androidDxJar())
compileOnly(intellijDep()) { includeJars("openapi", "idea", "extensions", "util", "guava-21.0") }
compileOnly(intellijDep()) { includeJars("openapi", "idea", "extensions", "util", "guava-21.0", "android-base-common", rootProject = rootProject) }
compileOnly(intellijPluginDep("android")) {
includeJars("android", "android-common", "sdk-common", "sdklib", "sdk-tools", "layoutlib-api")
}
@@ -4,8 +4,8 @@ apply { plugin("kotlin") }
dependencies {
compile(project(":compiler:util"))
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
compileOnly(intellijDep()) { includeJars("guava-21.0") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api-3.5") }
compileOnly(intellijDep()) { includeJars("guava-21.0", "android-base-common", rootProject = rootProject) }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api", rootProject = rootProject) }
compileOnly(intellijPluginDep("android")) { includeJars("android", "android-common", "sdk-common") }
}
+2 -1
View File
@@ -1,3 +1,4 @@
apply { plugin("kotlin") }
dependencies {
@@ -18,7 +19,7 @@ dependencies {
compile(commonDep("org.jetbrains.kotlinx", "kotlinx-coroutines-jdk8")) { isTransitive = false }
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
compileOnly(intellijDep()) { includeJars("util", "openapi", "idea", "asm-all", "jdom", "annotations", "trove4j", "guava-21.0") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api-3.5", "gradle") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api", "gradle", rootProject = rootProject) }
}
sourceSets {
+3 -2
View File
@@ -1,3 +1,4 @@
apply { plugin("kotlin") }
val androidSdk by configurations.creating
@@ -17,14 +18,14 @@ dependencies {
compile(project(":js:js.frontend"))
compileOnly(intellijDep()) { includeJars("openapi", "idea", "external-system-rt", "forms_rt", "extensions", "jdom", "util") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api-3.5", "gradle", "gradle-base-services-3.5") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api", "gradle", "gradle-base-services", rootProject = rootProject) }
compileOnly(intellijPluginDep("Groovy")) { includeJars("Groovy") }
compileOnly(intellijPluginDep("junit")) { includeJars("idea-junit") }
testCompile(projectTests(":idea"))
testCompile(project(":idea:idea-test-framework"))
testCompile(intellijPluginDep("gradle")) { includeJars("gradle-wrapper-3.5", "gradle-base-services-3.5", "gradle-tooling-extension-impl", "gradle-tooling-api-3.5", "gradle") }
testCompile(intellijPluginDep("gradle")) { includeJars("gradle-wrapper", "gradle-base-services", "gradle-tooling-extension-impl", "gradle-tooling-api", "gradle", rootProject = rootProject) }
testCompileOnly(intellijPluginDep("Groovy")) { includeJars("Groovy") }
testCompileOnly(intellijDep()) { includeJars("groovy-all-2.4.6", "idea_rt") }
+2 -2
View File
@@ -5,8 +5,8 @@ dependencies {
compile(project(":idea"))
compile(project(":compiler:light-classes"))
compile(project(":compiler:frontend.java"))
compileOnly(intellijDep()) { includeJars("annotations", "openapi", "idea", "extensions", "util", "velocity", "boot", "gson-2.5",
"swingx-core-1.6.2", "forms_rt", "jdom", "log4j", "guava-21.0", "asm-all") }
compileOnly(intellijDep()) { includeJars("annotations", "openapi", "idea", "extensions", "util", "velocity", "boot", "gson",
"swingx-core-1.6.2", "forms_rt", "jdom", "log4j", "guava-21.0", "asm-all", rootProject = rootProject) }
compileOnly(commonDep("com.google.code.findbugs", "jsr305"))
compileOnly(intellijPluginDep("junit")) { includeJars("idea-junit") }
+3 -3
View File
@@ -15,14 +15,14 @@ dependencies {
compile(project(":idea:idea-jvm"))
compile(project(":idea:idea-jps-common"))
compileOnly(intellijDep()) { includeJars("openapi", "idea", "gson-2.5", "jdom", "extensions", "util") }
compileOnly(intellijPluginDep("maven")) { includeJars("maven", "maven-server-api") }
compileOnly(intellijDep()) { includeJars("openapi", "idea", "gson", "jdom", "extensions", "util", rootProject = rootProject) }
excludeInAndroidStudio(rootProject) { compileOnly(intellijPluginDep("maven")) { includeJars("maven", "maven-server-api") } }
testCompile(projectTests(":idea"))
testCompile(projectTests(":compiler:tests-common"))
testCompile(project(":idea:idea-test-framework"))
testCompileOnly(intellijDep()) { includeJars("openapi", "idea", "gson-2.5", "idea_rt") }
testCompileOnly(intellijDep()) { includeJars("openapi", "idea", "gson", "idea_rt", rootProject = rootProject) }
testCompileOnly(intellijPluginDep("maven")) { includeJars("maven", "maven-server-api") }
testRuntime(projectDist(":kotlin-reflect"))
+4 -3
View File
@@ -9,11 +9,12 @@ dependencies {
compile(projectDist(":kotlin-stdlib"))
compile(project(":compiler:cli-common"))
compile(intellijPluginDep("gradle")) {
includeJars("gradle-tooling-api-3.5",
includeJars("gradle-tooling-api",
"gradle-tooling-extension-api",
"gradle",
"gradle-core-3.5",
"gradle-base-services-groovy-3.5")
"gradle-core",
"gradle-base-services-groovy",
rootProject = rootProject)
}
}
+2 -2
View File
@@ -15,8 +15,8 @@ dependencies {
compile(project(":idea:idea-jps-common"))
compile(project(":plugins:annotation-based-compiler-plugins-ide-support"))
compileOnly(intellijDep()) { includeJars("openapi", "idea") }
compileOnly(intellijPluginDep("maven")) { includeJars("maven") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api-3.5", "gradle") }
excludeInAndroidStudio(rootProject) { compileOnly(intellijPluginDep("maven")) { includeJars("maven") } }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api", "gradle", rootProject = rootProject) }
}
sourceSets {
@@ -22,7 +22,7 @@ dependencies {
compileOnly(project(":kotlin-android-extensions-runtime"))
compileOnly(intellijPluginDep("android")) { includeJars("android.jar", "android-common.jar", "sdk-common.jar", "sdk-tools.jar") }
compileOnly(intellijPluginDep("Groovy")) { includeJars("Groovy.jar") }
compileOnly(intellijDep()) { includeJars("extensions.jar", "openapi.jar", "util.jar", "idea.jar") }
compileOnly(intellijDep()) { includeJars("extensions.jar", "openapi.jar", "util.jar", "idea.jar", "android-base-common.jar", rootProject = rootProject) }
testCompile(project(":compiler:tests-common"))
testCompile(project(":compiler:cli"))
@@ -12,10 +12,10 @@ dependencies {
compile(project(":idea:idea-jps-common"))
compile(project(":idea:idea-gradle"))
compile(project(":idea:idea-maven"))
compileOnly(intellijPluginDep("maven")) { includeJars("maven.jar", "maven-server-api.jar") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api-3.5.jar", "gradle.jar") }
compileOnly(intellijDep()) { includeJars("openapi.jar", "idea.jar", "extensions.jar", "jdom.jar", "util.jar") }
}
excludeInAndroidStudio(rootProject) { compileOnly(intellijPluginDep("maven")) { includeJars("maven.jar", "maven-server-api.jar") } }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api", "gradle", rootProject = rootProject) }
compileOnly(intellijDep()) { includeJars("openapi.jar", "idea.jar", "extensions.jar", "jdom.jar", "util.jar") }
}
sourceSets {
"main" { projectDefault() }
+1 -1
View File
@@ -10,7 +10,7 @@ dependencies {
compile(project(":idea:kotlin-gradle-tooling"))
compile(project(":kotlin-annotation-processing"))
compileOnly(intellijDep()) { includeJars("openapi", "external-system-rt", "util") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-core-3.5", "gradle-tooling-api-3.5", "gradle") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-core", "gradle-tooling-api", "gradle", rootProject = rootProject) }
compileOnly(intellijPluginDep("android")) { includeJars("android", "android-common", "sdklib", "sdk-common", "sdk-tools") }
}
+3 -3
View File
@@ -16,9 +16,9 @@ dependencies {
compile(project(":idea:idea-jps-common"))
compile(project(":plugins:annotation-based-compiler-plugins-ide-support"))
compileOnly(intellijDep()) { includeJars("openapi.jar", "idea.jar") }
compileOnly(intellijPluginDep("maven")) { includeJars("maven.jar") }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api-3.5.jar", "gradle.jar") }
}
excludeInAndroidStudio(rootProject) { compileOnly(intellijPluginDep("maven")) { includeJars("maven.jar") } }
compileOnly(intellijPluginDep("gradle")) { includeJars("gradle-tooling-api", "gradle", rootProject = rootProject) }
}
sourceSets {
"main" { projectDefault() }
+30
View File
@@ -2,3 +2,33 @@
extra["versions.intellijSdk"] = "173.4127.27"
extra["versions.androidBuildTools"] = "r23.0.1"
extra["versions.idea.NodeJS"] = "172.3757.32"
//extra["versions.intellijSdk"] = "173.3942.27"
//extra["versions.androidStudioRelease"] = "3.1.0.5"
//extra["versions.androidStudioBuild"] = "173.4506631"
val gradleJars = listOf(
"gradle-tooling-api", "gradle-base-services", "gradle-wrapper", "gradle-core", "gradle-base-services-groovy"
)
val platform = extra["versions.intellijSdk"].toString().substringBefore('.')
if (platform == "173") {
extra["versions.jar.streamex"] = "0.6.5"
extra["versions.jar.gson"] = "2.8.2"
for (jar in gradleJars) {
extra["versions.jar.$jar"] = "4.0"
}
extra["ignore.jar.lombok-ast-0.2.3"] = true
}
else {
extra["versions.jar.streamex"] = "0.6.2"
extra["versions.jar.gson"] = "2.5"
for (jar in gradleJars) {
extra["versions.jar.$jar"] = "3.5"
}
}
if (!extra.has("versions.androidStudioRelease")) {
extra["ignore.jar.android-base-common"] = true
}