Can be parameter inspection: handle usage in super call; again #KT-10819 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-05-13 14:58:06 +03:00
parent 7b1afd4e6a
commit b026969144
3 changed files with 28 additions and 2 deletions

View File

@@ -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
}
}

View File

@@ -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>

View File

@@ -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) {}
}
}