Unused symbol: don't report for type parameter in open class #KT-23639 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
bc4d353134
commit
c49770d9a7
@@ -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) ||
|
||||
|
||||
+36
@@ -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>
|
||||
|
||||
+33
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user