KT-4893 Code completion should not show multiple functions with the same signature
#KT-4893 Fixed
This commit is contained in:
@@ -18,16 +18,23 @@ package org.jetbrains.kotlin.psi;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.JetNodeTypes;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
|
||||
public class JetValueArgumentName extends JetElementImpl {
|
||||
public class JetValueArgumentName extends JetElementImpl implements ValueArgumentName {
|
||||
public JetValueArgumentName(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
}
|
||||
|
||||
@Nullable @IfNotParsed
|
||||
@Override
|
||||
@NotNull
|
||||
public JetSimpleNameExpression getReferenceExpression() {
|
||||
return (JetSimpleNameExpression) findChildByType(JetNodeTypes.REFERENCE_EXPRESSION);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Name getAsName() {
|
||||
return getReferenceExpression().getReferencedNameAsName();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,12 +17,13 @@
|
||||
package org.jetbrains.kotlin.psi
|
||||
|
||||
import com.intellij.psi.impl.source.tree.LeafPsiElement
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
public trait ValueArgument {
|
||||
IfNotParsed
|
||||
public fun getArgumentExpression(): JetExpression?
|
||||
|
||||
public fun getArgumentName(): JetValueArgumentName?
|
||||
public fun getArgumentName(): ValueArgumentName?
|
||||
|
||||
public fun isNamed(): Boolean
|
||||
|
||||
@@ -40,3 +41,8 @@ public trait FunctionLiteralArgument : ValueArgument {
|
||||
|
||||
override fun getArgumentExpression(): JetExpression
|
||||
}
|
||||
|
||||
public interface ValueArgumentName {
|
||||
public val asName: Name
|
||||
public val referenceExpression: JetSimpleNameExpression?
|
||||
}
|
||||
|
||||
+14
-6
@@ -155,9 +155,11 @@ public class ValueArgumentsToParametersMapper {
|
||||
|
||||
D candidate = candidateCall.getCandidateDescriptor();
|
||||
|
||||
JetSimpleNameExpression nameReference = argument.getArgumentName().getReferenceExpression();
|
||||
ValueParameterDescriptor valueParameterDescriptor = parameterByName.get(nameReference.getReferencedNameAsName());
|
||||
if (!candidate.hasStableParameterNames()) {
|
||||
ValueArgumentName argumentName = argument.getArgumentName();
|
||||
assert argumentName != null;
|
||||
ValueParameterDescriptor valueParameterDescriptor = parameterByName.get(argumentName.getAsName());
|
||||
JetReferenceExpression nameReference = argumentName.getReferenceExpression();
|
||||
if (!candidate.hasStableParameterNames() && nameReference != null) {
|
||||
report(NAMED_ARGUMENTS_NOT_ALLOWED.on(
|
||||
nameReference,
|
||||
candidate instanceof FunctionInvokeDescriptor ? INVOKE_ON_FUNCTION_TYPE : NON_KOTLIN_FUNCTION
|
||||
@@ -165,14 +167,20 @@ public class ValueArgumentsToParametersMapper {
|
||||
}
|
||||
|
||||
if (valueParameterDescriptor == null) {
|
||||
report(NAMED_PARAMETER_NOT_FOUND.on(nameReference, nameReference));
|
||||
if (nameReference != null) {
|
||||
report(NAMED_PARAMETER_NOT_FOUND.on(nameReference, nameReference));
|
||||
}
|
||||
unmappedArguments.add(argument);
|
||||
setStatus(WEAK_ERROR);
|
||||
}
|
||||
else {
|
||||
candidateCall.getTrace().record(REFERENCE_TARGET, nameReference, valueParameterDescriptor);
|
||||
if (nameReference != null) {
|
||||
candidateCall.getTrace().record(REFERENCE_TARGET, nameReference, valueParameterDescriptor);
|
||||
}
|
||||
if (!usedParameters.add(valueParameterDescriptor)) {
|
||||
report(ARGUMENT_PASSED_TWICE.on(nameReference));
|
||||
if (nameReference != null) {
|
||||
report(ARGUMENT_PASSED_TWICE.on(nameReference));
|
||||
}
|
||||
unmappedArguments.add(argument);
|
||||
setStatus(WEAK_ERROR);
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ object DynamicCallableDescriptors {
|
||||
null,
|
||||
index,
|
||||
Annotations.EMPTY,
|
||||
arg.getArgumentName()?.getReferenceExpression()?.getReferencedNameAsName() ?: Name.identifier("p$index"),
|
||||
arg.getArgumentName()?.asName ?: Name.identifier("p$index"),
|
||||
outType,
|
||||
false,
|
||||
varargElementType,
|
||||
|
||||
@@ -60,7 +60,7 @@ public class CallMaker {
|
||||
}
|
||||
|
||||
@Override
|
||||
public JetValueArgumentName getArgumentName() {
|
||||
public ValueArgumentName getArgumentName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user