From 360a692af89451aaf60a636e3a2f3ff013335e8c Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 1 Sep 2017 20:38:06 +0300 Subject: [PATCH] Apply rri/yole/modularize, create gradle run configuration for IDEA --- .idea/runConfigurations/gsk__runIde_.xml | 20 +++ build.gradle.kts | 3 + buildSrc/src/main/kotlin/dependencies.kt | 8 + generators/build.gradle.kts | 2 + gradle/project-schema.json | 140 ++++++++++++++++++ idea-runner/build.gradle.kts | 45 ++++++ idea/build.gradle.kts | 22 +-- idea/idea-android/build.gradle.kts | 3 + idea/idea-gradle/build.gradle.kts | 35 +++++ idea/idea-jvm/build.gradle.kts | 22 +++ idea/idea-maven/build.gradle.kts | 46 ++++++ j2k/build.gradle.kts | 3 + .../android-extensions-idea/build.gradle.kts | 1 + .../build.gradle.kts | 2 + prepare/compiler/build.gradle.kts | 8 +- prepare/kotlin-plugin/build.gradle.kts | 4 + settings.gradle | 4 + 17 files changed, 348 insertions(+), 20 deletions(-) create mode 100644 .idea/runConfigurations/gsk__runIde_.xml create mode 100644 idea-runner/build.gradle.kts create mode 100644 idea/idea-gradle/build.gradle.kts create mode 100644 idea/idea-jvm/build.gradle.kts create mode 100644 idea/idea-maven/build.gradle.kts diff --git a/.idea/runConfigurations/gsk__runIde_.xml b/.idea/runConfigurations/gsk__runIde_.xml new file mode 100644 index 00000000000..efe92e8b4a4 --- /dev/null +++ b/.idea/runConfigurations/gsk__runIde_.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 0d894dccb56..c15b4f39f52 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -231,6 +231,7 @@ val compilerCopyTask = task("idea-plugin-copy-compiler") { task("dist-plugin") { dependsOn(compilerCopyTask) dependsOnTaskIfExistsRec("idea-plugin") + shouldRunAfter(":prepare:kotlin-plugin:idea-plugin") into("$ideaPluginDir/lib") } @@ -262,6 +263,8 @@ tasks { "idea-plugin-tests" { dependsOn("dist") dependsOn(":idea:test", + ":idea:idea-gradle:test", + ":idea:idea-maven:test", ":j2k:test", ":eval4j:test") } diff --git a/buildSrc/src/main/kotlin/dependencies.kt b/buildSrc/src/main/kotlin/dependencies.kt index d8c79d18035..98f2b0f8305 100644 --- a/buildSrc/src/main/kotlin/dependencies.kt +++ b/buildSrc/src/main/kotlin/dependencies.kt @@ -81,3 +81,11 @@ private fun String.toMaybeVersionedJarRegex(): Regex { return Regex(if (hasJarExtension) escaped else "$escaped(-\\d.*)?\\.jar") // TODO: consider more precise version part of the regex } + +private val jreHome = System.getProperty("java.home") + +fun firstFromJavaHomeThatExists(vararg paths: String): File = + paths.mapNotNull { File(jreHome, it).takeIf { it.exists() } }.firstOrNull() + ?: throw GradleException("Cannot find under '$jreHome' neither of: ${paths.joinToString()}") + +fun toolsJar(): File = firstFromJavaHomeThatExists("../lib/tools.jar", "../Classes/tools.jar") diff --git a/generators/build.gradle.kts b/generators/build.gradle.kts index 34cc6471828..34a2f3bcde3 100644 --- a/generators/build.gradle.kts +++ b/generators/build.gradle.kts @@ -21,6 +21,8 @@ dependencies { compile(projectTests(":compiler:container")) compile(projectTests(":compiler:incremental-compilation-impl")) compile(projectTests(":idea")) + compile(projectTests(":idea:idea-gradle")) + compile(projectTests(":idea:idea-maven")) compile(projectTests(":j2k")) compile(projectTests(":idea:idea-android")) compile(projectTests(":jps-plugin")) diff --git a/gradle/project-schema.json b/gradle/project-schema.json index cf3de118122..be8b84c9662 100644 --- a/gradle/project-schema.json +++ b/gradle/project-schema.json @@ -339,6 +339,41 @@ "reporting": "org.gradle.api.reporting.ReportingExtension" } }, + ":idea-runner": { + "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.KotlinProjectExtension", + "kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension", + "defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet", + "reporting": "org.gradle.api.reporting.ReportingExtension" + } + }, ":j2k": { "conventions": { "base": "org.gradle.api.plugins.BasePluginConvention", @@ -2854,6 +2889,41 @@ "reporting": "org.gradle.api.reporting.ReportingExtension" } }, + ":idea:idea-gradle": { + "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.KotlinProjectExtension", + "kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension", + "defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet", + "reporting": "org.gradle.api.reporting.ReportingExtension" + } + }, ":idea:idea-jps-common": { "conventions": { "base": "org.gradle.api.plugins.BasePluginConvention", @@ -2889,6 +2959,76 @@ "reporting": "org.gradle.api.reporting.ReportingExtension" } }, + ":idea:idea-jvm": { + "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.KotlinProjectExtension", + "kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension", + "defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet", + "reporting": "org.gradle.api.reporting.ReportingExtension" + } + }, + ":idea:idea-maven": { + "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.KotlinProjectExtension", + "kapt": "org.jetbrains.kotlin.gradle.plugin.KaptExtension", + "defaultArtifacts": "org.gradle.api.internal.plugins.DefaultArtifactPublicationSet", + "reporting": "org.gradle.api.reporting.ReportingExtension" + } + }, ":idea:idea-test-framework": { "conventions": { "base": "org.gradle.api.plugins.BasePluginConvention", diff --git a/idea-runner/build.gradle.kts b/idea-runner/build.gradle.kts new file mode 100644 index 00000000000..70278bf02bd --- /dev/null +++ b/idea-runner/build.gradle.kts @@ -0,0 +1,45 @@ +apply { plugin("kotlin") } + +dependencies { + + compile(ideaSdkDeps("*.jar")) + compileOnly(project(":idea")) + compileOnly(project(":idea:idea-maven")) + compileOnly(project(":idea:idea-gradle")) + compileOnly(project(":idea:idea-jvm")) + + runtimeOnly(files(toolsJar())) +} + + + + +val runIde by task { + dependsOn(":dist", ":prepare:kotlin-plugin:idea-plugin", ":dist-plugin") + + classpath = the().sourceSets["main"].runtimeClasspath + + main = "com.intellij.idea.Main" + + workingDir = File(rootDir, "ideaSDK", "bin") + + val pluginPath = File(rootDir, "dist", "artifacts", "Kotlin") + + jvmArgs( + "-Xmx1250m", + "-XX:ReservedCodeCacheSize=240m", + "-XX:+HeapDumpOnOutOfMemoryError", + "-ea", + "-Didea.is.internal=true", + "-Didea.debug.mode=true", + "-Didea.system.path=../system-idea", + "-Didea.config.path=../config-idea", + "-Dapple.laf.useScreenMenuBar=true", + "-Dapple.awt.graphics.UseQuartz=true", + "-Dsun.io.useCanonCaches=false", + "-Dplugin.path=${pluginPath.absolutePath}", + "-Dkotlin.internal.mode.enabled=true", + "-Didea.additional.classpath=../idea-kotlin-runtime/kotlin-runtime.jar,../idea-kotlin-runtime/kotlin-reflect.jar" + ) + args() +} \ No newline at end of file diff --git a/idea/build.gradle.kts b/idea/build.gradle.kts index adaee811e0a..43242a0a57c 100644 --- a/idea/build.gradle.kts +++ b/idea/build.gradle.kts @@ -1,4 +1,6 @@ +import org.gradle.jvm.tasks.Jar + apply { plugin("kotlin") } dependencies { @@ -30,18 +32,10 @@ dependencies { compileOnly(ideaSdkDeps("openapi", "idea", "velocity", "boot", "gson", "swingx-core", "jsr305", "forms_rt")) - compile(ideaPluginDeps("idea-junit", plugin = "junit")) compile(ideaPluginDeps("IntelliLang", plugin = "IntelliLang")) - compile(ideaPluginDeps("testng", "testng-plugin", plugin = "testng")) compile(ideaPluginDeps("copyright", plugin = "copyright")) compile(ideaPluginDeps("properties", plugin = "properties")) compile(ideaPluginDeps("java-i18n", plugin = "java-i18n")) - compile(ideaPluginDeps("coverage", plugin = "coverage")) - compile(ideaPluginDeps("java-decompiler", plugin = "java-decompiler")) - - compileOnly(ideaPluginDeps("gradle-tooling-api", "gradle", plugin = "gradle")) - compileOnly(ideaPluginDeps("Groovy", plugin = "Groovy")) - compileOnly(ideaPluginDeps("maven", "maven-server-api", plugin = "maven")) compile(preloadedDeps("markdown", "kotlinx-coroutines-core")) @@ -49,6 +43,9 @@ dependencies { testCompile(project(":compiler:cli")) testCompile(project(":compiler.tests-common")) testCompile(project(":idea:idea-test-framework")) { isTransitive = false } + testCompile(project(":idea:idea-jvm")) { isTransitive = false } + testCompile(project(":idea:idea-gradle")) { isTransitive = false } + testCompile(project(":idea:idea-maven")) { isTransitive = false } testCompile(commonDep("junit:junit")) testCompileOnly(ideaPluginDeps("gradle-base-services", "gradle-tooling-extension-impl", "gradle-wrapper", plugin = "gradle")) @@ -59,7 +56,7 @@ dependencies { testRuntime(ideaSdkDeps("*.jar")) - testRuntime(ideaPluginDeps("resources_en", plugin = "junit")) + testRuntime(ideaPluginDeps("*.jar", plugin = "junit")) testRuntime(ideaPluginDeps("jcommander", "resources_en", plugin = "testng")) testRuntime(ideaPluginDeps("resources_en", plugin = "properties")) testRuntime(ideaPluginDeps("*.jar", plugin = "gradle")) @@ -90,16 +87,13 @@ dependencies { sourceSets { "main" { projectDefault() - java.srcDirs("idea-maven/src", - "idea-gradle/src", - "idea-completion/src", + java.srcDirs("idea-completion/src", "idea-live-templates/src", "idea-repl/src") - resources.srcDir("idea-maven/resources") } "test" { projectDefault() - java.srcDirs("idea-maven/test", + java.srcDirs( "idea-completion/tests", "idea-live-templates/tests") } diff --git a/idea/idea-android/build.gradle.kts b/idea/idea-android/build.gradle.kts index 144e69e98d1..f2a2de2a221 100644 --- a/idea/idea-android/build.gradle.kts +++ b/idea/idea-android/build.gradle.kts @@ -10,6 +10,8 @@ dependencies { compile(project(":idea")) compile(project(":idea:idea-core")) compile(project(":idea:ide-common")) + compile(project(":idea:idea-gradle")) + compile(ideaSdkDeps("openapi", "idea")) compile(ideaPluginDeps("gradle-tooling-api", plugin = "gradle")) compile(ideaPluginDeps("android", "android-common", "sdklib", "sdk-common", "layoutlib-api", plugin = "android")) @@ -20,6 +22,7 @@ dependencies { testCompile(project(":idea:idea-test-framework")) { isTransitive = false } testCompile(project(":plugins:lint")) { isTransitive = false } testCompile(projectTests(":idea")) + testCompile(projectTests(":idea:idea-gradle")) testCompile(ideaPluginDeps("properties", plugin = "properties")) testCompile(ideaSdkDeps("gson")) testCompile(commonDep("junit:junit")) diff --git a/idea/idea-gradle/build.gradle.kts b/idea/idea-gradle/build.gradle.kts new file mode 100644 index 00000000000..13b539a71dd --- /dev/null +++ b/idea/idea-gradle/build.gradle.kts @@ -0,0 +1,35 @@ +apply { plugin("kotlin") } + +dependencies { + + compileOnly(ideaSdkDeps("openapi", "idea")) + compileOnly(ideaPluginDeps("gradle-tooling-api", "gradle", plugin = "gradle")) + compileOnly(ideaPluginDeps("Groovy", plugin = "Groovy")) + + compileOnly(project(":idea")) + compileOnly(project(":idea:idea-jvm")) + compile(project(":idea:kotlin-gradle-tooling")) + + compile(project(":compiler:frontend")) + compile(project(":compiler:frontend.java")) + compile(project(":compiler:frontend.script")) + + compile(project(":js:js.frontend")) + + testCompile(projectTests(":idea")) + testCompile(project(":idea:idea-test-framework")) + testCompile(ideaSdkDeps("openapi", "idea", "groovy-all")) + testCompile(ideaPluginDeps("gradle-wrapper", "gradle-base-services", "gradle-tooling-extension-impl", "gradle-tooling-api", "gradle", plugin = "gradle")) + testCompile(ideaPluginDeps("Groovy", plugin = "Groovy")) +} + +sourceSets { + "main" { projectDefault() } + "test" { projectDefault() } +} + +testsJar() + +projectTest { + workingDir = rootDir +} \ No newline at end of file diff --git a/idea/idea-jvm/build.gradle.kts b/idea/idea-jvm/build.gradle.kts new file mode 100644 index 00000000000..b19702d9366 --- /dev/null +++ b/idea/idea-jvm/build.gradle.kts @@ -0,0 +1,22 @@ + +apply { plugin("kotlin") } + +dependencies { + compile(project(":idea")) + compile(project(":compiler:light-classes")) + compile(project(":compiler:frontend.java")) + + compileOnly(ideaSdkDeps("openapi", "idea")) + + compile(ideaPluginDeps("idea-junit", plugin = "junit")) + compile(ideaPluginDeps("testng", "testng-plugin", plugin = "testng")) + + compile(ideaPluginDeps("coverage", plugin = "coverage")) + + compile(ideaPluginDeps("java-decompiler", plugin = "java-decompiler")) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} diff --git a/idea/idea-maven/build.gradle.kts b/idea/idea-maven/build.gradle.kts new file mode 100644 index 00000000000..54dd95b7b24 --- /dev/null +++ b/idea/idea-maven/build.gradle.kts @@ -0,0 +1,46 @@ + +apply { plugin("kotlin") } + +dependencies { + compileOnly(ideaSdkDeps("openapi", "idea", "gson")) + compileOnly(ideaPluginDeps("maven", "maven-server-api", plugin = "maven")) + + compile(project(":core:util.runtime")) + compile(project(":compiler:frontend")) + compile(project(":compiler:frontend.java")) + compile(project(":compiler:util")) + compile(project(":compiler:cli-common")) + compile(project(":kotlin-build-common")) + + compile(project(":js:js.frontend")) + + compile(project(":idea")) + compile(project(":idea:idea-jps-common")) + + testCompile(projectTests(":idea")) + testCompile(project(":compiler.tests-common")) + testCompile(project(":idea:idea-test-framework")) + testCompileOnly(ideaSdkDeps("openapi", "idea", "gson")) + testCompileOnly(ideaPluginDeps("maven", "maven-server-api", plugin = "maven")) + + testRuntime(ideaSdkDeps("*.jar")) + testRuntime(ideaPluginDeps("resources_en", plugin = "junit")) + testRuntime(ideaPluginDeps("jcommander", "resources_en", plugin = "testng")) + testRuntime(ideaPluginDeps("resources_en", plugin = "properties")) + testRuntime(ideaPluginDeps("*.jar", plugin = "gradle")) + testRuntime(ideaPluginDeps("*.jar", plugin = "Groovy")) + testRuntime(ideaPluginDeps("jacocoant", plugin = "coverage")) + testRuntime(ideaPluginDeps("*.jar", plugin = "maven")) + testRuntime(ideaPluginDeps("*.jar", plugin = "android")) +} + +sourceSets { + "main" { projectDefault() } + "test" { projectDefault() } +} + +testsJar() + +projectTest { + workingDir = rootDir +} diff --git a/j2k/build.gradle.kts b/j2k/build.gradle.kts index c84dda6dd95..b2d9cecea80 100644 --- a/j2k/build.gradle.kts +++ b/j2k/build.gradle.kts @@ -59,10 +59,13 @@ val testForWebDemo by task { classpath = the().sourceSets["test"].runtimeClasspath workingDir = rootDir } +val cleanTestForWebDemo by tasks val test: Test by tasks test.apply { exclude("**/*JavaToKotlinConverterForWebDemoTestGenerated*") dependsOn(testForWebDemo) } +val cleanTest by tasks +cleanTest.dependsOn(cleanTestForWebDemo) diff --git a/plugins/android-extensions/android-extensions-idea/build.gradle.kts b/plugins/android-extensions/android-extensions-idea/build.gradle.kts index 70ca5581097..f5d5e93bab2 100644 --- a/plugins/android-extensions/android-extensions-idea/build.gradle.kts +++ b/plugins/android-extensions/android-extensions-idea/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { compile(project(":compiler:light-classes")) compile(project(":idea:idea-core")) compile(project(":idea")) + compile(project(":idea:idea-gradle")) compile(project(":android-extensions-compiler")) compile(ideaPluginDeps("android", "sdk-tools", "sdk-common", plugin = "android")) compile(ideaPluginDeps("Groovy", plugin = "Groovy")) diff --git a/plugins/annotation-based-compiler-plugins-ide-support/build.gradle.kts b/plugins/annotation-based-compiler-plugins-ide-support/build.gradle.kts index 450c1de7c5f..f9919e015aa 100644 --- a/plugins/annotation-based-compiler-plugins-ide-support/build.gradle.kts +++ b/plugins/annotation-based-compiler-plugins-ide-support/build.gradle.kts @@ -7,6 +7,8 @@ dependencies { compile(project(":compiler:cli-common")) compile(project(":idea")) compile(project(":idea:idea-jps-common")) + compile(project(":idea:idea-gradle")) + compile(project(":idea:idea-maven")) compileOnly(ideaPluginDeps("maven", "maven-server-api", plugin = "maven")) compileOnly(ideaPluginDeps("gradle-tooling-api", "gradle", plugin = "gradle")) compileOnly(ideaSdkDeps("openapi", "idea")) diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index 55cd8514d8e..1a554ff0b72 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -37,7 +37,7 @@ val compilerBaseName = name val outputJar = File(buildDir, "libs", "$compilerBaseName.jar") -val jreHome = System.getProperty("java.home") + val compilerModules: Array by rootProject.extra @@ -56,10 +56,6 @@ val packagesToRelocate = val ideaCoreSdkJars: Array by rootProject.extra val coreSdkJarsSimple = ideaCoreSdkJars.filterNot { it == "jdom" || it == "log4j" }.toTypedArray() -fun firstFromJavaHomeThatExists(vararg paths: String): File = - paths.mapNotNull { File(jreHome, it).takeIf { it.exists() } }.firstOrNull() - ?: throw GradleException("Cannot find under '$jreHome' neither of: ${paths.joinToString()}") - compilerModules.forEach { evaluationDependsOn(it) } val compiledModulesSources = compilerModules.map { @@ -87,7 +83,7 @@ dependencies { proguardLibraryJars(files(firstFromJavaHomeThatExists("lib/rt.jar", "../Classes/classes.jar"), firstFromJavaHomeThatExists("lib/jsse.jar", "../Classes/jsse.jar"), - firstFromJavaHomeThatExists("../lib/tools.jar", "../Classes/tools.jar"))) + toolsJar())) proguardLibraryJars(projectDist(":kotlin-stdlib")) proguardLibraryJars(projectDist(":kotlin-script-runtime")) proguardLibraryJars(projectDist(":kotlin-reflect")) diff --git a/prepare/kotlin-plugin/build.gradle.kts b/prepare/kotlin-plugin/build.gradle.kts index f2215c6d920..064038f5b39 100644 --- a/prepare/kotlin-plugin/build.gradle.kts +++ b/prepare/kotlin-plugin/build.gradle.kts @@ -37,7 +37,10 @@ val projectsToShadow = listOf( ":idea:idea-android", ":idea:idea-android-output-parser", ":idea:idea-core", + ":idea:idea-jvm", ":idea:idea-jps-common", + ":idea:idea-gradle", + ":idea:idea-maven", //":idea-ultimate", ":compiler:ir.psi2ir", ":compiler:ir.tree", @@ -79,6 +82,7 @@ val jar = runtimeJar(task("shadowJar")) { } ideaPlugin { + shouldRunAfter(":dist") from(jar) from(sideJars) } diff --git a/settings.gradle b/settings.gradle index 4124343cc47..64df58d93e1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -52,6 +52,9 @@ include ":kotlin-build-common", ":core:builtins", ":core:util.runtime", ":custom-dependencies:protobuf-lite", + ":idea:idea-jvm", + ":idea:idea-maven", + ":idea:idea-gradle", ":idea:idea-jps-common", ":idea:formatter", ":idea:ide-common", @@ -61,6 +64,7 @@ include ":kotlin-build-common", ":idea:idea-android-output-parser", ":idea:idea-test-framework", ":idea", + ":idea-runner", ":eval4j", ":j2k", ":plugins:lint",