Force resolve annotations in annotation checker

#KT-46173 Fixed
This commit is contained in:
Dmitriy Novozhilov
2021-04-19 10:55:56 +03:00
committed by TeamCityServer
parent 83bae89ed8
commit 7fb2bf00c5
39 changed files with 83 additions and 462 deletions
@@ -1,19 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann
fun foo(x: String): @Ann(unresolved_reference) String {
return x
}
fun box(): String? {
return "OK"
}
@@ -1,35 +0,0 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
fun case_1(): Any {
val x: (Int) -> @Ann(unresolved_reference) Unit = {}
return x
}
fun case_2(): Any {
val x: (@Ann(unresolved_reference) Int) -> Unit = { a: Int -> println(a) }
return x
}
fun box(): String? {
val x = case_1()
val y = case_2()
if (x == null) return null
if (y == null) return null
return "OK"
}
@@ -1,46 +0,0 @@
/*
* KOTLIN CODEGEN BOX NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 11
* DESCRIPTION: Type annotations with invalid target.
* ISSUES: KT-28449
*/
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY_GETTER)
annotation class Ann(val x: Int)
class Foo : @Ann(10) Any()
class Bar<T : @Ann(10) Any>
fun case_3(a: Any): Int? {
return if (a is @Ann(10) String) 10 else null
}
open class TypeToken<T>
val case_4 = object : TypeToken<@Ann(10) String>() {}
fun case_5(a: Any): Any {
a as @Ann(10) Int
return a
}
fun box(): String? {
val x1 = Foo()
val x2 = Bar<Int>()
val x3 = case_3(".")
val x4 = case_4
val x5 = case_5(10)
if (x1 == null) return null
if (x2 == null) return null
if (x3 == null) return null
if (x4 == null) return null
if (x5 == null) return null
return "OK"
}
@@ -1,23 +0,0 @@
/*
* KOTLIN CODEGEN BOX NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 2
* DESCRIPTION: Type annotations on supertypes with unresolved reference in parameters.
* ISSUES: KT-28424
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
abstract class Foo : @Ann(unresolved_reference) Any()
class Bar: Foo()
fun box(): String? {
val x = Bar()
if (x == null) return null
return "OK"
}
@@ -1,31 +0,0 @@
/*
* KOTLIN CODEGEN BOX NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: annotations, type-annotations
* NUMBER: 3
* DESCRIPTION: Type annotations on parameter types with unresolved reference in parameters.
* ISSUES: KT-28424
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
class Inv<T>
fun foo(i: Inv<@Ann(unresolved_reference) String>) {}
fun bar(vararg a: @Ann(unresolved_reference) Any) {}
class A<T>(a: @Ann(unresolved_reference) T)
fun box(): String? {
val x = foo(Inv<String>())
val y = bar(1, 2, 3)
val z = A<Int>(10)
if (x == null) return null
if (y == null) return null
if (z == null) return null
return "OK"
}
@@ -1,24 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
class Inv<T>
fun case_1(): Inv<@Ann(unresolved_reference) String> = TODO()
fun box(): String? {
try {
val x = case_1()
if (x == null) return null
} catch (e: NotImplementedError) {}
return "OK"
}
@@ -1,27 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
abstract class Bar<T : @Ann(unresolved_reference) Any>
class Foo<T : Any> : Bar<T>()
class B<T> where @Ann(unresolved_reference) T : Number
fun box(): String? {
val x = Foo<Int>()
val y = B<Float>()
if (x == null) return null
if (y == null) return null
return "OK"
}
@@ -1,37 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
fun case_1(a: Any): Int? {
return if (a is @Ann(unresolved_reference) String) 10 else null
}
fun case_2(a: Any): Any {
return a as @Ann(unresolved_reference) String
}
fun case_3_1(a: Any) = 10
fun case_3(a: Any): Any {
return case_3_1(a as @Ann(unresolved_reference) String)
}
fun box(): String? {
val x = case_1(".")
val y = case_2(".")
val z = case_3(".")
if (x == null) return null
if (y == null) return null
if (z == null) return null
return "OK"
}
@@ -1,29 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann
open class TypeToken<T>
val case_1 = object : TypeToken<@Ann(unresolved_reference) String>() {}
interface A
val case_2 = object: @Ann(unresolved_reference) A {}
fun box(): String? {
val x = case_1
val y = case_2
if (x == null) return null
if (y == null) return null
return "OK"
}
@@ -1,27 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann(val x: Int)
val <T> @Ann(unresolved_reference) T.test // OK, error only in IDE but not in the compiler
get() = 10
val @Ann(unresolved_reference) Int.test
get() = 10
fun box(): String? {
val x = 10.test
val y = '.'.test
if (x == null) return null
if (y == null) return null
return "OK"
}
@@ -1,26 +0,0 @@
/*
* KOTLIN CODEGEN BOX 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
*/
@Target(AnnotationTarget.TYPE)
annotation class Ann
var <T> T.test
get() = 11
set(value: @Ann(unresolved_reference) Int) {}
fun box(): String? {
val x = 10.test
10.test = 11
val y = 10.test
if (x == null) return null
if (y == null) return null
return "OK"
}
@@ -18,7 +18,7 @@ annotation class Ann(val x: Int)
* 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
val x: (Int) -> @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Unit = {} // OK, no error in IDE and in the compiler
}
/*
@@ -26,7 +26,7 @@ fun case_1() {
* 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
val x: (@Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Int) -> Unit = { a: Int -> println(a) } // OK, no error in IDE and in the compiler
}
// TESTCASE NUMBER: 3
@@ -18,4 +18,4 @@ annotation class Ann
var <T> T.test
get() = 11
set(value: @Ann(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) Int) {}
set(value: @Ann(<!TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE!>unresolved_reference<!>) Int) {}
@@ -4341,100 +4341,6 @@ public class BlackBoxCodegenTestSpecGenerated extends AbstractBlackBoxCodegenTes
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/tests-spec/testData/codegen/box/notLinked"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@TestMetadata("compiler/tests-spec/testData/codegen/box/notLinked/annotations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Annotations extends AbstractBlackBoxCodegenTestSpec {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInAnnotations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/tests-spec/testData/codegen/box/notLinked/annotations"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@TestMetadata("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Type_annotations extends AbstractBlackBoxCodegenTestSpec {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInType_annotations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@TestMetadata("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Neg extends AbstractBlackBoxCodegenTestSpec {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
@TestMetadata("1.kt")
public void test1() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/1.kt");
}
@TestMetadata("10.kt")
public void test10() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/10.kt");
}
@TestMetadata("11.kt")
public void test11() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/11.kt");
}
@TestMetadata("2.kt")
public void test2() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/2.kt");
}
@TestMetadata("3.kt")
public void test3() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/3.kt");
}
@TestMetadata("4.kt")
public void test4() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/4.kt");
}
@TestMetadata("5.kt")
public void test5() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/5.kt");
}
@TestMetadata("6.kt")
public void test6() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/6.kt");
}
@TestMetadata("7.kt")
public void test7() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/7.kt");
}
@TestMetadata("8.kt")
public void test8() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/8.kt");
}
@TestMetadata("9.kt")
public void test9() throws Exception {
runTest("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg/9.kt");
}
public void testAllFilesPresentInNeg() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/tests-spec/testData/codegen/box/notLinked/annotations/type-annotations/neg"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
}
}
}
@TestMetadata("compiler/tests-spec/testData/codegen/box/notLinked/flexibility")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)