Make KotlinFacetSettingsProvider.getInstance() nullable
A module may not have a KotlinFacet. It isn't correct to throw an exception in that case.
This commit is contained in:
+1
-1
@@ -62,7 +62,7 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
||||
private fun computeJsr305State(project: Project): Jsr305State? {
|
||||
var result: Jsr305State? = null
|
||||
for (module in ModuleManager.getInstance(project).modules) {
|
||||
val settings = KotlinFacetSettingsProvider.getInstance(project).getSettings(module) ?: continue
|
||||
val settings = KotlinFacetSettingsProvider.getInstance(project)?.getSettings(module) ?: continue
|
||||
val compilerArguments = settings.mergedCompilerArguments as? K2JVMCompilerArguments ?: continue
|
||||
|
||||
result = Jsr305Parser(MessageCollector.NONE).parse(
|
||||
|
||||
@@ -92,7 +92,8 @@ private fun Iterable<String>.addReleaseVersionIfNecessary(shouldAdd: Boolean): I
|
||||
if (shouldAdd) this + VersionView.RELEASED_VERSION.versionString else this
|
||||
|
||||
fun getRuntimeLibraryVersion(module: Module): String? {
|
||||
val targetPlatform = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module).targetPlatform
|
||||
val settingsProvider = KotlinFacetSettingsProvider.getInstance(module.project) ?: return null
|
||||
val targetPlatform = settingsProvider.getInitializedSettings(module).targetPlatform
|
||||
val versions = getRuntimeLibraryVersions(module, null, targetPlatform.orDefault().idePlatformKind)
|
||||
return versions.toSet().singleOrNull()
|
||||
}
|
||||
|
||||
@@ -58,11 +58,11 @@ val KtElement.builtIns: KotlinBuiltIns
|
||||
var KtFile.forcedTargetPlatform: TargetPlatform? by UserDataProperty(Key.create("FORCED_TARGET_PLATFORM"))
|
||||
|
||||
fun Module.getAndCacheLanguageLevelByDependencies(): LanguageVersion {
|
||||
val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this)
|
||||
val languageLevel = getLibraryLanguageLevel(this, null, facetSettings.targetPlatform?.idePlatformKind)
|
||||
val facetSettings = KotlinFacetSettingsProvider.getInstance(project)?.getInitializedSettings(this)
|
||||
val languageLevel = getLibraryLanguageLevel(this, null, facetSettings?.targetPlatform?.idePlatformKind)
|
||||
|
||||
// Preserve inferred version in facet/project settings
|
||||
if (facetSettings.useProjectSettings) {
|
||||
if (facetSettings == null || facetSettings.useProjectSettings) {
|
||||
KotlinCommonCompilerArgumentsHolder.getInstance(project).update {
|
||||
if (languageVersion == null) {
|
||||
languageVersion = languageLevel.versionString
|
||||
@@ -96,7 +96,8 @@ fun Module.getAndCacheLanguageLevelByDependencies(): LanguageVersion {
|
||||
fun Module.getStableName(): Name {
|
||||
// Here we check ideal situation: we have a facet, and it has 'moduleName' argument.
|
||||
// This should be the case for the most environments
|
||||
val arguments = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this).mergedCompilerArguments
|
||||
val settingsProvider = KotlinFacetSettingsProvider.getInstance(project)
|
||||
val arguments = settingsProvider?.getInitializedSettings(this)?.mergedCompilerArguments
|
||||
val explicitNameFromArguments = when (arguments) {
|
||||
is K2JVMCompilerArguments -> arguments.moduleName
|
||||
is K2JSCompilerArguments -> arguments.outputFile?.let { FileUtil.getNameWithoutExtension(File(it)) }
|
||||
@@ -179,25 +180,35 @@ private fun Module.createCachedValueForLanguageVersionSettings(): CachedValue<La
|
||||
}
|
||||
|
||||
private fun Module.shouldUseProjectLanguageVersionSettings(): Boolean {
|
||||
val facetSettingsProvider = KotlinFacetSettingsProvider.getInstance(project)
|
||||
val facetSettingsProvider = KotlinFacetSettingsProvider.getInstance(project) ?: return true
|
||||
return facetSettingsProvider.getSettings(this) == null || facetSettingsProvider.getInitializedSettings(this).useProjectSettings
|
||||
}
|
||||
|
||||
private fun Module.computeLanguageVersionSettings(): LanguageVersionSettings {
|
||||
if (shouldUseProjectLanguageVersionSettings()) return project.getLanguageVersionSettings()
|
||||
|
||||
val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this)
|
||||
val languageVersion = facetSettings.languageLevel ?: getAndCacheLanguageLevelByDependencies()
|
||||
val apiVersion = facetSettings.apiLevel ?: languageVersion
|
||||
val facetSettings = KotlinFacetSettingsProvider.getInstance(project)?.getInitializedSettings(this)
|
||||
|
||||
val languageFeatures = facetSettings.mergedCompilerArguments?.configureLanguageFeatures(MessageCollector.NONE)?.apply {
|
||||
|
||||
val languageVersion: LanguageVersion
|
||||
val apiVersion: LanguageVersion
|
||||
|
||||
if (facetSettings != null) {
|
||||
languageVersion = facetSettings.languageLevel ?: getAndCacheLanguageLevelByDependencies()
|
||||
apiVersion = facetSettings.apiLevel ?: languageVersion
|
||||
} else {
|
||||
languageVersion = getAndCacheLanguageLevelByDependencies()
|
||||
apiVersion = languageVersion
|
||||
}
|
||||
|
||||
val languageFeatures = facetSettings?.mergedCompilerArguments?.configureLanguageFeatures(MessageCollector.NONE)?.apply {
|
||||
configureCoroutinesSupport(facetSettings.coroutineSupport, languageVersion)
|
||||
configureMultiplatformSupport(facetSettings.targetPlatform?.idePlatformKind, this@computeLanguageVersionSettings)
|
||||
configureNewInferenceSupportInIDE(project)
|
||||
}.orEmpty()
|
||||
|
||||
val analysisFlags = facetSettings
|
||||
.mergedCompilerArguments
|
||||
?.mergedCompilerArguments
|
||||
?.configureAnalysisFlags(MessageCollector.NONE)
|
||||
?.apply { initIDESpecificAnalysisSettings(project) }
|
||||
.orEmpty()
|
||||
@@ -218,10 +229,10 @@ private fun MutableMap<AnalysisFlag<*>, Any>.initIDESpecificAnalysisSettings(pro
|
||||
}
|
||||
|
||||
val Module.platform: TargetPlatform?
|
||||
get() = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this).targetPlatform ?: project.platform
|
||||
get() = KotlinFacetSettingsProvider.getInstance(project)?.getInitializedSettings(this)?.targetPlatform ?: project.platform
|
||||
|
||||
val Module.isHMPPEnabled: Boolean
|
||||
get() = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this).isHmppEnabled
|
||||
get() = KotlinFacetSettingsProvider.getInstance(project)?.getInitializedSettings(this)?.isHmppEnabled ?: false
|
||||
|
||||
// FIXME(dsavvinov): this logic is clearly wrong in MPP environment; review and fix
|
||||
val Project.platform: TargetPlatform?
|
||||
|
||||
Reference in New Issue
Block a user