Update module-info only for Java configurator (KT-19207)

#KT-19207 Fixed
This commit is contained in:
Nikolay Krasko
2017-10-03 15:43:40 +03:00
parent fe9ef04cae
commit 9d122a275a
4 changed files with 52 additions and 31 deletions
@@ -17,10 +17,12 @@
package org.jetbrains.kotlin.idea.configuration
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.roots.LibraryOrderEntry
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.util.Computable
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiJavaModule
import com.intellij.psi.search.DelegatingGlobalSearchScope
import com.intellij.psi.search.FileTypeIndex
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.configuration.ui.notifications.ConfigureKotlinNotification
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.findFirstPsiJavaModule
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.getKotlinJvmRuntimeMarkerClass
import org.jetbrains.kotlin.idea.versions.hasKotlinJsKjsmFile
import org.jetbrains.kotlin.idea.vfilefinder.IDEVirtualFileFinder
import org.jetbrains.kotlin.resolve.jvm.modules.KOTLIN_STDLIB_MODULE_NAME
import org.jetbrains.kotlin.utils.ifEmpty
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
}
}
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.externalSystem.service.project.IdeModifiableModelsProviderImpl
import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.projectRoots.Sdk
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 {
val NAME = "java"
@@ -17,21 +17,17 @@
package org.jetbrains.kotlin.idea.configuration
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.command.WriteCommandAction
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.*
import com.intellij.openapi.roots.libraries.*
import com.intellij.openapi.util.Computable
import com.intellij.openapi.vfs.JarFileSystem
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VfsUtilCore
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiJavaModule
import org.jetbrains.annotations.Contract
import org.jetbrains.kotlin.config.ApiVersion
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.framework.ui.CreateLibraryDialogWithModules
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.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.version
import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor
import org.jetbrains.kotlin.idea.versions.findAllUsedLibraries
import org.jetbrains.kotlin.idea.versions.findKotlinRuntimeLibrary
import org.jetbrains.kotlin.resolve.jvm.modules.KOTLIN_STDLIB_MODULE_NAME
import java.io.File
import java.util.*
@@ -115,7 +107,7 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
val collector = createConfigureKotlinNotificationCollector(project)
for (module in modulesToConfigure) {
configureModuleWithLibrary(module, defaultPathToJar, copyLibraryIntoPath, collector)
configureModule(module, defaultPathToJar, copyLibraryIntoPath, collector)
}
configureKotlinSettings(modulesToConfigure)
@@ -128,11 +120,11 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
val defaultPathToJar = getDefaultPathToJarFile(project)
val collector = createConfigureKotlinNotificationCollector(project)
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,
defaultPath: String,
pathFromDialog: String?,
@@ -140,10 +132,21 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
) {
val classesPath = getPathToCopyFileTo(module.project, OrderRootType.CLASSES, 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,
classesPath: String,
sourcesPath: String,
@@ -176,24 +179,8 @@ abstract class KotlinWithLibraryConfigurator internal constructor() : KotlinProj
ApplicationManager.getApplication().runWriteAction { model.commit() }
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(
library: Library.ModifiableModel,
@@ -181,7 +181,7 @@ abstract class AbstractConfigureKotlinTest : PlatformTestCase() {
val pathToJar = getPathToJar(runtimeState, jarFromDist, jarFromTemp)
for (module in modules) {
configurator.configureModuleWithLibrary(module, pathToJar, pathToJar, collector, runtimeState)
configurator.configureModule(module, pathToJar, pathToJar, collector, runtimeState)
}
collector.showNotification()
}