Fix "Kotlin not configured" issue in common MPP tests.

#KT-27718 Fixed
This commit is contained in:
Andrey Uskov
2018-12-05 14:25:58 +03:00
parent 5a8621d7c7
commit 273dbc823e
3 changed files with 40 additions and 7 deletions
@@ -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<JavaResourceRootProperties>(),
JpsModuleSourceRootType<JavaResourceRootProperties> {
object Resource : KotlinResourceRootType()
object TestResource : KotlinResourceRootType()
sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase<JavaResourceRootProperties>(),
JpsModuleSourceRootType<JavaResourceRootProperties>, 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)
}
@@ -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
}
@@ -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<JavaSourceRootProperties>(), JpsModuleSourceRootType<JavaSourceRootProperties> {
object Source : KotlinSourceRootType()
object TestSource : KotlinSourceRootType()
sealed class KotlinSourceRootType(val isTest: Boolean) : JpsElementTypeBase<JavaSourceRootProperties>(), JpsModuleSourceRootType<JavaSourceRootProperties>, 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)
}