From 273dbc823e39ecb357b7e9402abf7e2efc08d566 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Wed, 5 Dec 2018 14:25:58 +0300 Subject: [PATCH] Fix "Kotlin not configured" issue in common MPP tests. #KT-27718 Fixed --- .../kotlin/config/KotlinResourceRootType.kt | 13 +++++++---- .../jetbrains/kotlin/config/KotlinRootType.kt | 23 +++++++++++++++++++ .../kotlin/config/KotlinSourceRootType.kt | 11 ++++++--- 3 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinRootType.kt diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt index 757957c14df..0a2bc5272df 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt @@ -7,14 +7,19 @@ package org.jetbrains.kotlin.config import org.jetbrains.jps.model.ex.JpsElementTypeBase import org.jetbrains.jps.model.java.JavaResourceRootProperties +import org.jetbrains.jps.model.java.JavaResourceRootType import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModuleSourceRootType -sealed class KotlinResourceRootType : JpsElementTypeBase(), - JpsModuleSourceRootType { - object Resource : KotlinResourceRootType() - object TestResource : KotlinResourceRootType() +sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase(), + JpsModuleSourceRootType, KotlinRootType { + object Resource : KotlinResourceRootType(false) + object TestResource : KotlinResourceRootType(true) override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createResourceRootProperties("", false) + + override fun isTestRoot() = isTest + + override fun equals(other: Any?) = if (super.equals(other)) true else isSameRootType(this, other) } \ No newline at end of file diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinRootType.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinRootType.kt new file mode 100644 index 00000000000..0f236b66e20 --- /dev/null +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinRootType.kt @@ -0,0 +1,23 @@ +package org.jetbrains.kotlin.config + +import org.jetbrains.jps.model.java.JavaResourceRootType +import org.jetbrains.jps.model.java.JavaSourceRootType + +interface KotlinRootType { + fun isTestRoot(): Boolean +} + +//Hack required to fix critical bug KT-27718 it should be removed after support of source root types other than JavaSourceRootType in Idea Core +fun isSameRootType(kotlinRoot: KotlinRootType, other: Any?): Boolean { + if (kotlinRoot.isTestRoot()) { + if (other is JavaResourceRootType || other is JavaSourceRootType) { + val stack = Thread.currentThread().stackTrace + if (stack.size > 2 && "isTestSource" == stack[2].methodName && "com.intellij.openapi.roots.impl.SourceFolderImpl" == stack[2].className) { + if (JavaResourceRootType.TEST_RESOURCE == other) { + return true + } + } + } + } + return false +} diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt index bd1826dfac7..d6b6b689287 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt @@ -7,17 +7,22 @@ package org.jetbrains.kotlin.config import org.jetbrains.jps.model.ex.JpsElementTypeBase import org.jetbrains.jps.model.java.JavaSourceRootProperties +import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModuleSourceRootType -sealed class KotlinSourceRootType : JpsElementTypeBase(), JpsModuleSourceRootType { - object Source : KotlinSourceRootType() - object TestSource : KotlinSourceRootType() +sealed class KotlinSourceRootType(val isTest: Boolean) : JpsElementTypeBase(), JpsModuleSourceRootType, KotlinRootType { + object Source : KotlinSourceRootType(false) + object TestSource : KotlinSourceRootType(true) override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createSourceRootProperties("") companion object { val ALL_SOURCES = setOf(Source, TestSource) } + + override fun isTestRoot() = isTest + + override fun equals(other: Any?) = if (super.equals(other)) true else isSameRootType(this, other) }