Change Signature: Fix rendering of unresolved types in overriding members

This commit is contained in:
Alexey Sedunov
2015-12-17 17:36:37 +03:00
parent 05ec9cc424
commit 784b250de8
10 changed files with 82 additions and 7 deletions
@@ -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)
}
@@ -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
}
}
@@ -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") }
}