CLion/AppCode: Do not import sourceSets with unsupported platforms

This commit is contained in:
Simon Ogorodnik
2018-10-18 03:59:59 +03:00
committed by Dmitriy Dolovov
parent 4a99cb274b
commit 7f0fcf7ef1
9 changed files with 25 additions and 23 deletions
@@ -1,17 +1,6 @@
/* /*
* Copyright 2010-2017 JetBrains s.r.o. * 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.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ */
package org.jetbrains.kotlin.idea.framework package org.jetbrains.kotlin.idea.framework
@@ -85,7 +85,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
.asSequence() .asSequence()
.flatMap { it.compilations.asSequence() } .flatMap { it.compilations.asSequence() }
.filter { it.platform == KotlinPlatform.ANDROID } .filter { it.platform == KotlinPlatform.ANDROID }
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .mapNotNull { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
.toList() .toList()
mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets))
} }
@@ -85,7 +85,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
.asSequence() .asSequence()
.flatMap { it.compilations.asSequence() } .flatMap { it.compilations.asSequence() }
.filter { it.platform == KotlinPlatform.ANDROID } .filter { it.platform == KotlinPlatform.ANDROID }
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .mapNotNull { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
.toList() .toList()
mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets))
} }
@@ -85,7 +85,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension()
.asSequence() .asSequence()
.flatMap { it.compilations.asSequence() } .flatMap { it.compilations.asSequence() }
.filter { it.platform == KotlinPlatform.ANDROID } .filter { it.platform == KotlinPlatform.ANDROID }
.map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .mapNotNull { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) }
.toList() .toList()
mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets))
} }
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.gradle.* import org.jetbrains.kotlin.gradle.*
import org.jetbrains.kotlin.idea.configuration.GradlePropertiesFileFacade.Companion.KOTLIN_NOT_IMPORTED_COMMON_SOURCE_SETS_SETTING import org.jetbrains.kotlin.idea.configuration.GradlePropertiesFileFacade.Companion.KOTLIN_NOT_IMPORTED_COMMON_SOURCE_SETS_SETTING
import org.jetbrains.kotlin.idea.configuration.KotlinMPPGradleProjectResolver.Companion.isNotSupported
import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling
import org.jetbrains.plugins.gradle.model.* import org.jetbrains.plugins.gradle.model.*
import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData
@@ -231,7 +232,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
it.sdkName = jdkName it.sdkName = jdkName
} }
val kotlinSourceSet = createSourceSetInfo(compilation, gradleModule, resolverCtx) val kotlinSourceSet = createSourceSetInfo(compilation, gradleModule, resolverCtx) ?: continue
if (compilation.platform == KotlinPlatform.JVM || compilation.platform == KotlinPlatform.ANDROID) { if (compilation.platform == KotlinPlatform.JVM || compilation.platform == KotlinPlatform.ANDROID) {
compilationData.targetCompatibility = (kotlinSourceSet.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget compilationData.targetCompatibility = (kotlinSourceSet.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget
@@ -290,7 +291,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
?.minWith(VersionComparatorUtil.COMPARATOR) ?.minWith(VersionComparatorUtil.COMPARATOR)
} }
val kotlinSourceSet = createSourceSetInfo(sourceSet, gradleModule, resolverCtx) val kotlinSourceSet = createSourceSetInfo(sourceSet, gradleModule, resolverCtx) ?: continue
val sourceSetDataNode = val sourceSetDataNode =
(existingSourceSetDataNode ?: mainModuleNode.createChild(GradleSourceSetData.KEY, sourceSetData)).also { (existingSourceSetDataNode ?: mainModuleNode.createChild(GradleSourceSetData.KEY, sourceSetData)).also {
@@ -613,7 +614,8 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
sourceSet: KotlinSourceSet, sourceSet: KotlinSourceSet,
gradleModule: IdeaModule, gradleModule: IdeaModule,
resolverCtx: ProjectResolverContext resolverCtx: ProjectResolverContext
): KotlinSourceSetInfo { ): KotlinSourceSetInfo? {
if (sourceSet.platform.isNotSupported()) return null
return KotlinSourceSetInfo(sourceSet).also { info -> return KotlinSourceSetInfo(sourceSet).also { info ->
val languageSettings = sourceSet.languageSettings val languageSettings = sourceSet.languageSettings
info.moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx) info.moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
@@ -637,11 +639,13 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
} }
} }
// TODO: Unite with other createSourceSetInfo
fun createSourceSetInfo( fun createSourceSetInfo(
compilation: KotlinCompilation, compilation: KotlinCompilation,
gradleModule: IdeaModule, gradleModule: IdeaModule,
resolverCtx: ProjectResolverContext resolverCtx: ProjectResolverContext
): KotlinSourceSetInfo { ): KotlinSourceSetInfo? {
if (compilation.platform.isNotSupported()) return null
return KotlinSourceSetInfo(compilation).also { sourceSetInfo -> return KotlinSourceSetInfo(compilation).also { sourceSetInfo ->
sourceSetInfo.moduleId = getKotlinModuleId(gradleModule, compilation, resolverCtx) sourceSetInfo.moduleId = getKotlinModuleId(gradleModule, compilation, resolverCtx)
sourceSetInfo.gradleModuleId = getModuleId(resolverCtx, gradleModule) sourceSetInfo.gradleModuleId = getModuleId(resolverCtx, gradleModule)
@@ -656,6 +660,9 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
} }
} }
/** Checks if our IDE doesn't support such platform */
private fun KotlinPlatform.isNotSupported() = IdePlatformKindTooling.getToolingIfAny(this) == null
private fun KotlinSourceSetInfo.addSourceSets( private fun KotlinSourceSetInfo.addSourceSets(
sourceSets: Collection<KotlinModule>, sourceSets: Collection<KotlinModule>,
selfName: String, selfName: String,
-1
View File
@@ -104,7 +104,6 @@
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer"/> <runConfigurationProducer implementation="org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer"/>
<library.type implementation="org.jetbrains.kotlin.idea.framework.JSLibraryType"/> <library.type implementation="org.jetbrains.kotlin.idea.framework.JSLibraryType"/>
<library.type implementation="org.jetbrains.kotlin.idea.framework.CommonLibraryType"/>
<library.javaSourceRootDetector implementation="org.jetbrains.kotlin.idea.configuration.KotlinSourceRootDetector"/> <library.javaSourceRootDetector implementation="org.jetbrains.kotlin.idea.configuration.KotlinSourceRootDetector"/>
<multipleRunLocationsProvider implementation="org.jetbrains.kotlin.idea.run.multiplatform.KotlinMultiplatformRunLocationsProvider"/> <multipleRunLocationsProvider implementation="org.jetbrains.kotlin.idea.run.multiplatform.KotlinMultiplatformRunLocationsProvider"/>
-1
View File
@@ -104,7 +104,6 @@
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer"/> <runConfigurationProducer implementation="org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer"/>
<library.type implementation="org.jetbrains.kotlin.idea.framework.JSLibraryType"/> <library.type implementation="org.jetbrains.kotlin.idea.framework.JSLibraryType"/>
<library.type implementation="org.jetbrains.kotlin.idea.framework.CommonLibraryType"/>
<library.javaSourceRootDetector implementation="org.jetbrains.kotlin.idea.configuration.KotlinSourceRootDetector"/> <library.javaSourceRootDetector implementation="org.jetbrains.kotlin.idea.configuration.KotlinSourceRootDetector"/>
<editorNotificationProvider implementation="org.jetbrains.kotlin.idea.configuration.KotlinSetupEnvironmentNotificationProvider"/> <editorNotificationProvider implementation="org.jetbrains.kotlin.idea.configuration.KotlinSetupEnvironmentNotificationProvider"/>
+1
View File
@@ -369,6 +369,7 @@
<compiler.task execute="BEFORE" implementation="org.jetbrains.kotlin.idea.internal.makeBackup.MakeBackupCompileTask"/> <compiler.task execute="BEFORE" implementation="org.jetbrains.kotlin.idea.internal.makeBackup.MakeBackupCompileTask"/>
<jps.plugin /> <jps.plugin />
<library.type implementation="org.jetbrains.kotlin.idea.framework.CommonLibraryType"/>
<lang.syntaxHighlighterFactory key="kotlin" implementationClass="org.jetbrains.kotlin.idea.highlighter.KotlinSyntaxHighlighterFactory"/> <lang.syntaxHighlighterFactory key="kotlin" implementationClass="org.jetbrains.kotlin.idea.highlighter.KotlinSyntaxHighlighterFactory"/>
<syntaxHighlighter factoryClass="org.jetbrains.kotlin.idea.decompiler.builtIns.KotlinSyntaxHighlighterProviderForDecompiledBuiltIns"/> <syntaxHighlighter factoryClass="org.jetbrains.kotlin.idea.decompiler.builtIns.KotlinSyntaxHighlighterProviderForDecompiledBuiltIns"/>
<lang.braceMatcher language="kotlin" implementationClass="org.jetbrains.kotlin.idea.KotlinPairMatcher"/> <lang.braceMatcher language="kotlin" implementationClass="org.jetbrains.kotlin.idea.KotlinPairMatcher"/>
@@ -71,8 +71,15 @@ abstract class IdePlatformKindTooling {
return TOOLING_SUPPORT_BY_KIND[kind] ?: error("Unknown platform $kind") return TOOLING_SUPPORT_BY_KIND[kind] ?: error("Unknown platform $kind")
} }
/**
* @return null if current IDE doesn't know given platform
*/
fun getToolingIfAny(platformId: KotlinPlatform): IdePlatformKindTooling? {
return TOOLING_SUPPORT_BY_PLATFORM_ID[platformId]
}
fun getTooling(platformId: KotlinPlatform): IdePlatformKindTooling { fun getTooling(platformId: KotlinPlatform): IdePlatformKindTooling {
return TOOLING_SUPPORT_BY_PLATFORM_ID[platformId] ?: error("Unknown Gradle platform $platformId") return getToolingIfAny(platformId) ?: error("Unknown Gradle platform $platformId")
} }
} }
} }