1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

Better filter dependency implementation.

This commit is contained in:
Cedric Beust 2016-07-29 00:09:43 -08:00
parent e513508807
commit 89559d5952
2 changed files with 34 additions and 17 deletions

View file

@ -31,14 +31,15 @@ import org.eclipse.aether.util.artifact.JavaScopes
import org.eclipse.aether.util.filter.AndDependencyFilter import org.eclipse.aether.util.filter.AndDependencyFilter
import org.eclipse.aether.util.filter.DependencyFilterUtils import org.eclipse.aether.util.filter.DependencyFilterUtils
import java.io.File import java.io.File
import java.util.*
import java.util.concurrent.Future import java.util.concurrent.Future
enum class Scope(val scope: String) { enum class Scope(val scope: String, val dependencyLambda: (Project) -> List<IClasspathDependency>) {
COMPILE(JavaScopes.COMPILE), COMPILE(JavaScopes.COMPILE, { project : Project -> project.compileDependencies }),
PROVIDED(JavaScopes.PROVIDED), PROVIDED(JavaScopes.PROVIDED, { project : Project -> project.compileProvidedDependencies }),
SYSTEM(JavaScopes.SYSTEM), SYSTEM(JavaScopes.SYSTEM, { project : Project -> emptyList() }),
RUNTIME(JavaScopes.RUNTIME), RUNTIME(JavaScopes.RUNTIME, { project : Project -> project.compileRuntimeDependencies }),
TEST(JavaScopes.TEST) TEST(JavaScopes.TEST, { project : Project -> project.testDependencies })
; ;
companion object { companion object {
@ -55,13 +56,13 @@ enum class Scope(val scope: String) {
* filters passed. * filters passed.
*/ */
fun toDependencyLambda(scopes: Collection<Scope>) : (Project) -> List<IClasspathDependency> { fun toDependencyLambda(scopes: Collection<Scope>) : (Project) -> List<IClasspathDependency> {
val result = val result = { project : Project ->
if (scopes.contains(Scope.COMPILE) && scopes.contains(Scope.TEST)) { scopes.fold(arrayListOf<IClasspathDependency>(),
{ project : Project -> project.compileDependencies + project.testDependencies } { l: ArrayList<IClasspathDependency>, scope: Scope ->
} else if (scopes.contains(Scope.TEST)) { val deps = scope.dependencyLambda(project)
{ project : Project -> project.testDependencies } l.addAll(deps)
} else { l
{ project : Project -> project.compileDependencies } })
} }
return result return result
} }

View file

@ -91,9 +91,25 @@ class DependencyManagerTest @Inject constructor(val dependencyManager: Dependenc
val compileResult = compileBuildFile(buildFileString, Args(), compilerFactory) val compileResult = compileBuildFile(buildFileString, Args(), compilerFactory)
val project2 = compileResult.projects[1] val project2 = compileResult.projects[1]
val dependencies = dependencyManager2.resolve(project2, Kobalt.context!!, isTest = false,
passedScopeFilters = listOf(Scope.COMPILE, Scope.RUNTIME)) dependencyManager2.resolve(project2, Kobalt.context!!, isTest = false,
assertContains(dependencies, ":testng:") passedScopeFilters = listOf(Scope.COMPILE, Scope.RUNTIME)).let { dependencies ->
assertContains(dependencies, ":jcommander:") 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:")
}
} }
} }