Convert parameter to receiver: don't remove 'override' and 'vararg' when function has 'vararg' parameter
#KT-28851 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
de7adf55ff
commit
225a6ea288
+4
-1
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.components.isVararg
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver
|
||||||
import org.jetbrains.kotlin.types.isError
|
import org.jetbrains.kotlin.types.isError
|
||||||
@@ -153,7 +154,9 @@ class KotlinParameterInfo @JvmOverloads constructor (
|
|||||||
val defaultRendering = currentTypeInfo.render()
|
val defaultRendering = currentTypeInfo.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
|
||||||
val parameterType = currentBaseFunction.valueParameters[parameterIndex].type
|
val parameter = currentBaseFunction.valueParameters[parameterIndex]
|
||||||
|
if (parameter.isVararg) return defaultRendering
|
||||||
|
val parameterType = parameter.type
|
||||||
if (parameterType.isError) return defaultRendering
|
if (parameterType.isError) return defaultRendering
|
||||||
return parameterType.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, true)
|
return parameterType.renderTypeWithSubstitution(typeSubstitutor, defaultRendering, true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
interface A {
|
||||||
|
fun foo(<caret>s: String, vararg args: Any)
|
||||||
|
}
|
||||||
|
class B : A {
|
||||||
|
override fun foo(s: String, vararg args: Any) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
interface A {
|
||||||
|
fun String.foo(vararg args: Any)
|
||||||
|
}
|
||||||
|
class B : A {
|
||||||
|
override fun String.foo(vararg args: Any) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6051,6 +6051,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
runTest("idea/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt");
|
runTest("idea/testData/intentions/convertParameterToReceiver/functionExpressionWithThisConflict.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("hasVararg.kt")
|
||||||
|
public void testHasVararg() throws Exception {
|
||||||
|
runTest("idea/testData/intentions/convertParameterToReceiver/hasVararg.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaParameter.kt")
|
@TestMetadata("lambdaParameter.kt")
|
||||||
public void testLambdaParameter() throws Exception {
|
public void testLambdaParameter() throws Exception {
|
||||||
runTest("idea/testData/intentions/convertParameterToReceiver/lambdaParameter.kt");
|
runTest("idea/testData/intentions/convertParameterToReceiver/lambdaParameter.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user