[FE] Don't report cycle on annotation parameters if argument is vararg or array
^KT-52742 Fixed ^KT-47932
This commit is contained in:
committed by
teamcity
parent
4775855fd7
commit
12ce433bc2
+3
-1
@@ -13,7 +13,9 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.diagnostics.Errors.CYCLE_IN_ANNOTATION_PARAMETER
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.calls.components.isVararg
|
||||
import org.jetbrains.kotlin.types.UnwrappedType
|
||||
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.isArrayOrNullableArray
|
||||
|
||||
object CyclicAnnotationsChecker : DeclarationChecker {
|
||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||
@@ -52,6 +54,7 @@ object CyclicAnnotationsChecker : DeclarationChecker {
|
||||
fun parameterHasCycle(ownedAnnotation: ClassDescriptor, parameterDescriptor: ValueParameterDescriptor): Boolean {
|
||||
val returnType = parameterDescriptor.returnType?.unwrap() ?: return false
|
||||
return when {
|
||||
parameterDescriptor.isVararg || returnType.isArrayOrNullableArray() -> false
|
||||
returnType.arguments.isNotEmpty() && !ReflectionTypes.isKClassType(returnType) -> {
|
||||
for (argument in returnType.arguments) {
|
||||
if (!argument.isStarProjection) {
|
||||
@@ -83,4 +86,3 @@ object CyclicAnnotationsChecker : DeclarationChecker {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user