Introduce "-api-version" CLI option

The `@SinceKotlin("X.Y.Z")` annotation now hides a particular declaration from
resolution when the API version specified by the `-api-version` option is
_less_ than X.Y.Z. The comparison is performed as for versions in Maven:
MavenComparableVersion is in fact a copy of
org.apache.maven.artifact.versioning.ComparableVersion.

Also support "!API_VERSION" directive in diagnostic tests

 #KT-14298 Fixed
This commit is contained in:
Alexander Udalov
2016-09-26 19:56:22 +03:00
parent e3df8ed2fe
commit 167ab1f860
59 changed files with 1758 additions and 57 deletions
@@ -0,0 +1,11 @@
// !API_VERSION: 1.0
@SinceKotlin("1.1")
annotation class Anno1(val s: String)
annotation class Anno2 @SinceKotlin("1.1") constructor()
@<!UNRESOLVED_REFERENCE, API_NOT_AVAILABLE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>Anno1<!>("")
@<!UNRESOLVED_REFERENCE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>Anno2<!>
fun t1() {}
@@ -0,0 +1,18 @@
package
@Anno1() @Anno2() public fun t1(): kotlin.Unit
@kotlin.SinceKotlin(version = "1.1") public final annotation class Anno1 : kotlin.Annotation {
public constructor Anno1(/*0*/ s: kotlin.String)
public final val s: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class Anno2 : kotlin.Annotation {
@kotlin.SinceKotlin(version = "1.1") public constructor Anno2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,19 @@
// !API_VERSION: 1.0
@SinceKotlin("1.1")
open class Foo
class Bar @SinceKotlin("1.1") constructor()
@SinceKotlin("1.0")
class Baz @SinceKotlin("1.1") constructor()
fun t1(): <!API_NOT_AVAILABLE!>Foo<!> = <!UNRESOLVED_REFERENCE!>Foo<!>()
// TODO: do not report API_NOT_AVAILABLE twice
fun t2() = object : <!UNRESOLVED_REFERENCE, API_NOT_AVAILABLE, API_NOT_AVAILABLE, DEBUG_INFO_UNRESOLVED_WITH_TARGET!>Foo<!>() {}
fun t3(): Bar? = <!UNRESOLVED_REFERENCE!>Bar<!>()
fun t4(): Baz = <!UNRESOLVED_REFERENCE!>Baz<!>()
@@ -0,0 +1,27 @@
package
public fun t1(): Foo
public fun t2(): Foo
public fun t3(): Bar?
public fun t4(): Baz
public final class Bar {
@kotlin.SinceKotlin(version = "1.1") public constructor Bar()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.SinceKotlin(version = "1.0") public final class Baz {
@kotlin.SinceKotlin(version = "1.1") public constructor Baz()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.SinceKotlin(version = "1.1") public open class Foo {
public constructor Foo()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,34 @@
// !API_VERSION: 1.0
// FILE: J.java
public interface J {
void foo();
}
// FILE: test.kt
interface I10 {
@SinceKotlin("1.0")
fun foo()
}
interface I11 {
@SinceKotlin("1.1")
fun foo()
}
fun f1(x: I10) = x.foo()
fun f2(x: I11) = x.<!UNRESOLVED_REFERENCE!>foo<!>()
fun f3(x: J) = x.foo()
interface BothI1 : I10, I11
fun f4(x: BothI1) = x.foo()
interface BothI2 : I11, I10
fun f5(x: BothI2) = x.foo()
interface JAndI10 : J, I10
fun f6(x: JAndI10) = x.foo()
interface JAndI11 : J, I11
fun f7(x: JAndI11) = x.foo()
@@ -0,0 +1,59 @@
package
public /*synthesized*/ fun J(/*0*/ function: () -> kotlin.Unit): J
public fun f1(/*0*/ x: I10): kotlin.Unit
public fun f2(/*0*/ x: I11): [ERROR : Error function type]
public fun f3(/*0*/ x: J): kotlin.Unit
public fun f4(/*0*/ x: BothI1): kotlin.Unit
public fun f5(/*0*/ x: BothI2): kotlin.Unit
public fun f6(/*0*/ x: JAndI10): kotlin.Unit
public fun f7(/*0*/ x: JAndI11): kotlin.Unit
public interface BothI1 : I10, I11 {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.SinceKotlin(version = "1.0") public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface BothI2 : I11, I10 {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.SinceKotlin(version = "1.1") public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface I10 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.SinceKotlin(version = "1.0") public abstract fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface I11 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.SinceKotlin(version = "1.1") public abstract fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface J {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JAndI10 : J, I10 {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JAndI11 : J, I11 {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun foo(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,48 @@
// !API_VERSION: 1.0
val v1: String
@SinceKotlin("1.1")
get() = ""
@SinceKotlin("1.1")
val v2 = ""
var v3: String
@SinceKotlin("1.1")
get() = ""
set(value) {}
var v4: String
get() = ""
@SinceKotlin("1.1")
set(value) {}
var v5: String
@SinceKotlin("1.1")
get() = ""
@SinceKotlin("1.1")
set(value) {}
@SinceKotlin("1.1")
var v6: String
get() = ""
set(value) {}
@SinceKotlin("1.0")
val v7: String
@SinceKotlin("1.1")
get() = ""
fun test() {
<!API_NOT_AVAILABLE!>v1<!>
<!UNRESOLVED_REFERENCE!>v2<!>
<!API_NOT_AVAILABLE!>v3<!>
v3 = ""
v4
<!API_NOT_AVAILABLE!>v4<!> = ""
<!API_NOT_AVAILABLE!>v5<!>
<!API_NOT_AVAILABLE!>v5<!> = ""
<!UNRESOLVED_REFERENCE!>v6<!>
<!UNRESOLVED_REFERENCE!>v6<!> = ""
<!API_NOT_AVAILABLE!>v7<!>
}
@@ -0,0 +1,10 @@
package
public val v1: kotlin.String
@kotlin.SinceKotlin(version = "1.1") public val v2: kotlin.String = ""
public var v3: kotlin.String
public var v4: kotlin.String
public var v5: kotlin.String
@kotlin.SinceKotlin(version = "1.1") public var v6: kotlin.String
@kotlin.SinceKotlin(version = "1.0") public val v7: kotlin.String
public fun test(): kotlin.Unit
@@ -0,0 +1,19 @@
// !API_VERSION: 1.0
@SinceKotlin("1.1")
fun f() {}
@SinceKotlin("1.1")
var p = Unit
@SinceKotlin("1.1.2")
fun z() {}
fun t1() = <!UNRESOLVED_REFERENCE!>f<!>()
fun t2() = <!UNRESOLVED_REFERENCE!>p<!>
fun t3() { <!UNRESOLVED_REFERENCE!>p<!> = Unit }
fun t4() { <!UNRESOLVED_REFERENCE!>z<!>() }
@@ -0,0 +1,9 @@
package
@kotlin.SinceKotlin(version = "1.1") public var p: kotlin.Unit
@kotlin.SinceKotlin(version = "1.1") public fun f(): kotlin.Unit
public fun t1(): [ERROR : Error function type]
public fun t2(): [ERROR : Error function type]
public fun t3(): kotlin.Unit
public fun t4(): kotlin.Unit
@kotlin.SinceKotlin(version = "1.1.2") public fun z(): kotlin.Unit
@@ -0,0 +1,18 @@
// !API_VERSION: 1.1
@SinceKotlin("0.9")
fun ok1() {}
@SinceKotlin("1.0")
fun ok2() {}
@SinceKotlin("1.1")
fun ok3() {}
@SinceKotlin("0.9.9")
fun ok4() {}
fun t1() = ok1()
fun t2() = ok2()
fun t3() = ok3()
fun t4() = ok4()
@@ -0,0 +1,10 @@
package
@kotlin.SinceKotlin(version = "0.9") public fun ok1(): kotlin.Unit
@kotlin.SinceKotlin(version = "1.0") public fun ok2(): kotlin.Unit
@kotlin.SinceKotlin(version = "1.1") public fun ok3(): kotlin.Unit
@kotlin.SinceKotlin(version = "0.9.9") public fun ok4(): kotlin.Unit
public fun t1(): kotlin.Unit
public fun t2(): kotlin.Unit
public fun t3(): kotlin.Unit
public fun t4(): kotlin.Unit