From 2fda71682f86ab4b3fe0f28a955f8c8f29700240 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Wed, 29 Mar 2017 16:18:26 -0700 Subject: [PATCH] Fix tests. --- .../kotlin/com/beust/kobalt/app/BuildFiles.kt | 80 +++++++++---------- 1 file changed, 36 insertions(+), 44 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/app/BuildFiles.kt b/src/main/kotlin/com/beust/kobalt/app/BuildFiles.kt index c9a624c3..0e16c561 100644 --- a/src/main/kotlin/com/beust/kobalt/app/BuildFiles.kt +++ b/src/main/kotlin/com/beust/kobalt/app/BuildFiles.kt @@ -11,7 +11,6 @@ import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.internal.build.BuildSources import com.beust.kobalt.misc.* import com.google.inject.Inject -import jdk.nashorn.internal.objects.NativeArray.forEach import java.io.File import java.net.URL import java.nio.file.* @@ -46,11 +45,11 @@ class BuildFiles @Inject constructor(val factory: BuildFileCompiler.IFactory, val buildScriptUtil: BuildScriptUtil) { private val profileLines = arrayListOf() private val activeProfiles = arrayListOf() - private val KOBALT_SRC = File("kobalt/src/") - var containsProfiles = false val projects = arrayListOf() + private fun sourceDir(root: String) = File(KFiles.joinDir(root, "kobalt", "src")) + private fun findFiles(file: File, accept: (File) -> Boolean) : List { val result = arrayListOf() @@ -72,10 +71,7 @@ class BuildFiles @Inject constructor(val factory: BuildFileCompiler.IFactory, private fun findBuildSourceFiles(root: String) : List { val result = arrayListOf() - val sourceDirs = arrayListOf().apply { add(root + File.separator + KOBALT_SRC) }.map(::File) - sourceDirs.forEach { dir -> - result.addAll(findFiles(dir, { it.name.endsWith(".kt") })) - } + result.addAll(findFiles(sourceDir(root), { it.name.endsWith(".kt") })) return result } @@ -83,23 +79,20 @@ class BuildFiles @Inject constructor(val factory: BuildFileCompiler.IFactory, * @return the new Build.kt */ fun parseBuildFiles(projectDir: String, context: KobaltContext) : File { - val sourceDirs = arrayListOf().apply { add(projectDir + File.separator + KOBALT_SRC) } val map = hashMapOf() val newSourceDirs = arrayListOf() - sourceDirs.forEach { - val filesWithBuildScript = parseBuildScriptInfos(projectDir, context) - filesWithBuildScript.forEach { - map.put(it.file, it) - } - if (filesWithBuildScript.any()) { - filesWithBuildScript.forEach { af -> - val bsi = af.buildScriptInfo - newSourceDirs.addAll(bsi.includedBuildSourceDirs) - } - log(2, " Found buildScriptInfos: " + filesWithBuildScript) - } else { - log(2, " No buildScriptInfos") + val filesWithBuildScript = parseBuildScriptInfos(projectDir, context) + filesWithBuildScript.forEach { + map.put(it.file, it) + } + if (filesWithBuildScript.any()) { + filesWithBuildScript.forEach { af -> + val bsi = af.buildScriptInfo + newSourceDirs.addAll(bsi.includedBuildSourceDirs) } + log(2, " Found buildScriptInfos: " + filesWithBuildScript) + } else { + log(2, " No buildScriptInfos") } // @@ -107,28 +100,27 @@ class BuildFiles @Inject constructor(val factory: BuildFileCompiler.IFactory, // val imports = arrayListOf() val code = arrayListOf() - sourceDirs.forEach { sourceDir -> - findFiles(File(sourceDir), { it.name.endsWith(".kt") }).forEach { file -> - code.add("\n// $file") - val analyzedFile = map[file] - val bsi = analyzedFile?.buildScriptInfo + val sourceDir = sourceDir(projectDir) + findFiles(sourceDir, { it.name.endsWith(".kt") }).forEach { file -> + code.add("\n// $file") + val analyzedFile = map[file] + val bsi = analyzedFile?.buildScriptInfo - file.readLines().forEachIndexed { lineNumber, line -> - if (bsi == null || ! bsi.isInSection(lineNumber)) { - correctProfileLine(context, line).let { cpl -> - (if (cpl.startsWith("import")) imports else code).add(cpl) - } - } else { - val isd = bsi.includedBuildSourceDirsForLine(lineNumber) - log(2, " Skipping line $lineNumber from file $file") - if (isd.any()) { - // If we found any new buildSourceDirs, all all the files found in these directories - // to the big Build.kt - val allBuildFiles = isd.flatMap { findBuildSourceFiles(projectDir + File.separator + it) } - val sbf = includeFileContent(context, allBuildFiles) - imports.addAll(sbf.imports) - code.addAll(sbf.code) - } + file.readLines().forEachIndexed { lineNumber, line -> + if (bsi == null || ! bsi.isInSection(lineNumber)) { + correctProfileLine(context, line).let { cpl -> + (if (cpl.startsWith("import")) imports else code).add(cpl) + } + } else { + val isd = bsi.includedBuildSourceDirsForLine(lineNumber) + log(2, " Skipping line $lineNumber from file $file") + if (isd.any()) { + // If we found any new buildSourceDirs, all all the files found in these directories + // to the big Build.kt + val allBuildFiles = isd.flatMap { findBuildSourceFiles(projectDir + File.separator + it) } + val sbf = includeFileContent(context, allBuildFiles) + imports.addAll(sbf.imports) + code.addAll(sbf.code) } } } @@ -137,7 +129,7 @@ class BuildFiles @Inject constructor(val factory: BuildFileCompiler.IFactory, // // Create the big Build.kt out of the imports and code we've found so far // - val result = File(KFiles.findBuildScriptDir(), "Build.kt") + val result = File(KFiles.findBuildScriptDir(projectDir), "Build.kt") result.writeText(imports.joinToString("\n")) result.appendText(code.joinToString("\n")) @@ -160,7 +152,7 @@ class BuildFiles @Inject constructor(val factory: BuildFileCompiler.IFactory, } fun parseBuildScriptInfos(projectDir: String, context: KobaltContext) : List { - val root = File(projectDir + File.separator + KOBALT_SRC) + val root = sourceDir(projectDir) val files = findBuildSourceFiles(projectDir) val toProcess = arrayListOf().apply { addAll(files) }