From 7be0178830d0c4f38ba4c5e7c02b79fbbca0fe9c Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Thu, 28 Feb 2019 00:26:53 +0300 Subject: [PATCH] Change class hierarchy of KotlinSourceRootType. Deadlock during concurrent classloading fixed #KT-30137 Fixed Original commit: 325ed8eb3206829e51df921a345fc2ec08f12072 --- .../kotlin/config/KotlinResourceRootType.kt | 7 +++-- .../config/KotlinResourceRootType.kt.182 | 7 +++-- .../config/KotlinResourceRootType.kt.191 | 11 ++++--- .../config/KotlinResourceRootType.kt.as34 | 7 +++-- .../kotlin/config/KotlinSourceRootType.kt | 11 ++++--- .../kotlin/config/KotlinSourceRootType.kt.182 | 11 ++++--- .../kotlin/config/KotlinSourceRootType.kt.191 | 15 +++++---- .../config/KotlinSourceRootType.kt.as34 | 13 +++++--- .../config/KotlinSourceRootType.kt.as35 | 31 +++++++++++++++++++ .../moduleSourceRootPropertiesSerializers.kt | 10 +++--- .../jps/build/KotlinResourcesRootProvider.kt | 5 +-- .../jps/build/KotlinSourceRootProvider.kt | 9 +++--- 12 files changed, 88 insertions(+), 49 deletions(-) create mode 100644 jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as35 diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt index b9172990487..1ebd0ae647e 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt @@ -13,8 +13,6 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRootType sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase(), JpsModuleSourceRootType, KotlinRootType { - object Resource : KotlinResourceRootType(false) - object TestResource : KotlinResourceRootType(true) override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createResourceRootProperties("", false) @@ -24,4 +22,7 @@ sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase(), JpsModuleSourceRootType, KotlinRootType { - object Resource : KotlinResourceRootType(false) - object TestResource : KotlinResourceRootType(true) override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createResourceRootProperties("", false) @@ -22,4 +20,7 @@ sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase(), JpsModuleSourceRootType { - object Resource : KotlinResourceRootType() - - object TestResource : KotlinResourceRootType() { - override fun isForTests() = true - } override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createResourceRootProperties("", false) +} + +object ResourceKotlinRootType : KotlinResourceRootType() + +object TestResourceKotlinRootType : KotlinResourceRootType() { + override fun isForTests() = true } \ No newline at end of file diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt.as34 b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt.as34 index fff8d020dea..f56429d6ec9 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt.as34 +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinResourceRootType.kt.as34 @@ -13,8 +13,6 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRootType sealed class KotlinResourceRootType(val isTest: Boolean) : JpsElementTypeBase(), JpsModuleSourceRootType, KotlinRootType { - object Resource : KotlinResourceRootType(false) - object TestResource : KotlinResourceRootType(true) override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createResourceRootProperties("", false) @@ -22,4 +20,7 @@ sealed class KotlinResourceRootType(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 @@ -28,3 +24,8 @@ 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) } +object SourceKotlinRootType : KotlinSourceRootType(false) + +object TestSourceKotlinRootType : KotlinSourceRootType(true) + +val ALL_KOTLIN_SOURCE_ROOT_TYPES = setOf(SourceKotlinRootType, TestSourceKotlinRootType) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.191 b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.191 index 551c8d26307..834e7921dbe 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.191 +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.191 @@ -12,16 +12,15 @@ 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() { - override fun isForTests() = true - } override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createSourceRootProperties("") - companion object { - val ALL_SOURCES = setOf(Source, TestSource) - } } +object SourceKotlinRootType : KotlinSourceRootType() + +object TestSourceKotlinRootType : KotlinSourceRootType() { + override fun isForTests() = true +} + +val ALL_KOTLIN_SOURCE_ROOT_TYPES = setOf(SourceKotlinRootType, TestSourceKotlinRootType) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as34 b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as34 index d6b6b689287..4e4b32e0e59 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as34 +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as34 @@ -12,17 +12,20 @@ import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModuleSourceRootType 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 + fun isForTests() = isTest + override fun equals(other: Any?) = if (super.equals(other)) true else isSameRootType(this, other) } +object SourceKotlinRootType : KotlinSourceRootType(false) + +object TestSourceKotlinRootType : KotlinSourceRootType(true) + +val ALL_KOTLIN_SOURCE_ROOT_TYPES = setOf(SourceKotlinRootType, TestSourceKotlinRootType) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as35 b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as35 new file mode 100644 index 00000000000..4e4b32e0e59 --- /dev/null +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinSourceRootType.kt.as35 @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +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(val isTest: Boolean) : JpsElementTypeBase(), JpsModuleSourceRootType, KotlinRootType { + + + override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createSourceRootProperties("") + + + override fun isTestRoot() = isTest + + fun isForTests() = isTest + + override fun equals(other: Any?) = if (super.equals(other)) true else isSameRootType(this, other) +} + +object SourceKotlinRootType : KotlinSourceRootType(false) + +object TestSourceKotlinRootType : KotlinSourceRootType(true) + +val ALL_KOTLIN_SOURCE_ROOT_TYPES = setOf(SourceKotlinRootType, TestSourceKotlinRootType) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/moduleSourceRootPropertiesSerializers.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/moduleSourceRootPropertiesSerializers.kt index 77d487c457d..99c8f408a38 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/moduleSourceRootPropertiesSerializers.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/moduleSourceRootPropertiesSerializers.kt @@ -27,12 +27,12 @@ sealed class KotlinSourceRootPropertiesSerializer( typeId: String ) : JpsModuleSourceRootPropertiesSerializer(type, typeId) { object Source : KotlinSourceRootPropertiesSerializer( - KotlinSourceRootType.Source, + SourceKotlinRootType, KOTLIN_SOURCE_ROOT_TYPE_ID ) object TestSource : KotlinSourceRootPropertiesSerializer( - KotlinSourceRootType.TestSource, + TestSourceKotlinRootType, KOTLIN_TEST_ROOT_TYPE_ID ) @@ -59,12 +59,12 @@ sealed class KotlinResourceRootPropertiesSerializer( typeId: String ) : JpsModuleSourceRootPropertiesSerializer(type, typeId) { object Resource : KotlinResourceRootPropertiesSerializer( - KotlinResourceRootType.Resource, + ResourceKotlinRootType, KOTLIN_RESOURCE_ROOT_TYPE_ID ) object TestResource : KotlinResourceRootPropertiesSerializer( - KotlinResourceRootType.TestResource, - KOTLIN_TEST_RESOURCE_ROOT_TYPE_ID + TestResourceKotlinRootType, + KOTLIN_TEST_RESOURCE_ROOT_TYPE_ID ) override fun loadProperties(sourceRootTag: Element): JavaResourceRootProperties { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinResourcesRootProvider.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinResourcesRootProvider.kt index cd6be0fbc51..5b1aae8e5a4 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinResourcesRootProvider.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinResourcesRootProvider.kt @@ -12,7 +12,8 @@ import org.jetbrains.jps.builders.java.ResourcesTargetType import org.jetbrains.jps.builders.storage.BuildDataPaths import org.jetbrains.jps.incremental.ResourcesTarget import org.jetbrains.jps.model.java.JavaResourceRootProperties -import org.jetbrains.kotlin.config.KotlinResourceRootType +import org.jetbrains.kotlin.config.ResourceKotlinRootType +import org.jetbrains.kotlin.config.TestResourceKotlinRootType class KotlinResourcesRootProvider : AdditionalRootsProviderService(ResourcesTargetType.ALL_TYPES) { override fun getAdditionalRoots( @@ -26,7 +27,7 @@ class KotlinResourcesRootProvider : AdditionalRootsProviderService.isTestsRootType get() = when (this) { - is KotlinSourceRootType -> this == KotlinSourceRootType.TestSource - is KotlinResourceRootType -> this == KotlinResourceRootType.TestResource + is KotlinSourceRootType -> this == TestSourceKotlinRootType + is KotlinResourceRootType -> this == TestResourceKotlinRootType // for compatibility: is JavaSourceRootType -> this == JavaSourceRootType.TEST_SOURCE is JavaResourceRootType -> this == JavaResourceRootType.TEST_RESOURCE