| import org.jetbrains.kotlin.plugin.sandbox.Positive |
| import org.jetbrains.kotlin.plugin.sandbox.Negative |
| |
| fun takePositive(x: @Positive Number) {} |
| fun takeNegative(x: @Negative Number) {} |
| fun takeAny(x: Number) {} |
| |
| fun <K> id(x: K): K = x |
| fun <K> select(x: K, y: K): K = x |
| |
| fun test( |
| positiveInt: @Positive Int, |
| positiveDouble: @Positive Double, |
| negativeDouble: @Negative Double |
| ) { |
| takePositive(positiveInt) // ok |
| takeNegative(negativeDouble) // ok |
| takeAny(positiveInt) |
| |
| takePositive(<!ILLEGAL_NUMBER_SIGN!>negativeDouble<!>) // error |
| takeNegative(<!ILLEGAL_NUMBER_SIGN!>positiveInt<!>) // error |
| |
| takePositive(id(positiveInt)) // ok |
| takeNegative(<!ILLEGAL_NUMBER_SIGN!>id(positiveInt)<!>) // error |
| |
| takePositive(select(positiveInt, positiveInt)) // ok |
| // Should be ok, but currently attributes are not passed through common super type calculation |
| takePositive(<!ILLEGAL_NUMBER_SIGN!>select(positiveInt, positiveDouble)<!>) |
| takePositive(<!ILLEGAL_NUMBER_SIGN!>select(positiveInt, negativeDouble)<!>) // error |
| takeNegative(<!ILLEGAL_NUMBER_SIGN!>select(positiveInt, negativeDouble)<!>) // error |
| } |