From 17448975613f7469621978b15d352f66c5432755 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Apr 2016 13:49:00 +0300 Subject: [PATCH] Can be parameter inspection: use inside object literals is now handled as "property use" --- .../kotlin/idea/inspections/CanBeParameterInspection.kt | 5 ++--- idea/testData/inspections/canBeParameter/test.kt | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt index 06741daa233..3703a673a96 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt @@ -55,14 +55,13 @@ class CanBeParameterInspection : AbstractKotlinInspection() { do { parameterUser = PsiTreeUtil.getParentOfType(parameterUser, KtProperty::class.java, KtPropertyAccessor::class.java, KtClassInitializer::class.java, KtSecondaryConstructor::class.java, - KtFunctionLiteral::class.java) ?: return true + KtFunctionLiteral::class.java, KtObjectDeclaration::class.java) ?: return true } while (parameterUser is KtProperty && parameterUser.isLocal) return when (parameterUser) { is KtProperty -> parameterUser.containingClassOrObject !== klass - is KtPropertyAccessor -> true is KtClassInitializer -> parameterUser.containingDeclaration !== klass is KtSecondaryConstructor -> parameterUser.getContainingClassOrObject() !== klass - is KtFunctionLiteral -> true + is KtFunctionLiteral, is KtObjectDeclaration, is KtPropertyAccessor -> true else -> true } } diff --git a/idea/testData/inspections/canBeParameter/test.kt b/idea/testData/inspections/canBeParameter/test.kt index 5818c1d46bf..cfb99ab0fe3 100644 --- a/idea/testData/inspections/canBeParameter/test.kt +++ b/idea/testData/inspections/canBeParameter/test.kt @@ -120,4 +120,10 @@ class UsedInDelegate(val x: Int) { // NO class UsedInParent(val x: UsedInParent?) { val y = x?.x +} +// NO +class UsedInObjectLiteral(val x: Int) { + val y = object: Any() { + fun bar() = x + } } \ No newline at end of file