diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBePrimaryConstructorPropertyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBePrimaryConstructorPropertyInspection.kt index 87128b2feb2..aa57a72de59 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBePrimaryConstructorPropertyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBePrimaryConstructorPropertyInspection.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils @@ -56,6 +57,8 @@ class CanBePrimaryConstructorPropertyInspection : AbstractKotlinInspection() { if (nameIdentifier.text != assignedDescriptor.name.asString()) return val assignedParameter = DescriptorToSourceUtils.descriptorToDeclaration(assignedDescriptor) as? KtParameter ?: return + if (property.containingClassOrObject !== assignedParameter.containingClassOrObject) return + holder.registerProblem(holder.manager.createProblemDescriptor( nameIdentifier, nameIdentifier, diff --git a/idea/testData/inspections/canBePrimaryConstructorProperty/properties.kt b/idea/testData/inspections/canBePrimaryConstructorProperty/properties.kt index 4f91ce95c76..139b0782f61 100644 --- a/idea/testData/inspections/canBePrimaryConstructorProperty/properties.kt +++ b/idea/testData/inspections/canBePrimaryConstructorProperty/properties.kt @@ -31,4 +31,17 @@ class Incorrect(val property: String, withGetter: Double, withSetter: Int, diffe // For data class inspection also should not work data class Data(name: String) { val name = name +} + +// Case from KT-12876: also should not work, property lives in different class here +interface Foo { + val x : String +} + +class Bar(x : String) { + init { + object : Foo { + override val x = x // Property is assigned to parameter, can be declared in ctor + } + } } \ No newline at end of file