FIR: Remove duplicated diagnostics on annotations on types.
This commit is contained in:
committed by
TeamCityServer
parent
edb6b337dc
commit
1835185b16
Vendored
+1
-1
@@ -5,7 +5,7 @@ interface I {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
fun too(): <!NOT_AN_ANNOTATION_CLASS, NOT_AN_ANNOTATION_CLASS!>@Annotation<!> Unit {}
|
fun too(): <!NOT_AN_ANNOTATION_CLASS!>@Annotation<!> Unit {}
|
||||||
|
|
||||||
fun foo(): <!REDUNDANT_RETURN_UNIT_TYPE!>Unit<!>
|
fun foo(): <!REDUNDANT_RETURN_UNIT_TYPE!>Unit<!>
|
||||||
{
|
{
|
||||||
|
|||||||
+6
-1
@@ -162,7 +162,12 @@ abstract class AbstractDiagnosticCollectorVisitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
|
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
|
||||||
super.visitResolvedTypeRef(resolvedTypeRef, data)
|
// Assuming no errors, the children of FirResolvedTypeRef (currently this can be FirAnnotationCalls) will also be present
|
||||||
|
// as children in delegatedTypeRef. We should make sure those elements are only visited once, otherwise diagnostics will be
|
||||||
|
// collected twice: once through resolvedTypeRef's children and another through resolvedTypeRef.delegatedTypeRef's children.
|
||||||
|
if (resolvedTypeRef.type is ConeClassErrorType) {
|
||||||
|
super.visitResolvedTypeRef(resolvedTypeRef, data)
|
||||||
|
}
|
||||||
resolvedTypeRef.delegatedTypeRef?.accept(this, data)
|
resolvedTypeRef.delegatedTypeRef?.accept(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
@Target(AnnotationTarget.TYPE)
|
@Target(AnnotationTarget.TYPE)
|
||||||
annotation class Anno(val value: String)
|
annotation class Anno(val value: String)
|
||||||
|
|
||||||
fun foo(x: String): @Anno(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>Lorem<!>, <!TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS!><!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>ipsum<!>::class<!>, <!TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS!>"dolor"<!>, <!TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS!><!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>sit<!>-<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>amet<!><!>) String { // OK
|
fun foo(x: String): @Anno(<!UNRESOLVED_REFERENCE!>Lorem<!>, <!TOO_MANY_ARGUMENTS!><!UNRESOLVED_REFERENCE!>ipsum<!>::class<!>, <!TOO_MANY_ARGUMENTS!>"dolor"<!>, <!TOO_MANY_ARGUMENTS!><!UNRESOLVED_REFERENCE!>sit<!>-<!UNRESOLVED_REFERENCE!>amet<!><!>) String { // OK
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class Foo : @Anno(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>o_O<!>) Throwable() // OK
|
abstract class Foo : @Anno(<!UNRESOLVED_REFERENCE!>o_O<!>) Throwable() // OK
|
||||||
|
|
||||||
abstract class Bar<T : @Anno(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>O_o<!>) Any> // OK
|
abstract class Bar<T : @Anno(<!UNRESOLVED_REFERENCE!>O_o<!>) Any> // OK
|
||||||
|
|||||||
@@ -6,5 +6,5 @@
|
|||||||
annotation class Ann(val s: String)
|
annotation class Ann(val s: String)
|
||||||
|
|
||||||
fun some(): Int {
|
fun some(): Int {
|
||||||
return 1 as @Ann(<!ARGUMENT_TYPE_MISMATCH, ARGUMENT_TYPE_MISMATCH!>6<!>) Int // should error but doesn't
|
return 1 as @Ann(<!ARGUMENT_TYPE_MISMATCH!>6<!>) Int // should error but doesn't
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
|
|
||||||
// ISSUE: KT-8325
|
|
||||||
|
|
||||||
fun foo() {
|
|
||||||
object : @<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>__UNRESOLVED__<!> Any() {}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
|
// !LANGUAGE: +ProperCheckAnnotationsTargetInTypeUsePositions
|
||||||
// ISSUE: KT-8325
|
// ISSUE: KT-8325
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -22,8 +22,8 @@ typealias Test15 = (@A() suspend () -> Unit)?
|
|||||||
typealias Test16 = (@A suspend () -> Unit)?
|
typealias Test16 = (@A suspend () -> Unit)?
|
||||||
typealias Test17 = @A suspend RS.() -> Unit
|
typealias Test17 = @A suspend RS.() -> Unit
|
||||||
typealias Test18 = (suspend () -> Unit)?
|
typealias Test18 = (suspend () -> Unit)?
|
||||||
typealias Test19 = (@A({ val x: <!WRONG_MODIFIER_TARGET, WRONG_MODIFIER_TARGET!>suspend<!> String? = null; "" }()) suspend () -> Unit)?
|
typealias Test19 = (@A({ val x: <!WRONG_MODIFIER_TARGET!>suspend<!> String? = null; "" }()) suspend () -> Unit)?
|
||||||
typealias Test20 = (@A("".let { val x: <!WRONG_MODIFIER_TARGET, WRONG_MODIFIER_TARGET!>suspend<!> String? = null; it }) suspend () -> Unit)?
|
typealias Test20 = (@A("".let { val x: <!WRONG_MODIFIER_TARGET!>suspend<!> String? = null; it }) suspend () -> Unit)?
|
||||||
|
|
||||||
interface Supertype1 : suspend () -> Unit {
|
interface Supertype1 : suspend () -> Unit {
|
||||||
|
|
||||||
|
|||||||
Vendored
-7
@@ -1,7 +0,0 @@
|
|||||||
// TESTCASE NUMBER: 1
|
|
||||||
@Target(AnnotationTarget.TYPE)
|
|
||||||
annotation class Ann(val x: Int)
|
|
||||||
|
|
||||||
fun case_1(x: String): @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) String {
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
/*
|
/*
|
||||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||||
*
|
*
|
||||||
|
|||||||
Vendored
+1
-1
@@ -5,4 +5,4 @@
|
|||||||
@Target(AnnotationTarget.TYPE)
|
@Target(AnnotationTarget.TYPE)
|
||||||
annotation class Ann(val x: Int)
|
annotation class Ann(val x: Int)
|
||||||
|
|
||||||
abstract class Foo : @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any()
|
abstract class Foo : @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any()
|
||||||
|
|||||||
Vendored
+2
-2
@@ -8,7 +8,7 @@ annotation class Ann(val x: Int)
|
|||||||
fun foo(i: Inv<@Ann(unresolved_reference) String>) {}
|
fun foo(i: Inv<@Ann(unresolved_reference) String>) {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 2
|
// TESTCASE NUMBER: 2
|
||||||
fun test(vararg a: @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any) {}
|
fun test(vararg a: @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any) {}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 3
|
// TESTCASE NUMBER: 3
|
||||||
class A<T>(a: @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) T)
|
class A<T>(a: @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) T)
|
||||||
|
|||||||
Vendored
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
annotation class Ann(val x: Int)
|
annotation class Ann(val x: Int)
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
// TESTCASE NUMBER: 1
|
||||||
abstract class Bar<T : @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any>
|
abstract class Bar<T : @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TESTCASE NUMBER: 2
|
* TESTCASE NUMBER: 2
|
||||||
|
|||||||
Vendored
+4
-4
@@ -10,7 +10,7 @@ annotation class Ann(val x: Int)
|
|||||||
* UNEXPECTED BEHAVIOUR
|
* UNEXPECTED BEHAVIOUR
|
||||||
*/
|
*/
|
||||||
fun case_1(a: Any) {
|
fun case_1(a: Any) {
|
||||||
if (a is @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) String) return
|
if (a is @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String) return
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -18,7 +18,7 @@ fun case_1(a: Any) {
|
|||||||
* UNEXPECTED BEHAVIOUR
|
* UNEXPECTED BEHAVIOUR
|
||||||
*/
|
*/
|
||||||
fun case_2(a: Any) {
|
fun case_2(a: Any) {
|
||||||
a as @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) String // OK, no error in IDE and in the compiler
|
a as @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String // OK, no error in IDE and in the compiler
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -28,10 +28,10 @@ fun case_2(a: Any) {
|
|||||||
fun case_3_1(a: Any) {}
|
fun case_3_1(a: Any) {}
|
||||||
|
|
||||||
fun case_3_2(a: Any) {
|
fun case_3_2(a: Any) {
|
||||||
case_3_1(a as @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) String) // OK, no error in IDE and in the compiler
|
case_3_1(a as @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String) // OK, no error in IDE and in the compiler
|
||||||
}
|
}
|
||||||
|
|
||||||
// TESTCASE NUMBER: 4
|
// TESTCASE NUMBER: 4
|
||||||
fun case_4(a: Any) {
|
fun case_4(a: Any) {
|
||||||
val x = a as @Ann(<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) String // ERROR, has error in IDE and in the compiler
|
val x = a as @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) String // ERROR, has error in IDE and in the compiler
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -18,4 +18,4 @@ val case_1 = object : TypeToken<@Ann(unresolved_reference) String>() {}
|
|||||||
*/
|
*/
|
||||||
interface A
|
interface A
|
||||||
|
|
||||||
val case_2 = object: @Ann(<!TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) A {}
|
val case_2 = object: @Ann(<!TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) A {}
|
||||||
|
|||||||
Vendored
-11
@@ -1,11 +0,0 @@
|
|||||||
// TESTCASE NUMBER: 1, 2
|
|
||||||
@Target(AnnotationTarget.TYPE)
|
|
||||||
annotation class Ann(val x: Int)
|
|
||||||
|
|
||||||
// TESTCASE NUMBER: 1
|
|
||||||
val <T> @Ann(<!UNRESOLVED_REFERENCE, 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!>unresolved_reference<!>) Int.test
|
|
||||||
get() = 10
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
/*
|
/*
|
||||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||||
*
|
*
|
||||||
|
|||||||
Vendored
-12
@@ -1,12 +0,0 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TESTCASE NUMBER: 1
|
|
||||||
* UNEXPECTED BEHAVIOUR
|
|
||||||
*/
|
|
||||||
@Target(AnnotationTarget.TYPE)
|
|
||||||
annotation class Ann
|
|
||||||
|
|
||||||
var <T> T.test
|
|
||||||
get() = 11
|
|
||||||
set(value: @Ann(<!TOO_MANY_ARGUMENTS, TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>unresolved_reference<!>) Int) {}
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user