From 709573db69e784568f3a5087559be4dca017c91a Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 6 May 2015 13:34:56 +0300 Subject: [PATCH] Fix in SpecifyTypeExplicitlyIntention --- .../intentions/SpecifyTypeExplicitlyIntention.kt | 3 +++ .../intentions/specifyTypeExplicitly/constructor.kt | 5 +++++ .../intentions/specifyTypeExplicitly/lambdaParam.kt | 4 ++++ .../idea/intentions/IntentionTestGenerated.java | 12 ++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 idea/testData/intentions/specifyTypeExplicitly/constructor.kt create mode 100644 idea/testData/intentions/specifyTypeExplicitly/lambdaParam.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt index 28527cc55c6..0a3b51008d9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.ShortenReferences +import org.jetbrains.kotlin.j2k.isConstructor import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.resolve.BindingContext @@ -45,6 +46,8 @@ import java.util.ArrayList public class SpecifyTypeExplicitlyIntention : JetSelfTargetingIntention(javaClass(), "Specify type explicitly") { override fun isApplicableTo(element: JetCallableDeclaration, caretOffset: Int): Boolean { if (element.getContainingFile() is JetCodeFragment) return false + if (element is JetFunctionLiteral) return false // TODO: should JetFunctionLiteral be JetCallableDeclaration at all? + if (element is JetPrimaryConstructor || element is JetSecondaryConstructor) return false // TODO: base class? if (element.getTypeReference() != null) return false if (getTypeForDeclaration(element).isError() || hasPublicMemberDiagnostic(element)) return false diff --git a/idea/testData/intentions/specifyTypeExplicitly/constructor.kt b/idea/testData/intentions/specifyTypeExplicitly/constructor.kt new file mode 100644 index 00000000000..643f01a8690 --- /dev/null +++ b/idea/testData/intentions/specifyTypeExplicitly/constructor.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +// ERROR: Primary constructor call expected +class A(val x: Int) { + constructor(x: String) +} diff --git a/idea/testData/intentions/specifyTypeExplicitly/lambdaParam.kt b/idea/testData/intentions/specifyTypeExplicitly/lambdaParam.kt new file mode 100644 index 00000000000..54015f0a1fd --- /dev/null +++ b/idea/testData/intentions/specifyTypeExplicitly/lambdaParam.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun foo(): Any { + return { (x: String) -> 42 } +} \ 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 6f98237cdd0..f2d6bf4cb85 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -5820,6 +5820,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("constructor.kt") + public void testConstructor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/specifyTypeExplicitly/constructor.kt"); + doTest(fileName); + } + @TestMetadata("enumType.kt") public void testEnumType() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/specifyTypeExplicitly/enumType.kt"); @@ -5832,6 +5838,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("lambdaParam.kt") + public void testLambdaParam() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/specifyTypeExplicitly/lambdaParam.kt"); + doTest(fileName); + } + @TestMetadata("loopParameter.kt") public void testLoopParameter() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/specifyTypeExplicitly/loopParameter.kt");