Skip to content

Validation can't be used when FieldArgs is an inner classes #38

@Mortimerp9

Description

@Mortimerp9

If the FieldArgs argument class is defined as an inner class, sumac is ok with it. For instance, with:

import com.quantifind.sumac._
class MyClass {
    class MyArgs extends FieldArgs {
        var test: String = _
    }
}

we can do:

val c = new MyClass
val arg = new c.MyArgs
arg.parse(Map("test"->"test"))

and everything seems to be working.

However, when using annotation for validation:

import com.quantifind.sumac._
import com.quantifind.sumac.validation.Required
class MyClass {
    class MyArgs extends FieldArgs {
        @Required
        var test: String = _
    }
}

parse will throw an exception:

val c = new MyClass
val arg = new c.MyArgs
arg.parse(Map("test"->"test"))
java.util.NoSuchElementException: key not found: test
    at scala.collection.MapLike$class.default(MapLike.scala:228)
    at scala.collection.AbstractMap.default(Map.scala:58)
    at scala.collection.MapLike$class.apply(MapLike.scala:141)
    at scala.collection.AbstractMap.apply(Map.scala:58)
    at com.quantifind.sumac.FieldArgs$$anonfun$addAnnotationValidations$1.apply(FieldArgs.scala:56)
    at com.quantifind.sumac.FieldArgs$$anonfun$addAnnotationValidations$1.apply(FieldArgs.scala:55)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
    at com.quantifind.sumac.FieldArgs$class.addAnnotationValidations(FieldArgs.scala:55)
    at MyClass$MyArgs.addAnnotationValidations(<console>:12)
    at com.quantifind.sumac.FieldArgs$$anonfun$1.applyOrElse(FieldArgs.scala:18)
    at com.quantifind.sumac.FieldArgs$$anonfun$1.applyOrElse(FieldArgs.scala:15)
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33)
    at scala.collection.TraversableLike$$anonfun$collect$1.apply(TraversableLike.scala:278)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.collect(TraversableLike.scala:278)
    at scala.collection.AbstractTraversable.collect(Traversable.scala:105)
    at com.quantifind.sumac.FieldArgs$class.getArgs(FieldArgs.scala:15)
    at MyClass$MyArgs.getArgs(<console>:12)
    at MyClass$MyArgs.getArgs(<console>:12)
    at com.quantifind.sumac.Args$class.getArgs(Args.scala:7)
    at MyClass$MyArgs.getArgs(<console>:12)
    at com.quantifind.sumac.Args$class.parser(Args.scala:28)
    at MyClass$MyArgs.parser$lzycompute(<console>:12)
    at MyClass$MyArgs.parser(<console>:12)
    at com.quantifind.sumac.Args$class.parse(Args.scala:39)
    at MyClass$MyArgs.parse(<console>:12)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions