Skip to content

Commit

Permalink
Extract interface from KotlinFacetSettings
Browse files Browse the repository at this point in the history
#KTIJ-24647 In Process

GitOrigin-RevId: 70d81e826fe64afd3eaee46bb3ade855b76bcf41
  • Loading branch information
Aleksei.Cherepanov authored and intellij-monorepo-bot committed Aug 22, 2023
1 parent 7abb4e0 commit f0094db
Show file tree
Hide file tree
Showing 19 changed files with 59 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public KotlinCompilerConfigurableTab(
module -> {
KotlinFacet facet = KotlinFacet.Companion.get(module);
if (facet == null) return null;
KotlinFacetSettings facetSettings = facet.getConfiguration().getSettings();
IKotlinFacetSettings facetSettings = facet.getConfiguration().getSettings();
if (facetSettings.getUseProjectSettings()) return null;
return module.getName();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project

interface KotlinFacetSettingsProvider {
fun getSettings(module: Module): KotlinFacetSettings?
fun getInitializedSettings(module: Module): KotlinFacetSettings
fun getSettings(module: Module): IKotlinFacetSettings?
fun getInitializedSettings(module: Module): IKotlinFacetSettings

companion object {
fun getInstance(project: Project): KotlinFacetSettingsProvider? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ var Module.refinesFragmentIds: Collection<String>
val Module.isTestModule: Boolean
get() = facetSettings?.isTestModule ?: false

val KotlinFacetSettings.isMultiPlatformModule: Boolean
val IKotlinFacetSettings.isMultiPlatformModule: Boolean
get() = mppVersion != null

private val Module.facetSettings: KotlinFacetSettings?
private val Module.facetSettings: IKotlinFacetSettings?
get() = KotlinFacet.get(this)?.configuration?.settings

@Service(Service.Level.PROJECT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
package org.jetbrains.kotlin.idea.facet

import com.intellij.facet.FacetConfiguration
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.IKotlinFacetSettings

interface KotlinFacetConfiguration : FacetConfiguration {
val settings: KotlinFacetSettings
val settings: IKotlinFacetSettings
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,23 @@ import com.intellij.workspaceModel.ide.impl.legacyBridge.module.findModule
import com.intellij.platform.workspace.storage.VersionedStorageChange
import com.intellij.platform.workspace.jps.entities.FacetEntity
import com.intellij.platform.workspace.jps.entities.ModuleEntity
import org.jetbrains.kotlin.config.IKotlinFacetSettings
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.idea.base.util.caching.*
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettingsListener

class KotlinFacetSettingsProviderImpl(project: Project) :
SynchronizedFineGrainedEntityCache<Module, KotlinFacetSettings>(project, doSelfInitialization = false),
SynchronizedFineGrainedEntityCache<Module, IKotlinFacetSettings>(project, doSelfInitialization = false),
WorkspaceModelChangeListener,
KotlinCompilerSettingsListener,
KotlinFacetSettingsProvider {

override fun getSettings(module: Module) = KotlinFacet.get(module)?.configuration?.settings

override fun getInitializedSettings(module: Module): KotlinFacetSettings = runReadAction { get(module) }
override fun getInitializedSettings(module: Module): IKotlinFacetSettings = runReadAction { get(module) }

override fun calculate(key: Module): KotlinFacetSettings {
override fun calculate(key: Module): IKotlinFacetSettings {
val kotlinFacetSettings = getSettings(key) ?: KotlinFacetSettings()
kotlinFacetSettings.initializeIfNeeded(key, null)
return kotlinFacetSettings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import kotlin.reflect.KProperty1

var Module.hasExternalSdkConfiguration: Boolean by NotNullableUserDataProperty(Key.create("HAS_EXTERNAL_SDK_CONFIGURATION"), false)

fun KotlinFacetSettings.initializeIfNeeded(
fun IKotlinFacetSettings.initializeIfNeeded(
module: Module,
rootModel: ModuleRootModel?,
platform: TargetPlatform? = null, // if null, detect by module dependencies
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ class LanguageVersionSettingsProvider(private val project: Project) : Disposable
return LanguageVersionSettingsImpl(languageVersion, apiVersion, analysisFlags, languageFeatures)
}

private fun getLanguageApiVersionFromFacet(facetSettings: KotlinFacetSettings): Pair<LanguageVersion, ApiVersion> {
private fun getLanguageApiVersionFromFacet(facetSettings: IKotlinFacetSettings): Pair<LanguageVersion, ApiVersion> {
val languageVersion = facetSettings.languageLevel
val apiVersion = facetSettings.apiLevel?.let { ApiVersion.createByLanguageVersion(it) }

Expand Down Expand Up @@ -250,7 +250,7 @@ class LanguageVersionSettingsProvider(private val project: Project) : Disposable
return CommonFacetSettings(analysisFlags, languageFeatures)
}

private fun getMultiPlatformLanguageFeatures(module: Module, facetSettings: KotlinFacetSettings): LanguageFeatureMap {
private fun getMultiPlatformLanguageFeatures(module: Module, facetSettings: IKotlinFacetSettings): LanguageFeatureMap {
if (facetSettings.targetPlatform.isCommon() || ModuleRootManager.getInstance(module).dependencies.any { it.platform.isCommon() }) {
return Collections.singletonMap(LanguageFeature.MultiPlatformProjects, LanguageFeature.State.ENABLED)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ import com.intellij.openapi.util.Key
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.config.IKotlinFacetSettings
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.idea.base.codeInsight.tooling.tooling
Expand Down Expand Up @@ -326,7 +326,7 @@ fun configureFacetByGradleModule(
return kotlinFacet
}

private fun KotlinFacetSettings.configureOutputPaths(moduleNode: DataNode<ModuleData>, platformKind: IdePlatformKind?) {
private fun IKotlinFacetSettings.configureOutputPaths(moduleNode: DataNode<ModuleData>, platformKind: IdePlatformKind?) {
if (!platformKind.isJavaScript) {
productionOutputPath = null
testOutputPath = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,13 @@ package org.jetbrains.kotlin.gradle.multiplatformTests.testFeatures.checkers.fac

import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.gradle.multiplatformTests.TestConfiguration
import org.jetbrains.kotlin.gradle.multiplatformTests.workspace.*
import org.jetbrains.kotlin.platform.TargetPlatform
import kotlin.reflect.KProperty1

internal typealias FacetField = KProperty1<KotlinFacetSettings, *>
internal typealias FacetField = KProperty1<IKotlinFacetSettings, *>

object KotlinFacetSettingsChecker : WorkspaceModelChecker<KotlinFacetSettingsChecksConfiguration>(respectOrder = true) {
override fun createDefaultConfiguration(): KotlinFacetSettingsChecksConfiguration = KotlinFacetSettingsChecksConfiguration()
Expand Down Expand Up @@ -89,14 +86,14 @@ object KotlinFacetSettingsChecker : WorkspaceModelChecker<KotlinFacetSettingsChe
}

private val ALL_FACET_FIELDS_TO_PRINT = setOf<FacetField>(
KotlinFacetSettings::externalProjectId,
KotlinFacetSettings::languageLevel,
KotlinFacetSettings::apiLevel,
KotlinFacetSettings::mppVersion,
KotlinFacetSettings::dependsOnModuleNames,
KotlinFacetSettings::additionalVisibleModuleNames,
KotlinFacetSettings::targetPlatform,
KotlinFacetSettings::compilerSettings
IKotlinFacetSettings::externalProjectId,
IKotlinFacetSettings::languageLevel,
IKotlinFacetSettings::apiLevel,
IKotlinFacetSettings::mppVersion,
IKotlinFacetSettings::dependsOnModuleNames,
IKotlinFacetSettings::additionalVisibleModuleNames,
IKotlinFacetSettings::targetPlatform,
IKotlinFacetSettings::compilerSettings
)

private val CURRENT_KGP_LANGUAGE_VERSION_PLACEHOLDER = "{{LATEST_STABLE}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ import org.jetbrains.plugins.gradle.tooling.annotation.TargetVersions
import org.junit.Ignore
import org.junit.Test

fun KotlinGradleImportingTestCase.facetSettings(moduleName: String): KotlinFacetSettings {
fun KotlinGradleImportingTestCase.facetSettings(moduleName: String): IKotlinFacetSettings {
val facet = KotlinFacet.get(getModule(moduleName)) ?: error("Kotlin facet not found in module $moduleName")
return facet.configuration.settings
}

val KotlinGradleImportingTestCase.facetSettings: KotlinFacetSettings
val KotlinGradleImportingTestCase.facetSettings: IKotlinFacetSettings
get() = facetSettings("project.main")

val KotlinGradleImportingTestCase.testFacetSettings: KotlinFacetSettings
val KotlinGradleImportingTestCase.testFacetSettings: IKotlinFacetSettings
get() = facetSettings("project.test")

class GradleFacetImportTest8 : KotlinGradleImportingTestCase() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.gradle.idea.importing.multiplatformTests

import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.IKotlinFacetSettings
import org.jetbrains.kotlin.gradle.multiplatformTests.AbstractKotlinMppGradleImportingTest
import org.jetbrains.kotlin.gradle.multiplatformTests.TestConfigurationDslScope
import org.jetbrains.kotlin.gradle.multiplatformTests.testFeatures.checkers.facets.KotlinFacetSettingsChecker
Expand All @@ -19,9 +19,9 @@ class KotlinMppCompilerArgumentsImportingTests : AbstractKotlinMppGradleImportin

onlyCheckers(KotlinFacetSettingsChecker)
onlyFacetFields(
KotlinFacetSettings::languageLevel,
KotlinFacetSettings::apiLevel,
KotlinFacetSettings::compilerSettings
IKotlinFacetSettings::languageLevel,
IKotlinFacetSettings::apiLevel,
IKotlinFacetSettings::compilerSettings
)
hideLineMarkers = true
hideResourceRoots = true
Expand Down Expand Up @@ -74,10 +74,10 @@ class KotlinMppCompilerArgumentsImportingTests : AbstractKotlinMppGradleImportin
fun testCompilerOptionsInCompilationTaskKJvm() {
doTest {
onlyFacetFields(
KotlinFacetSettings::languageLevel,
KotlinFacetSettings::apiLevel,
KotlinFacetSettings::compilerSettings,
KotlinFacetSettings::targetPlatform
IKotlinFacetSettings::languageLevel,
IKotlinFacetSettings::apiLevel,
IKotlinFacetSettings::compilerSettings,
IKotlinFacetSettings::targetPlatform
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
package org.jetbrains.kotlin.gradle.idea.importing.multiplatformTests

import com.intellij.lang.annotation.HighlightSeverity
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.IKotlinFacetSettings
import org.jetbrains.kotlin.gradle.multiplatformTests.AbstractKotlinMppGradleImportingTest
import org.jetbrains.kotlin.gradle.multiplatformTests.TestConfigurationDslScope
import org.jetbrains.kotlin.gradle.multiplatformTests.testFeatures.checkers.facets.KotlinFacetSettingsChecker
Expand Down Expand Up @@ -150,7 +150,7 @@ class KotlinMppExperimentalTierCasesImportingTest : AbstractKotlinMppGradleImpor
fun testSimilarTargetsBamboo() {
doTest {
onlyCheckers(KotlinFacetSettingsChecker, OrderEntriesChecker)
onlyFacetFields(KotlinFacetSettings::targetPlatform)
onlyFacetFields(IKotlinFacetSettings::targetPlatform)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
package org.jetbrains.kotlin.gradle.idea.importing.multiplatformTests

import com.intellij.lang.annotation.HighlightSeverity
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.IKotlinFacetSettings
import org.jetbrains.kotlin.gradle.multiplatformTests.AbstractKotlinMppGradleImportingTest
import org.jetbrains.kotlin.gradle.multiplatformTests.TestConfigurationDslScope
import org.jetbrains.kotlin.gradle.multiplatformTests.testFeatures.checkers.contentRoots.ContentRootsChecker
Expand All @@ -21,7 +21,7 @@ class KotlinMppMiscCasesImportingTests : AbstractKotlinMppGradleImportingTest()
hideKotlinTest = true
hideKotlinNativeDistribution = true

onlyFacetFields(KotlinFacetSettings::targetPlatform)
onlyFacetFields(IKotlinFacetSettings::targetPlatform)

hideResourceRoots = true
}
Expand Down Expand Up @@ -183,7 +183,7 @@ class KotlinMppMiscCasesImportingTests : AbstractKotlinMppGradleImportingTest()
fun testAssociateCompilationIntegrationTest() {
doTest {
onlyCheckers(HighlightingChecker, KotlinFacetSettingsChecker)
onlyFacetFields(KotlinFacetSettings::additionalVisibleModuleNames)
onlyFacetFields(IKotlinFacetSettings::additionalVisibleModuleNames)
hideLineMarkers = true
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.gradle.idea.importing.multiplatformTests

import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.IKotlinFacetSettings
import org.jetbrains.kotlin.gradle.multiplatformTests.AbstractKotlinMppGradleImportingTest
import org.jetbrains.kotlin.gradle.multiplatformTests.TestConfigurationDslScope
import org.jetbrains.kotlin.gradle.multiplatformTests.testFeatures.checkers.facets.KotlinFacetSettingsChecker
Expand All @@ -12,7 +12,7 @@ import org.junit.Test
class PrecisePlatformsImportingTests : AbstractKotlinMppGradleImportingTest() {
override fun TestConfigurationDslScope.defaultTestConfiguration() {
onlyCheckers(KotlinFacetSettingsChecker)
onlyFacetFields(KotlinFacetSettings::targetPlatform)
onlyFacetFields(IKotlinFacetSettings::targetPlatform)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.intellij.psi.PsiElement
import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.config.isCompilerSettingPresent
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.diagnostics.Severity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,7 @@
import org.jetbrains.kotlin.cli.common.arguments.InternalArgument;
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments;
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments;
import org.jetbrains.kotlin.config.JvmTarget;
import org.jetbrains.kotlin.config.KotlinFacetSettings;
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider;
import org.jetbrains.kotlin.config.LanguageVersion;
import org.jetbrains.kotlin.config.*;
import org.jetbrains.kotlin.idea.base.facet.platform.TargetPlatformDetectorUtils;
import org.jetbrains.kotlin.idea.base.indices.JavaIndicesUtils;
import org.jetbrains.kotlin.idea.base.platforms.KotlinJavaScriptLibraryKind;
Expand Down Expand Up @@ -196,7 +193,7 @@ public void testMavenProvidedTestJsKind() {
}

public void testJvmProjectWithV1FacetConfig() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
K2JVMCompilerArguments arguments = (K2JVMCompilerArguments) settings.getCompilerArguments();
assertFalse(settings.getUseProjectSettings());
assertEquals(LanguageVersion.KOTLIN_1_1, settings.getLanguageLevel());
Expand All @@ -210,7 +207,7 @@ public void testJvmProjectWithV1FacetConfig() {
}

public void testJsProjectWithV1FacetConfig() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
K2JSCompilerArguments arguments = (K2JSCompilerArguments) settings.getCompilerArguments();
assertFalse(settings.getUseProjectSettings());
assertEquals(LanguageVersion.KOTLIN_1_1, settings.getLanguageLevel());
Expand All @@ -223,7 +220,7 @@ public void testJsProjectWithV1FacetConfig() {
}

public void testJvmProjectWithV2FacetConfig() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
K2JVMCompilerArguments arguments = (K2JVMCompilerArguments) settings.getCompilerArguments();
assertFalse(settings.getUseProjectSettings());
assertEquals(LanguageVersion.KOTLIN_1_1, settings.getLanguageLevel());
Expand All @@ -237,7 +234,7 @@ public void testJvmProjectWithV2FacetConfig() {
}

public void testJsProjectWithV2FacetConfig() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
K2JSCompilerArguments arguments = (K2JSCompilerArguments) settings.getCompilerArguments();
assertFalse(settings.getUseProjectSettings());
assertEquals(LanguageVersion.KOTLIN_1_1, settings.getLanguageLevel());
Expand All @@ -250,7 +247,7 @@ public void testJsProjectWithV2FacetConfig() {
}

public void testJvmProjectWithV3FacetConfig() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
K2JVMCompilerArguments arguments = (K2JVMCompilerArguments) settings.getCompilerArguments();
assertFalse(settings.getUseProjectSettings());
assertEquals(LanguageVersion.KOTLIN_1_1, settings.getLanguageLevel());
Expand All @@ -264,7 +261,7 @@ public void testJvmProjectWithV3FacetConfig() {
}

public void testJvmProjectWithV4FacetConfig() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
K2JVMCompilerArguments arguments = (K2JVMCompilerArguments) settings.getCompilerArguments();
assertFalse(settings.getUseProjectSettings());
assertEquals(LanguageVersion.KOTLIN_1_4, settings.getLanguageLevel());
Expand All @@ -277,7 +274,7 @@ public void testJvmProjectWithV4FacetConfig() {
}

public void testJvmProjectWithJvmTarget11() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
IKotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
assertEquals(JvmPlatforms.INSTANCE.jvmPlatformByTargetVersion(JvmTarget.JVM_11), settings.getTargetPlatform());
}

Expand Down
Loading

0 comments on commit f0094db

Please sign in to comment.