From 6ba0a182bb8b87d7826f2a7b73d983609f388e57 Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Wed, 6 Mar 2019 19:54:21 +0300 Subject: [PATCH] Fix false positive "Insert explicit type arguments" intention #KT-16139 Fixed --- .../intentions/InsertExplicitTypeArgumentsIntention.kt | 3 ++- .../notApplicableGenericType.kt | 8 ++++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/insertExplicitTypeArguments/notApplicableGenericType.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/InsertExplicitTypeArgumentsIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/InsertExplicitTypeArgumentsIntention.kt index a22b886f812..541554f9e07 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/InsertExplicitTypeArgumentsIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/InsertExplicitTypeArgumentsIntention.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.KtTypeArgumentList import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.calls.inference.CapturedType import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.ErrorUtils @@ -46,7 +47,7 @@ class InsertExplicitTypeArgumentsIntention : val resolvedCall = element.getResolvedCall(bindingContext) ?: return false val typeArgs = resolvedCall.typeArguments - return typeArgs.isNotEmpty() && typeArgs.values.none { ErrorUtils.containsErrorType(it) } + return typeArgs.isNotEmpty() && typeArgs.values.none { ErrorUtils.containsErrorType(it) || it is CapturedType } } fun applyTo(element: KtCallElement, shortenReferences: Boolean = true) { diff --git a/idea/testData/intentions/insertExplicitTypeArguments/notApplicableGenericType.kt b/idea/testData/intentions/insertExplicitTypeArguments/notApplicableGenericType.kt new file mode 100644 index 00000000000..29b69dcffa3 --- /dev/null +++ b/idea/testData/intentions/insertExplicitTypeArguments/notApplicableGenericType.kt @@ -0,0 +1,8 @@ +// IS_APPLICABLE: false +class X(val t: T) + +fun X.getT(): T = t + +fun useX(x: X) { + x.getT() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 43d4bd38592..060a7c3a689 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -9879,6 +9879,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/insertExplicitTypeArguments/insertTypeWithVarargs.kt"); } + @TestMetadata("notApplicableGenericType.kt") + public void testNotApplicableGenericType() throws Exception { + runTest("idea/testData/intentions/insertExplicitTypeArguments/notApplicableGenericType.kt"); + } + @TestMetadata("simpleInsertTypeClass.kt") public void testSimpleInsertTypeClass() throws Exception { runTest("idea/testData/intentions/insertExplicitTypeArguments/simpleInsertTypeClass.kt");