[K/N] Stand-alone Native Application wizard in IDEA
Issue #KT-27076 Fixed
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* 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.ide.konan.gradle
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.KotlinGradleAbstractMultiplatformModuleBuilder
|
||||||
|
import org.jetbrains.kotlin.konan.target.presetName
|
||||||
|
|
||||||
|
class KotlinGradleNativeMultiplatformModuleBuilder : KotlinGradleAbstractMultiplatformModuleBuilder() {
|
||||||
|
|
||||||
|
override fun getBuilderId() = "kotlin.gradle.multiplatform.native"
|
||||||
|
|
||||||
|
override fun getPresentableName() = "Kotlin/Native"
|
||||||
|
|
||||||
|
override fun getDescription() = "Kotlin module for native binaries"
|
||||||
|
|
||||||
|
override val notImportedCommonSourceSets = true
|
||||||
|
|
||||||
|
override fun buildMultiPlatformPart(): String {
|
||||||
|
return """
|
||||||
|
kotlin {
|
||||||
|
targets {
|
||||||
|
// For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64
|
||||||
|
// For Linux, preset should be changed to e.g. presets.linuxX64
|
||||||
|
// For MacOS, preset should be changed to e.g. presets.macosX64
|
||||||
|
fromPreset(presets.${defaultNativeTarget.presetName}, '${defaultNativeTarget.userTargetName}')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -132,7 +132,7 @@ abstract class GradleKotlinFrameworkSupportProvider(
|
|||||||
val isNewProject = module.project.getUserData(ExternalSystemDataKeys.NEWLY_CREATED_PROJECT) == true
|
val isNewProject = module.project.getUserData(ExternalSystemDataKeys.NEWLY_CREATED_PROJECT) == true
|
||||||
if (isNewProject) {
|
if (isNewProject) {
|
||||||
ProjectCodeStyleImporter.apply(module.project, KotlinStyleGuideCodeStyle.INSTANCE)
|
ProjectCodeStyleImporter.apply(module.project, KotlinStyleGuideCodeStyle.INSTANCE)
|
||||||
GradlePropertiesFileUtils.addCodeStyleProperty(module.project, KotlinStyleGuideCodeStyle.CODE_STYLE_SETTING)
|
GradlePropertiesFileFacade.forProject(module.project).addCodeStyleProperty(KotlinStyleGuideCodeStyle.CODE_STYLE_SETTING)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+67
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* 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.configuration
|
||||||
|
|
||||||
|
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.vfs.LocalFileSystem
|
||||||
|
import org.jetbrains.plugins.gradle.model.ExternalProject
|
||||||
|
import java.io.File
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
internal class GradlePropertiesFileFacade(private val baseDir: String) {
|
||||||
|
|
||||||
|
fun readProperty(propertyName: String): String? {
|
||||||
|
|
||||||
|
val baseVirtualDir = LocalFileSystem.getInstance().findFileByPath(baseDir) ?: return null
|
||||||
|
|
||||||
|
for (propertyFileName in GRADLE_PROPERTY_FILES) {
|
||||||
|
val propertyFile = baseVirtualDir.findChild(propertyFileName) ?: continue
|
||||||
|
Properties().also { it.load(propertyFile.inputStream) }.getProperty(propertyName)?.let {
|
||||||
|
return it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addCodeStyleProperty(value: String) {
|
||||||
|
addProperty(KOTLIN_CODE_STYLE_GRADLE_SETTING, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addNotImportedCommonSourceSetsProperty() {
|
||||||
|
addProperty(KOTLIN_NOT_IMPORTED_COMMON_SOURCE_SETS_SETTING, true.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addProperty(key: String, value: String) {
|
||||||
|
val projectPropertiesFile = File(baseDir, GRADLE_PROPERTIES_FILE_NAME)
|
||||||
|
|
||||||
|
val keyValue = "$key=$value"
|
||||||
|
|
||||||
|
val updatedText = if (projectPropertiesFile.exists()) {
|
||||||
|
projectPropertiesFile.readText() + System.lineSeparator() + keyValue
|
||||||
|
} else {
|
||||||
|
keyValue
|
||||||
|
}
|
||||||
|
|
||||||
|
projectPropertiesFile.writeText(updatedText)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun forProject(project: Project) = GradlePropertiesFileFacade(ExternalSystemApiUtil.toCanonicalPath(project.basePath!!))
|
||||||
|
|
||||||
|
fun forExternalProject(externalProject: ExternalProject) = GradlePropertiesFileFacade(externalProject.projectDir.canonicalPath)
|
||||||
|
|
||||||
|
const val KOTLIN_CODE_STYLE_GRADLE_SETTING = "kotlin.code.style"
|
||||||
|
const val KOTLIN_NOT_IMPORTED_COMMON_SOURCE_SETS_SETTING = "kotlin.import.noCommonSourceSets"
|
||||||
|
|
||||||
|
private const val GRADLE_PROPERTIES_FILE_NAME = "gradle.properties"
|
||||||
|
private const val GRADLE_PROPERTIES_LOCAL_FILE_NAME = "local.properties"
|
||||||
|
|
||||||
|
private val GRADLE_PROPERTY_FILES = listOf(GRADLE_PROPERTIES_LOCAL_FILE_NAME, GRADLE_PROPERTIES_FILE_NAME)
|
||||||
|
}
|
||||||
|
}
|
||||||
-60
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.configuration
|
|
||||||
|
|
||||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
|
||||||
import com.intellij.openapi.project.Project
|
|
||||||
import java.io.File
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
internal object GradlePropertiesFileUtils {
|
|
||||||
const val KOTLIN_CODE_STYLE_GRADLE_SETTING = "kotlin.code.style"
|
|
||||||
|
|
||||||
private const val GRADLE_PROPERTIES_FILE_NAME = "gradle.properties"
|
|
||||||
private const val GRADLE_PROPERTIES_LOCAL_FILE_NAME = "local.properties"
|
|
||||||
|
|
||||||
private val gradlePropertyFiles = listOf(GRADLE_PROPERTIES_LOCAL_FILE_NAME, GRADLE_PROPERTIES_FILE_NAME)
|
|
||||||
|
|
||||||
fun readProperty(project: Project, propertyName: String): String? {
|
|
||||||
for (propertyFileName in gradlePropertyFiles) {
|
|
||||||
val propertyFile = project.baseDir.findChild(propertyFileName) ?: continue
|
|
||||||
val properties = Properties()
|
|
||||||
properties.load(propertyFile.inputStream)
|
|
||||||
properties.getProperty(propertyName)?.let {
|
|
||||||
return it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addCodeStyleProperty(project: Project, value: String) {
|
|
||||||
addProperty(project, KOTLIN_CODE_STYLE_GRADLE_SETTING, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun addProperty(project: Project, key: String, value: String) {
|
|
||||||
val propertiesFile = projectPropertiesFile(project)
|
|
||||||
|
|
||||||
val keyValue = "$key=$value"
|
|
||||||
|
|
||||||
val updatedText = if (propertiesFile.exists()) {
|
|
||||||
propertiesFile.readText() + System.lineSeparator() + keyValue
|
|
||||||
} else {
|
|
||||||
keyValue
|
|
||||||
}
|
|
||||||
|
|
||||||
propertiesFile.writeText(updatedText)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun projectPropertiesFile(project: Project): File {
|
|
||||||
return File(getBaseDirPath(project), "gradle.properties")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getBaseDirPath(project: Project): File {
|
|
||||||
val basePath = project.basePath!!
|
|
||||||
return File(ExternalSystemApiUtil.toCanonicalPath(basePath))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -102,7 +102,7 @@ abstract class KotlinDslGradleKotlinFrameworkSupportProvider(
|
|||||||
val isNewProject = module.project.getUserData(ExternalSystemDataKeys.NEWLY_CREATED_PROJECT) == true
|
val isNewProject = module.project.getUserData(ExternalSystemDataKeys.NEWLY_CREATED_PROJECT) == true
|
||||||
if (isNewProject) {
|
if (isNewProject) {
|
||||||
ProjectCodeStyleImporter.apply(module.project, KotlinStyleGuideCodeStyle.INSTANCE)
|
ProjectCodeStyleImporter.apply(module.project, KotlinStyleGuideCodeStyle.INSTANCE)
|
||||||
GradlePropertiesFileUtils.addCodeStyleProperty(module.project, KotlinStyleGuideCodeStyle.CODE_STYLE_SETTING)
|
GradlePropertiesFileFacade.forProject(module.project).addCodeStyleProperty(KotlinStyleGuideCodeStyle.CODE_STYLE_SETTING)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
@@ -14,6 +14,9 @@ import com.intellij.openapi.vfs.VfsUtil
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import org.jetbrains.kotlin.idea.KotlinIcons
|
import org.jetbrains.kotlin.idea.KotlinIcons
|
||||||
import org.jetbrains.kotlin.idea.util.rootManager
|
import org.jetbrains.kotlin.idea.util.rootManager
|
||||||
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
|
import org.jetbrains.kotlin.konan.target.TargetSupportException
|
||||||
import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder
|
import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder
|
||||||
import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder
|
import org.jetbrains.plugins.gradle.service.project.wizard.GradleModuleBuilder
|
||||||
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
|
import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl
|
||||||
@@ -41,6 +44,8 @@ abstract class KotlinGradleAbstractMultiplatformModuleBuilder : GradleModuleBuil
|
|||||||
GradleKotlinMPPFrameworkSupportProvider().addSupport(builder, module, sdk = null, specifyPluginVersionIfNeeded = true)
|
GradleKotlinMPPFrameworkSupportProvider().addSupport(builder, module, sdk = null, specifyPluginVersionIfNeeded = true)
|
||||||
VfsUtil.saveText(buildGradle, builder.buildConfigurationPart() + builder.buildMainPart() + buildMultiPlatformPart())
|
VfsUtil.saveText(buildGradle, builder.buildConfigurationPart() + builder.buildMainPart() + buildMultiPlatformPart())
|
||||||
createProjectSkeleton(module, rootDir)
|
createProjectSkeleton(module, rootDir)
|
||||||
|
|
||||||
|
if (notImportedCommonSourceSets) GradlePropertiesFileFacade.forProject(module.project).addNotImportedCommonSourceSetsProperty()
|
||||||
} finally {
|
} finally {
|
||||||
flushSettingsGradleCopy(module)
|
flushSettingsGradleCopy(module)
|
||||||
}
|
}
|
||||||
@@ -57,6 +62,23 @@ abstract class KotlinGradleAbstractMultiplatformModuleBuilder : GradleModuleBuil
|
|||||||
|
|
||||||
protected open fun createProjectSkeleton(module: Module, rootDir: VirtualFile) {}
|
protected open fun createProjectSkeleton(module: Module, rootDir: VirtualFile) {}
|
||||||
|
|
||||||
|
protected open val notImportedCommonSourceSets = false
|
||||||
|
|
||||||
|
protected val defaultNativeTarget by lazy {
|
||||||
|
try {
|
||||||
|
HostManager.host
|
||||||
|
} catch (e: TargetSupportException) {
|
||||||
|
KonanTarget.IOS_X64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Examples: ios_x64 -> ios, macos_x64 -> macos, wasm32 -> wasm.
|
||||||
|
protected val KonanTarget.userTargetName: String
|
||||||
|
get() {
|
||||||
|
val index = name.indexOfAny("_0123456789".toCharArray())
|
||||||
|
return if (index > 0) name.substring(0, index) else name
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val productionSuffix = "Main"
|
const val productionSuffix = "Main"
|
||||||
|
|
||||||
|
|||||||
+8
-7
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.configuration
|
|||||||
|
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import org.jetbrains.kotlin.konan.target.presetName
|
||||||
import java.io.BufferedWriter
|
import java.io.BufferedWriter
|
||||||
|
|
||||||
class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultiplatformModuleBuilder() {
|
class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultiplatformModuleBuilder() {
|
||||||
@@ -14,7 +15,7 @@ class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultipl
|
|||||||
private val commonName: String = "common"
|
private val commonName: String = "common"
|
||||||
private var jvmTargetName: String = "jvm"
|
private var jvmTargetName: String = "jvm"
|
||||||
private var jsTargetName: String = "js"
|
private var jsTargetName: String = "js"
|
||||||
private var nativeTargetName: String = "ios"
|
private var nativeTargetName: String = defaultNativeTarget.userTargetName
|
||||||
|
|
||||||
private val commonSourceName get() = "$commonName$productionSuffix"
|
private val commonSourceName get() = "$commonName$productionSuffix"
|
||||||
private val commonTestName get() = "$commonName$testSuffix"
|
private val commonTestName get() = "$commonName$testSuffix"
|
||||||
@@ -30,7 +31,7 @@ class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultipl
|
|||||||
override fun getPresentableName() = "Kotlin (Multiplatform Library)"
|
override fun getPresentableName() = "Kotlin (Multiplatform Library)"
|
||||||
|
|
||||||
override fun getDescription() =
|
override fun getDescription() =
|
||||||
"Multiplatform Gradle projects allow sharing the same Kotlin code between all three main platforms (JVM, JS, iOS)."
|
"Multiplatform Gradle projects allow sharing the same Kotlin code between all three main platforms (JVM, JS, Native)."
|
||||||
|
|
||||||
override fun createProjectSkeleton(module: Module, rootDir: VirtualFile) {
|
override fun createProjectSkeleton(module: Module, rootDir: VirtualFile) {
|
||||||
val src = rootDir.createChildDirectory(this, "src")
|
val src = rootDir.createChildDirectory(this, "src")
|
||||||
@@ -42,7 +43,7 @@ class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultipl
|
|||||||
val jsMain = src.createKotlinSampleFileWriter(jsSourceName)
|
val jsMain = src.createKotlinSampleFileWriter(jsSourceName)
|
||||||
val jsTest = src.createKotlinSampleFileWriter(jsTestName, fileName = "SampleTestsJS.kt")
|
val jsTest = src.createKotlinSampleFileWriter(jsTestName, fileName = "SampleTestsJS.kt")
|
||||||
val nativeMain = src.createKotlinSampleFileWriter(nativeSourceName)
|
val nativeMain = src.createKotlinSampleFileWriter(nativeSourceName)
|
||||||
val nativeTest = src.createKotlinSampleFileWriter(nativeTestName, fileName = "SampleTestsIOS.kt")
|
val nativeTest = src.createKotlinSampleFileWriter(nativeTestName, fileName = "SampleTestsNative.kt")
|
||||||
|
|
||||||
try {
|
try {
|
||||||
commonMain.write(
|
commonMain.write(
|
||||||
@@ -98,7 +99,7 @@ class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultipl
|
|||||||
}
|
}
|
||||||
|
|
||||||
actual object Platform {
|
actual object Platform {
|
||||||
actual val name: String = "iOS"
|
actual val name: String = "Native"
|
||||||
}
|
}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
)
|
)
|
||||||
@@ -158,10 +159,10 @@ class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultipl
|
|||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
class SampleTestsIOS {
|
class SampleTestsNative {
|
||||||
@Test
|
@Test
|
||||||
fun testHello() {
|
fun testHello() {
|
||||||
assertTrue("iOS" in hello())
|
assertTrue("Native" in hello())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
@@ -180,7 +181,7 @@ class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultipl
|
|||||||
// For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64
|
// For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64
|
||||||
// For Linux, preset should be changed to e.g. presets.linuxX64
|
// For Linux, preset should be changed to e.g. presets.linuxX64
|
||||||
// For MacOS, preset should be changed to e.g. presets.macosX64
|
// For MacOS, preset should be changed to e.g. presets.macosX64
|
||||||
fromPreset(presets.iosX64, '$nativeTargetName')
|
fromPreset(presets.${defaultNativeTarget.presetName}, '${defaultNativeTarget.userTargetName}')
|
||||||
}
|
}
|
||||||
sourceSets {
|
sourceSets {
|
||||||
$commonSourceName {
|
$commonSourceName {
|
||||||
|
|||||||
+3
-4
@@ -41,9 +41,8 @@ import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
|
|||||||
import org.jetbrains.kotlin.gradle.ArgsInfo
|
import org.jetbrains.kotlin.gradle.ArgsInfo
|
||||||
import org.jetbrains.kotlin.gradle.CompilerArgumentsBySourceSet
|
import org.jetbrains.kotlin.gradle.CompilerArgumentsBySourceSet
|
||||||
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder
|
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.GradlePropertiesFileFacade.Companion.KOTLIN_CODE_STYLE_GRADLE_SETTING
|
||||||
import org.jetbrains.kotlin.idea.facet.*
|
import org.jetbrains.kotlin.idea.facet.*
|
||||||
import org.jetbrains.kotlin.idea.formatter.KotlinObsoleteCodeStyle
|
|
||||||
import org.jetbrains.kotlin.idea.formatter.KotlinStyleGuideCodeStyle
|
|
||||||
import org.jetbrains.kotlin.idea.formatter.ProjectCodeStyleImporter
|
import org.jetbrains.kotlin.idea.formatter.ProjectCodeStyleImporter
|
||||||
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
||||||
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
||||||
@@ -149,7 +148,7 @@ class KotlinGradleProjectDataService : AbstractProjectDataService<ModuleData, Vo
|
|||||||
GradleProjectImportHandler.getInstances(project).forEach { it.importByModule(kotlinFacet, moduleNode) }
|
GradleProjectImportHandler.getInstances(project).forEach { it.importByModule(kotlinFacet, moduleNode) }
|
||||||
}
|
}
|
||||||
|
|
||||||
val codeStyleStr = GradlePropertiesFileUtils.readProperty(project, GradlePropertiesFileUtils.KOTLIN_CODE_STYLE_GRADLE_SETTING)
|
val codeStyleStr = GradlePropertiesFileFacade.forProject(project).readProperty(KOTLIN_CODE_STYLE_GRADLE_SETTING)
|
||||||
ProjectCodeStyleImporter.apply(project, codeStyleStr)
|
ProjectCodeStyleImporter.apply(project, codeStyleStr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -333,6 +332,6 @@ internal fun adjustClasspath(kotlinFacet: KotlinFacet, dependencyClasspath: List
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun findKotlinCoroutinesProperty(project: Project): String {
|
internal fun findKotlinCoroutinesProperty(project: Project): String {
|
||||||
return GradlePropertiesFileUtils.readProperty(project, "kotlin.coroutines")
|
return GradlePropertiesFileFacade.forProject(project).readProperty("kotlin.coroutines")
|
||||||
?: CoroutineSupport.getCompilerArgument(LanguageFeature.Coroutines.defaultState)
|
?: CoroutineSupport.getCompilerArgument(LanguageFeature.Coroutines.defaultState)
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.cli.common.arguments.ManualLanguageFeatureSetting
|
|||||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
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.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.GradleSourceSetData
|
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||||
@@ -237,8 +238,10 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
targetData.moduleIds = compilationIds
|
targetData.moduleIds = compilationIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val ignoreCommonSourceSets by lazy { externalProject.notImportedCommonSourceSets() }
|
||||||
for (sourceSet in mppModel.sourceSets.values) {
|
for (sourceSet in mppModel.sourceSets.values) {
|
||||||
if (sourceSet.platform == KotlinPlatform.ANDROID) continue
|
if (sourceSet.platform == KotlinPlatform.ANDROID) continue
|
||||||
|
if (sourceSet.platform == KotlinPlatform.COMMON && ignoreCommonSourceSets) continue
|
||||||
val moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
|
val moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
|
||||||
val existingSourceSetDataNode = sourceSetMap[moduleId]?.first
|
val existingSourceSetDataNode = sourceSetMap[moduleId]?.first
|
||||||
if (existingSourceSetDataNode?.kotlinSourceSet != null) continue
|
if (existingSourceSetDataNode?.kotlinSourceSet != null) continue
|
||||||
@@ -680,5 +683,8 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
|
|
||||||
private fun getKotlinModuleId(gradleModule: IdeaModule, kotlinModule: KotlinModule, resolverCtx: ProjectResolverContext) =
|
private fun getKotlinModuleId(gradleModule: IdeaModule, kotlinModule: KotlinModule, resolverCtx: ProjectResolverContext) =
|
||||||
getModuleId(resolverCtx, gradleModule) + ":" + kotlinModule.fullName()
|
getModuleId(resolverCtx, gradleModule) + ":" + kotlinModule.fullName()
|
||||||
|
|
||||||
|
private fun ExternalProject.notImportedCommonSourceSets() =
|
||||||
|
GradlePropertiesFileFacade.forExternalProject(this).readProperty(KOTLIN_NOT_IMPORTED_COMMON_SOURCE_SETS_SETTING)?.equals("true", ignoreCase = true) ?: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
|
|
||||||
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
||||||
|
|
||||||
|
<moduleBuilder implementation="org.jetbrains.kotlin.ide.konan.gradle.KotlinGradleNativeMultiplatformModuleBuilder"/>
|
||||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
||||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
@@ -78,6 +78,7 @@
|
|||||||
|
|
||||||
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
||||||
|
|
||||||
|
<moduleBuilder implementation="org.jetbrains.kotlin.ide.konan.gradle.KotlinGradleNativeMultiplatformModuleBuilder"/>
|
||||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
||||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|||||||
@@ -86,6 +86,7 @@
|
|||||||
|
|
||||||
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
<scriptDefinitionContributor implementation="org.jetbrains.kotlin.idea.core.script.GradleScriptDefinitionsContributor" order="first"/>
|
||||||
|
|
||||||
|
<moduleBuilder implementation="org.jetbrains.kotlin.ide.konan.gradle.KotlinGradleNativeMultiplatformModuleBuilder"/>
|
||||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleWebMultiplatformModuleBuilder"/>
|
||||||
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
<moduleBuilder implementation="org.jetbrains.kotlin.idea.configuration.KotlinGradleSharedMultiplatformModuleBuilder"/>
|
||||||
|
|
||||||
|
|||||||
@@ -284,4 +284,16 @@ open class HostManager(subtargetProvider: SubTargetProvider = NoSubTargets()) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val KonanTarget.presetName: String
|
||||||
|
get() = when (this) {
|
||||||
|
KonanTarget.ANDROID_ARM32 -> "androidNativeArm32"
|
||||||
|
KonanTarget.ANDROID_ARM64 -> "androidNativeArm64"
|
||||||
|
else -> evaluatePresetName(this.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun evaluatePresetName(targetName: String): String {
|
||||||
|
val nameParts = targetName.split('_').mapNotNull { it.takeIf(String::isNotEmpty) }
|
||||||
|
return nameParts.asSequence().drop(1).joinToString("", nameParts.firstOrNull().orEmpty(), transform = String::capitalize)
|
||||||
|
}
|
||||||
|
|
||||||
class TargetSupportException(message: String = "", cause: Throwable? = null) : Exception(message, cause)
|
class TargetSupportException(message: String = "", cause: Throwable? = null) : Exception(message, cause)
|
||||||
+1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
|
import org.jetbrains.kotlin.konan.target.presetName
|
||||||
|
|
||||||
internal val Project.multiplatformExtension get(): KotlinMultiplatformExtension? =
|
internal val Project.multiplatformExtension get(): KotlinMultiplatformExtension? =
|
||||||
project.extensions.getByName("kotlin") as KotlinMultiplatformExtension
|
project.extensions.getByName("kotlin") as KotlinMultiplatformExtension
|
||||||
|
|||||||
-7
@@ -338,13 +338,6 @@ internal val KonanTarget.isCurrentHost: Boolean
|
|||||||
internal val KonanTarget.enabledOnCurrentHost
|
internal val KonanTarget.enabledOnCurrentHost
|
||||||
get() = HostManager().isEnabled(this)
|
get() = HostManager().isEnabled(this)
|
||||||
|
|
||||||
internal val KonanTarget.presetName: String
|
|
||||||
get() = when (this) {
|
|
||||||
KonanTarget.ANDROID_ARM32 -> "androidNativeArm32"
|
|
||||||
KonanTarget.ANDROID_ARM64 -> "androidNativeArm64"
|
|
||||||
else -> lowerCamelCaseName(*this.name.split('_').toTypedArray())
|
|
||||||
}
|
|
||||||
|
|
||||||
internal val KotlinNativeCompilation.isMainCompilation: Boolean
|
internal val KotlinNativeCompilation.isMainCompilation: Boolean
|
||||||
get() = name == KotlinCompilation.MAIN_COMPILATION_NAME
|
get() = name == KotlinCompilation.MAIN_COMPILATION_NAME
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user