Change Signature: Fix rendering of unresolved types in overriding members
This commit is contained in:
@@ -307,14 +307,18 @@ public open class KotlinChangeInfo(
|
||||
val receiverTypeText = receiverParameterInfo?.currentTypeInfo?.render() ?: return null
|
||||
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return receiverTypeText
|
||||
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: return receiverTypeText
|
||||
return currentBaseFunction.extensionReceiverParameter!!.type.renderTypeWithSubstitution(typeSubstitutor, receiverTypeText, false)
|
||||
val receiverType = currentBaseFunction.extensionReceiverParameter!!.type
|
||||
if (receiverType.isError) return receiverTypeText
|
||||
return receiverType.renderTypeWithSubstitution(typeSubstitutor, receiverTypeText, false)
|
||||
}
|
||||
|
||||
public fun renderReturnType(inheritedCallable: KotlinCallableDefinitionUsage<*>): String {
|
||||
val defaultRendering = newReturnTypeInfo.render()
|
||||
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return defaultRendering
|
||||
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: return defaultRendering
|
||||
return currentBaseFunction.returnType!!.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, false)
|
||||
val returnType = currentBaseFunction.returnType!!
|
||||
if (returnType.isError) return defaultRendering
|
||||
return returnType.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, false)
|
||||
}
|
||||
|
||||
public fun primaryMethodUpdated() {
|
||||
|
||||
@@ -150,6 +150,7 @@ public class KotlinParameterInfo @JvmOverloads constructor (
|
||||
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return defaultRendering
|
||||
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: return defaultRendering
|
||||
val parameterType = currentBaseFunction.getValueParameters().get(parameterIndex).getType()
|
||||
if (parameterType.isError) return defaultRendering
|
||||
return parameterType.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, true)
|
||||
}
|
||||
|
||||
|
||||
+3
-5
@@ -120,12 +120,10 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
|
||||
processParameterListWithStructuralChanges(changeInfo, element, parameterList, psiFactory)
|
||||
}
|
||||
else if (parameterList != null) {
|
||||
var paramIndex = if (originalCallableDescriptor.extensionReceiverParameter != null) 1 else 0
|
||||
|
||||
for (parameter in parameterList.parameters) {
|
||||
val parameterInfo = changeInfo.newParameters[paramIndex]
|
||||
val offset = if (originalCallableDescriptor.extensionReceiverParameter != null) 1 else 0
|
||||
for ((paramIndex, parameter) in parameterList.parameters.withIndex()) {
|
||||
val parameterInfo = changeInfo.newParameters[paramIndex + offset]
|
||||
changeParameter(paramIndex, parameter, parameterInfo)
|
||||
paramIndex++
|
||||
}
|
||||
|
||||
parameterList.addToShorteningWaitSet(Options.DEFAULT)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
open class A {
|
||||
open fun Int.foo(n: XYZ): Int {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun Int.foo(n: XYZ): Int {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
open class A {
|
||||
open fun Int.<caret>foo(n: Int): Int {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun Int.foo(n: Int): Int {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
open class A {
|
||||
open fun XYZ.foo(n: Int): Int {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun XYZ.foo(n: Int): Int {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
open class A {
|
||||
open fun Int.<caret>foo(n: Int): Int {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun Int.foo(n: Int): Int {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
open class A {
|
||||
open fun Int.foo(n: Int): XYZ {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun Int.foo(n: Int): XYZ {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
open class A {
|
||||
open fun Int.<caret>foo(n: Int): Int {
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun Int.foo(n: Int): Int {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
+6
@@ -897,4 +897,10 @@ class KotlinChangeSignatureTest : KotlinCodeInsightTestCase() {
|
||||
fun testRemoveParameterKeepFormat3() = doTest { removeParameter(2) }
|
||||
|
||||
fun testSwapParametersKeepFormat() = doTest { swapParameters(0, 2) }
|
||||
|
||||
fun testSetErrorReturnType() = doTest { newReturnTypeInfo = KotlinTypeInfo(true, null, "XYZ") }
|
||||
|
||||
fun testSetErrorReceiverType() = doTest { receiverParameterInfo!!.currentTypeInfo = KotlinTypeInfo(true, null, "XYZ") }
|
||||
|
||||
fun testSetErrorParameterType() = doTest { newParameters[1].currentTypeInfo = KotlinTypeInfo(true, null, "XYZ") }
|
||||
}
|
||||
Reference in New Issue
Block a user