[FE 1.0] Force resolve annotations on type arguments
^KT-46173
This commit is contained in:
committed by
Mikhael Bogdanov
parent
e316cd04b6
commit
b1d17cfd7b
@@ -158,6 +158,15 @@ class AnnotationChecker(
|
|||||||
val shouldRunCheck = isSuperType || shouldCheckReferenceItself
|
val shouldRunCheck = isSuperType || shouldCheckReferenceItself
|
||||||
if (shouldRunCheck) {
|
if (shouldRunCheck) {
|
||||||
for (entry in reference.annotationEntries) {
|
for (entry in reference.annotationEntries) {
|
||||||
|
val descriptor = trace.get(BindingContext.ANNOTATION, entry)
|
||||||
|
if (descriptor is LazyAnnotationDescriptor) {
|
||||||
|
/*
|
||||||
|
* There are no users of type annotations until backend, so if there are errors
|
||||||
|
* in annotation call then we should force resolve of it to detect and
|
||||||
|
* report them
|
||||||
|
*/
|
||||||
|
descriptor.forceResolveAllContents()
|
||||||
|
}
|
||||||
val actualTargets = getActualTargetList(reference, null, trace.bindingContext)
|
val actualTargets = getActualTargetList(reference, null, trace.bindingContext)
|
||||||
if (entry.useSiteTarget != null && isSuperType) {
|
if (entry.useSiteTarget != null && isSuperType) {
|
||||||
val reportError = languageVersionSettings.supportsFeature(ProhibitUseSiteTargetAnnotationsOnSuperTypes)
|
val reportError = languageVersionSettings.supportsFeature(ProhibitUseSiteTargetAnnotationsOnSuperTypes)
|
||||||
|
|||||||
+1
-1
@@ -14,4 +14,4 @@
|
|||||||
@Target(AnnotationTarget.TYPE)
|
@Target(AnnotationTarget.TYPE)
|
||||||
annotation class Ann(val x: Int)
|
annotation class Ann(val x: Int)
|
||||||
|
|
||||||
abstract class Foo : @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) Any()
|
abstract class Foo : @Ann(<!UNRESOLVED_REFERENCE!>unresolved_reference<!>) Any()
|
||||||
|
|||||||
+2
-2
@@ -18,7 +18,7 @@ annotation class Ann
|
|||||||
*/
|
*/
|
||||||
open class TypeToken<T>
|
open class TypeToken<T>
|
||||||
|
|
||||||
val case_1 = object : TypeToken<@<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) String>() {}
|
val case_1 = object : TypeToken<@Ann(<!TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE!>unresolved_reference<!>) String>() {}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TESTCASE NUMBER: 2
|
* TESTCASE NUMBER: 2
|
||||||
@@ -26,4 +26,4 @@ val case_1 = object : TypeToken<@<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG
|
|||||||
*/
|
*/
|
||||||
interface A
|
interface A
|
||||||
|
|
||||||
val case_2 = object: @<!DEBUG_INFO_MISSING_UNRESOLVED!>Ann<!>(<!DEBUG_INFO_MISSING_UNRESOLVED!>unresolved_reference<!>) A {}
|
val case_2 = object: @Ann(<!TOO_MANY_ARGUMENTS, UNRESOLVED_REFERENCE!>unresolved_reference<!>) A {}
|
||||||
|
|||||||
Reference in New Issue
Block a user