mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-18 08:31:28 +00:00
Can be parameter inspection: handle usage in super call; again #KT-10819 Fixed
This commit is contained in:
@@ -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<KtClassOrObject>() !== klass
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,4 +47,12 @@
|
||||
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Constructor parameter is never used as a property</problem_class>
|
||||
<description>Constructor parameter is never used as a property</description>
|
||||
</problem>
|
||||
<problem>
|
||||
<file>test.kt</file>
|
||||
<line>141</line>
|
||||
<module>light_idea_test_case</module>
|
||||
<entry_point TYPE="file" FQNAME="temp:///src/test.kt" />
|
||||
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Constructor parameter is never used as a property</problem_class>
|
||||
<description>Constructor parameter is never used as a property</description>
|
||||
</problem>
|
||||
</problems>
|
||||
17
idea/testData/inspections/canBeParameter/test.kt
vendored
17
idea/testData/inspections/canBeParameter/test.kt
vendored
@@ -135,4 +135,19 @@ class UsedInLocalFunction(val x: Int) {
|
||||
}
|
||||
local()
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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) {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user