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
|
} 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() &&
|
return (declaration is KtObjectDeclaration && declaration.isCompanion() &&
|
||||||
declaration.getBody()?.declarations?.isNotEmpty() == true) ||
|
declaration.getBody()?.declarations?.isNotEmpty() == true) ||
|
||||||
hasReferences(declaration, descriptor, restrictedScope) ||
|
hasReferences(declaration, descriptor, restrictedScope) ||
|
||||||
|
|||||||
+36
@@ -16,4 +16,40 @@
|
|||||||
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
|
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused Symbol</problem_class>
|
||||||
<description>Type parameter 'T' is never used</description>
|
<description>Type parameter 'T' is never used</description>
|
||||||
</problem>
|
</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>
|
</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