https://kotlinlang.org logo
Title
a

aalmiray

06/13/2017, 12:55 PM
hello everyone! how would a custom configuration be added to
build.gradle.kts
? For reference this is what it can done for the Groovy version configurations { integrationTestCompile { extendsFrom testCompile } integrationTestRuntime { extendsFrom integrationTestCompile, testRuntime } functionalTestCompile { extendsFrom compile } functionalTestRuntime { extendsFrom runtime } } dependencies { functionalTestCompile “org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion” functionalTestCompile “org.codehaus.griffon:griffon-core-test:$griffonVersion” functionalTestCompile “org.codehaus.griffon:griffon-javafx-test:$griffonVersion” } sourceSets { integrationTest { kotlin.srcDirs file(‘src/integration-test/kotlin’) compileClasspath += sourceSets.main.output runtimeClasspath += compileClasspath } functionalTest { kotlin.srcDirs file(‘src/functional-test/kotlin’) compileClasspath += sourceSets.main.output runtimeClasspath += compileClasspath } } idea { module { scopes.TEST.plus += [configurations.integrationTestCompile] scopes.TEST.plus += [configurations.integrationTestRuntime] testSourceDirs += sourceSets.integrationTest.allSource.srcDirs scopes.TEST.plus += [configurations.functionalTestCompile] scopes.TEST.plus += [configurations.functionalTestRuntime] testSourceDirs += sourceSets.functionalTest.allSource.srcDirs } }
b

bamboo

06/13/2017, 6:15 PM
aalmiray: Hi, Andres! Here’s a more literal translation first:
configurations {
    “integrationTestCompile” {
        extendsFrom(“testCompile”)
    }
    “integrationTestRuntime” {
        extendsFrom(“integrationTestCompile”, “testRuntime”)
    }
    “functionalTestCompile” {
        extendsFrom(compile)
    }
    “functionalTestRuntime” {
        extendsFrom(runtime)
    }
}

dependencies {
    “functionalTestCompile”(“org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion”)
    “functionalTestCompile”(“org.codehaus.griffon:griffon-core-test:$griffonVersion”)
    “functionalTestCompile”(“org.codehaus.griffon:griffon-javafx-test:$griffonVersion”)
}
basically, the dynamic parts of Groovy are made explicit in Kotlin
with some Kotlin sugar however it becomes:
val integrationTestCompile by configurations.creating {
    extendsFrom(configurations.testCompile)
}
val integrationTestRuntime by configurations.creating {
    extendsFrom(integrationTestCompile, configurations.testRuntime)
}
val functionalTestCompile by configurations.creating {
    extendsFrom(configurations.compile)
}
val functionalTestRuntime by configurations.creating {
    extendsFrom(configurations.runtime)
}

dependencies {
    functionalTestCompile("org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion")
    functionalTestCompile("org.codehaus.griffon:griffon-core-test:$griffonVersion")
    functionalTestCompile("org.codehaus.griffon:griffon-javafx-test:$griffonVersion")
}
Seems there currently is no DSL support for source sets in gradle-script-kotlin.
val sourceSets = java.sourceSets
fun sourceSets(block: SourceSetContainer.() -> Unit) = sourceSets.apply(block)

val SourceSetContainer.main: SourceSet get() = getByName("main")
val SourceSetContainer.test: SourceSet get() = getByName("test")
fun SourceSetContainer.main(block: SourceSet.() -> Unit) = main.apply(block)
fun SourceSetContainer.test(block: SourceSet.() -> Unit) = test.apply(block)

val SourceSet.kotlin: SourceDirectorySet
    get() = (this as HasConvention).convention.getPlugin<KotlinSourceSet>().kotlin
var SourceDirectorySet.sourceDirs: Iterable<File>
    get() = srcDirs
    set(value) { setSrcDirs(value) }

sourceSets {
    main {
        java.sourceDirs = files("src")
        kotlin.sourceDirs = files("src")
        resources.sourceDirs = files("src/res")
    }
    test {
        java.sourceDirs = files("test")
        kotlin.sourceDirs = files("test")
        resources.sourceDirs = files("test/res")
    }
}
a

aalmiray

06/13/2017, 9:58 PM
thanks @bamboo, the second snippet is what I was looking for in terms of code completion support
👌 1
@hastebrot alright, looks like it’s something we have to keep an eye for 😄