From 7f0fcf7ef1502abef7b1893be487e848f379caea Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Thu, 18 Oct 2018 03:59:59 +0300 Subject: [PATCH] CLion/AppCode: Do not import sourceSets with unsupported platforms --- .../kotlin/idea/framework/CommonLibraryType.kt | 15 ++------------- .../KotlinAndroidMPPGradleProjectResolver.kt | 2 +- .../KotlinAndroidMPPGradleProjectResolver.kt.173 | 2 +- .../KotlinAndroidMPPGradleProjectResolver.kt.as31 | 2 +- .../KotlinMPPGradleProjectResolver.kt | 15 +++++++++++---- idea/src/META-INF/jvm.xml | 1 - idea/src/META-INF/jvm.xml.181 | 1 - idea/src/META-INF/plugin-common.xml | 1 + .../idea/platform/IdePlatformKindTooling.kt | 9 ++++++++- 9 files changed, 25 insertions(+), 23 deletions(-) rename idea/{idea-jvm => idea-analysis}/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt (63%) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt similarity index 63% rename from idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt index 3e40a70e6b4..9572e8beac8 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/CommonLibraryType.kt @@ -1,17 +1,6 @@ /* - * Copyright 2010-2017 JetBrains s.r.o. - * - * 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. + * 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.idea.framework diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt index bd2c6f526ba..7d61ed79a9d 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt @@ -85,7 +85,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension() .asSequence() .flatMap { it.compilations.asSequence() } .filter { it.platform == KotlinPlatform.ANDROID } - .map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } + .mapNotNull { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .toList() mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) } diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 index a41ec2304c7..594e29d714b 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.173 @@ -85,7 +85,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension() .asSequence() .flatMap { it.compilations.asSequence() } .filter { it.platform == KotlinPlatform.ANDROID } - .map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } + .mapNotNull { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .toList() mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) } diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 index bd2c6f526ba..7d61ed79a9d 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinAndroidMPPGradleProjectResolver.kt.as31 @@ -85,7 +85,7 @@ class KotlinAndroidMPPGradleProjectResolver : AbstractProjectResolverExtension() .asSequence() .flatMap { it.compilations.asSequence() } .filter { it.platform == KotlinPlatform.ANDROID } - .map { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } + .mapNotNull { KotlinMPPGradleProjectResolver.createSourceSetInfo(it, gradleModule, resolverCtx) } .toList() mainModuleData.createChild(KotlinAndroidSourceSetData.KEY, KotlinAndroidSourceSetData(androidSourceSets)) } 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 99f255cd5a1..8b20d95ae2c 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 @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.config.LanguageFeature 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.KotlinMPPGradleProjectResolver.Companion.isNotSupported import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling import org.jetbrains.plugins.gradle.model.* import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData @@ -231,7 +232,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { 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) { compilationData.targetCompatibility = (kotlinSourceSet.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget @@ -290,7 +291,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { ?.minWith(VersionComparatorUtil.COMPARATOR) } - val kotlinSourceSet = createSourceSetInfo(sourceSet, gradleModule, resolverCtx) + val kotlinSourceSet = createSourceSetInfo(sourceSet, gradleModule, resolverCtx) ?: continue val sourceSetDataNode = (existingSourceSetDataNode ?: mainModuleNode.createChild(GradleSourceSetData.KEY, sourceSetData)).also { @@ -613,7 +614,8 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { sourceSet: KotlinSourceSet, gradleModule: IdeaModule, resolverCtx: ProjectResolverContext - ): KotlinSourceSetInfo { + ): KotlinSourceSetInfo? { + if (sourceSet.platform.isNotSupported()) return null return KotlinSourceSetInfo(sourceSet).also { info -> val languageSettings = sourceSet.languageSettings info.moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx) @@ -637,11 +639,13 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() { } } + // TODO: Unite with other createSourceSetInfo fun createSourceSetInfo( compilation: KotlinCompilation, gradleModule: IdeaModule, resolverCtx: ProjectResolverContext - ): KotlinSourceSetInfo { + ): KotlinSourceSetInfo? { + if (compilation.platform.isNotSupported()) return null return KotlinSourceSetInfo(compilation).also { sourceSetInfo -> sourceSetInfo.moduleId = getKotlinModuleId(gradleModule, compilation, resolverCtx) 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( sourceSets: Collection, selfName: String, diff --git a/idea/src/META-INF/jvm.xml b/idea/src/META-INF/jvm.xml index 157a2004487..f111480afac 100644 --- a/idea/src/META-INF/jvm.xml +++ b/idea/src/META-INF/jvm.xml @@ -104,7 +104,6 @@ - diff --git a/idea/src/META-INF/jvm.xml.181 b/idea/src/META-INF/jvm.xml.181 index 88b203d467d..8f4d5a62e37 100644 --- a/idea/src/META-INF/jvm.xml.181 +++ b/idea/src/META-INF/jvm.xml.181 @@ -104,7 +104,6 @@ - diff --git a/idea/src/META-INF/plugin-common.xml b/idea/src/META-INF/plugin-common.xml index 46ba01f04f9..cd984da64e0 100644 --- a/idea/src/META-INF/plugin-common.xml +++ b/idea/src/META-INF/plugin-common.xml @@ -369,6 +369,7 @@ + diff --git a/idea/src/org/jetbrains/kotlin/idea/platform/IdePlatformKindTooling.kt b/idea/src/org/jetbrains/kotlin/idea/platform/IdePlatformKindTooling.kt index 8817fe72171..2e011019b13 100644 --- a/idea/src/org/jetbrains/kotlin/idea/platform/IdePlatformKindTooling.kt +++ b/idea/src/org/jetbrains/kotlin/idea/platform/IdePlatformKindTooling.kt @@ -71,8 +71,15 @@ abstract class IdePlatformKindTooling { 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 { - return TOOLING_SUPPORT_BY_PLATFORM_ID[platformId] ?: error("Unknown Gradle platform $platformId") + return getToolingIfAny(platformId) ?: error("Unknown Gradle platform $platformId") } } }