From a1f5b43d73898a8bef246ac457e3bb3fcce3bb80 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Tue, 23 Feb 2016 01:48:36 +0400 Subject: [PATCH] Turn on the idea template. --- .../com/beust/kobalt/app/IdeaFilesTemplate.kt | 88 ++++++++++++++++--- .../kotlin/com/beust/kobalt/app/Templates.kt | 4 +- 2 files changed, 77 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/app/IdeaFilesTemplate.kt b/src/main/kotlin/com/beust/kobalt/app/IdeaFilesTemplate.kt index 27c17dce..e9db80aa 100644 --- a/src/main/kotlin/com/beust/kobalt/app/IdeaFilesTemplate.kt +++ b/src/main/kotlin/com/beust/kobalt/app/IdeaFilesTemplate.kt @@ -19,21 +19,83 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate { override val templateDescription = "Generate files required by IDEA to build the project" override val pluginName = KobaltPlugin.PLUGIN_NAME + override val instructions = "IDEA files generated" + override fun generateTemplate(args: Args, classLoader: ClassLoader) { val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java) val data = dependencyData.dependenciesDataFor(homeDir("kotlin/kobalt/kobalt/src/Build.kt"), args) val outputDir = KFiles.makeDir(homeDir("t/idea")) generateLibraries(data, outputDir) generateModulesXml(data, outputDir) - println("Generating ideaFiles") + generateImlFiles(data, outputDir) } + private fun generateImlFiles(data: DependencyData.GetDependenciesData, outputDir: File) { + data.projects.forEach { project -> + val dir = KFiles.makeDir(outputDir.absolutePath, File(imlName(project)).parent) + val file = File(KFiles.joinDir(outputDir.path, imlName(project))) + with(arrayListOf()) { + add("""""") + add("""""") + add(""" """) + + add("""""") + + add(" ") + + // + // Source directories + // + fun sourceDir(dir: String, isTest: Boolean) + = " " + + project.sourceDirs.forEach { sourceDir -> + add(sourceDir(sourceDir, false)) + } + project.testDirs.forEach { sourceDir -> + add(sourceDir(sourceDir, true)) + } + + add(""" """) + + // + // Libraries + // + add(""" """) + + (project.name + compileSuffix()).let { + add(" ") + } + (project.name + testSuffix()).let { + add(" ") + } + + // + // Dependent projects + // + project.dependentProjects.forEach { dp -> + add(""" """) + } + + add(" ") + add("") + + file.writeText(joinToString("\n")) + log(2, "Created $file") + + } + } + } + + private fun imlName(project: DependencyData.ProjectData) = + KFiles.joinDir(project.directory, project.name + ".iml") + private fun generateModulesXml(data: DependencyData.GetDependenciesData, outputDir: File) { val modulesXmlFile = File(outputDir, "modules.xml") with(arrayListOf()) { - add("") - add("") - add(" ") + add("""""") + add("""""") + add(""" """) add(" ") fun moduleLine(iml: String) @@ -42,22 +104,24 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate { add(moduleLine("kobalt/Build.kt.iml")) data.projects.forEach { - val iml = KFiles.joinDir(it.directory, it.name + ".iml") - add(moduleLine(iml)) + add(moduleLine(imlName(it))) } add(" ") add(" ") add("") modulesXmlFile.writeText(joinToString("\n")) - log(1, "Created $modulesXmlFile") + log(2, "Created $modulesXmlFile") } } + private fun compileSuffix() = " (Compile)" + private fun testSuffix() = " (Test)" + private fun generateLibraries(data: DependencyData.GetDependenciesData, outputDir: File) { data.projects.forEach { - generateLibrary(it.name, it.compileDependencies, " (Compile)", outputDir) - generateLibrary(it.name, it.testDependencies, " (Test)", outputDir) + generateLibrary(it.name, it.compileDependencies, compileSuffix(), outputDir) + generateLibrary(it.name, it.testDependencies, testSuffix(), outputDir) } val kobaltDd = DependencyData.DependencyData("kobalt", "compile", KFiles.joinDir(KFiles.distributionsDir, Kobalt.version, "kobalt", "wrapper", @@ -70,8 +134,8 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate { val libraryName = name + suffix val librariesOutputDir = KFiles.makeDir(outputDir.path, "libraries") with(arrayListOf()) { - add("") - add(" ") + add("""""") + add(""" """) addAll(generateList(compileDependencies, "CLASSES")) addAll(generateList(emptyList(), "JAVADOC")) addAll(generateList(emptyList(), "SOURCES")) @@ -81,7 +145,7 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate { .replace(".", "_") val file = File(librariesOutputDir, fileName + ".xml") file.writeText(joinToString("\n")) - log(1, "Created $file") + log(2, "Created $file") } } diff --git a/src/main/kotlin/com/beust/kobalt/app/Templates.kt b/src/main/kotlin/com/beust/kobalt/app/Templates.kt index 22ed345d..38bb3eae 100644 --- a/src/main/kotlin/com/beust/kobalt/app/Templates.kt +++ b/src/main/kotlin/com/beust/kobalt/app/Templates.kt @@ -10,9 +10,7 @@ import com.google.common.collect.ArrayListMultimap import com.google.inject.Inject class Templates @Inject constructor() : ITemplateContributor { - override val templates = listOf(JavaBuildGenerator(), KotlinBuildGenerator() - //, IdeaFilesTemplate() - ) + override val templates = listOf(JavaBuildGenerator(), KotlinBuildGenerator(), IdeaFilesTemplate()) fun list(pluginInfo: PluginInfo) { val map = ArrayListMultimap.create()