Create from Usage: Add val to data class parameter
Also place new parameters on the new line if previous ones have line breaks #KT-21162 Fixed
This commit is contained in:
+5
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.refactoring.canRefactor
|
||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.guessTypes
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinParameterInfo
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinTypeInfo
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinValVar
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||
@@ -58,11 +59,14 @@ object CreateParameterByNamedArgumentActionFactory: CreateParameterFromUsageFact
|
||||
} ?: anyType
|
||||
if (paramType.hasTypeParametersToAdd(functionDescriptor, context)) return null
|
||||
|
||||
val needVal = callable is KtPrimaryConstructor && ((callable.getContainingClassOrObject() as? KtClass)?.isData() ?: false)
|
||||
|
||||
val parameterInfo = KotlinParameterInfo(
|
||||
callableDescriptor = functionDescriptor,
|
||||
name = name,
|
||||
originalTypeInfo = KotlinTypeInfo(false, paramType),
|
||||
defaultValueForCall = argumentExpression
|
||||
defaultValueForCall = argumentExpression,
|
||||
valOrVar = if (needVal) KotlinValVar.Val else KotlinValVar.None
|
||||
)
|
||||
|
||||
return CreateParameterData(parameterInfo, element)
|
||||
|
||||
@@ -761,11 +761,25 @@ fun <ListType : KtElement> replaceListPsiAndKeepDelimiters(
|
||||
|
||||
if (commonCount == 0) return originalList.listReplacer(newList)
|
||||
|
||||
val lastOriginalParameter = oldParameters.last()
|
||||
|
||||
if (oldCount > commonCount) {
|
||||
originalList.deleteChildRange(oldParameters[commonCount - 1].nextSibling, oldParameters.last())
|
||||
originalList.deleteChildRange(oldParameters[commonCount - 1].nextSibling, lastOriginalParameter)
|
||||
}
|
||||
else if (newCount > commonCount) {
|
||||
originalList.addRangeAfter(newParameters[commonCount - 1].nextSibling, newParameters.last(), oldParameters.last())
|
||||
val psiBeforeLastParameter = lastOriginalParameter.prevSibling
|
||||
val withMultiline = (psiBeforeLastParameter is PsiWhiteSpace || psiBeforeLastParameter is PsiComment) && psiBeforeLastParameter.textContains('\n')
|
||||
val extraSpace = if (withMultiline) KtPsiFactory(originalList).createNewLine() else null
|
||||
originalList.addRangeAfter(newParameters[commonCount - 1].nextSibling, newParameters.last(), lastOriginalParameter)
|
||||
if (extraSpace != null) {
|
||||
val addedItems = originalList.itemsFun().subList(commonCount, newCount)
|
||||
for (addedItem in addedItems) {
|
||||
val elementBefore = addedItem.prevSibling
|
||||
if ((elementBefore !is PsiWhiteSpace && elementBefore !is PsiComment) || !elementBefore.textContains('\n')) {
|
||||
addedItem.parent.addBefore(extraSpace, addedItem)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return originalList
|
||||
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// "Create property 'parameter4' as constructor parameter" "true"
|
||||
|
||||
data class MyDto(
|
||||
val parameter1:String,
|
||||
val parameter2:String ="",
|
||||
val parameter3:String =""
|
||||
)
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println(MyDto(parameter1 = "value1", <caret>parameter4 = "value4"))
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// "Create property 'parameter4' as constructor parameter" "true"
|
||||
|
||||
data class MyDto(
|
||||
val parameter1: String,
|
||||
val parameter2: String = "",
|
||||
val parameter3: String = "",
|
||||
val parameter4: String
|
||||
)
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println(MyDto(parameter1 = "value1", <caret>parameter4 = "value4"))
|
||||
}
|
||||
@@ -4248,6 +4248,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("dataClassPropertyByNamedArgument.kt")
|
||||
public void testDataClassPropertyByNamedArgument() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/dataClassPropertyByNamedArgument.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("inAccessorInClass.kt")
|
||||
public void testInAccessorInClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/inAccessorInClass.kt");
|
||||
|
||||
Reference in New Issue
Block a user