В основном исходном наборе есть два файла(
Код: Выделить всё
src/main/kotlinФайл Times.kt с абстракцией
Код: Выделить всё
interface Times {
fun now(): Duration
}
Код: Выделить всё
fun main() {
val times: Times = FinalTimes
println("now: ${times.now()}")
}
Код: Выделить всё
src/mock/kotlinКод: Выделить всё
object FinalTimes : Times {
private var index = 0L
override fun now(): Duration {
return index++.milliseconds
}
}
Код: Выделить всё
src/real/kotlinКод: Выделить всё
object FinalTimes : Times {
override fun now(): Duration {
return System.currentTimeMillis().milliseconds
}
}
Код: Выделить всё
app/src/main/kotlin/test/kotlin/ss/App.kt
app/src/main/kotlin/test/kotlin/ss/Times.kt
app/src/mock/kotlin/test/kotlin/ss/FinalTimes.kt
app/src/real/kotlin/test/kotlin/ss/FinalTimes.kt
Код: Выделить всё
sourceSets.create("mock") {
kotlin.srcDirs("src/main/kotlin")
}
tasks.register("runMock") {
classpath(sourceSets["mock"].runtimeClasspath)
mainClass = "test.kotlin.ss.AppKt"
}
Моя проблема в том, что IDEA для подсветки кода по-прежнему использует компиляцию исходного кода отдельно.
Код: Выделить всё
main
Код: Выделить всё
mock
Стоит уточнить, что одно не наследует другое. Это будет в случае с main и test, где test знает о main, но main не знает о test. Поэтому простого добавления компиляций["mock"].associateWith(compilations["main"]) будет недостаточно. В моем случае это должна быть общая кодовая база. макет знает о Times в main. И main знает о FinalTimes в макете.
Меня вдохновляет то, как такое разделение исходников работает в проектах Android.
Плагин Android для Gradle позволяет разделять источники на типы сборки и варианты проектов.
И в самой Android Studio я могу выбрать, какой конкретный набор этих типов и вариантов я хочу использовать сейчас при компиляции.
Скажем так это два варианта макета/реального и два типа отладки/выпуска.
Я запускаю команду gradle app:assembleMockDebug и получаю сборку, скомпилированную из кода, расположенного по пути:
- src/main/kotlin
- src/mock/kotlin
- src/debug/kotlin
- src/main/kotlin
- src/real/kotlin
- src/release/kotlin
Я хочу знать, как настроить IDEA, чтобы он понимал, что на данный момент меня интересует только вариант сборки макета.
То есть смотреть код только из src/main/kotlin и src/mock/kotlin, а src/real/kotlin игнорировать.
В духе о том, как Android Studio позволяет выбрать вариант сборки, а затем правильно обрабатывает исходный код, соответствующий выбранному варианту.
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-build-op
Мобильная версия