Unused symbol: don't report for type parameter in open class #KT-23639 Fixed

This commit is contained in:
Toshiaki Kameyama
2018-11-19 16:39:39 +09:00
committed by Mikhail Glukhikh
parent bc4d353134
commit c49770d9a7
3 changed files with 80 additions and 0 deletions
@@ -251,6 +251,17 @@ class UnusedSymbolInspection : AbstractKotlinInspection() {
}
} else useScope
if (declaration is KtTypeParameter) {
val containingClass = declaration.containingClass()
if (containingClass != null) {
val isOpenClass = containingClass.isInterface()
|| containingClass.hasModifier(KtTokens.ABSTRACT_KEYWORD)
|| containingClass.hasModifier(KtTokens.SEALED_KEYWORD)
|| containingClass.hasModifier(KtTokens.OPEN_KEYWORD)
if (isOpenClass && hasOverrides(containingClass, restrictedScope)) return true
}
}
return (declaration is KtObjectDeclaration && declaration.isCompanion() &&
declaration.getBody()?.declarations?.isNotEmpty() == true) ||
hasReferences(declaration, descriptor, restrictedScope) ||
@@ -16,4 +16,40 @@
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
<description>Type parameter 'T' is never used</description>
</problem>
<problem>
<file>openClassTypeParameter.kt</file>
<line>1</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/openClassTypeParameter.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
<description>Type parameter 'T' is never used</description>
</problem>
<problem>
<file>openClassTypeParameter.kt</file>
<line>5</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/openClassTypeParameter.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
<description>Type parameter 'T' is never used</description>
</problem>
<problem>
<file>openClassTypeParameter.kt</file>
<line>9</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/openClassTypeParameter.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
<description>Type parameter 'T' is never used</description>
</problem>
<problem>
<file>openClassTypeParameter.kt</file>
<line>13</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/openClassTypeParameter.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
<description>Type parameter 'T' is never used</description>
</problem>
</problems>
@@ -0,0 +1,33 @@
interface Interface<T>
interface Interface2<T>
class A<T> : Interface2<T>
abstract class Abstract<T>
abstract class Abstract2<T>
class B<T> : Abstract2<T>()
sealed class Sealed<T>
sealed class Sealed2<T>
class C<T> : Sealed2<T>()
open class Open<T>
open class Open2<T>
class D<T> : Open2<T>()
fun main(args: Array<String>) {
Interface::class
Interface2::class
A::class
Abstract::class
Abstract2::class
B::class
Sealed::class
Sealed2::class
C::class
Open::class
Open2::class
D::class
}