In Kotlin, one can attach metadata to declarations in the form of _annotations_. To declare an annotation, put the *annotation* annotation (no pun intended :)) in front of a normal class:
{jet}
annotation class fancy {}
{jet}
(Note that, by convention, annotation classes are named with the lowercase fitst letter; the reason will be clear from the examples below.)
Now we can annotate a declaration or an expression with the new {{fancy}} annotation. In general, one puts square brackets around the annotation name:
{jet}
[fancy] class Foo {
  [fancy] fun baz([fancy] foo : Int) : Int {
    return [fancy] 1
  }
}
{jet}
{note:title=Annotations are under development}{note}

When annotating a declaration (e.g. a function or a class), the square brackets may be omitted:
{jet}
fancy class Foo() {
  fancy fun baz(fancy foo: Int) {
    return [fancy] 1
  }
}
{jet}
Note that square brackets are required for expressions.

Annotation classes may have constructors that take parameters. For example:
{jet}
annotation class special(val why : String)

special("example") class Foo {}
{jet}
As you can see, to pass arguments to an annotation one simply calls its constructor.

On the JVM one can re-use Java annotations:
{jet}
import org.junit.Test
import org.junit.Assert.*

class Tests {
  Test fun simple() {
    assertEquals(42, getTheAnswer())
  }
}
{jet}

If you want your Java annotations to look like modifiers, you can rename them on import:

{jet}
import org.junit.Test as test

class Tests {
  test fun simple() {
    ...
  }
}
{jet}
