Update module-info only for Java configurator (KT-19207)
#KT-19207 Fixed
This commit is contained in:
@@ -17,10 +17,12 @@
|
|||||||
package org.jetbrains.kotlin.idea.configuration
|
package org.jetbrains.kotlin.idea.configuration
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
|
import com.intellij.openapi.command.WriteCommandAction
|
||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.project.DumbService
|
import com.intellij.openapi.project.DumbService
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
||||||
import com.intellij.openapi.roots.DependencyScope
|
import com.intellij.openapi.roots.DependencyScope
|
||||||
import com.intellij.openapi.roots.LibraryOrderEntry
|
import com.intellij.openapi.roots.LibraryOrderEntry
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
@@ -28,6 +30,7 @@ import com.intellij.openapi.roots.impl.libraries.LibraryEx
|
|||||||
import com.intellij.openapi.roots.libraries.PersistentLibraryKind
|
import com.intellij.openapi.roots.libraries.PersistentLibraryKind
|
||||||
import com.intellij.openapi.util.Computable
|
import com.intellij.openapi.util.Computable
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.PsiJavaModule
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
import com.intellij.psi.search.FileTypeIndex
|
import com.intellij.psi.search.FileTypeIndex
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
@@ -35,12 +38,17 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification
|
import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification
|
||||||
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
||||||
|
import org.jetbrains.kotlin.idea.quickfix.KotlinAddRequiredModuleFix
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
|
import org.jetbrains.kotlin.idea.util.findFirstPsiJavaModule
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
||||||
|
import org.jetbrains.kotlin.idea.util.projectStructure.sdk
|
||||||
|
import org.jetbrains.kotlin.idea.util.projectStructure.version
|
||||||
import org.jetbrains.kotlin.idea.versions.SuppressNotificationState
|
import org.jetbrains.kotlin.idea.versions.SuppressNotificationState
|
||||||
import org.jetbrains.kotlin.idea.versions.getKotlinJvmRuntimeMarkerClass
|
import org.jetbrains.kotlin.idea.versions.getKotlinJvmRuntimeMarkerClass
|
||||||
import org.jetbrains.kotlin.idea.versions.hasKotlinJsKjsmFile
|
import org.jetbrains.kotlin.idea.versions.hasKotlinJsKjsmFile
|
||||||
import org.jetbrains.kotlin.idea.vfilefinder.IDEVirtualFileFinder
|
import org.jetbrains.kotlin.idea.vfilefinder.IDEVirtualFileFinder
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.modules.KOTLIN_STDLIB_MODULE_NAME
|
||||||
import org.jetbrains.kotlin.utils.ifEmpty
|
import org.jetbrains.kotlin.utils.ifEmpty
|
||||||
|
|
||||||
data class RepositoryDescription(val id: String, val name: String, val url: String, val bintrayUrl: String?, val isSnapshot: Boolean)
|
data class RepositoryDescription(val id: String, val name: String, val url: String, val bintrayUrl: String?, val isSnapshot: Boolean)
|
||||||
@@ -275,3 +283,18 @@ private class LibraryKindSearchScope(val module: Module,
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addStdlibToJavaModuleInfo(module: Module, collector: NotificationMessageCollector) {
|
||||||
|
if (module.sdk?.version?.isAtLeast(JavaSdkVersion.JDK_1_9) != true) return
|
||||||
|
|
||||||
|
val project = module.project
|
||||||
|
val javaModule: PsiJavaModule = findFirstPsiJavaModule(module) ?: return
|
||||||
|
|
||||||
|
val success = WriteCommandAction.runWriteCommandAction(project, Computable<Boolean> {
|
||||||
|
KotlinAddRequiredModuleFix.addModuleRequirement(javaModule, KOTLIN_STDLIB_MODULE_NAME)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
collector.addMessage("Added ${KOTLIN_STDLIB_MODULE_NAME} requirement to module-info in ${module.name}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.configuration
|
|||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
|
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.projectRoots.JavaSdk
|
|
||||||
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
||||||
import com.intellij.openapi.projectRoots.Sdk
|
import com.intellij.openapi.projectRoots.Sdk
|
||||||
import com.intellij.openapi.roots.LibraryOrderEntry
|
import com.intellij.openapi.roots.LibraryOrderEntry
|
||||||
@@ -115,6 +114,18 @@ open class KotlinJavaModuleConfigurator internal constructor() : KotlinWithLibra
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun configureModule(
|
||||||
|
module: Module,
|
||||||
|
classesPath: String,
|
||||||
|
sourcesPath: String,
|
||||||
|
collector: NotificationMessageCollector,
|
||||||
|
forceJarState: FileState?,
|
||||||
|
useBundled: Boolean
|
||||||
|
) {
|
||||||
|
super.configureModule(module, classesPath, sourcesPath, collector, forceJarState, useBundled)
|
||||||
|
addStdlibToJavaModuleInfo(module, collector)
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val NAME = "java"
|
val NAME = "java"
|
||||||
|
|
||||||
|
|||||||
@@ -17,21 +17,17 @@
|
|||||||
package org.jetbrains.kotlin.idea.configuration
|
package org.jetbrains.kotlin.idea.configuration
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager
|
import com.intellij.openapi.application.ApplicationManager
|
||||||
import com.intellij.openapi.command.WriteCommandAction
|
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.module.ModuleManager
|
import com.intellij.openapi.module.ModuleManager
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
|
||||||
import com.intellij.openapi.projectRoots.Sdk
|
import com.intellij.openapi.projectRoots.Sdk
|
||||||
import com.intellij.openapi.roots.*
|
import com.intellij.openapi.roots.*
|
||||||
import com.intellij.openapi.roots.libraries.*
|
import com.intellij.openapi.roots.libraries.*
|
||||||
import com.intellij.openapi.util.Computable
|
|
||||||
import com.intellij.openapi.vfs.JarFileSystem
|
import com.intellij.openapi.vfs.JarFileSystem
|
||||||
import com.intellij.openapi.vfs.LocalFileSystem
|
import com.intellij.openapi.vfs.LocalFileSystem
|
||||||
import com.intellij.openapi.vfs.VfsUtil
|
import com.intellij.openapi.vfs.VfsUtil
|
||||||
import com.intellij.openapi.vfs.VfsUtilCore
|
import com.intellij.openapi.vfs.VfsUtilCore
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiJavaModule
|
|
||||||
import org.jetbrains.annotations.Contract
|
import org.jetbrains.annotations.Contract
|
||||||
import org.jetbrains.kotlin.config.ApiVersion
|
import org.jetbrains.kotlin.config.ApiVersion
|
||||||
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
||||||
@@ -41,16 +37,12 @@ import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
|||||||
import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion
|
import org.jetbrains.kotlin.idea.facet.getRuntimeLibraryVersion
|
||||||
import org.jetbrains.kotlin.idea.framework.ui.CreateLibraryDialogWithModules
|
import org.jetbrains.kotlin.idea.framework.ui.CreateLibraryDialogWithModules
|
||||||
import org.jetbrains.kotlin.idea.framework.ui.FileUIUtils
|
import org.jetbrains.kotlin.idea.framework.ui.FileUIUtils
|
||||||
import org.jetbrains.kotlin.idea.quickfix.KotlinAddRequiredModuleFix
|
|
||||||
import org.jetbrains.kotlin.idea.quickfix.askUpdateRuntime
|
import org.jetbrains.kotlin.idea.quickfix.askUpdateRuntime
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.idea.util.findFirstPsiJavaModule
|
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.sdk
|
import org.jetbrains.kotlin.idea.util.projectStructure.sdk
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.version
|
|
||||||
import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor
|
import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor
|
||||||
import org.jetbrains.kotlin.idea.versions.findAllUsedLibraries
|
import org.jetbrains.kotlin.idea.versions.findAllUsedLibraries
|
||||||
import org.jetbrains.kotlin.idea.versions.findKotlinRuntimeLibrary
|
import org.jetbrains.kotlin.idea.versions.findKotlinRuntimeLibrary
|
||||||
import org.jetbrains.kotlin.resolve.jvm.modules.KOTLIN_STDLIB_MODULE_NAME
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -115,7 +107,7 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
|
|||||||
|
|
||||||
val collector = createConfigureKotlinNotificationCollector(project)
|
val collector = createConfigureKotlinNotificationCollector(project)
|
||||||
for (module in modulesToConfigure) {
|
for (module in modulesToConfigure) {
|
||||||
configureModuleWithLibrary(module, defaultPathToJar, copyLibraryIntoPath, collector)
|
configureModule(module, defaultPathToJar, copyLibraryIntoPath, collector)
|
||||||
}
|
}
|
||||||
|
|
||||||
configureKotlinSettings(modulesToConfigure)
|
configureKotlinSettings(modulesToConfigure)
|
||||||
@@ -128,11 +120,11 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
|
|||||||
val defaultPathToJar = getDefaultPathToJarFile(project)
|
val defaultPathToJar = getDefaultPathToJarFile(project)
|
||||||
val collector = createConfigureKotlinNotificationCollector(project)
|
val collector = createConfigureKotlinNotificationCollector(project)
|
||||||
for (module in ModuleManager.getInstance(project).modules) {
|
for (module in ModuleManager.getInstance(project).modules) {
|
||||||
configureModuleWithLibrary(module, defaultPathToJar, null, collector)
|
configureModule(module, defaultPathToJar, null, collector)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun configureModuleWithLibrary(
|
protected fun configureModule(
|
||||||
module: Module,
|
module: Module,
|
||||||
defaultPath: String,
|
defaultPath: String,
|
||||||
pathFromDialog: String?,
|
pathFromDialog: String?,
|
||||||
@@ -140,10 +132,21 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
|
|||||||
) {
|
) {
|
||||||
val classesPath = getPathToCopyFileTo(module.project, OrderRootType.CLASSES, defaultPath, pathFromDialog)
|
val classesPath = getPathToCopyFileTo(module.project, OrderRootType.CLASSES, defaultPath, pathFromDialog)
|
||||||
val sourcesPath = getPathToCopyFileTo(module.project, OrderRootType.SOURCES, defaultPath, pathFromDialog)
|
val sourcesPath = getPathToCopyFileTo(module.project, OrderRootType.SOURCES, defaultPath, pathFromDialog)
|
||||||
configureModuleWithLibrary(module, classesPath, sourcesPath, collector, useBundled = pathFromDialog == null)
|
configureModule(module, classesPath, sourcesPath, collector, useBundled = pathFromDialog == null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun configureModuleWithLibrary(
|
open fun configureModule(
|
||||||
|
module: Module,
|
||||||
|
classesPath: String,
|
||||||
|
sourcesPath: String,
|
||||||
|
collector: NotificationMessageCollector,
|
||||||
|
forceJarState: FileState? = null,
|
||||||
|
useBundled: Boolean = false
|
||||||
|
) {
|
||||||
|
configureModuleWithLibrary(module, classesPath, sourcesPath, collector, forceJarState, useBundled)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun configureModuleWithLibrary(
|
||||||
module: Module,
|
module: Module,
|
||||||
classesPath: String,
|
classesPath: String,
|
||||||
sourcesPath: String,
|
sourcesPath: String,
|
||||||
@@ -176,24 +179,8 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
|
|||||||
ApplicationManager.getApplication().runWriteAction { model.commit() }
|
ApplicationManager.getApplication().runWriteAction { model.commit() }
|
||||||
|
|
||||||
addLibraryToModuleIfNeeded(module, library, collector)
|
addLibraryToModuleIfNeeded(module, library, collector)
|
||||||
|
|
||||||
updateModuleInfo(module, collector)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateModuleInfo(module: Module, collector: NotificationMessageCollector) {
|
|
||||||
if (module.sdk?.version?.isAtLeast(JavaSdkVersion.JDK_1_9) != true) return
|
|
||||||
|
|
||||||
val project = module.project
|
|
||||||
val javaModule: PsiJavaModule = findFirstPsiJavaModule(module) ?: return
|
|
||||||
|
|
||||||
val success = WriteCommandAction.runWriteCommandAction(project, Computable<Boolean> {
|
|
||||||
KotlinAddRequiredModuleFix.addModuleRequirement(javaModule, KOTLIN_STDLIB_MODULE_NAME)
|
|
||||||
})
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
collector.addMessage("Added $KOTLIN_STDLIB_MODULE_NAME requirement to module-info in ${module.name}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun configureLibraryJar(
|
fun configureLibraryJar(
|
||||||
library: Library.ModifiableModel,
|
library: Library.ModifiableModel,
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ abstract class AbstractConfigureKotlinTest : PlatformTestCase() {
|
|||||||
|
|
||||||
val pathToJar = getPathToJar(runtimeState, jarFromDist, jarFromTemp)
|
val pathToJar = getPathToJar(runtimeState, jarFromDist, jarFromTemp)
|
||||||
for (module in modules) {
|
for (module in modules) {
|
||||||
configurator.configureModuleWithLibrary(module, pathToJar, pathToJar, collector, runtimeState)
|
configurator.configureModule(module, pathToJar, pathToJar, collector, runtimeState)
|
||||||
}
|
}
|
||||||
collector.showNotification()
|
collector.showNotification()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user