diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt index 107ed26f4d4..1ec1635af1c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.resolve.typeBinding.TypeBinding import org.jetbrains.kotlin.resolve.typeBinding.createTypeBinding @@ -64,6 +65,7 @@ class VarianceCheckerCore( fun checkClassOrObject(klass: KtClassOrObject): Boolean { if (klass is KtClass) { if (!checkClassHeader(klass)) return false + if (klass.getSuperTypeList()?.anyDescendantOfType { !checkClassOrObject(it) } == true) return false } for (member in klass.declarations + klass.primaryConstructorParameters) { val descriptor = when (member) { @@ -77,6 +79,7 @@ class VarianceCheckerCore( } is KtCallableDeclaration -> { if (descriptor is CallableMemberDescriptor && !checkMember(member, descriptor)) return false + if (member.anyDescendantOfType { !checkClassOrObject(it) }) return false } } } diff --git a/idea/testData/inspections/addVarianceModifier/nestedAnonymous.kt b/idea/testData/inspections/addVarianceModifier/nestedAnonymous.kt new file mode 100644 index 00000000000..aca1f384429 --- /dev/null +++ b/idea/testData/inspections/addVarianceModifier/nestedAnonymous.kt @@ -0,0 +1,26 @@ +class C { + private val blah = object { + fun foo(): T = TODO() + } + + fun bar(x: T) {} +} + +class CC { + fun some(a: Any = object { + fun bar(): T = TODO() + }) {} + + fun baz(arg: T) {} +} + +interface G + +class CCC : G by object : G { + fun some(a: Any = object { + fun bar(): T = null!! + }) {} +} { + fun baz(arg: T) {} +} +