diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt index a926484edf7..ba47a9d29f3 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggester.kt @@ -72,6 +72,23 @@ public object KotlinNameSuggester { return result } + public fun suggestIterationVariableNames(collection: JetExpression, elementType: JetType, validator: (String) -> Boolean, defaultName: String?): Collection { + val result = LinkedHashSet() + + suggestNamesByExpressionOnly(collection, { true }) + .map { StringUtil.unpluralize(it) } + .filterNotNull() + .mapTo(result) { suggestNameByName(it, validator) } + + result.addNamesByType(elementType, validator) + + if (result.isEmpty()) { + result.addName(defaultName, validator) + } + + return result + } + private val COMMON_TYPE_PARAMETER_NAMES = listOf("T", "U", "V", "W", "X", "Y", "Z") public fun suggestNamesForTypeParameters(count: Int, validator: (String) -> Boolean): List { diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ChooseValueExpression.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ChooseValueExpression.kt index 8f0720daadc..578f438b6bd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ChooseValueExpression.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ChooseValueExpression.kt @@ -32,7 +32,7 @@ import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil //TODO: move it somewhere else and reuse public abstract class ChooseValueExpression( - lookupItems: List, + lookupItems: Collection, protected val defaultItem: T, private val advertisementText: String? = null ) : Expression() { @@ -65,8 +65,8 @@ public abstract class ChooseValueExpression( } public class ChooseStringExpression( - suggestions: List, - default: String = suggestions[0], + suggestions: Collection, + default: String = suggestions.first(), advertisementText: String? = null ) : ChooseValueExpression(suggestions, default, advertisementText) { override fun getLookupString(element: String) = element diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt index 967a540b1d8..8a61c312f2c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt @@ -57,11 +57,10 @@ public class IterateExpressionIntention : JetSelfTargetingIntention) { + names +} \ No newline at end of file diff --git a/idea/testData/intentions/iterateExpression/nameSuggestion.kt.after b/idea/testData/intentions/iterateExpression/nameSuggestion.kt.after new file mode 100644 index 00000000000..e3191f8dbab --- /dev/null +++ b/idea/testData/intentions/iterateExpression/nameSuggestion.kt.after @@ -0,0 +1,5 @@ +fun foo(names: List) { + for (name in names) { + + } +} \ 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 5fcb286fa39..659a3d07d67 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -5235,6 +5235,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("nameSuggestion.kt") + public void testNameSuggestion() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/iterateExpression/nameSuggestion.kt"); + doTest(fileName); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/iterateExpression/simple.kt");