Package

com.avsystem.commons

annotation

Permalink

package annotation

Visibility
  1. Public
  2. All

Type Members

  1. trait AnnotationAggregate extends Annotation with StaticAnnotation

    Permalink

    When an annotation class extends this trait, annotation processing macros (e.g.

    When an annotation class extends this trait, annotation processing macros (e.g. for GenCodec materialization) will look into annotations of the aggregating annotation itself and apply these annotations as if they were applied directly on the same target as the aggregating annotation. Example:

    import com.avsystem.commons.serialization._
    
    @name("_id") @outOfOrder
    class mongoId extends AnnotationAggregate
    
    case class SomeMongoEntity(@mongoId id: String, data: String)

    In the above example, applying @mongoId annotation on the id field has the same effect as if annotations @name("_id") @outOfOrder were applied directly on that field.

  2. class atLeast extends Annotation with StaticAnnotation

    Permalink

    When applied on varargs parameter, indicates that at least some number of parameters is required.

    When applied on varargs parameter, indicates that at least some number of parameters is required. This is later checked by the static analyzer.
    WARNING: implementation of method which takes a varargs parameter may NOT assume that given number of arguments will always be passed, because it's still possible to pass a Seq where varargs parameter is required using the : _* ascription, e.g.

    varargsMethod(List(): _*)

    and that is not checked by the static analyzer.

  3. class explicitGenerics extends Annotation with StaticAnnotation

    Permalink

    When applied on generic method, requires that all the type parameters are given explicitly (cannot be inferred by the compiler).

    When applied on generic method, requires that all the type parameters are given explicitly (cannot be inferred by the compiler). This is meant primarily for methods whose generics cannot be inferred from method arguments. Requiring that the programmer specifies them explicitly is a protection against the compiler inferring Nothing or Null.

    @explicitGenerics
    def readJson[T: GenCodec](json: String): T = ...
    
    // raise error, because otherwise we have a hidden bug - the compiler infers `Nothing` in place of `T`
    val x: MyType = readJson("{}")
    // ok
    val x = readJson[MyType]("{}")
  4. class macroPrivate extends Annotation with StaticAnnotation

    Permalink

    Symbols annotated with this annotation can only be used in macro-generated code.

Ungrouped