Change class hierarchy of KotlinSourceRootType. Deadlock during concurrent classloading fixed

#KT-30137 Fixed
This commit is contained in:
Andrey Uskov
2019-02-28 00:26:53 +03:00
parent 87dc1a035b
commit 325ed8eb32
26 changed files with 313 additions and 278 deletions
@@ -331,8 +331,8 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
.flatMap { it.goals.asSequence() }
.any { it in PomFile.KotlinGoals.CompileGoals && it !in PomFile.KotlinGoals.JvmGoals }
val prodSourceRootType: JpsModuleSourceRootType<*> = if (isNonJvmModule) KotlinSourceRootType.Source else JavaSourceRootType.SOURCE
val testSourceRootType: JpsModuleSourceRootType<*> = if (isNonJvmModule) KotlinSourceRootType.TestSource else JavaSourceRootType.TEST_SOURCE
val prodSourceRootType: JpsModuleSourceRootType<*> = if (isNonJvmModule) SourceKotlinRootType else JavaSourceRootType.SOURCE
val testSourceRootType: JpsModuleSourceRootType<*> = if (isNonJvmModule) TestSourceKotlinRootType else JavaSourceRootType.TEST_SOURCE
for ((type, dir) in directories) {
if (rootModel.getSourceFolder(File(dir)) == null) {
@@ -346,10 +346,10 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
}
if (isNonJvmModule) {
mavenProject.sources.forEach { rootModel.addSourceFolder(it, KotlinSourceRootType.Source) }
mavenProject.testSources.forEach { rootModel.addSourceFolder(it, KotlinSourceRootType.TestSource) }
mavenProject.resources.forEach { rootModel.addSourceFolder(it.directory, KotlinResourceRootType.Resource) }
mavenProject.testResources.forEach { rootModel.addSourceFolder(it.directory, KotlinResourceRootType.TestResource) }
mavenProject.sources.forEach { rootModel.addSourceFolder(it, SourceKotlinRootType) }
mavenProject.testSources.forEach { rootModel.addSourceFolder(it, TestSourceKotlinRootType) }
mavenProject.resources.forEach { rootModel.addSourceFolder(it.directory, ResourceKotlinRootType) }
mavenProject.testResources.forEach { rootModel.addSourceFolder(it.directory, TestResourceKotlinRootType) }
KotlinSdkType.setUpIfNeeded()
}
@@ -40,8 +40,9 @@ import org.jetbrains.idea.maven.project.MavenProjectsManager
import org.jetbrains.idea.maven.utils.MavenArtifactScope
import org.jetbrains.jps.model.java.JavaSourceRootType
import org.jetbrains.kotlin.cli.common.arguments.CliArgumentStringBuilder.buildArgumentString
import org.jetbrains.kotlin.config.KotlinSourceRootType
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.SourceKotlinRootType
import org.jetbrains.kotlin.config.TestSourceKotlinRootType
import org.jetbrains.kotlin.idea.configuration.RepositoryDescription
import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
@@ -500,9 +501,9 @@ class PomFile private constructor(private val xmlFile: XmlFile, val domModel: Ma
private fun SourceFolder.isRelatedSourceRoot(isTest: Boolean): Boolean {
return if (isTest) {
rootType == JavaSourceRootType.TEST_SOURCE || rootType == KotlinSourceRootType.TestSource
rootType == JavaSourceRootType.TEST_SOURCE || rootType == TestSourceKotlinRootType
} else {
rootType == JavaSourceRootType.SOURCE || rootType == KotlinSourceRootType.Source
rootType == JavaSourceRootType.SOURCE || rootType == SourceKotlinRootType
}
}
@@ -30,7 +30,7 @@ import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiManager
import com.intellij.psi.search.FileTypeIndex
import org.jetbrains.jps.model.java.JavaSourceRootType
import org.jetbrains.kotlin.config.KotlinSourceRootType
import org.jetbrains.kotlin.config.SourceKotlinRootType
import org.jetbrains.kotlin.idea.inspections.runInspection
import org.jetbrains.kotlin.idea.maven.inspections.KotlinMavenPluginPhaseInspection
import org.jetbrains.kotlin.idea.refactoring.toPsiDirectory
@@ -181,7 +181,7 @@ abstract class AbstractKotlinMavenInspectionTest : MavenImportingTestCase() {
val contentEntry = getContentRoots(myProject.allModules().single().name).single()
val sourceFolder =
contentEntry.getSourceFolders(JavaSourceRootType.SOURCE).singleOrNull() ?:
contentEntry.getSourceFolders(KotlinSourceRootType.Source).singleOrNull()
contentEntry.getSourceFolders(SourceKotlinRootType).singleOrNull()
ApplicationManager.getApplication().runWriteAction {
val javaFile = sourceFolder?.file?.toPsiDirectory(myProject)?.createFile("Test.java") ?: throw IllegalStateException()
javaFile.viewProvider.document!!.setText("class Test {}\n")
@@ -843,10 +843,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testJsCustomOutputPaths() {
@@ -1315,10 +1315,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testJsDetectionByGoalWithJsStdlib() {
@@ -1372,10 +1372,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testJsDetectionByGoalWithCommonStdlib() {
@@ -1429,10 +1429,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testJsAndCommonStdlibKinds() {
@@ -1494,10 +1494,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertEquals(JSLibraryKind, libraries.single { it.name?.contains("kotlin-stdlib-js") == true }.kind)
assertEquals(CommonLibraryKind, libraries.single { it.name?.contains("kotlin-stdlib-common") == true }.kind)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testCommonDetectionByGoalWithJvmStdlib() {
@@ -1545,10 +1545,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testCommonDetectionByGoalWithJsStdlib() {
@@ -1596,10 +1596,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testCommonDetectionByGoalWithCommonStdlib() {
@@ -1651,10 +1651,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testJvmDetectionByConflictingGoalsAndJvmStdlib() {
@@ -1706,10 +1706,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), facetSettings.platform)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testJsDetectionByConflictingGoalsAndJsStdlib() {
@@ -1761,10 +1761,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(facetSettings.platform.isJavaScript)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testCommonDetectionByConflictingGoalsAndCommonStdlib() {
@@ -1816,10 +1816,10 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertTrue(facetSettings.platform.isCommon)
assertContentFolders("project", KotlinSourceRootType.Source, "src/main/kotlin")
assertContentFolders("project", KotlinSourceRootType.TestSource, "src/test/java")
assertContentFolders("project", KotlinResourceRootType.Resource, "src/main/resources")
assertContentFolders("project", KotlinResourceRootType.TestResource, "src/test/resources")
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
assertContentFolders("project", ResourceKotlinRootType, "src/main/resources")
assertContentFolders("project", TestResourceKotlinRootType, "src/test/resources")
}
fun testNoPluginsInAdditionalArgs() {