From e60930d5ce3ec6a4a3cdafa002a6dfb3d98163f4 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 15 Apr 2016 16:02:41 +0300 Subject: [PATCH] Add variance modifier fix corrected: primary constructor parameters are taken into account --- .../src/org/jetbrains/kotlin/resolve/VarianceChecker.kt | 8 ++++++-- idea/testData/inspections/addVarianceModifier/test.kt | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt index 341e0340734..970c7fb2256 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt @@ -71,9 +71,13 @@ class VarianceCheckerCore( if (klass is KtClass) { if (!checkClassHeader(klass)) return false } - for (member in klass.declarations) { + for (member in klass.declarations + klass.getPrimaryConstructorParameters()) { member as? KtCallableDeclaration ?: continue - val descriptor = context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, member) as? CallableMemberDescriptor ?: continue + val descriptor = when (member) { + is KtParameter -> context.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, member) + is KtCallableDeclaration -> context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, member) + else -> null + } as? CallableMemberDescriptor ?: continue if (!checkMember(member, descriptor)) return false } return true diff --git a/idea/testData/inspections/addVarianceModifier/test.kt b/idea/testData/inspections/addVarianceModifier/test.kt index 7c34367a60b..12b0cdde047 100644 --- a/idea/testData/inspections/addVarianceModifier/test.kt +++ b/idea/testData/inspections/addVarianceModifier/test.kt @@ -21,4 +21,8 @@ abstract class AbstractOut { abstract class AbstractIn(private val foo: T) { fun bar(arg: T) = foo == arg } -interface Empty \ No newline at end of file +interface Empty + +abstract class AbstractInv(var foo: T) + +class InvUser(val user: AbstractInv) \ No newline at end of file