J2K ValueParameterDescriptor inteface in one go

This commit is contained in:
Pavel V. Talanov
2015-10-28 15:32:51 +03:00
parent 4a3632f70e
commit dc1fbe89ec
26 changed files with 56 additions and 68 deletions
@@ -175,7 +175,7 @@ public class DefaultParameterValueSubstitutor(val state: GenerationState) {
} }
else { else {
AsmUtil.pushDefaultValueOnStack(paramType, v) AsmUtil.pushDefaultValueOnStack(paramType, v)
val i = parameterDescriptor.getIndex() val i = parameterDescriptor.index
if (i != 0 && i % Integer.SIZE == 0) { if (i != 0 && i % Integer.SIZE == 0) {
masks.add(mask) masks.add(mask)
mask = 0 mask = 0
@@ -131,7 +131,7 @@ public fun getExpectedTypePredicate(
val candidateParameter = mapping.valueParameter val candidateParameter = mapping.valueParameter
val resolvedArgument = candidateArgumentMap.get(candidateParameter) val resolvedArgument = candidateArgumentMap.get(candidateParameter)
val expectedType = if (resolvedArgument is VarargValueArgument) val expectedType = if (resolvedArgument is VarargValueArgument)
candidateParameter.getVarargElementType() candidateParameter.varargElementType
else else
candidateParameter.getType() candidateParameter.getType()
@@ -190,7 +190,7 @@ public fun getExpectedTypePredicate(
it.arguments[value]?.let { parameter -> it.arguments[value]?.let { parameter ->
val expectedType = when (it.resolvedCall.getValueArguments()[parameter]) { val expectedType = when (it.resolvedCall.getValueArguments()[parameter]) {
is VarargValueArgument -> is VarargValueArgument ->
parameter.getVarargElementType() parameter.varargElementType
else -> else ->
parameter.getType() parameter.getType()
} }
@@ -183,10 +183,10 @@ public object Renderers {
val parameterTypes = Lists.newArrayList<KotlinType>() val parameterTypes = Lists.newArrayList<KotlinType>()
for (valueParameterDescriptor in substitutedDescriptor.getValueParameters()) { for (valueParameterDescriptor in substitutedDescriptor.getValueParameters()) {
parameterTypes.add(valueParameterDescriptor.getType()) parameterTypes.add(valueParameterDescriptor.getType())
if (valueParameterDescriptor.getIndex() >= inferenceErrorData.valueArgumentsTypes.size()) continue if (valueParameterDescriptor.index >= inferenceErrorData.valueArgumentsTypes.size()) continue
val actualType = inferenceErrorData.valueArgumentsTypes.get(valueParameterDescriptor.getIndex()) val actualType = inferenceErrorData.valueArgumentsTypes.get(valueParameterDescriptor.index)
if (!KotlinTypeChecker.DEFAULT.isSubtypeOf(actualType, valueParameterDescriptor.getType())) { if (!KotlinTypeChecker.DEFAULT.isSubtypeOf(actualType, valueParameterDescriptor.getType())) {
errorPositions.add(VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.getIndex())) errorPositions.add(VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.index))
} }
} }
@@ -201,7 +201,7 @@ class FunctionDescriptorResolver(
val it = ValueParameterDescriptorImpl(functionDescriptor, null, 0, Annotations.EMPTY, Name.identifier("it"), val it = ValueParameterDescriptorImpl(functionDescriptor, null, 0, Annotations.EMPTY, Name.identifier("it"),
valueParameterDescriptor.getType(), valueParameterDescriptor.declaresDefaultValue(), valueParameterDescriptor.getType(), valueParameterDescriptor.declaresDefaultValue(),
valueParameterDescriptor.isCrossinline, valueParameterDescriptor.isNoinline, valueParameterDescriptor.isCrossinline, valueParameterDescriptor.isNoinline,
valueParameterDescriptor.getVarargElementType(), SourceElement.NO_SOURCE) valueParameterDescriptor.varargElementType, SourceElement.NO_SOURCE)
trace.record(BindingContext.AUTO_CREATED_IT, it) trace.record(BindingContext.AUTO_CREATED_IT, it)
return listOf(it) return listOf(it)
} }
@@ -148,13 +148,13 @@ public fun getSuperCallExpression(call: Call): KtSuperExpression? {
public fun getEffectiveExpectedType(parameterDescriptor: ValueParameterDescriptor, argument: ValueArgument): KotlinType { public fun getEffectiveExpectedType(parameterDescriptor: ValueParameterDescriptor, argument: ValueArgument): KotlinType {
if (argument.getSpreadElement() != null) { if (argument.getSpreadElement() != null) {
if (parameterDescriptor.getVarargElementType() == null) { if (parameterDescriptor.varargElementType == null) {
// Spread argument passed to a non-vararg parameter, an error is already reported by ValueArgumentsToParametersMapper // Spread argument passed to a non-vararg parameter, an error is already reported by ValueArgumentsToParametersMapper
return DONT_CARE return DONT_CARE
} }
return parameterDescriptor.getType() return parameterDescriptor.getType()
} }
val varargElementType = parameterDescriptor.getVarargElementType() val varargElementType = parameterDescriptor.varargElementType
if (varargElementType != null) { if (varargElementType != null) {
return varargElementType return varargElementType
} }
@@ -75,7 +75,7 @@ class GenericCandidateResolver(
// Value parameters // Value parameters
for (entry in candidateCall.getValueArguments().entrySet()) { for (entry in candidateCall.getValueArguments().entrySet()) {
val resolvedValueArgument = entry.getValue() val resolvedValueArgument = entry.getValue()
val valueParameterDescriptor = candidate.getValueParameters().get(entry.getKey().getIndex()) val valueParameterDescriptor = candidate.getValueParameters().get(entry.getKey().index)
for (valueArgument in resolvedValueArgument.getArguments()) { for (valueArgument in resolvedValueArgument.getArguments()) {
@@ -131,7 +131,7 @@ class GenericCandidateResolver(
val typeInfoForCall = argumentTypeResolver.getArgumentTypeInfo(argumentExpression, newContext, resolveFunctionArgumentBodies) val typeInfoForCall = argumentTypeResolver.getArgumentTypeInfo(argumentExpression, newContext, resolveFunctionArgumentBodies)
context.candidateCall.getDataFlowInfoForArguments().updateInfo(valueArgument, typeInfoForCall.dataFlowInfo) context.candidateCall.getDataFlowInfoForArguments().updateInfo(valueArgument, typeInfoForCall.dataFlowInfo)
val constraintPosition = VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.getIndex()) val constraintPosition = VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.index)
if (addConstraintForNestedCall(argumentExpression, constraintPosition, constraintSystem, newContext, effectiveExpectedType)) return if (addConstraintForNestedCall(argumentExpression, constraintPosition, constraintSystem, newContext, effectiveExpectedType)) return
@@ -240,7 +240,7 @@ class GenericCandidateResolver(
//todo analyze function literal body once in 'dependent' mode, then complete it with respect to expected type //todo analyze function literal body once in 'dependent' mode, then complete it with respect to expected type
val hasExpectedReturnType = !hasUnknownReturnType(expectedType) val hasExpectedReturnType = !hasUnknownReturnType(expectedType)
val position = VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.getIndex()) val position = VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.index)
if (hasExpectedReturnType) { if (hasExpectedReturnType) {
val temporaryToResolveFunctionLiteral = TemporaryTraceAndCache.create( val temporaryToResolveFunctionLiteral = TemporaryTraceAndCache.create(
context, "trace to resolve function literal with expected return type", argumentExpression) context, "trace to resolve function literal with expected return type", argumentExpression)
@@ -279,7 +279,7 @@ class GenericCandidateResolver(
?: return ?: return
if (!ReflectionTypes.isCallableType(expectedType)) return if (!ReflectionTypes.isCallableType(expectedType)) return
val resolvedType = getResolvedTypeForCallableReference(callableReference, context, expectedType, valueArgument) val resolvedType = getResolvedTypeForCallableReference(callableReference, context, expectedType, valueArgument)
val position = VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.getIndex()) val position = VALUE_PARAMETER_POSITION.position(valueParameterDescriptor.index)
constraintSystem.addSubtypeConstraint(resolvedType, effectiveExpectedType, position) constraintSystem.addSubtypeConstraint(resolvedType, effectiveExpectedType, position)
} }
@@ -74,8 +74,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
original.getTypeParameters(), original.getTypeParameters(),
original.getValueParameters().drop(1).map { p -> original.getValueParameters().drop(1).map { p ->
ValueParameterDescriptorImpl( ValueParameterDescriptorImpl(
result, null, p.getIndex() - 1, p.getAnnotations(), Name.identifier("p${p.getIndex() + 1}"), p.getType(), result, null, p.index - 1, p.getAnnotations(), Name.identifier("p${p.index + 1}"), p.getType(),
p.declaresDefaultValue(), p.isCrossinline, p.isNoinline, p.getVarargElementType(), p.getSource() p.declaresDefaultValue(), p.isCrossinline, p.isNoinline, p.varargElementType, p.getSource()
) )
}, },
original.getReturnType(), original.getReturnType(),
@@ -83,7 +83,7 @@ public class ConstantExpressionEvaluator(
parameterDescriptor: ValueParameterDescriptor, parameterDescriptor: ValueParameterDescriptor,
resolvedArgument: ResolvedValueArgument resolvedArgument: ResolvedValueArgument
): ConstantValue<*>? { ): ConstantValue<*>? {
val varargElementType = parameterDescriptor.getVarargElementType() val varargElementType = parameterDescriptor.varargElementType
val argumentsAsVararg = varargElementType != null && !hasSpread(resolvedArgument) val argumentsAsVararg = varargElementType != null && !hasSpread(resolvedArgument)
val constantType = if (argumentsAsVararg) varargElementType else parameterDescriptor.getType() val constantType = if (argumentsAsVararg) varargElementType else parameterDescriptor.getType()
val compileTimeConstants = resolveAnnotationValueArguments(resolvedArgument, constantType!!, trace) val compileTimeConstants = resolveAnnotationValueArguments(resolvedArgument, constantType!!, trace)
@@ -153,7 +153,7 @@ public class ConstantExpressionEvaluator(
val argumentEntry = resolvedCall.getValueArguments().entrySet().single() val argumentEntry = resolvedCall.getValueArguments().entrySet().single()
val elementType = argumentEntry.getKey().getVarargElementType() ?: return null val elementType = argumentEntry.getKey().varargElementType ?: return null
val result = arrayListOf<KtExpression>() val result = arrayListOf<KtExpression>()
for (valueArgument in argumentEntry.getValue().getArguments()) { for (valueArgument in argumentEntry.getValue().getArguments()) {
@@ -588,7 +588,7 @@ private class ConstantExpressionEvaluatorVisitor(
// arrayOf() // arrayOf()
if (CompileTimeConstantUtils.isArrayMethodCall(call)) { if (CompileTimeConstantUtils.isArrayMethodCall(call)) {
val varargType = resultingDescriptor.getValueParameters().first().getVarargElementType()!! val varargType = resultingDescriptor.getValueParameters().first().varargElementType!!
val arguments = call.getValueArguments().values().flatMap { resolveArguments(it.getArguments(), varargType) } val arguments = call.getValueArguments().values().flatMap { resolveArguments(it.getArguments(), varargType) }
@@ -147,7 +147,7 @@ public open class LazyClassMemberScope(
for (parameter in constructor.getValueParameters()) { for (parameter in constructor.getValueParameters()) {
if (parameter.getType().isError()) continue if (parameter.getType().isError()) continue
if (!primaryConstructorParameters.get(parameter.getIndex()).hasValOrVar()) continue if (!primaryConstructorParameters.get(parameter.index).hasValOrVar()) continue
val properties = getProperties(parameter.name, location) val properties = getProperties(parameter.name, location)
if (properties.isEmpty()) continue if (properties.isEmpty()) continue
@@ -219,7 +219,7 @@ public open class LazyClassMemberScope(
for (valueParameterDescriptor in valueParameterDescriptors) { for (valueParameterDescriptor in valueParameterDescriptors) {
if (name != valueParameterDescriptor.getName()) continue if (name != valueParameterDescriptor.getName()) continue
val parameter = primaryConstructorParameters.get(valueParameterDescriptor.getIndex()) val parameter = primaryConstructorParameters.get(valueParameterDescriptor.index)
if (parameter.hasValOrVar()) { if (parameter.hasValOrVar()) {
val propertyDescriptor = c.descriptorResolver.resolvePrimaryConstructorParameterToAProperty( val propertyDescriptor = c.descriptorResolver.resolvePrimaryConstructorParameterToAProperty(
thisDescriptor, valueParameterDescriptor, thisDescriptor.getScopeForClassHeaderResolution(), parameter, trace) thisDescriptor, valueParameterDescriptor, thisDescriptor.getScopeForClassHeaderResolution(), parameter, trace)
@@ -46,14 +46,14 @@ fun copyValueParameters(
ValueParameterDescriptorImpl( ValueParameterDescriptorImpl(
newOwner, newOwner,
oldParameter, oldParameter,
oldParameter.getIndex(), oldParameter.index,
oldParameter.getAnnotations(), oldParameter.getAnnotations(),
oldParameter.getName(), oldParameter.getName(),
newType, newType,
oldParameter.declaresDefaultValue(), oldParameter.declaresDefaultValue(),
oldParameter.isCrossinline, oldParameter.isCrossinline,
oldParameter.isNoinline, oldParameter.isNoinline,
if (oldParameter.getVarargElementType() != null) newOwner.module.builtIns.getArrayElementType(newType) else null, if (oldParameter.varargElementType != null) newOwner.module.builtIns.getArrayElementType(newType) else null,
oldParameter.getSource() oldParameter.getSource()
) )
} }
@@ -37,7 +37,7 @@ public fun <D : CallableMemberDescriptor> D.enhanceSignature(): D {
else null else null
val enhancedValueParametersTypes = getValueParameters().map { val enhancedValueParametersTypes = getValueParameters().map {
p -> parts(isCovariant = false) { it.getValueParameters()[p.getIndex()].getType() }.enhance() p -> parts(isCovariant = false) { it.getValueParameters()[p.index].getType() }.enhance()
} }
val enhancedReturnType = parts(isCovariant = true) { it.getReturnType()!! }.enhance() val enhancedReturnType = parts(isCovariant = true) { it.getReturnType()!! }.enhance()
@@ -14,53 +14,41 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.descriptors; package org.jetbrains.kotlin.descriptors
import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.name.Name
import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.KotlinType;
import java.util.Collection; interface ValueParameterDescriptor : VariableDescriptor, ParameterDescriptor {
override fun getContainingDeclaration(): CallableDescriptor
public interface ValueParameterDescriptor extends VariableDescriptor, ParameterDescriptor {
@NotNull
@Override
CallableDescriptor getContainingDeclaration();
/** /**
* Returns the 0-based index of the value parameter in the parameter list of its containing function. * Returns the 0-based index of the value parameter in the parameter list of its containing function.
*
* @return the parameter index * @return the parameter index
*/ */
int getIndex(); val index: Int
/** /**
* @return true iff this parameter belongs to a declared function (not a fake override) and declares the default value, * @return true iff this parameter belongs to a declared function (not a fake override) and declares the default value,
* i.e. explicitly specifies it in the function signature. Also see 'hasDefaultValue' extension in DescriptorUtils.kt * i.e. explicitly specifies it in the function signature. Also see 'hasDefaultValue' extension in DescriptorUtils.kt
*/ */
boolean declaresDefaultValue(); fun declaresDefaultValue(): Boolean
@Nullable val varargElementType: KotlinType?
KotlinType getVarargElementType();
@NotNull override fun getOriginal(): ValueParameterDescriptor
@Override
ValueParameterDescriptor getOriginal();
@NotNull fun copy(newOwner: CallableDescriptor, newName: Name): ValueParameterDescriptor
ValueParameterDescriptor copy(@NotNull CallableDescriptor newOwner, @NotNull Name newName);
/** /**
* Parameter p1 overrides p2 iff * Parameter p1 overrides p2 iff
* a) their respective owners (function declarations) f1 override f2 * a) their respective owners (function declarations) f1 override f2
* b) p1 and p2 have the same indices in the owners' parameter lists * b) p1 and p2 have the same indices in the owners' parameter lists
*/ */
@NotNull override fun getOverriddenDescriptors(): Collection<ValueParameterDescriptor>
@Override
Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors();
boolean isCrossinline(); val isCrossinline: Boolean
boolean isNoinline(); val isNoinline: Boolean
} }
@@ -137,7 +137,7 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme
@NotNull @NotNull
@Override @Override
public Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors() { public Collection<ValueParameterDescriptor> getOverriddenDescriptors() {
return CollectionsKt.map( return CollectionsKt.map(
getContainingDeclaration().getOverriddenDescriptors(), getContainingDeclaration().getOverriddenDescriptors(),
new Function1<CallableDescriptor, ValueParameterDescriptor>() { new Function1<CallableDescriptor, ValueParameterDescriptor>() {
@@ -677,7 +677,7 @@ internal class DescriptorRendererImpl(
} }
if (verbose) { if (verbose) {
builder.append("/*").append(valueParameter.getIndex()).append("*/ ") builder.append("/*").append(valueParameter.index).append("*/ ")
} }
renderAnnotations(valueParameter, builder) renderAnnotations(valueParameter, builder)
@@ -704,7 +704,7 @@ internal class DescriptorRendererImpl(
private fun renderVariable(variable: VariableDescriptor, includeName: Boolean, builder: StringBuilder, topLevel: Boolean) { private fun renderVariable(variable: VariableDescriptor, includeName: Boolean, builder: StringBuilder, topLevel: Boolean) {
val realType = variable.getType() val realType = variable.getType()
val varargElementType = (variable as? ValueParameterDescriptor)?.getVarargElementType() val varargElementType = (variable as? ValueParameterDescriptor)?.varargElementType
val typeToRender = varargElementType ?: realType val typeToRender = varargElementType ?: realType
if (varargElementType != null) { if (varargElementType != null) {
@@ -128,11 +128,11 @@ public class ShadowedDeclarationsFilter(
val bindingTrace = DelegatingBindingTrace(bindingContext, "Temporary trace for filtering shadowed declarations") val bindingTrace = DelegatingBindingTrace(bindingContext, "Temporary trace for filtering shadowed declarations")
for ((expression, parameter) in dummyArgumentExpressions.zip(parameters)) { for ((expression, parameter) in dummyArgumentExpressions.zip(parameters)) {
bindingTrace.recordType(expression, parameter.getVarargElementType() ?: parameter.getType()) bindingTrace.recordType(expression, parameter.varargElementType ?: parameter.getType())
bindingTrace.record(BindingContext.PROCESSED, expression, true) bindingTrace.record(BindingContext.PROCESSED, expression, true)
} }
val firstVarargIndex = parameters.withIndex().firstOrNull { it.value.getVarargElementType() != null }?.index val firstVarargIndex = parameters.withIndex().firstOrNull { it.value.varargElementType != null }?.index
val useNamedFromIndex = if (firstVarargIndex != null && firstVarargIndex != parameters.lastIndex) firstVarargIndex else parameters.size() val useNamedFromIndex = if (firstVarargIndex != null && firstVarargIndex != parameters.lastIndex) firstVarargIndex else parameters.size()
class DummyArgument(val index: Int) : ValueArgument { class DummyArgument(val index: Int) : ValueArgument {
@@ -232,7 +232,7 @@ public class ShadowedDeclarationsFilter(
for (i in parameters1.indices) { for (i in parameters1.indices) {
val p1 = parameters1[i] val p1 = parameters1[i]
val p2 = parameters2[i] val p2 = parameters2[i]
if (p1.getVarargElementType() != p2.getVarargElementType()) return false // both should be vararg or or both not if (p1.varargElementType != p2.varargElementType) return false // both should be vararg or or both not
if (p1.getType() != p2.getType()) return false if (p1.getType() != p2.getType()) return false
} }
return true return true
@@ -39,7 +39,7 @@ public abstract class KotlinClsFileBase(val provider: KotlinClassFileViewProvide
if (original is ValueParameterDescriptor) { if (original is ValueParameterDescriptor) {
val callable = original.getContainingDeclaration() val callable = original.getContainingDeclaration()
val callableDeclaration = getDeclarationForDescriptor(callable) as? KtCallableDeclaration ?: return null val callableDeclaration = getDeclarationForDescriptor(callable) as? KtCallableDeclaration ?: return null
return callableDeclaration.getValueParameters()[original.getIndex()] return callableDeclaration.getValueParameters()[original.index]
} }
if (original is ConstructorDescriptor && original.isPrimary()) { if (original is ConstructorDescriptor && original.isPrimary()) {
@@ -53,7 +53,7 @@ fun <D : CallableDescriptor> renderResolvedCall(resolvedCall: ResolvedCall<D>):
fun append(any: Any): StringBuilder = stringBuilder.append(any) fun append(any: Any): StringBuilder = stringBuilder.append(any)
fun renderParameter(parameter: ValueParameterDescriptor): String { fun renderParameter(parameter: ValueParameterDescriptor): String {
val varargElementType = parameter.getVarargElementType() val varargElementType = parameter.varargElementType
val parameterType = varargElementType ?: parameter.getType() val parameterType = varargElementType ?: parameter.getType()
val renderedParameter = val renderedParameter =
(if (varargElementType != null) "<b>vararg</b> " else "") + (if (varargElementType != null) "<b>vararg</b> " else "") +
@@ -322,7 +322,7 @@ class ExpectedInfos(
fun needCommaForParameter(parameter: ValueParameterDescriptor): Boolean { fun needCommaForParameter(parameter: ValueParameterDescriptor): Boolean {
if (parameter.hasDefaultValue()) return false // parameter is optional if (parameter.hasDefaultValue()) return false // parameter is optional
if (parameter.getVarargElementType() != null) return false // vararg arguments list can be empty if (parameter.varargElementType != null) return false // vararg arguments list can be empty
// last parameter of functional type can be placed outside parenthesis: // last parameter of functional type can be placed outside parenthesis:
if (!isArrayAccess && parameter == parameters.last() && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameter.getType())) return false if (!isArrayAccess && parameter == parameters.last() && KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(parameter.getType())) return false
return true return true
@@ -342,7 +342,7 @@ class ExpectedInfos(
val alreadyHasStar = argument.getSpreadElement() != null val alreadyHasStar = argument.getSpreadElement() != null
val varargElementType = parameter!!.getVarargElementType() val varargElementType = parameter!!.varargElementType
if (varargElementType != null) { if (varargElementType != null) {
if (isFunctionLiteralArgument) return if (isFunctionLiteralArgument) return
@@ -78,7 +78,7 @@ public fun Call.mapArgumentsToParameters(targetDescriptor: CallableDescriptor):
val parameter = parameters[positionalArgumentIndex] val parameter = parameters[positionalArgumentIndex]
map[argument] = parameter map[argument] = parameter
if (parameter.getVarargElementType() == null) { if (parameter.varargElementType == null) {
positionalArgumentIndex++ positionalArgumentIndex++
} }
} }
@@ -71,7 +71,7 @@ public class AddNameToArgumentIntention
if (!resolvedCall.getResultingDescriptor().hasStableParameterNames()) return null if (!resolvedCall.getResultingDescriptor().hasStableParameterNames()) return null
if (argumentMatch.valueParameter.getVarargElementType() != null) { if (argumentMatch.valueParameter.varargElementType != null) {
val varargArgument = resolvedCall.getValueArguments()[argumentMatch.valueParameter] as? VarargValueArgument ?: return null val varargArgument = resolvedCall.getValueArguments()[argumentMatch.valueParameter] as? VarargValueArgument ?: return null
if (varargArgument.getArguments().size() != 1) return null if (varargArgument.getArguments().size() != 1) return null
} }
@@ -41,7 +41,7 @@ public class RemoveArgumentNameIntention
val callExpr = argumentList.getParent() as? KtExpression ?: return null val callExpr = argumentList.getParent() as? KtExpression ?: return null
val resolvedCall = callExpr.getResolvedCall(callExpr.analyze(BodyResolveMode.PARTIAL)) ?: return null val resolvedCall = callExpr.getResolvedCall(callExpr.analyze(BodyResolveMode.PARTIAL)) ?: return null
val argumentMatch = resolvedCall.getArgumentMapping(element) as? ArgumentMatch ?: return null val argumentMatch = resolvedCall.getArgumentMapping(element) as? ArgumentMatch ?: return null
if (argumentMatch.valueParameter.getIndex() != arguments.indexOf(element)) return null if (argumentMatch.valueParameter.index != arguments.indexOf(element)) return null
val expression = element.getArgumentExpression() ?: return null val expression = element.getArgumentExpression() ?: return null
return TextRange(element.startOffset, expression.startOffset) return TextRange(element.startOffset, expression.startOffset)
@@ -37,7 +37,7 @@ public class ReplaceCallWithBinaryOperatorIntention : JetSelfTargetingRangeInten
if (!resolvedCall.isReallySuccess()) return null if (!resolvedCall.isReallySuccess()) return null
if (resolvedCall.getCall().getTypeArgumentList() != null) return null if (resolvedCall.getCall().getTypeArgumentList() != null) return null
val argument = resolvedCall.getCall().getValueArguments().singleOrNull() ?: return null val argument = resolvedCall.getCall().getValueArguments().singleOrNull() ?: return null
if ((resolvedCall.getArgumentMapping(argument) as ArgumentMatch).valueParameter.getIndex() != 0) return null if ((resolvedCall.getArgumentMapping(argument) as ArgumentMatch).valueParameter.index != 0) return null
if (!element.isReceiverExpressionWithValue()) return null if (!element.isReceiverExpressionWithValue()) return null
@@ -35,7 +35,7 @@ public class ReplaceContainsIntention : JetSelfTargetingRangeIntention<KtDotQual
val resolvedCall = element.toResolvedCall(BodyResolveMode.PARTIAL) ?: return null val resolvedCall = element.toResolvedCall(BodyResolveMode.PARTIAL) ?: return null
if (!resolvedCall.isReallySuccess()) return null if (!resolvedCall.isReallySuccess()) return null
val argument = resolvedCall.getCall().getValueArguments().singleOrNull() ?: return null val argument = resolvedCall.getCall().getValueArguments().singleOrNull() ?: return null
if ((resolvedCall.getArgumentMapping(argument) as ArgumentMatch).valueParameter.getIndex() != 0) return null if ((resolvedCall.getArgumentMapping(argument) as ArgumentMatch).valueParameter.index != 0) return null
val target = resolvedCall.getResultingDescriptor() val target = resolvedCall.getResultingDescriptor()
val returnType = target.getReturnType() ?: return null val returnType = target.getReturnType() ?: return null
@@ -62,10 +62,10 @@ public class JetChangeSignatureData(
} }
parameters = baseDescriptor.getValueParameters() parameters = baseDescriptor.getValueParameters()
.mapTo(receiver?.let{ arrayListOf(it) } ?: arrayListOf()) { parameterDescriptor -> .mapTo(receiver?.let{ arrayListOf(it) } ?: arrayListOf()) { parameterDescriptor ->
val jetParameter = valueParameters?.get(parameterDescriptor.getIndex()) val jetParameter = valueParameters?.get(parameterDescriptor.index)
JetParameterInfo( JetParameterInfo(
callableDescriptor = baseDescriptor, callableDescriptor = baseDescriptor,
originalIndex = parameterDescriptor.getIndex(), originalIndex = parameterDescriptor.index,
name = parameterDescriptor.getName().asString(), name = parameterDescriptor.getName().asString(),
type = parameterDescriptor.getType(), type = parameterDescriptor.getType(),
defaultValueForParameter = jetParameter?.getDefaultValue(), defaultValueForParameter = jetParameter?.getDefaultValue(),
@@ -167,7 +167,7 @@ public class JetChangeSignatureHandler : ChangeSignatureHandler {
return when (descriptor) { return when (descriptor) {
is FunctionDescriptor -> { is FunctionDescriptor -> {
if (descriptor.getValueParameters().any { it.getVarargElementType() != null }) { if (descriptor.getValueParameters().any { it.varargElementType != null }) {
val message = JetRefactoringBundle.message("error.cant.refactor.vararg.functions") val message = JetRefactoringBundle.message("error.cant.refactor.vararg.functions")
CommonRefactoringUtil.showErrorHint(project, editor, message, ChangeSignatureHandler.REFACTORING_NAME, HelpID.CHANGE_SIGNATURE) CommonRefactoringUtil.showErrorHint(project, editor, message, ChangeSignatureHandler.REFACTORING_NAME, HelpID.CHANGE_SIGNATURE)
return null return null
@@ -93,7 +93,7 @@ public class CallArgumentTranslator private constructor(
var concatArguments: MutableList<JsExpression>? = null var concatArguments: MutableList<JsExpression>? = null
for (parameterDescriptor in valueParameters) { for (parameterDescriptor in valueParameters) {
val actualArgument = valueArgumentsByIndex.get(parameterDescriptor.getIndex()) val actualArgument = valueArgumentsByIndex.get(parameterDescriptor.index)
val argContext = context().innerBlock() val argContext = context().innerBlock()