J2K ValueParameterDescriptor inteface in one go
This commit is contained in:
+1
-1
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -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(),
|
||||||
|
|||||||
+3
-3
@@ -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) }
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -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()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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
-26
@@ -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
|
||||||
}
|
}
|
||||||
+1
-1
@@ -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)
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
+2
-2
@@ -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(),
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -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()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user