blob: 6cadb06bd8a36a8a8b428692c73fcce679da4fa9 [file] [log] [blame] [edit]
import org.jetbrains.gradle.ext.*
import org.jetbrains.kotlin.ideaExt.*
import org.jetbrains.kotlin.buildUtils.idea.*
val ideaPluginDir: File by extra
val ideaSandboxDir: File by extra
val ideaSdkPath: String
get() = IntellijRootUtils.getIntellijRootDir(rootProject).absolutePath
val intellijUltimateEnabled : Boolean by rootProject.extra
val ideaUltimatePluginDir: File by rootProject.extra
val ideaUltimateSandboxDir: File by rootProject.extra
fun org.jetbrains.gradle.ext.JUnit.configureForKotlin() {
vmParameters = listOf(
"-ea",
"-XX:+HeapDumpOnOutOfMemoryError",
"-Xmx1600m",
"-XX:+UseCodeCacheFlushing",
"-XX:ReservedCodeCacheSize=128m",
"-Djna.nosys=true",
"-Didea.is.unit.test=true",
"-Didea.home.path=$ideaSdkPath",
"-Djps.kotlin.home=${ideaPluginDir.absolutePath}",
"-Dkotlin.ni=" + if (rootProject.hasProperty("newInferenceTests")) "true" else "false",
"-Duse.jps=true"
).joinToString(" ")
envs = mapOf(
"NO_FS_ROOTS_ACCESS_CHECK" to "true",
"PROJECT_CLASSES_DIRS" to "out/test/org.jetbrains.kotlin.compiler.test"
)
workingDirectory = rootDir.toString()
}
if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
allprojects {
apply(mapOf("plugin" to "idea"))
}
rootProject.afterEvaluate {
allprojects {
idea {
module {
inheritOutputDirs = true
}
}
}
rootProject.idea {
project {
settings {
ideArtifacts {
generateIdeArtifacts(rootProject, this@ideArtifacts)
}
compiler {
processHeapSize = 2000
addNotNullAssertions = true
parallelCompilation = true
}
delegateActions {
delegateBuildRunToGradle = false
testRunner = ActionDelegationConfig.TestRunner.PLATFORM
}
runConfigurations {
fun idea(
title: String,
sandboxDir: File,
pluginDir: File
) {
application(title) {
moduleName = "kotlin.idea-runner.main"
workingDirectory = File(intellijRootDir(), "bin").toString()
mainClass = "com.intellij.idea.Main"
jvmArgs = listOf(
"-Xmx1250m",
"-XX:ReservedCodeCacheSize=240m",
"-XX:+HeapDumpOnOutOfMemoryError",
"-ea",
"-Didea.is.internal=true",
"-Didea.debug.mode=true",
"-Didea.system.path=${sandboxDir.absolutePath}",
"-Didea.config.path=${sandboxDir.absolutePath}/config",
"-Dapple.laf.useScreenMenuBar=true",
"-Dapple.awt.graphics.UseQuartz=true",
"-Dsun.io.useCanonCaches=false",
"-Dplugin.path=${pluginDir.absolutePath}"
).joinToString(" ")
}
}
idea("[JPS] IDEA", ideaSandboxDir, ideaPluginDir)
if (intellijUltimateEnabled) {
idea("[JPS] IDEA Ultimate", ideaUltimateSandboxDir, ideaPluginDir)
}
application("[JPS] Generate All Tests") {
moduleName = "kotlin.pill.generate-all-tests.test"
workingDirectory = rootDir.toString()
mainClass = "org.jetbrains.kotlin.pill.generateAllTests.Main"
}
defaults<org.jetbrains.gradle.ext.JUnit> {
configureForKotlin()
}
// todo: replace `pattern` with `package`, when `com.intellij.execution.junit.JUnitRunConfigurationImporter#process` will be fixed
junit("[JPS] All IDEA Plugin Tests") {
moduleName = "kotlin.idea.test"
pattern = "org.jetbrains.kotlin.*"
configureForKotlin()
}
if (intellijUltimateEnabled) {
junit("[JPS] All IDEA Ultimate Plugin Tests") {
moduleName = "kotlin.ultimate.test"
pattern = "org.jetbrains.kotlin.*"
configureForKotlin()
}
}
junit("[JPS] Compiler Tests") {
moduleName = "kotlin.compiler.test"
pattern = "org.jetbrains.kotlin.*"
configureForKotlin()
}
junit("[JPS] JVM Backend Tests") {
moduleName = "kotlin.idea.test"
pattern = "org.jetbrains.kotlin.codegen.*"
configureForKotlin()
}
junit("[JPS] JS Backend Tests") {
moduleName = "kotlin.js.js.tests.test"
pattern = "org.jetbrains.kotlin.js.test.*"
configureForKotlin()
}
junit("[JPS] Java 8 Tests") {
moduleName = "kotlin.compiler.tests-java8.test"
pattern = "org.jetbrains.kotlin.*"
configureForKotlin()
}
}
}
}
}
}
project(":prepare:idea-plugin").afterEvaluate {
val ideaPluginProject = this
val libraries by configurations
val jpsPlugin by configurations
rootProject.idea {
project {
settings {
ideArtifacts {
create("ideaPlugin") {
directory("Kotlin") {
directory("kotlinc") {
artifact("kotlinc")
}
directory("lib") {
archive("kotlin-plugin.jar") {
directory("META-INF") {
file("$buildDir/tmp/jar/MANIFEST.MF")
}
jarFromEmbedded(ideaPluginProject)
}
directoryFromConfiguration(libraries)
directory("jps") {
directoryFromConfiguration(jpsPlugin)
}
}
}
}
}
}
}
}
}
}
val jarArtifactProjects = listOf(
"kotlin-compiler-client-embeddable",
"kotlin-compiler",
"kotlin-daemon-client",
"kotlin-imports-dumper-compiler-plugin",
"kotlin-jps-plugin",
"kotlin-main-kts",
"kotlin-reflect"
)
fun moduleName(projectPath: String) = rootProject.name + projectPath.replace(':', '.') + ".main"
fun RecursiveArtifact.jarFromEmbedded(project: Project) {
val embedded = project.configurations.findByName("embedded") ?: return
val resolvedArtifacts = embedded
.resolvedConfiguration
.resolvedArtifacts
resolvedArtifacts.filter { it.id.componentIdentifier is ModuleComponentIdentifier }
.map { it.file }
.forEach(::extractedDirectory)
resolvedArtifacts
.map { it.id.componentIdentifier }
.filterIsInstance<ProjectComponentIdentifier>()
.forEach {
moduleOutput(moduleName(it.projectPath))
jarFromEmbedded(project(it.projectPath))
}
}
fun RecursiveArtifact.directoryFromConfiguration(configuration: Configuration) {
val resolvedArtifacts = configuration
.resolvedConfiguration
.resolvedArtifacts
resolvedArtifacts.filter { it.id.componentIdentifier is ModuleComponentIdentifier }
.map { it.file }
.forEach(::file)
resolvedArtifacts
.map { it.id.componentIdentifier }
.filterIsInstance<ProjectComponentIdentifier>()
.forEach {
val artifactName = it.projectName + ".jar"
if (it.projectName in jarArtifactProjects) {
artifact(artifactName)
} else {
archive(artifactName) {
moduleOutput(moduleName(it.projectPath))
}
}
}
}