No KotlinType reference in ChangeParameterTypeFix
This commit is contained in:
@@ -24,22 +24,27 @@ import com.intellij.psi.util.PsiTreeUtil
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.*
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureConfiguration
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinTypeInfo
|
||||
import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature
|
||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class ChangeParameterTypeFix(element: KtParameter, private val type: KotlinType) : KotlinQuickFixAction<KtParameter>(element) {
|
||||
class ChangeParameterTypeFix(element: KtParameter, type: KotlinType) : KotlinQuickFixAction<KtParameter>(element) {
|
||||
private val typePresentation = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(type)
|
||||
private val typeInfo = KotlinTypeInfo(isCovariant = false, text = IdeDescriptorRenderers.SOURCE_CODE_FOR_TYPE_ARGUMENTS.renderType(type))
|
||||
|
||||
private val containingDeclarationName: String?
|
||||
private val isPrimaryConstructorParameter: Boolean
|
||||
|
||||
init {
|
||||
val declaration = PsiTreeUtil.getParentOfType(element, KtNamedDeclaration::class.java)
|
||||
val declarationFQName = declaration?.fqName
|
||||
isPrimaryConstructorParameter = declaration is KtPrimaryConstructor
|
||||
containingDeclarationName = if (declarationFQName != null) declarationFQName.asString() else declaration?.name
|
||||
this.containingDeclarationName = declaration?.fqName?.asString() ?: declaration?.name
|
||||
this.isPrimaryConstructorParameter = declaration is KtPrimaryConstructor
|
||||
}
|
||||
|
||||
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
|
||||
@@ -47,23 +52,22 @@ class ChangeParameterTypeFix(element: KtParameter, private val type: KotlinType)
|
||||
}
|
||||
|
||||
override fun getText(): String {
|
||||
val renderedType = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(type)
|
||||
return if (isPrimaryConstructorParameter)
|
||||
KotlinBundle.message("change.primary.constructor.parameter.type", element.name, containingDeclarationName, renderedType)
|
||||
KotlinBundle.message("change.primary.constructor.parameter.type", element.name, containingDeclarationName, typePresentation)
|
||||
else
|
||||
KotlinBundle.message("change.function.parameter.type", element.name, containingDeclarationName, renderedType)
|
||||
KotlinBundle.message("change.function.parameter.type", element.name, containingDeclarationName, typePresentation)
|
||||
}
|
||||
|
||||
override fun getFamilyName() = KotlinBundle.message("change.type.family")
|
||||
|
||||
public override operator fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||
override fun invoke(project: Project, editor: Editor?, file: KtFile) {
|
||||
val function = element.getStrictParentOfType<KtFunction>() ?: return
|
||||
val parameterIndex = function.valueParameters.indexOf(element)
|
||||
val context = function.analyze()
|
||||
val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, function] as? FunctionDescriptor ?: return
|
||||
val configuration = object : KotlinChangeSignatureConfiguration {
|
||||
override fun configure(originalDescriptor: KotlinMethodDescriptor) = originalDescriptor.apply {
|
||||
parameters[if (receiver != null) parameterIndex + 1 else parameterIndex].currentTypeInfo = KotlinTypeInfo(false, type)
|
||||
parameters[if (receiver != null) parameterIndex + 1 else parameterIndex].currentTypeInfo = typeInfo
|
||||
}
|
||||
|
||||
override fun performSilently(affectedFunctions: Collection<PsiElement>) = true
|
||||
|
||||
Reference in New Issue
Block a user