diff --git a/idea/idea-gradle/build.gradle.kts b/idea/idea-gradle/build.gradle.kts index ed04700aedb..e9ea8220833 100644 --- a/idea/idea-gradle/build.gradle.kts +++ b/idea/idea-gradle/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { compileOnly(project(":idea")) compileOnly(project(":idea:idea-jvm")) + compileOnly(project(":idea:idea-native")) { isTransitive = false } compile(project(":idea:kotlin-gradle-tooling")) compile(project(":compiler:frontend")) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index 933a85e863e..9bf5e8a8b06 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -30,6 +30,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.impl.libraries.LibraryImpl +import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.roots.libraries.PersistentLibraryKind import com.intellij.openapi.util.Key import com.intellij.util.PathUtil @@ -40,6 +41,7 @@ import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.gradle.ArgsInfo import org.jetbrains.kotlin.gradle.CompilerArgumentsBySourceSet +import org.jetbrains.kotlin.ide.konan.NativeLibraryKind 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.* @@ -52,6 +54,7 @@ import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedVersionByModuleData import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.roots.migrateNonJvmSourceFolders +import org.jetbrains.kotlin.konan.library.KLIB_FILE_EXTENSION import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isJavaScript @@ -173,15 +176,24 @@ class KotlinGradleLibraryDataService : AbstractProjectDataService + if (nonJvmSuffixes.any { it in name } || name.startsWith(KOTLIN_NATIVE_LIBRARY_PREFIX)) + return true + } + + return getFiles(OrderRootType.CLASSES).firstOrNull()?.extension == KLIB_FILE_EXTENSION + } private fun resetLibraryKind(modifiableModel: LibraryEx.ModifiableModelEx) { try { @@ -203,7 +215,7 @@ class KotlinGradleLibraryDataService : AbstractProjectDataService(NativeLibraryKind) { - override fun createPropertiesEditor(editorComponent: LibraryEditorComponent) = null + override fun createPropertiesEditor(editorComponent: LibraryEditorComponent): Nothing? = null + override fun getCreateActionName(): Nothing? = null + override fun createNewLibrary(parentComponent: JComponent, contextDirectory: VirtualFile?, project: Project): Nothing? = null - override fun getCreateActionName() = null + // Library type is determined by `KotlinGradleLibraryDataService` for every library dependency imported from Gradle to IDE. + // However this does not work for libraries that are to be just created during project build, e.g. C-interop Kotlin/Native KLIBs. + // The code below helps to perform postponed detection of Kotlin/Native libraries. + override fun detect(classesRoots: List): DummyLibraryProperties? { + val path = classesRoots.firstOrNull()?.let { PathUtil.getLocalPath(it) } ?: return null - override fun createNewLibrary( - parentComponent: JComponent, - contextDirectory: VirtualFile?, - project: Project - ): NewLibraryConfiguration? = null + return if (LiteKonanLibraryFacade.getLibraryProvider().getLibrary(File(path)) != null) + DummyLibraryProperties.INSTANCE!! + else null + } override fun getIcon(properties: DummyLibraryProperties?): Icon = KotlinIcons.NATIVE } diff --git a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanLibraryFacade.kt b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanLibraryFacade.kt index b152fcfa24f..db93beccf05 100644 --- a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanLibraryFacade.kt +++ b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanLibraryFacade.kt @@ -24,7 +24,6 @@ object LiteKonanLibraryFacade { */ fun getDistributionLibraryProvider(customKonanHomeDir: File?): LiteKonanLibraryProvider = FromDistributionLiteKonanLibraryProvider(customKonanHomeDir) - } interface LiteKonanLibraryProvider {