From ba24de7d080cbe084ee19d45212211c44f86acb4 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 27 Mar 2017 09:53:24 -0700 Subject: [PATCH 01/16] More flexible option parsing. --- src/main/kotlin/com/beust/kobalt/Options.kt | 109 +++++++++++++++++++- 1 file changed, 105 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/Options.kt b/src/main/kotlin/com/beust/kobalt/Options.kt index 730321bf..4c7f6f95 100644 --- a/src/main/kotlin/com/beust/kobalt/Options.kt +++ b/src/main/kotlin/com/beust/kobalt/Options.kt @@ -1,36 +1,59 @@ package com.beust.kobalt import com.beust.jcommander.JCommander +import com.beust.kobalt.api.Kobalt +import com.beust.kobalt.api.PluginTask +import com.beust.kobalt.api.Project +import com.beust.kobalt.app.ProjectFinder import com.beust.kobalt.app.ProjectGenerator +import com.beust.kobalt.app.Templates import com.beust.kobalt.app.UpdateKobalt import com.beust.kobalt.app.remote.KobaltServer import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.internal.TaskManager import com.beust.kobalt.internal.build.BuildFile +import com.beust.kobalt.misc.CheckVersions import com.beust.kobalt.misc.KFiles import com.beust.kobalt.wrapper.Main +import com.google.common.collect.HashMultimap import com.google.inject.Inject import java.io.File import java.nio.file.Paths +/** + * Some options require a build file, others shouldn't have one and some don't care. This + * class captures these requirements. + */ open class Option(open val enabled: () -> Boolean, open val action: () -> Unit, open val requireBuildFile: Boolean = true) class OptionalBuildOption(override val enabled: () -> Boolean, override val action: () -> Unit) : Option(enabled, action, false) class Options @Inject constructor( + val plugins: Plugins, + val checkVersions: CheckVersions, val projectGenerator: ProjectGenerator, val pluginInfo: PluginInfo, val serverFactory: KobaltServer.IFactory, val updateKobalt: UpdateKobalt, - val taskManager: TaskManager + val projectFinder: ProjectFinder, + val taskManager: TaskManager, + val resolveDependency: ResolveDependency ) { - fun run(jc: JCommander, args: Args, argv: Array) { + fun run(jc: JCommander, args: Args, argv: Array): Int { val p = if (args.buildFile != null) File(args.buildFile) else KFiles.findBuildFile() val buildFile = BuildFile(Paths.get(p.absolutePath), p.name) var pluginClassLoader = javaClass.classLoader - val options = arrayListOf