diff --git a/modules/nextflow/src/main/groovy/nextflow/script/ParamsDsl.groovy b/modules/nextflow/src/main/groovy/nextflow/script/ParamsDsl.groovy index 001bc1ba74..a4e28d48ab 100644 --- a/modules/nextflow/src/main/groovy/nextflow/script/ParamsDsl.groovy +++ b/modules/nextflow/src/main/groovy/nextflow/script/ParamsDsl.groovy @@ -26,8 +26,10 @@ import groovy.util.logging.Slf4j import nextflow.Session import nextflow.file.FileHelper import nextflow.exception.ScriptRuntimeException +import nextflow.script.types.Bag import nextflow.script.types.Types import nextflow.splitter.CsvSplitter +import nextflow.util.ArrayBag import nextflow.util.Duration import nextflow.util.MemoryUnit import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation @@ -157,6 +159,8 @@ class ParamsDsl { } try { + if( Bag.class.isAssignableFrom(type) && value instanceof Collection ) + return new ArrayBag(value) return DefaultTypeTransformation.castToType(value, type) } catch( GroovyCastException e ) { diff --git a/modules/nextflow/src/test/groovy/nextflow/script/ParamsDslTest.groovy b/modules/nextflow/src/test/groovy/nextflow/script/ParamsDslTest.groovy index 4048c44f31..67a4245aa6 100644 --- a/modules/nextflow/src/test/groovy/nextflow/script/ParamsDslTest.groovy +++ b/modules/nextflow/src/test/groovy/nextflow/script/ParamsDslTest.groovy @@ -6,6 +6,7 @@ import java.nio.file.Path import nextflow.Session import nextflow.file.FileHelper import nextflow.exception.ScriptRuntimeException +import nextflow.script.types.Bag import spock.lang.Specification import spock.lang.Unroll /** @@ -171,24 +172,38 @@ class ParamsDslTest extends Specification { {"id": 3, "name": "sample3", "value": 300} ] '''.stripIndent() - def cliParams = [samples: jsonFile.toString()] + def cliParams = [ + samplesList: jsonFile.toString(), + samplesBag: jsonFile.toString(), + samplesSet: jsonFile.toString() + ] def session = new Session() session.init(null, null, cliParams, [:]) when: def dsl = new ParamsDsl() - dsl.declare('samples', List, false) + dsl.declare('samplesList', List, false) + dsl.declare('samplesBag', Bag, false) + dsl.declare('samplesSet', Set, false) dsl.apply(session) then: - def samples = session.binding.getParams().samples - samples instanceof List - samples.size() == 3 - samples[0].id == 1 - samples[0].name == 'sample1' - samples[0].value == 100 - samples[1].id == 2 - samples[2].id == 3 + def samplesList = session.binding.getParams().samplesList + samplesList instanceof List + samplesList.size() == 3 + samplesList[0].id == 1 + samplesList[0].name == 'sample1' + samplesList[0].value == 100 + samplesList[1].id == 2 + samplesList[2].id == 3 + + def samplesBag = session.binding.getParams().samplesBag + samplesBag instanceof Bag + samplesBag.size() == 3 + + def samplesSet = session.binding.getParams().samplesSet + samplesSet instanceof Set + samplesSet.size() == 3 cleanup: jsonFile?.delete()