Use of List's instead of Array's

This commit is contained in:
Valentin Kipyatkov
2015-06-26 19:19:42 +03:00
parent 343604bce0
commit bce79906ef
11 changed files with 23 additions and 25 deletions
@@ -102,7 +102,7 @@ private fun buildTemplate(lambdaType: JetType, explicitParameterTypes: Boolean,
template.addTextSegment(", ") template.addTextSegment(", ")
} }
//TODO: check for names in scope //TODO: check for names in scope
template.addVariable(ParameterNameExpression(KotlinNameSuggester.suggestNamesByType(parameterType, { true }, "p")), true) template.addVariable(ParameterNameExpression(KotlinNameSuggester.suggestNamesByType(parameterType, { true }, "p").toTypedArray()), true)
if (explicitParameterTypes) { if (explicitParameterTypes) {
template.addTextSegment(": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(parameterType)) template.addTextSegment(": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(parameterType))
} }
@@ -50,7 +50,7 @@ public object KotlinNameSuggester {
* * * *
* @return possible names * @return possible names
*/ */
public fun suggestNamesByExpressionAndType(expression: JetExpression, validator: (String) -> Boolean, defaultName: String?): Array<String> { public fun suggestNamesByExpressionAndType(expression: JetExpression, validator: (String) -> Boolean, defaultName: String?): List<String> {
val result = ArrayList<String>() val result = ArrayList<String>()
val bindingContext = expression.analyze(BodyResolveMode.FULL) val bindingContext = expression.analyze(BodyResolveMode.FULL)
@@ -64,10 +64,10 @@ public object KotlinNameSuggester {
result.addName(defaultName, validator) result.addName(defaultName, validator)
} }
return ArrayUtil.toStringArray(result) return result
} }
public fun suggestNamesByType(type: JetType, validator: (String) -> Boolean, defaultName: String? = null): Array<String> { public fun suggestNamesByType(type: JetType, validator: (String) -> Boolean, defaultName: String? = null): List<String> {
val result = ArrayList<String>() val result = ArrayList<String>()
result.addNamesByType(type, validator) result.addNamesByType(type, validator)
@@ -76,10 +76,10 @@ public object KotlinNameSuggester {
result.addName(defaultName, validator) result.addName(defaultName, validator)
} }
return ArrayUtil.toStringArray(result) return result
} }
public fun suggestNamesByExpressionOnly(expression: JetExpression, validator: (String) -> Boolean, defaultName: String? = null): Array<String> { public fun suggestNamesByExpressionOnly(expression: JetExpression, validator: (String) -> Boolean, defaultName: String? = null): List<String> {
val result = ArrayList<String>() val result = ArrayList<String>()
result.addNamesByExpression(expression, validator) result.addNamesByExpression(expression, validator)
@@ -88,17 +88,17 @@ public object KotlinNameSuggester {
result.addName(defaultName, validator) result.addName(defaultName, validator)
} }
return ArrayUtil.toStringArray(result) return result
} }
private val COMMON_TYPE_PARAMETER_NAMES = listOf("T", "U", "V", "W", "X", "Y", "Z") private val COMMON_TYPE_PARAMETER_NAMES = listOf("T", "U", "V", "W", "X", "Y", "Z")
public fun suggestNamesForTypeParameters(count: Int, validator: (String) -> Boolean): Array<String> { public fun suggestNamesForTypeParameters(count: Int, validator: (String) -> Boolean): List<String> {
val result = ArrayList<String>() val result = ArrayList<String>()
for (i in 0..count - 1) { for (i in 0..count - 1) {
result.add(suggestNameByMultipleNames(COMMON_TYPE_PARAMETER_NAMES, validator)) result.add(suggestNameByMultipleNames(COMMON_TYPE_PARAMETER_NAMES, validator))
} }
return ArrayUtil.toStringArray(result) return result
} }
/** /**
@@ -69,7 +69,7 @@ public class IterateExpressionIntention : JetSelfTargetingIntention<JetExpressio
val bodyPlaceholder = (forExpression.getBody() as JetBlockExpression).getStatements().single() val bodyPlaceholder = (forExpression.getBody() as JetBlockExpression).getStatements().single()
val templateBuilder = TemplateBuilderImpl(forExpression) val templateBuilder = TemplateBuilderImpl(forExpression)
templateBuilder.replaceElement(forExpression.getLoopParameter()!!, ChooseStringExpression(names.asList())) templateBuilder.replaceElement(forExpression.getLoopParameter()!!, ChooseStringExpression(names))
templateBuilder.replaceElement(bodyPlaceholder, ConstantNode(""), false) templateBuilder.replaceElement(bodyPlaceholder, ConstantNode(""), false)
templateBuilder.setEndVariableAfter(bodyPlaceholder) templateBuilder.setEndVariableAfter(bodyPlaceholder)
@@ -70,7 +70,7 @@ public class ChangeFunctionLiteralSignatureFix extends ChangeFunctionSignatureFi
CollectingNameValidator validator = new CollectingNameValidator(); CollectingNameValidator validator = new CollectingNameValidator();
descriptor.clearNonReceiverParameters(); descriptor.clearNonReceiverParameters();
for (JetType type : parameterTypes) { for (JetType type : parameterTypes) {
String name = KotlinNameSuggester.INSTANCE$.suggestNamesByType(type, validator, "param")[0]; String name = KotlinNameSuggester.INSTANCE$.suggestNamesByType(type, validator, "param").get(0);
descriptor.addParameter( descriptor.addParameter(
new JetParameterInfo(functionDescriptor, -1, name, type, null, null, JetValVar.None, null) new JetParameterInfo(functionDescriptor, -1, name, type, null, null, JetValVar.None, null)
); );
@@ -105,7 +105,7 @@ public abstract class ChangeFunctionSignatureFix extends JetIntentionAction<PsiE
return KotlinNameSuggester.INSTANCE$.suggestNameByName(argumentName.getAsName().asString(), validator); return KotlinNameSuggester.INSTANCE$.suggestNameByName(argumentName.getAsName().asString(), validator);
} }
else if (expression != null) { else if (expression != null) {
return KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType(expression, validator, "param")[0]; return KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType(expression, validator, "param").get(0);
} }
return KotlinNameSuggester.INSTANCE$.suggestNameByName("param", validator); return KotlinNameSuggester.INSTANCE$.suggestNameByName("param", validator);
@@ -821,7 +821,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
val parameterTypeToNamesMap = HashMap<String, Array<String>>() val parameterTypeToNamesMap = HashMap<String, Array<String>>()
typeCandidates[parameter.typeInfo]!!.forEach { typeCandidate -> typeCandidates[parameter.typeInfo]!!.forEach { typeCandidate ->
val suggestedNames = KotlinNameSuggester.suggestNamesByType(typeCandidate.theType, { true }) val suggestedNames = KotlinNameSuggester.suggestNamesByType(typeCandidate.theType, { true })
parameterTypeToNamesMap[typeCandidate.renderedType!!] = suggestedNames parameterTypeToNamesMap[typeCandidate.renderedType!!] = suggestedNames.toTypedArray()
} }
// add expression to builder // add expression to builder
@@ -43,7 +43,7 @@ abstract class TypeInfo(val variance: Variance) {
class ByExpression(val expression: JetExpression, variance: Variance): TypeInfo(variance) { class ByExpression(val expression: JetExpression, variance: Variance): TypeInfo(variance) {
override val possibleNamesFromExpression: Array<String> by Delegates.lazy { override val possibleNamesFromExpression: Array<String> by Delegates.lazy {
KotlinNameSuggester.suggestNamesByExpressionOnly(expression, { true }) KotlinNameSuggester.suggestNamesByExpressionOnly(expression, { true }).toTypedArray()
} }
override fun getPossibleTypes(builder: CallableBuilder): List<JetType> = override fun getPossibleTypes(builder: CallableBuilder): List<JetType> =
@@ -235,7 +235,7 @@ public open class KotlinIntroduceParameterHandler(
else -> null else -> null
} ?: throw AssertionError("Body element is not found: ${targetParent.getElementTextWithContext()}") } ?: throw AssertionError("Body element is not found: ${targetParent.getElementTextWithContext()}")
val nameValidator = NameValidatorImpl(body, null, NameValidatorImpl.Target.PROPERTIES) val nameValidator = NameValidatorImpl(body, null, NameValidatorImpl.Target.PROPERTIES)
val suggestedNames = linkedSetOf(*KotlinNameSuggester.suggestNamesByType(replacementType, nameValidator, "p")) val suggestedNames = KotlinNameSuggester.suggestNamesByType(replacementType, nameValidator, "p")
val parametersUsages = findInternalUsagesOfParametersAndReceiver(targetParent, functionDescriptor) val parametersUsages = findInternalUsagesOfParametersAndReceiver(targetParent, functionDescriptor)
@@ -197,12 +197,12 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
calculateAnchor(commonParent, commonContainer, allReplaces), calculateAnchor(commonParent, commonContainer, allReplaces),
NameValidatorImpl.Target.PROPERTIES NameValidatorImpl.Target.PROPERTIES
); );
final String[] suggestedNames = KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType(expression, validator, "value"); final List<String> suggestedNames = KotlinNameSuggester.INSTANCE$.suggestNamesByExpressionAndType(expression, validator, "value");
final Ref<JetProperty> propertyRef = new Ref<JetProperty>(); final Ref<JetProperty> propertyRef = new Ref<JetProperty>();
final ArrayList<JetExpression> references = new ArrayList<JetExpression>(); final ArrayList<JetExpression> references = new ArrayList<JetExpression>();
final Ref<JetExpression> reference = new Ref<JetExpression>(); final Ref<JetExpression> reference = new Ref<JetExpression>();
final Runnable introduceRunnable = introduceVariable( final Runnable introduceRunnable = introduceVariable(
expression, suggestedNames, allReplaces, commonContainer, expression, suggestedNames.get(0), allReplaces, commonContainer,
commonParent, replaceOccurrence, propertyRef, references, commonParent, replaceOccurrence, propertyRef, references,
reference, finalNoTypeInference, expressionType, bindingContext); reference, finalNoTypeInference, expressionType, bindingContext);
CommandProcessor.getInstance().executeCommand(project, new Runnable() { CommandProcessor.getInstance().executeCommand(project, new Runnable() {
@@ -251,7 +251,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
private static Runnable introduceVariable( private static Runnable introduceVariable(
final JetExpression expression, final JetExpression expression,
final String[] suggestedNames, final String nameSuggestion,
final List<JetExpression> allReplaces, final List<JetExpression> allReplaces,
final PsiElement commonContainer, final PsiElement commonContainer,
final PsiElement commonParent, final PsiElement commonParent,
@@ -303,7 +303,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
PsiElement commonParent, PsiElement commonParent,
List<JetExpression> allReplaces List<JetExpression> allReplaces
) { ) {
String variableText = "val " + suggestedNames[0]; String variableText = "val " + nameSuggestion;
if (noTypeInference) { if (noTypeInference) {
variableText += ": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(expressionType); variableText += ": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(expressionType);
} }
@@ -449,7 +449,7 @@ public class KotlinIntroduceVariableHandler extends KotlinIntroduceHandlerBase {
private JetExpression replaceExpression(JetExpression replace) { private JetExpression replaceExpression(JetExpression replace) {
boolean isActualExpression = expression == replace; boolean isActualExpression = expression == replace;
JetExpression replacement = psiFactory.createExpression(suggestedNames[0]); JetExpression replacement = psiFactory.createExpression(nameSuggestion);
JetExpression result; JetExpression result;
if (PsiUtilPackage.isFunctionLiteralOutsideParentheses(replace)) { if (PsiUtilPackage.isFunctionLiteralOutsideParentheses(replace)) {
JetFunctionLiteralArgument functionLiteralArgument = JetFunctionLiteralArgument functionLiteralArgument =
@@ -44,7 +44,7 @@ public class KotlinVariableInplaceIntroducer(
val addedVariable: JetProperty, val addedVariable: JetProperty,
val originalExpression: JetExpression?, val originalExpression: JetExpression?,
val occurrencesToReplace: Array<JetExpression>, val occurrencesToReplace: Array<JetExpression>,
val suggestedNames: Array<out String>, suggestedNames: List<String>,
val isVar: Boolean, val isVar: Boolean,
val doNotChangeVar: Boolean, val doNotChangeVar: Boolean,
val expressionType: JetType?, val expressionType: JetType?,
@@ -59,8 +59,7 @@ public class KotlinVariableInplaceIntroducer(
project, project,
editor editor
) { ) {
companion object { private val suggestedNames = suggestedNames.toTypedArray()
}
init { init {
initFormComponents { initFormComponents {
@@ -69,8 +69,7 @@ public class JetNameSuggesterTest : LightCodeInsightFixtureTestCase() {
try { try {
JetRefactoringUtil.selectExpression(myFixture.getEditor(), file, object : JetRefactoringUtil.SelectExpressionCallback { JetRefactoringUtil.selectExpression(myFixture.getEditor(), file, object : JetRefactoringUtil.SelectExpressionCallback {
override fun run(expression: JetExpression) { override fun run(expression: JetExpression) {
val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, { true }, "value") val names = KotlinNameSuggester.suggestNamesByExpressionAndType(expression, { true }, "value").sort()
Arrays.sort(names)
val result = StringUtil.join(names, "\n").trim() val result = StringUtil.join(names, "\n").trim()
assertEquals(expectedResultText, result) assertEquals(expectedResultText, result)
} }