Object

nl.rabobank.oss.rules.utils

FactMacros

Related Doc: package utils

Permalink

object FactMacros

FactMacros contains two compile-time macros which allow the easy creation of a Fact, without having to explicitly repeat the name of the Fact as an argument. This makes it easier to define Facts for use in a DSL, as the name of the val to which it is assigned, becomes the name of the Fact itself.

Without these macros, you would need to create Facts as follows:

val MyFact = new SingularFact[Int]("MyFact")

This redundancy of the Fact's name is not just a nuisance to type, it actually causes trouble when renaming the Fact, or trying to copy its declaration. In both situations, you *must* also alter the name parameter manually. The compiler and IDE tooling cannot help you track these errors down and so you are bound to find out about them at runtime, with potentially uninformative error messages.

If instead, you use these macros, these troubles will be taken away. Define your Facts like this and have the IDE and compiler warn you about duplicate names etc:

val MyFact = FactMacros.defineFact[Int]("Description")

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. FactMacros
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. macro def defineFact[A](): SingularFact[A]

    Permalink

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact.

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact. Note: the value of this macro *must* be assigned to a val, otherwise a compiler error will be raised.

    A

    the value type of the resulting Fact.

    returns

    a SingularFact initialized with the name of the val declaration.

  7. def defineFactMacroImpl[A](c: Context)()(implicit arg0: scala.reflect.macros.blackbox.Context.WeakTypeTag[A]): scala.reflect.macros.blackbox.Context.Expr[SingularFact[A]]

    Permalink
    Annotations
    @compileTimeOnly( ... )
  8. def defineFactMacroWithDescriptionImpl[A](c: Context)(description: scala.reflect.macros.blackbox.Context.Expr[String])(implicit arg0: scala.reflect.macros.blackbox.Context.WeakTypeTag[A]): scala.reflect.macros.blackbox.Context.Expr[SingularFact[A]]

    Permalink
    Annotations
    @compileTimeOnly( ... )
  9. macro def defineFactWithDescription[A](description: String): SingularFact[A]

    Permalink

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact.

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact. Note: the value of this macro *must* be assigned to a val, otherwise a compiler error will be raised.

    A

    the value type of the resulting Fact.

    description

    description of the Fact, to be passed along to the Fact's constructor.

    returns

    a SingularFact initialized with the name of the val declaration.

  10. macro def defineListFact[A](): ListFact[A]

    Permalink

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact.

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact. Note: the value of this macro *must* be assigned to a val, otherwise a compiler error will be raised.

    A

    the value type of the resulting Fact.

    returns

    a ListFact initialized with the name of the val declaration.

  11. def defineListFactMacroImpl[A](c: Context)()(implicit arg0: scala.reflect.macros.blackbox.Context.WeakTypeTag[A]): scala.reflect.macros.blackbox.Context.Expr[ListFact[A]]

    Permalink
    Annotations
    @compileTimeOnly( ... )
  12. def defineListFactMacroWithDescriptionImpl[A](c: Context)(description: scala.reflect.macros.blackbox.Context.Expr[String])(implicit arg0: scala.reflect.macros.blackbox.Context.WeakTypeTag[A]): scala.reflect.macros.blackbox.Context.Expr[ListFact[A]]

    Permalink
    Annotations
    @compileTimeOnly( ... )
  13. macro def defineListFactWithDescription[A](description: String): ListFact[A]

    Permalink

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact.

    Defines a Fact, using the name of the val it is assigned to as the name of the Fact. Note: the value of this macro *must* be assigned to a val, otherwise a compiler error will be raised.

    A

    the value type of the resulting Fact.

    description

    description of the Fact, to be passed along to the Fact's constructor.

    returns

    a ListFact initialized with the name of the val declaration.

  14. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  15. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  16. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  17. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  18. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  19. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  20. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  21. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  22. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  23. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  24. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  25. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  26. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  27. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped