KT-9839: intention introduced: convert primary constructor to secondary one
(cherry picked from commit 93aaa48)
This commit is contained in:
committed by
Mikhail Glukhikh
parent
d4418d5686
commit
7f50e6e70e
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user