Add tests for type annotations with unresolved reference and invalid target (KT-28424, KT-28449)

This commit is contained in:
victor.petukhov
2018-11-27 12:45:52 +03:00
parent 620969652a
commit f5d44003cd
36 changed files with 1021 additions and 1 deletions
@@ -0,0 +1,16 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 1
* DESCRIPTION: Type annotations on return type with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
fun case_1(x: String): @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String {
return x
}
@@ -0,0 +1,11 @@
package
public fun case_1(/*0*/ x: kotlin.String): @Ann kotlin.String
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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,35 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 10
* DESCRIPTION: Type annotations on a lambda type with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1, 2
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
/*
* TESTCASE NUMBER: 1
* UNEXPECTED BEHAVIOUR
*/
fun case_1() {
val x: (Int) -> @Ann(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) Unit = {} // OK, no error in IDE and in the compiler
}
/*
* TESTCASE NUMBER: 2
* UNEXPECTED BEHAVIOUR
*/
fun case_2() {
val x: (@Ann(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) Int) -> Unit = { a: Int -> println(a) } // OK, no error in IDE and in the compiler
}
// TESTCASE NUMBER: 3
fun case_3() {
val x: (@Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Int) -> Unit = { a -> println(a) } // ERROR (if argument type isn't specified explicitly)
}
@@ -0,0 +1,13 @@
package
public fun case_1(): kotlin.Unit
public fun case_2(): kotlin.Unit
public fun case_3(): kotlin.Unit
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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,35 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 11
* DESCRIPTION: Type annotations with invalid target.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-28449
*/
// TESTCASE NUMBER: 1, 2, 3, 4, 5
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY_GETTER)
annotation class Ann(val x: Int)
// TESTCASE NUMBER: 1
abstract class Foo : @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(10) Any()
// TESTCASE NUMBER: 2
abstract class Bar<T : @Ann(10) Any>
// TESTCASE NUMBER: 3
fun case_3(a: Any) {
if (a is @Ann(10) String) return
}
// TESTCASE NUMBER: 4
open class TypeToken<T>
val case_4 = object : TypeToken<@<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(10) String>() {}
// TESTCASE NUMBER: 5
fun case_5(a: Any) {
a as @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(10) Int
}
@@ -0,0 +1,34 @@
package
public val case_4: TypeToken<@Ann(x = 10) kotlin.String>
public fun case_3(/*0*/ a: kotlin.Any): kotlin.Unit
public fun case_5(/*0*/ a: kotlin.Any): kotlin.Unit
@kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY_GETTER}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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 abstract class Bar</*0*/ T : @Ann(x = 10) kotlin.Any> {
public constructor Bar</*0*/ T : @Ann(x = 10) kotlin.Any>()
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 abstract 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
}
public open class TypeToken</*0*/ T> {
public constructor TypeToken</*0*/ T>()
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,17 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 2
* DESCRIPTION: Type annotations on supertypes with unresolved reference in parameters.
* ISSUES: KT-28424
*/
/*
* TESTCASE NUMBER: 1
* UNEXPECTED BEHAVIOUR
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
abstract class Foo : @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) Any()
@@ -0,0 +1,16 @@
package
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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 abstract 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,26 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 3
* DESCRIPTION: Type annotations on parameter types with unresolved reference in parameters.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1, 2, 3
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
// TESTCASE NUMBER: 1
class Inv<T>
fun foo(i: Inv<@Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String>) {}
// TESTCASE NUMBER: 2
fun test(vararg a: @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any) {}
// TESTCASE NUMBER: 3
class A<T>(a: @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) T)
@@ -0,0 +1,26 @@
package
public fun foo(/*0*/ i: Inv<@Ann kotlin.String>): kotlin.Unit
public fun test(/*0*/ vararg a: @Ann kotlin.Any /*kotlin.Array<out @Ann kotlin.Any>*/): kotlin.Unit
public final class A</*0*/ T> {
public constructor A</*0*/ T>(/*0*/ a: @Ann T)
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.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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 class Inv</*0*/ T> {
public constructor Inv</*0*/ T>()
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,16 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 4
* DESCRIPTION: Type annotations on type arguments for a containing type of return type, with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
class Inv<T>
fun case_1(): Inv<@Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String> = TODO()
@@ -0,0 +1,18 @@
package
public fun case_1(): Inv<@Ann kotlin.String>
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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 class Inv</*0*/ T> {
public constructor Inv</*0*/ T>()
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,21 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 5
* DESCRIPTION: Type annotations on upper bounds with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1, 2
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
// TESTCASE NUMBER: 1
abstract class Bar<T : @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any>
/*
* TESTCASE NUMBER: 2
* UNEXPECTED BEHAVIOUR
*/
class B<T> where @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) T : Number
@@ -0,0 +1,23 @@
package
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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 class B</*0*/ T : kotlin.Number> {
public constructor B</*0*/ T : kotlin.Number>()
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 abstract class Bar</*0*/ T : @Ann kotlin.Any> {
public constructor Bar</*0*/ T : @Ann kotlin.Any>()
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,45 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 6
* DESCRIPTION: Type annotations inside type check and cast expression with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1, 2
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
/*
* TESTCASE NUMBER: 1
* UNEXPECTED BEHAVIOUR
*/
fun case_1(a: Any) {
if (a is @Ann(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) String) return
}
/*
* TESTCASE NUMBER: 2
* UNEXPECTED BEHAVIOUR
*/
fun case_2(a: Any) {
a as @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) String // OK, no error in IDE and in the compiler
}
/*
* TESTCASE NUMBER: 3
* UNEXPECTED BEHAVIOUR
*/
fun case_3_1(a: Any) {}
fun case_3_2(a: Any) {
case_3_1(a as @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) String) // OK, no error in IDE and in the compiler
}
// TESTCASE NUMBER: 4
fun case_4(a: Any) {
val x = a as @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String // ERROR, has error in IDE and in the compiler
}
@@ -0,0 +1,15 @@
package
public fun case_1(/*0*/ a: kotlin.Any): kotlin.Unit
public fun case_2(/*0*/ a: kotlin.Any): kotlin.Unit
public fun case_3_1(/*0*/ a: kotlin.Any): kotlin.Unit
public fun case_3_2(/*0*/ a: kotlin.Any): kotlin.Unit
public fun case_4(/*0*/ a: kotlin.Any): kotlin.Unit
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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,28 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 7
* DESCRIPTION: Type annotations on a type in an anonymous object expression, with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1, 2
@Target(AnnotationTarget.TYPE)
annotation class Ann
/*
* TESTCASE NUMBER: 1
* UNEXPECTED BEHAVIOUR
*/
open class TypeToken<T>
val case_1 = object : TypeToken<@<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) String>() {}
/*
* TESTCASE NUMBER: 2
* UNEXPECTED BEHAVIOUR
*/
interface A
val case_2 = object: @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) A {}
@@ -0,0 +1,24 @@
package
public val case_1: TypeToken<@Ann kotlin.String>
public val case_2: @Ann A
public interface A {
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.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann()
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 open class TypeToken</*0*/ T> {
public constructor TypeToken</*0*/ T>()
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,20 @@
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 8
* DESCRIPTION: Type annotations on a receiver type (for an extension property only), with unresolved reference in parameters.
* ISSUES: KT-28424
*/
// TESTCASE NUMBER: 1, 2
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
// TESTCASE NUMBER: 1
val <T> @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) T.test // OK, error only in IDE but not in the compiler
get() = 10
// TESTCASE NUMBER: 2
val @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Int.test
get() = 10
@@ -0,0 +1,12 @@
package
public val </*0*/ T> @Ann T.test: kotlin.Int
public val @Ann kotlin.Int.test: kotlin.Int
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
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,21 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
/*
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 9
* DESCRIPTION: Type annotations on a setter argument type with unresolved reference in parameters.
* ISSUES: KT-28424
*/
/*
* TESTCASE NUMBER: 1
* UNEXPECTED BEHAVIOUR
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann
var <T> T.test
get() = 11
set(value: @Ann(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) Int) {}
@@ -0,0 +1,10 @@
package
public var </*0*/ T> T.test: kotlin.Int
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class Ann : kotlin.Annotation {
public constructor Ann()
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
}