From 89559d5952ec27ac33f69592785750264fd3b960 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 29 Jul 2016 00:09:43 -0800 Subject: [PATCH] Better filter dependency implementation. --- .../com/beust/kobalt/maven/aether/Aether.kt | 27 ++++++++++--------- .../kobalt/maven/DependencyManagerTest.kt | 24 ++++++++++++++--- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/aether/Aether.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/aether/Aether.kt index 47cc6886..441e19b8 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/aether/Aether.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/aether/Aether.kt @@ -31,14 +31,15 @@ import org.eclipse.aether.util.artifact.JavaScopes import org.eclipse.aether.util.filter.AndDependencyFilter import org.eclipse.aether.util.filter.DependencyFilterUtils import java.io.File +import java.util.* import java.util.concurrent.Future -enum class Scope(val scope: String) { - COMPILE(JavaScopes.COMPILE), - PROVIDED(JavaScopes.PROVIDED), - SYSTEM(JavaScopes.SYSTEM), - RUNTIME(JavaScopes.RUNTIME), - TEST(JavaScopes.TEST) +enum class Scope(val scope: String, val dependencyLambda: (Project) -> List) { + COMPILE(JavaScopes.COMPILE, { project : Project -> project.compileDependencies }), + PROVIDED(JavaScopes.PROVIDED, { project : Project -> project.compileProvidedDependencies }), + SYSTEM(JavaScopes.SYSTEM, { project : Project -> emptyList() }), + RUNTIME(JavaScopes.RUNTIME, { project : Project -> project.compileRuntimeDependencies }), + TEST(JavaScopes.TEST, { project : Project -> project.testDependencies }) ; companion object { @@ -55,13 +56,13 @@ enum class Scope(val scope: String) { * filters passed. */ fun toDependencyLambda(scopes: Collection) : (Project) -> List { - val result = - if (scopes.contains(Scope.COMPILE) && scopes.contains(Scope.TEST)) { - { project : Project -> project.compileDependencies + project.testDependencies } - } else if (scopes.contains(Scope.TEST)) { - { project : Project -> project.testDependencies } - } else { - { project : Project -> project.compileDependencies } + val result = { project : Project -> + scopes.fold(arrayListOf(), + { l: ArrayList, scope: Scope -> + val deps = scope.dependencyLambda(project) + l.addAll(deps) + l + }) } return result } diff --git a/src/test/kotlin/com/beust/kobalt/maven/DependencyManagerTest.kt b/src/test/kotlin/com/beust/kobalt/maven/DependencyManagerTest.kt index 5a57b495..67ec8135 100644 --- a/src/test/kotlin/com/beust/kobalt/maven/DependencyManagerTest.kt +++ b/src/test/kotlin/com/beust/kobalt/maven/DependencyManagerTest.kt @@ -91,9 +91,25 @@ class DependencyManagerTest @Inject constructor(val dependencyManager: Dependenc val compileResult = compileBuildFile(buildFileString, Args(), compilerFactory) val project2 = compileResult.projects[1] - val dependencies = dependencyManager2.resolve(project2, Kobalt.context!!, isTest = false, - passedScopeFilters = listOf(Scope.COMPILE, Scope.RUNTIME)) - assertContains(dependencies, ":testng:") - assertContains(dependencies, ":jcommander:") + + dependencyManager2.resolve(project2, Kobalt.context!!, isTest = false, + passedScopeFilters = listOf(Scope.COMPILE, Scope.RUNTIME)).let { dependencies -> + assertThat(dependencies.size).isEqualTo(4) + assertContains(dependencies, ":testng:") + assertContains(dependencies, ":jcommander:") + } + + dependencyManager2.resolve(project2, Kobalt.context!!, isTest = false, + passedScopeFilters = listOf(Scope.COMPILE)).let { dependencies -> + assertThat(dependencies.size).isEqualTo(3) + assertContains(dependencies, ":testng:") + } + + dependencyManager2.resolve(project2, Kobalt.context!!, isTest = false, + passedScopeFilters = listOf(Scope.RUNTIME)).let { dependencies -> + assertThat(dependencies.size).isEqualTo(3) + assertContains(dependencies, ":jcommander:") + } + } }