From 892c8436f3b0fdf80a875124264777eb22ea6f9f Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 21 Jul 2016 20:25:51 +0300 Subject: [PATCH] Introduce Variable: Do not suggest expressions without type #KT-12922 Fixed --- ChangeLog.md | 1 + .../kotlin/idea/refactoring/KotlinRefactoringUtil.java | 2 +- .../refactoring/introduceVariable/skipClassReference.kt | 6 ++++++ .../introduceVariable/skipClassReference.kt.after | 6 ++++++ idea/testData/smartSelection/simple.kt | 1 - .../idea/refactoring/introduce/ExtractionTestGenerated.java | 6 ++++++ 6 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 idea/testData/refactoring/introduceVariable/skipClassReference.kt create mode 100644 idea/testData/refactoring/introduceVariable/skipClassReference.kt.after diff --git a/ChangeLog.md b/ChangeLog.md index ff682acc13e..54315e91c0d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -241,6 +241,7 @@ Using 'this' as function argument in constructor of non-final class - [`KT-13082`](https://youtrack.jetbrains.com/issue/KT-13082) Rename: Fix exception on property rename preview - [`KT-13207`](https://youtrack.jetbrains.com/issue/KT-13207) Safe delete: Fix exception when removing any function in 2016.2 - [`KT-12945`](https://youtrack.jetbrains.com/issue/KT-12945) Rename: Fix function description in super method warning dialog +- [`KT-12922`](https://youtrack.jetbrains.com/issue/KT-12922) Introduce Variable: Do not suggest expressions without type ##### New features diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/KotlinRefactoringUtil.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/KotlinRefactoringUtil.java index ce9f6bd9108..16012bfd69d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/KotlinRefactoringUtil.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/KotlinRefactoringUtil.java @@ -431,7 +431,7 @@ public class KotlinRefactoringUtil { KtExpression expression = (KtExpression)element; BindingContext bindingContext = ResolutionUtils.analyze(expression, BodyResolveMode.FULL); KotlinType expressionType = bindingContext.getType(expression); - if (expressionType != null && KotlinBuiltIns.isUnit(expressionType)) { + if (expressionType == null || KotlinBuiltIns.isUnit(expressionType)) { addElement = false; } } diff --git a/idea/testData/refactoring/introduceVariable/skipClassReference.kt b/idea/testData/refactoring/introduceVariable/skipClassReference.kt new file mode 100644 index 00000000000..2ad782dacfe --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/skipClassReference.kt @@ -0,0 +1,6 @@ +// WITH_RUNTIME +import java.util.* + +fun foo() { + Arrays.asList(1, 2, 3) +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceVariable/skipClassReference.kt.after b/idea/testData/refactoring/introduceVariable/skipClassReference.kt.after new file mode 100644 index 00000000000..18588f7b9c7 --- /dev/null +++ b/idea/testData/refactoring/introduceVariable/skipClassReference.kt.after @@ -0,0 +1,6 @@ +// WITH_RUNTIME +import java.util.* + +fun foo() { + val asList = Arrays.asList(1, 2, 3) +} \ No newline at end of file diff --git a/idea/testData/smartSelection/simple.kt b/idea/testData/smartSelection/simple.kt index c1942c64cc5..e70d5d0c0d1 100644 --- a/idea/testData/smartSelection/simple.kt +++ b/idea/testData/smartSelection/simple.kt @@ -5,5 +5,4 @@ fun main(args: Array) { 1.0 1.0 + 1 Math.pow(...) -print(...) */ diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index 1bb94bf9265..1b28cc61e9c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -373,6 +373,12 @@ public class ExtractionTestGenerated extends AbstractExtractionTest { doIntroduceVariableTest(fileName); } + @TestMetadata("skipClassReference.kt") + public void testSkipClassReference() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/skipClassReference.kt"); + doIntroduceVariableTest(fileName); + } + @TestMetadata("StringInjection.kt") public void testStringInjection() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/StringInjection.kt");