From b0269691446122e7c3059d4f02360fa24dcaef36 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 13 May 2016 14:58:06 +0300 Subject: [PATCH] Can be parameter inspection: handle usage in super call; again #KT-10819 Fixed --- .../inspections/CanBeParameterInspection.kt | 5 ++++- .../canBeParameter/inspectionData/expected.xml | 8 ++++++++ .../testData/inspections/canBeParameter/test.kt | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt index b4d8d3db5a6..3214abef63b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType class CanBeParameterInspection : AbstractKotlinInspection() { private fun PsiReference.usedAsPropertyIn(klass: KtClass): Boolean { @@ -55,13 +56,15 @@ class CanBeParameterInspection : AbstractKotlinInspection() { do { parameterUser = PsiTreeUtil.getParentOfType(parameterUser, KtProperty::class.java, KtPropertyAccessor::class.java, KtClassInitializer::class.java, KtSecondaryConstructor::class.java, - KtFunction::class.java, KtObjectDeclaration::class.java) ?: return true + KtFunction::class.java, KtObjectDeclaration::class.java, + KtSuperTypeCallEntry::class.java) ?: return true } while (parameterUser is KtProperty && parameterUser.isLocal) return when (parameterUser) { is KtProperty -> parameterUser.containingClassOrObject !== klass is KtClassInitializer -> parameterUser.containingDeclaration !== klass is KtSecondaryConstructor -> parameterUser.getContainingClassOrObject() !== klass is KtFunction, is KtObjectDeclaration, is KtPropertyAccessor -> true + is KtSuperTypeCallEntry -> parameterUser.getStrictParentOfType() !== klass else -> true } } diff --git a/idea/testData/inspections/canBeParameter/inspectionData/expected.xml b/idea/testData/inspections/canBeParameter/inspectionData/expected.xml index a05984c4175..0c87b57473c 100644 --- a/idea/testData/inspections/canBeParameter/inspectionData/expected.xml +++ b/idea/testData/inspections/canBeParameter/inspectionData/expected.xml @@ -47,4 +47,12 @@ Constructor parameter is never used as a property Constructor parameter is never used as a property + + test.kt + 141 + light_idea_test_case + + Constructor parameter is never used as a property + Constructor parameter is never used as a property + \ No newline at end of file diff --git a/idea/testData/inspections/canBeParameter/test.kt b/idea/testData/inspections/canBeParameter/test.kt index 22363531aea..593a2c86baa 100644 --- a/idea/testData/inspections/canBeParameter/test.kt +++ b/idea/testData/inspections/canBeParameter/test.kt @@ -135,4 +135,19 @@ class UsedInLocalFunction(val x: Int) { } local() } -} \ No newline at end of file +} +// YES +open class Base1(s: String) +class UsedInSuper(val bar123: String) : Base1(bar123) +// NO +class UsedInLocalSuper(val bar456: String) { + fun foo() { + class Local : Base1(bar456) + } +} +// NO +class UsedInObjectSuper(val bar456: String) { + fun foo() { + object : Base1(bar456) {} + } +}