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 receiverTypeText = receiverParameterInfo?.currentTypeInfo?.render() ?: return null
|
||||||
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return receiverTypeText
|
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return receiverTypeText
|
||||||
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: 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 {
|
public fun renderReturnType(inheritedCallable: KotlinCallableDefinitionUsage<*>): String {
|
||||||
val defaultRendering = newReturnTypeInfo.render()
|
val defaultRendering = newReturnTypeInfo.render()
|
||||||
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return defaultRendering
|
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return defaultRendering
|
||||||
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: 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() {
|
public fun primaryMethodUpdated() {
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ public class KotlinParameterInfo @JvmOverloads constructor (
|
|||||||
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return defaultRendering
|
val typeSubstitutor = inheritedCallable.typeSubstitutor ?: return defaultRendering
|
||||||
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: return defaultRendering
|
val currentBaseFunction = inheritedCallable.baseFunction.currentCallableDescriptor ?: return defaultRendering
|
||||||
val parameterType = currentBaseFunction.getValueParameters().get(parameterIndex).getType()
|
val parameterType = currentBaseFunction.getValueParameters().get(parameterIndex).getType()
|
||||||
|
if (parameterType.isError) return defaultRendering
|
||||||
return parameterType.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, true)
|
return parameterType.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-5
@@ -120,12 +120,10 @@ class KotlinCallableDefinitionUsage<T : PsiElement>(
|
|||||||
processParameterListWithStructuralChanges(changeInfo, element, parameterList, psiFactory)
|
processParameterListWithStructuralChanges(changeInfo, element, parameterList, psiFactory)
|
||||||
}
|
}
|
||||||
else if (parameterList != null) {
|
else if (parameterList != null) {
|
||||||
var paramIndex = if (originalCallableDescriptor.extensionReceiverParameter != null) 1 else 0
|
val offset = if (originalCallableDescriptor.extensionReceiverParameter != null) 1 else 0
|
||||||
|
for ((paramIndex, parameter) in parameterList.parameters.withIndex()) {
|
||||||
for (parameter in parameterList.parameters) {
|
val parameterInfo = changeInfo.newParameters[paramIndex + offset]
|
||||||
val parameterInfo = changeInfo.newParameters[paramIndex]
|
|
||||||
changeParameter(paramIndex, parameter, parameterInfo)
|
changeParameter(paramIndex, parameter, parameterInfo)
|
||||||
paramIndex++
|
|
||||||
}
|
}
|
||||||
|
|
||||||
parameterList.addToShorteningWaitSet(Options.DEFAULT)
|
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 testRemoveParameterKeepFormat3() = doTest { removeParameter(2) }
|
||||||
|
|
||||||
fun testSwapParametersKeepFormat() = doTest { swapParameters(0, 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