KT-9839: intention introduced: convert primary constructor to secondary one

(cherry picked from commit 93aaa48)
This commit is contained in:
Mikhail Glukhikh
2016-09-26 15:18:01 +03:00
committed by Mikhail Glukhikh
parent d4418d5686
commit 7f50e6e70e
39 changed files with 492 additions and 10 deletions
@@ -28,6 +28,7 @@ import com.intellij.util.LocalTimeCounter
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.ImportPath
@@ -211,11 +212,17 @@ class KtPsiFactory(private val project: Project) {
return PsiFileFactory.getInstance(project).createFileFromText(fileName, KotlinFileType.INSTANCE, text, LocalTimeCounter.currentTime(), true) as KtFile
}
fun createProperty(name: String, type: String?, isVar: Boolean, initializer: String?): KtProperty {
val text = (if (isVar) "var " else "val ") + name + (if (type != null) ":" + type else "") + (if (initializer == null) "" else " = " + initializer)
fun createProperty(modifiers: String?, name: String, type: String?, isVar: Boolean, initializer: String?): KtProperty {
val text = (modifiers.let { "$it "} ?: "") +
(if (isVar) " var " else " val ") + name +
(if (type != null) ":" + type else "") + (if (initializer == null) "" else " = " + initializer)
return createProperty(text)
}
fun createProperty(name: String, type: String?, isVar: Boolean, initializer: String?): KtProperty {
return createProperty(null, name, type, isVar, initializer)
}
fun createProperty(name: String, type: String?, isVar: Boolean): KtProperty {
return createProperty(name, type, isVar, null)
}
@@ -548,8 +555,14 @@ class KtPsiFactory(private val project: Project) {
}
class CallableBuilder(private val target: Target) {
companion object {
val CONSTRUCTOR_NAME = KtTokens.CONSTRUCTOR_KEYWORD.value
}
enum class Target {
FUNCTION,
CONSTRUCTOR,
READ_ONLY_PROPERTY
}
@@ -568,7 +581,7 @@ class KtPsiFactory(private val project: Project) {
private var state = State.MODIFIERS
private fun closeParams() {
if (target == Target.FUNCTION) {
if (target == Target.FUNCTION || target == Target.CONSTRUCTOR) {
assert(state == State.FIRST_PARAM || state == State.REST_PARAMS)
sb.append(")")
}
@@ -584,6 +597,7 @@ class KtPsiFactory(private val project: Project) {
}
val keyword = when (target) {
Target.FUNCTION -> "fun"
Target.CONSTRUCTOR -> ""
Target.READ_ONLY_PROPERTY -> "val"
}
sb.append("$keyword ")
@@ -592,7 +606,7 @@ class KtPsiFactory(private val project: Project) {
}
private fun bodyPrefix() = when (target) {
Target.FUNCTION -> ""
Target.FUNCTION, Target.CONSTRUCTOR -> ""
Target.READ_ONLY_PROPERTY -> "\nget()"
}
@@ -604,7 +618,7 @@ class KtPsiFactory(private val project: Project) {
return this
}
fun typeParams(values: Collection<String>): CallableBuilder {
fun typeParams(values: Collection<String> = emptyList()): CallableBuilder {
placeKeyword()
if (!values.isEmpty()) {
sb.append(values.joinToString(", ", "<", "> ", -1, ""))
@@ -622,12 +636,13 @@ class KtPsiFactory(private val project: Project) {
return this
}
fun name(name: String): CallableBuilder {
fun name(name: String = CONSTRUCTOR_NAME): CallableBuilder {
assert(state == State.NAME || state == State.RECEIVER)
assert(name != CONSTRUCTOR_NAME || target == Target.CONSTRUCTOR)
sb.append(name)
when (target) {
Target.FUNCTION -> {
Target.FUNCTION, Target.CONSTRUCTOR -> {
sb.append("(")
state = State.FIRST_PARAM
}
@@ -638,14 +653,17 @@ class KtPsiFactory(private val project: Project) {
return this
}
fun param(name: String, type: String): CallableBuilder {
assert(target == Target.FUNCTION)
fun param(name: String, type: String, defaultValue: String? = null): CallableBuilder {
assert(target == Target.FUNCTION || target == Target.CONSTRUCTOR)
assert(state == State.FIRST_PARAM || state == State.REST_PARAMS)
if (state == State.REST_PARAMS) {
sb.append(", ")
}
sb.append(name).append(": ").append(type)
if (defaultValue != null) {
sb.append("= ").append(defaultValue)
}
if (state == State.FIRST_PARAM) {
state = State.REST_PARAMS
}
@@ -667,7 +685,7 @@ class KtPsiFactory(private val project: Project) {
}
fun typeConstraints(values: Collection<String>): CallableBuilder {
assert(state == State.TYPE_CONSTRAINTS)
assert(state == State.TYPE_CONSTRAINTS && target != Target.CONSTRUCTOR)
if (!values.isEmpty()) {
sb.append(values.joinToString(", ", " where ", "", -1, ""))
@@ -677,6 +695,15 @@ class KtPsiFactory(private val project: Project) {
return this
}
fun superDelegation(argumentList: String): CallableBuilder {
assert(state == State.TYPE_CONSTRAINTS && target == Target.CONSTRUCTOR)
sb.append(": super").append(argumentList)
state = State.BODY
return this
}
fun blockBody(body: String): CallableBuilder {
assert(state == State.BODY || state == State.TYPE_CONSTRAINTS)