"invoke" from function types do not have any meaningful parameter names
This commit is contained in:
+8
-7
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.synthetic
|
||||
import com.intellij.util.SmartList
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl
|
||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||
import org.jetbrains.kotlin.load.java.sam.SingleAbstractMethodUtils
|
||||
@@ -161,11 +160,13 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : BaseImportingSc
|
||||
newOwner: DeclarationDescriptor,
|
||||
newModality: Modality,
|
||||
newVisibility: Visibility,
|
||||
newIsOperator: Boolean,
|
||||
newIsInfix: Boolean,
|
||||
newIsExternal: Boolean,
|
||||
newIsInline: Boolean,
|
||||
newIsTailrec: Boolean,
|
||||
isOperator: Boolean,
|
||||
isInfix: Boolean,
|
||||
isExternal: Boolean,
|
||||
isInline: Boolean,
|
||||
isTailrec: Boolean,
|
||||
hasStableParameterNames: Boolean,
|
||||
hasSynthesizedParameterNames: Boolean,
|
||||
original: FunctionDescriptor?,
|
||||
copyOverrides: Boolean,
|
||||
kind: CallableMemberDescriptor.Kind,
|
||||
@@ -178,7 +179,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : BaseImportingSc
|
||||
): FunctionDescriptor? {
|
||||
val descriptor = super.doSubstitute(
|
||||
originalSubstitutor, newOwner, newModality, newVisibility,
|
||||
newIsOperator, newIsInfix, newIsExternal, newIsInline, newIsTailrec, original,
|
||||
isOperator, isInfix, isExternal, isInline, isTailrec, hasStableParameterNames, hasSynthesizedParameterNames, original,
|
||||
copyOverrides, kind, newValueParameterDescriptors, newExtensionReceiverParameterType, newReturnType, name,
|
||||
preserveSource, signatureChange)
|
||||
as MyFunctionDescriptor? ?: return null
|
||||
|
||||
@@ -87,6 +87,8 @@ private fun createSynthesizedFunctionWithFirstParameterAsReceiver(descriptor: Fu
|
||||
result.isExternal = original.isExternal
|
||||
result.isInline = original.isInline
|
||||
result.isTailrec = original.isTailrec
|
||||
result.setHasStableParameterNames(false);
|
||||
result.setHasSynthesizedParameterNames(true);
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@ class A(foo: Int.() -> Unit) {
|
||||
}
|
||||
}
|
||||
|
||||
fun test(foo: Int.() -> Unit) {
|
||||
4.foo()
|
||||
fun test(foo: Int.(String) -> Unit) {
|
||||
4.foo("")
|
||||
4.foo(<!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p1<!> = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
4.foo(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p2<!> = "")
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package
|
||||
|
||||
public fun test(/*0*/ foo: kotlin.Int.() -> kotlin.Unit): kotlin.Unit
|
||||
public fun test(/*0*/ foo: kotlin.Int.(kotlin.String) -> kotlin.Unit): kotlin.Unit
|
||||
|
||||
public final class A {
|
||||
public constructor A(/*0*/ foo: kotlin.Int.() -> kotlin.Unit)
|
||||
|
||||
+2
-2
@@ -22,6 +22,6 @@ fun test2(f: (String) -> Unit) {
|
||||
|
||||
fun test3(f: String.(String) -> Unit) {
|
||||
"".f("")
|
||||
"".f(<!NAMED_PARAMETER_NOT_FOUND!>p0<!> = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
"".f(<!NAMED_PARAMETER_NOT_FOUND!>zzz<!> = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
"".f(<!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>p0<!> = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
"".f(<!NAMED_ARGUMENTS_NOT_ALLOWED, NAMED_PARAMETER_NOT_FOUND!>zzz<!> = ""<!NO_VALUE_FOR_PARAMETER!>)<!>
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ fun test(a: A) {
|
||||
|
||||
Resolved call:
|
||||
|
||||
Resulting descriptor: operator fun invoke(p1: Int): Int defined in kotlin.Function1
|
||||
Resulting descriptor: operator fun invoke(Int): Int defined in kotlin.Function1
|
||||
|
||||
Explicit receiver kind = DISPATCH_RECEIVER
|
||||
Dispatch receiver = foo {Function1<Int, Int>}
|
||||
|
||||
+2
-2
@@ -144,8 +144,8 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement
|
||||
// 2. copies method's type parameters (with new containing declaration) and properly substitute to them in value parameters, return type and etc.
|
||||
JavaMethodDescriptor enhancedMethod = (JavaMethodDescriptor) doSubstitute(
|
||||
TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(),
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(), getOriginal(),
|
||||
/* copyOverrides = */ true, getKind(),
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(), hasStableParameterNames(), hasSynthesizedParameterNames(),
|
||||
getOriginal(), /* copyOverrides = */ true, getKind(),
|
||||
enhancedValueParameters, enhancedReceiverType, enhancedReturnType,
|
||||
null, /* preserveSource */false, /* signatureChange = */ false);
|
||||
|
||||
|
||||
+2
@@ -39,6 +39,8 @@ public class FunctionInvokeDescriptor private constructor(
|
||||
// "p0", "p1", etc. should not be baked into the language
|
||||
override fun hasStableParameterNames(): Boolean = false
|
||||
|
||||
override fun hasSynthesizedParameterNames(): Boolean = true
|
||||
|
||||
override fun createSubstitutedCopy(
|
||||
newOwner: DeclarationDescriptor,
|
||||
original: FunctionDescriptor?,
|
||||
|
||||
+23
-4
@@ -47,6 +47,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
private boolean isExternal = false;
|
||||
private boolean isInline = false;
|
||||
private boolean isTailrec = false;
|
||||
private boolean hasStableParameterNames = true;
|
||||
private boolean hasSynthesizedParameterNames = false;
|
||||
private final Set<FunctionDescriptor> overriddenFunctions = SmartSet.create();
|
||||
private final FunctionDescriptor original;
|
||||
private final Kind kind;
|
||||
@@ -83,7 +85,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
this.visibility = visibility;
|
||||
this.extensionReceiverParameter = DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverParameterType);
|
||||
this.dispatchReceiverParameter = dispatchReceiverParameter;
|
||||
|
||||
|
||||
for (int i = 0; i < typeParameters.size(); ++i) {
|
||||
TypeParameterDescriptor typeParameterDescriptor = typeParameters.get(i);
|
||||
if (typeParameterDescriptor.getIndex() != i) {
|
||||
@@ -135,6 +137,14 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
this.unsubstitutedReturnType = unsubstitutedReturnType;
|
||||
}
|
||||
|
||||
public void setHasStableParameterNames(boolean hasStableParameterNames) {
|
||||
this.hasStableParameterNames = hasStableParameterNames;
|
||||
}
|
||||
|
||||
public void setHasSynthesizedParameterNames(boolean hasSynthesizedParameterNames) {
|
||||
this.hasSynthesizedParameterNames = hasSynthesizedParameterNames;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ReceiverParameterDescriptor getExtensionReceiverParameter() {
|
||||
@@ -221,12 +231,12 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
|
||||
@Override
|
||||
public boolean hasStableParameterNames() {
|
||||
return true;
|
||||
return hasStableParameterNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSynthesizedParameterNames() {
|
||||
return false;
|
||||
return hasSynthesizedParameterNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -253,6 +263,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
}
|
||||
return doSubstitute(originalSubstitutor, getContainingDeclaration(), modality, visibility,
|
||||
isOperator, isInfix, isExternal, isInline, isTailrec,
|
||||
hasStableParameterNames, hasSynthesizedParameterNames,
|
||||
getOriginal(), true, getKind());
|
||||
}
|
||||
|
||||
@@ -266,12 +277,16 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
boolean isExternal,
|
||||
boolean isInline,
|
||||
boolean isTailrec,
|
||||
boolean hasStableParameterNames,
|
||||
boolean hasSynthesizedParameterNames,
|
||||
@Nullable FunctionDescriptor original,
|
||||
boolean copyOverrides,
|
||||
@NotNull Kind kind
|
||||
) {
|
||||
return doSubstitute(originalSubstitutor,
|
||||
newOwner, newModality, newVisibility, isOperator, isInfix, isExternal, isInline, isTailrec, original, copyOverrides, kind,
|
||||
newOwner, newModality, newVisibility, isOperator, isInfix, isExternal, isInline, isTailrec,
|
||||
hasStableParameterNames, hasSynthesizedParameterNames,
|
||||
original, copyOverrides, kind,
|
||||
getValueParameters(), getExtensionReceiverParameterType(), getReturnType(),
|
||||
null, /* preserveSource = */ false, /* signatureChange */ false);
|
||||
}
|
||||
@@ -294,6 +309,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
boolean isExternal,
|
||||
boolean isInline,
|
||||
boolean isTailrec,
|
||||
boolean hasStableParameterNames,
|
||||
boolean hasSynthesizedParameterNames,
|
||||
@Nullable FunctionDescriptor original,
|
||||
boolean copyOverrides,
|
||||
@NotNull Kind kind,
|
||||
@@ -364,6 +381,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
substitutedDescriptor.setExternal(isExternal);
|
||||
substitutedDescriptor.setInline(isInline);
|
||||
substitutedDescriptor.setTailrec(isTailrec);
|
||||
substitutedDescriptor.setHasStableParameterNames(hasStableParameterNames);
|
||||
substitutedDescriptor.setHasSynthesizedParameterNames(hasSynthesizedParameterNames);
|
||||
|
||||
if (signatureChange || getInitialSignatureDescriptor() != null) {
|
||||
FunctionDescriptor initialSignature = (getInitialSignatureDescriptor() != null ? getInitialSignatureDescriptor() : this);
|
||||
|
||||
+3
-2
@@ -103,6 +103,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
||||
return (SimpleFunctionDescriptorImpl) doSubstitute(
|
||||
TypeSubstitutor.EMPTY, newOwner, modality, visibility,
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(),
|
||||
hasStableParameterNames(), hasSynthesizedParameterNames(),
|
||||
null, copyOverrides, kind
|
||||
);
|
||||
}
|
||||
@@ -113,7 +114,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
||||
//noinspection ConstantConditions
|
||||
return (SimpleFunctionDescriptorImpl) doSubstitute(
|
||||
TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(),
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(),
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(), hasStableParameterNames(), hasSynthesizedParameterNames(),
|
||||
null, /* copyOverrides = */ true, getKind(), getValueParameters(), getExtensionReceiverParameterType(), getReturnType(), name,
|
||||
/* preserveSource = */ true, /* signatureChange = */ true);
|
||||
}
|
||||
@@ -124,7 +125,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
||||
//noinspection ConstantConditions
|
||||
return (SimpleFunctionDescriptorImpl) doSubstitute(
|
||||
TypeSubstitutor.EMPTY, getContainingDeclaration(), getModality(), getVisibility(),
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(),
|
||||
isOperator(), isInfix(), isExternal(), isInline(), isTailrec(), hasStableParameterNames(), hasSynthesizedParameterNames(),
|
||||
null, /* copyOverrides = */ true, getKind(), valueParameters, getExtensionReceiverParameterType(), getReturnType(), null,
|
||||
/* preserveSource = */ true, /* signatureChange = */ true);
|
||||
}
|
||||
|
||||
@@ -4,5 +4,5 @@ fun x(name: String, next: (name: String) -> String): String {
|
||||
|
||||
//TODO: use parameter names from functional type
|
||||
/*
|
||||
Text: (<highlight>p1: String</highlight>), Disabled: false, Strikeout: false, Green: true
|
||||
Text: (<highlight>String</highlight>), Disabled: false, Strikeout: false, Green: true
|
||||
*/
|
||||
|
||||
@@ -7,6 +7,6 @@ fun call() {
|
||||
|
||||
//TODO: use parameter names from functional type
|
||||
/*
|
||||
Text: (<highlight>String</highlight>, String), Disabled: false, Strikeout: false, Green: true
|
||||
Text: (<highlight>name: String</highlight>, value: Int), Disabled: false, Strikeout: false, Green: false
|
||||
Text: (<highlight>p1: String</highlight>, p2: String), Disabled: false, Strikeout: false, Green: true
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user