mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] Fix false positive "Receiver parameter is never used" with reified type parameter
^KTIJ-10490 Fixed closes https://github.com/JetBrains/intellij-community/pull/2070 GitOrigin-RevId: bc7a3937ced466edeba8331e8fbb10743a68c48d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
cde816b277
commit
1bca314f04
+9
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature
|
||||
import org.jetbrains.kotlin.idea.refactoring.explicateAsTextForReceiver
|
||||
import org.jetbrains.kotlin.idea.refactoring.getThisLabelName
|
||||
import org.jetbrains.kotlin.idea.references.mainReference
|
||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.idea.util.getThisReceiverOwner
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
@@ -40,6 +41,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
|
||||
class UnusedReceiverParameterInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool {
|
||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
|
||||
@@ -183,6 +185,13 @@ fun isUsageOfDescriptor(descriptor: DeclarationDescriptor, element: KtElement, c
|
||||
}
|
||||
|
||||
if (element !is KtExpression) return false
|
||||
|
||||
if (element is KtClassLiteralExpression) {
|
||||
val typeParameter = element.receiverExpression?.mainReference?.resolve() as? KtTypeParameter
|
||||
val typeParameterDescriptor = context[BindingContext.TYPE_PARAMETER, typeParameter]
|
||||
if (descriptor.safeAs<CallableDescriptor>()?.typeParameters?.any { it == typeParameterDescriptor } == true) return true
|
||||
}
|
||||
|
||||
return when (element) {
|
||||
is KtDestructuringDeclarationEntry -> {
|
||||
listOf { context[BindingContext.COMPONENT_RESOLVED_CALL, element] }
|
||||
|
||||
+10
@@ -15954,6 +15954,16 @@ public abstract class LocalInspectionTestGenerated extends AbstractLocalInspecti
|
||||
public void testPropertyWithTypeParameterInClass2() throws Exception {
|
||||
runTest("testData/inspectionsLocal/unusedReceiverParameter/propertyWithTypeParameterInClass2.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("reified.kt")
|
||||
public void testReified() throws Exception {
|
||||
runTest("testData/inspectionsLocal/unusedReceiverParameter/reified.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("reifiedWithClassLiteral.kt")
|
||||
public void testReifiedWithClassLiteral() throws Exception {
|
||||
runTest("testData/inspectionsLocal/unusedReceiverParameter/reifiedWithClassLiteral.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
inline fun <reified T> <caret>T.testFun(t: T): String = t.toString()
|
||||
|
||||
fun main() {
|
||||
5.testFun(5)
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
inline fun <reified T> testFun(t: T): String = t.toString()
|
||||
|
||||
fun main() {
|
||||
testFun(5)
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
// PROBLEM: none
|
||||
// WITH_STDLIB
|
||||
inline fun <reified T> <caret>T.testFun(): String = (T::class.java).name
|
||||
|
||||
fun main() {
|
||||
5.testFun()
|
||||
}
|
||||
Reference in New Issue
Block a user