Introduce Type Alias: Suggest initial name based on extracted type

This commit is contained in:
Alexey Sedunov
2016-07-19 18:08:29 +03:00
parent 0769d47f4b
commit 0a8490a068
7 changed files with 47 additions and 5 deletions
@@ -114,6 +114,27 @@ object KotlinNameSuggester {
return result
}
fun suggestTypeAliasNameByPsi(typeElement: KtTypeElement, validator: (String) -> Boolean): String {
fun KtTypeElement.render(): String {
return when (this) {
is KtNullableType -> "Nullable${innerType?.render() ?: ""}"
is KtFunctionType -> {
val arguments = listOf(receiverTypeReference).filterNotNull() + parameters.mapNotNull { it.typeReference }
val argText = arguments.joinToString(separator = "") { it.typeElement?.render() ?: "" }
val returnText = returnTypeReference?.typeElement?.render() ?: "Unit"
"${argText}To$returnText"
}
is KtUserType -> {
val argText = typeArguments.joinToString(separator = "") { it.typeReference?.typeElement?.render() ?: "" }
"$argText${referenceExpression?.text ?: ""}"
}
else -> text.capitalize()
}
}
return suggestNameByName(typeElement.render(), validator)
}
/**
* Validates name, and slightly improves it by adding number to name in case of conflicts
* @param name to check it in scope