Reformat: ChangeMemberFunctionSignatureFix

This commit is contained in:
Toshiaki Kameyama
2018-05-24 10:59:32 +03:00
committed by Mikhail Glukhikh
parent 2c59f96ca4
commit 0cb907d637
@@ -55,8 +55,8 @@ import java.util.*
* Fix that changes member function's signature to match one of super functions' signatures.
*/
class ChangeMemberFunctionSignatureFix private constructor(
element: KtNamedFunction,
private val signatures: List<ChangeMemberFunctionSignatureFix.Signature>
element: KtNamedFunction,
private val signatures: List<ChangeMemberFunctionSignatureFix.Signature>
) : KotlinQuickFixAction<KtNamedFunction>(element) {
init {
@@ -100,15 +100,14 @@ class ChangeMemberFunctionSignatureFix private constructor(
return emptyList()
}
val functionDescriptor = functionElement.resolveToDescriptorIfAny(BodyResolveMode.FULL)
?: return emptyList()
val functionDescriptor = functionElement.resolveToDescriptorIfAny(BodyResolveMode.FULL) ?: return emptyList()
val superFunctions = getPossibleSuperFunctionsDescriptors(functionDescriptor)
return superFunctions
.filter { it.kind.isReal }
.map { signatureToMatch(functionDescriptor, it) }
.distinctBy { it.sourceCode }
.sortedBy { it.preview }
.filter { it.kind.isReal }
.map { signatureToMatch(functionDescriptor, it) }
.distinctBy { it.sourceCode }
.sortedBy { it.preview }
}
/**
@@ -128,13 +127,15 @@ class ChangeMemberFunctionSignatureFix private constructor(
matchParameters(ParameterChooser.MatchTypes, superParameters, parameters, newParameters, matched, used)
val newFunction = replaceFunctionParameters(
superFunction.copy(
function.containingDeclaration,
Modality.OPEN,
findMemberWithMaxVisibility(listOf(superFunction, function)).visibility,
CallableMemberDescriptor.Kind.DELEGATION,
/* copyOverrides = */ true),
newParameters)
superFunction.copy(
function.containingDeclaration,
Modality.OPEN,
findMemberWithMaxVisibility(listOf(superFunction, function)).visibility,
CallableMemberDescriptor.Kind.DELEGATION,
/* copyOverrides = */ true
),
newParameters
)
newFunction.setSingleOverridden(superFunction)
return Signature(newFunction)
@@ -154,12 +155,12 @@ class ChangeMemberFunctionSignatureFix private constructor(
* @param used - true iff this parameter in function is used to match some parameter in super function (may be modified by this function)
*/
private fun matchParameters(
parameterChooser: ParameterChooser,
superParameters: List<ValueParameterDescriptor>,
parameters: List<ValueParameterDescriptor>,
newParameters: MutableList<ValueParameterDescriptor>,
matched: BitSet,
used: BitSet
parameterChooser: ParameterChooser,
superParameters: List<ValueParameterDescriptor>,
parameters: List<ValueParameterDescriptor>,
newParameters: MutableList<ValueParameterDescriptor>,
matched: BitSet,
used: BitSet
) {
for (superParameter in superParameters) {
if (!matched[superParameter.index]) {
@@ -185,8 +186,8 @@ class ChangeMemberFunctionSignatureFix private constructor(
val name = functionDescriptor.name
return containingClass.defaultType.supertypes()
.flatMap { supertype -> supertype.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_IDE) }
.filter { it.kind.isReal && it.isOverridable }
.flatMap { supertype -> supertype.memberScope.getContributedFunctions(name, NoLookupLocation.FROM_IDE) }
.filter { it.kind.isReal && it.isOverridable }
}
/**
@@ -194,29 +195,29 @@ class ChangeMemberFunctionSignatureFix private constructor(
* Note that parameters may belong to other methods or have incorrect "index" property -- it will be fixed by this function.
*/
private fun replaceFunctionParameters(
function: FunctionDescriptor,
newParameters: List<ValueParameterDescriptor>
function: FunctionDescriptor,
newParameters: List<ValueParameterDescriptor>
): FunctionDescriptor {
val descriptor = SimpleFunctionDescriptorImpl.create(
function.containingDeclaration,
function.annotations,
function.name,
function.kind,
SourceElement.NO_SOURCE
function.containingDeclaration,
function.annotations,
function.name,
function.kind,
SourceElement.NO_SOURCE
)
val parameters = newParameters.withIndex().map { (index, parameter) ->
ValueParameterDescriptorImpl(
descriptor, null, index,
parameter.annotations, parameter.name, parameter.returnType!!, parameter.declaresDefaultValue(),
parameter.isCrossinline, parameter.isNoinline, parameter.varargElementType, SourceElement.NO_SOURCE
descriptor, null, index,
parameter.annotations, parameter.name, parameter.returnType!!, parameter.declaresDefaultValue(),
parameter.isCrossinline, parameter.isNoinline, parameter.varargElementType, SourceElement.NO_SOURCE
)
}
return descriptor.apply {
initialize(
function.extensionReceiverParameter?.type, function.dispatchReceiverParameter,
function.typeParameters, parameters, function.returnType, function.modality, function.visibility
function.extensionReceiverParameter?.type, function.dispatchReceiverParameter,
function.typeParameters, parameters, function.returnType, function.modality, function.visibility
)
isOperator = function.isOperator
isInfix = function.isInfix
@@ -264,8 +265,7 @@ class ChangeMemberFunctionSignatureFix private constructor(
// TODO: support for generic functions
return if (KotlinTypeChecker.DEFAULT.equalTypes(parameter.type, superParameter.type)) {
superParameter.copy(parameter.containingDeclaration, parameter.name, parameter.index)
}
else {
} else {
null
}
}
@@ -274,10 +274,10 @@ class ChangeMemberFunctionSignatureFix private constructor(
}
private class MyAction(
private val project: Project,
private val editor: Editor?,
private val function: KtNamedFunction,
private val signatures: List<Signature>
private val project: Project,
private val editor: Editor?,
private val function: KtNamedFunction,
private val signatures: List<Signature>
) {
fun execute() {
PsiDocumentManager.getInstance(project).commitAllDocuments()
@@ -286,8 +286,7 @@ class ChangeMemberFunctionSignatureFix private constructor(
if (signatures.size == 1 || editor == null || !editor.component.isShowing) {
changeSignature(signatures.first())
}
else {
} else {
chooseSignatureAndChange()
}
}