From e791b9d3f75ab673cbedea5a65a3d975dea24f65 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Fri, 14 Jun 2019 23:46:13 +0300 Subject: [PATCH] HMPP: import flag indicating that the project uses HMPP feature --- .../configuration/KotlinGradleProjectResolverExtension.kt | 2 ++ .../idea/configuration/KotlinGradleSourceSetDataService.kt | 2 +- .../idea/configuration/KotlinMPPGradleProjectResolver.kt | 1 + .../kotlin/idea/configuration/KotlinSourceSetDataService.kt | 2 +- .../src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt | 1 + .../src/org/jetbrains/kotlin/config/facetSerialization.kt | 4 ++++ .../org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt | 6 +++--- .../idea/test/KotlinLightCodeInsightFixtureTestCase.kt | 2 +- idea/kotlin-gradle-tooling/src/KotlinMPPGradleModel.kt | 1 + .../src/KotlinMPPGradleModelBuilder.kt | 2 +- idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt | 5 +++-- .../kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt | 6 ++++++ idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt | 6 ++++-- .../org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt | 2 +- .../kotlin/idea/configuration/ConfigureKotlinTest.java | 3 ++- 15 files changed, 32 insertions(+), 13 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index 76ce3a9d26c..5b84ea4428c 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -55,6 +55,8 @@ var DataNode.compilerArgumentsBySourceSet by CopyableDataNodeUserDataProperty(Key.create("CURRENT_COMPILER_ARGUMENTS")) var DataNode.coroutines by CopyableDataNodeUserDataProperty(Key.create("KOTLIN_COROUTINES")) +var DataNode.isHmpp + by NotNullableCopyableDataNodeUserDataProperty(Key.create("IS_HMPP_MODULE"), false) var DataNode.platformPluginId by CopyableDataNodeUserDataProperty(Key.create("PLATFORM_PLUGIN_ID")) var DataNode.implementedModuleNames diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index 9bf5e8a8b06..14dd1d1cc03 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -288,7 +288,7 @@ fun configureFacetByGradleModule( ) val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false, GradleConstants.SYSTEM_ID.id) - kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider) + kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider, moduleNode.isHmpp) if (sourceSetNode == null) { ideModule.compilerArgumentsBySourceSet = moduleNode.compilerArgumentsBySourceSet diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt index f7e6d2da1e0..24d865a5d37 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinMPPGradleProjectResolver.kt @@ -360,6 +360,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { } mainModuleNode.coroutines = mppModel.extraFeatures.coroutinesState + mainModuleNode.isHmpp = mppModel.extraFeatures.isHMPPEnabled } fun populateContentRoots( diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt index 7618bb8aec3..1c9f9ce8631 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt @@ -121,7 +121,7 @@ class KotlinSourceSetDataService : AbstractProjectDataService { val modelsProvider = IdeModifiableModelsProviderImpl(project) val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false) - facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider) + facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider, false) if (apiVersion != null) { facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion) } diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModel.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModel.kt index 075cd285d9a..04a0953aaa7 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModel.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModel.kt @@ -128,6 +128,7 @@ interface KotlinTarget : Serializable { interface ExtraFeatures : Serializable { val coroutinesState: String? + val isHMPPEnabled: Boolean } interface KotlinMPPGradleModel : Serializable { diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index 41af55cee0e..1f46538ad23 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -52,7 +52,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { val coroutinesState = getCoroutinesState(project) reportUnresolvedDependencies(targets) val kotlinNativeHome = KotlinNativeHomeEvaluator.getKotlinNativeHome(project) ?: NO_KOTLIN_NATIVE_HOME - return KotlinMPPGradleModelImpl(sourceSetMap, targets, ExtraFeaturesImpl(coroutinesState), kotlinNativeHome) + return KotlinMPPGradleModelImpl(sourceSetMap, targets, ExtraFeaturesImpl(coroutinesState, isHMPPEnabled(project)), kotlinNativeHome) } private fun isHMPPEnabled(project: Project): Boolean { diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt index 241cee68893..ac4acf51215 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt @@ -147,7 +147,8 @@ data class KotlinTargetImpl( } data class ExtraFeaturesImpl( - override val coroutinesState: String? + override val coroutinesState: String?, + override val isHMPPEnabled: Boolean ) : ExtraFeatures data class KotlinMPPGradleModelImpl( @@ -169,7 +170,7 @@ data class KotlinMPPGradleModelImpl( cloningCache[initialTarget] = it } }.toList(), - ExtraFeaturesImpl(mppModel.extraFeatures.coroutinesState), + ExtraFeaturesImpl(mppModel.extraFeatures.coroutinesState, mppModel.extraFeatures.isHMPPEnabled), mppModel.kotlinNativeHome ) } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt index fb8d0181154..9d8613052c8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt @@ -61,6 +61,7 @@ class KotlinFacetEditorGeneralTab( lateinit var useProjectSettingsCheckBox: ThreeStateCheckBox lateinit var platformToCheckbox: Map + lateinit var hmppCheckbox: ThreeStateCheckBox private lateinit var projectSettingsLink: HoverHyperlinkLabel @@ -111,12 +112,16 @@ class KotlinFacetEditorGeneralTab( targetPlatformsPanel.add(it) it.isEnabled = true //TODO(auskov): think about enabling/disabling editing facet settings } + hmppCheckbox = ThreeStateCheckBox().apply { + this.isEnabled = false + } val contentPanel = FormBuilder .createFormBuilder() .addComponent(JPanel(BorderLayout()).apply { add(useProjectSettingsCheckBox, BorderLayout.WEST) add(projectSettingsLink, BorderLayout.EAST) }).addLabeledComponent("Selected target platforms:", targetPlatformsPanel) + .addLabeledComponent("HMPP enabled:", hmppCheckbox) .addComponent(compilerConfigurable.createComponent()!!.apply { border = null }) @@ -307,6 +312,7 @@ class KotlinFacetEditorGeneralTab( editor.platformToCheckbox.forEach { it.value.isSelected = configuration.settings.targetPlatform?.contains(it.key) ?: false } + editor.hmppCheckbox.isSelected = configuration.settings.isHmppEnabled editor.compilerConfigurable.reset() editor.updateCompilerConfigurable() } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 1c2cdf5c81a..c16e579ce60 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -148,13 +148,15 @@ fun KotlinFacet.configureFacet( compilerVersion: String?, coroutineSupport: LanguageFeature.State, platform: TargetPlatform?, // if null, detect by module dependencies - modelsProvider: IdeModifiableModelsProvider + modelsProvider: IdeModifiableModelsProvider, + hmppEnabled: Boolean ) { val module = module with(configuration.settings) { compilerArguments = null targetPlatform = null compilerSettings = null + isHmppEnabled = hmppEnabled initializeIfNeeded( module, modelsProvider.getModifiableRootModel(module), @@ -183,7 +185,7 @@ fun KotlinFacet.configureFacet( platform: IdePlatform<*, *>, modelsProvider: IdeModifiableModelsProvider ) { - configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider) + configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider, false) //TODO(auskov): passed isHmpp = false } diff --git a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt index cf696759e07..ad97cd1a4e1 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt @@ -762,7 +762,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { WriteAction.run { val modelsProvider = IdeModifiableModelsProviderImpl(project) val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false) - facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider) + facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider, false) modelsProvider.commit() } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java index c7d645df9ff..7bdefb88527 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinTest.java @@ -350,7 +350,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest { "1.1", LanguageFeature.State.ENABLED, platform, - modelsProvider + modelsProvider, + false ); assertEquals(platform, facet.getConfiguration().getSettings().getTargetPlatform()); assertEquals(jvmTarget.getDescription(),