mirror of
https://github.com/ilyakooo0/intellij-haskell.git
synced 2024-09-11 14:56:19 +03:00
Update Settings adds new modules. Fix issue #379.
This commit is contained in:
parent
0289527f4b
commit
474c764cf1
@ -20,7 +20,7 @@ import com.intellij.openapi.actionSystem.ActionManager
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.components.ProjectComponent
|
||||
import com.intellij.openapi.progress.{PerformInBackgroundOption, ProgressIndicator, ProgressManager, Task}
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.{Project, ProjectUtil}
|
||||
import com.intellij.openapi.roots.{ModifiableRootModel, ModuleRootModificationUtil}
|
||||
import com.intellij.openapi.ui.Messages
|
||||
import com.intellij.openapi.util.SystemInfo
|
||||
@ -31,7 +31,7 @@ import intellij.haskell.external.execution.StackCommandLine
|
||||
import intellij.haskell.external.execution.StackCommandLine.build
|
||||
import intellij.haskell.external.repl.StackRepl.LibType
|
||||
import intellij.haskell.external.repl.StackReplsManager
|
||||
import intellij.haskell.module.HaskellModuleBuilder
|
||||
import intellij.haskell.module.{HaskellModuleBuilder, StackProjectImportBuilder}
|
||||
import intellij.haskell.psi.HaskellPsiUtil
|
||||
import intellij.haskell.util._
|
||||
import intellij.haskell.util.index.{HaskellFileIndex, HaskellModuleNameIndex}
|
||||
|
@ -20,6 +20,7 @@ import java.io.File
|
||||
import java.util
|
||||
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilder
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.module.{ModifiableModuleModel, Module, ModuleType}
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
@ -29,7 +30,7 @@ import com.intellij.packaging.artifacts.ModifiableArtifactModel
|
||||
import com.intellij.projectImport.ProjectImportBuilder
|
||||
import icons.HaskellIcons
|
||||
import intellij.haskell.stackyaml.StackYamlComponent
|
||||
import intellij.haskell.util.{HaskellFileUtil, HaskellProjectUtil}
|
||||
import intellij.haskell.util.{ApplicationUtil, HaskellFileUtil, HaskellProjectUtil, ScalaUtil}
|
||||
import javax.swing.Icon
|
||||
|
||||
import scala.collection.JavaConverters._
|
||||
@ -47,32 +48,17 @@ class StackProjectImportBuilder extends ProjectImportBuilder[Unit] {
|
||||
|
||||
override def isMarked(element: Unit): Boolean = true
|
||||
|
||||
private final val projectRootRelativePath = "."
|
||||
|
||||
override def getTitle: String = "Stack project importer"
|
||||
|
||||
override def commit(project: Project, model: ModifiableModuleModel, modulesProvider: ModulesProvider, artifactModel: ModifiableArtifactModel): java.util.List[Module] = {
|
||||
val moduleBuilder = HaskellModuleType.getInstance.createModuleBuilder()
|
||||
|
||||
val packagePaths = StackYamlComponent.getPackagePaths(project).getOrElse(Seq(projectRootRelativePath))
|
||||
val packagePaths = StackProjectImportBuilder.getPackagePaths(project)
|
||||
|
||||
packagePaths.foreach(packageRelativePath => {
|
||||
val moduleDirectory = HaskellModuleBuilder.getModuleRootDirectory(packageRelativePath, getFileToImport)
|
||||
HaskellModuleBuilder.createCabalInfo(project, getFileToImport, packageRelativePath) match {
|
||||
case Some(cabalInfo) =>
|
||||
val packageName = cabalInfo.packageName
|
||||
moduleBuilder.setCabalInfo(cabalInfo)
|
||||
moduleBuilder.setName(packageName)
|
||||
moduleBuilder.setModuleFilePath(getModuleImlFilePath(moduleDirectory, packageName))
|
||||
moduleBuilder.commit(project)
|
||||
moduleBuilder.addModuleConfigurationUpdater((_: Module, rootModel: ModifiableRootModel) => {
|
||||
moduleBuilder.setupRootModel(rootModel)
|
||||
})
|
||||
case None => ()
|
||||
}
|
||||
StackProjectImportBuilder.addHaskellModule(project, packageRelativePath, getFileToImport)
|
||||
})
|
||||
|
||||
if (!packagePaths.contains(projectRootRelativePath)) {
|
||||
if (!packagePaths.contains(StackProjectImportBuilder.projectRootRelativePath)) {
|
||||
val parentModuleBuilder = new ParentModuleBuilder(project)
|
||||
parentModuleBuilder.setModuleFilePath(new File(project.getBasePath, project.getName + "-parent.iml").getPath)
|
||||
parentModuleBuilder.setName("Parent module")
|
||||
@ -84,10 +70,36 @@ class StackProjectImportBuilder extends ProjectImportBuilder[Unit] {
|
||||
|
||||
HaskellProjectUtil.getModuleManager(project).map(_.getModules).getOrElse(Array()).toList.asJava
|
||||
}
|
||||
}
|
||||
|
||||
private def getModuleImlFilePath(moduleDirectory: File, packageName: String): String = {
|
||||
object StackProjectImportBuilder {
|
||||
|
||||
private final val projectRootRelativePath = "."
|
||||
|
||||
def addHaskellModule(project: Project, packageRelativePath: String, projectRoot: String): Unit = {
|
||||
val moduleBuilder = HaskellModuleType.getInstance.createModuleBuilder()
|
||||
val moduleDirectory = HaskellModuleBuilder.getModuleRootDirectory(packageRelativePath, projectRoot)
|
||||
ApplicationUtil.runReadAction(HaskellModuleBuilder.createCabalInfo(project, projectRoot, packageRelativePath)) match {
|
||||
case Some(cabalInfo) =>
|
||||
val packageName = cabalInfo.packageName
|
||||
moduleBuilder.setCabalInfo(cabalInfo)
|
||||
moduleBuilder.setName(packageName)
|
||||
moduleBuilder.setModuleFilePath(getModuleImlFilePath(moduleDirectory, packageName))
|
||||
ApplicationManager.getApplication.invokeAndWait(ScalaUtil.runnable(moduleBuilder.commit(project)))
|
||||
moduleBuilder.addModuleConfigurationUpdater((_: Module, rootModel: ModifiableRootModel) => {
|
||||
moduleBuilder.setupRootModel(rootModel)
|
||||
})
|
||||
case None => ()
|
||||
}
|
||||
}
|
||||
|
||||
def getModuleImlFilePath(moduleDirectory: File, packageName: String): String = {
|
||||
new File(moduleDirectory, packageName + ".iml").getAbsolutePath
|
||||
}
|
||||
|
||||
def getPackagePaths(project: Project): Seq[String] = {
|
||||
StackYamlComponent.getPackagePaths(project).getOrElse(Seq(projectRootRelativePath))
|
||||
}
|
||||
}
|
||||
|
||||
class ParentModuleBuilder(val project: Project) extends ModuleBuilder {
|
||||
|
Loading…
Reference in New Issue
Block a user