From 396f38e9b3b2eb9af9b873a12d048e19c8f456cf Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Sat, 10 Oct 2015 01:43:36 +0300 Subject: [PATCH] fix check for ambiguous parameter names for overriding methods --- .../resolve/calls/ValueArgumentsToParametersMapper.java | 6 +++--- .../tests/namedArguments/namedArgumentsInOverrides.kt | 8 ++++++-- .../tests/namedArguments/namedArgumentsInOverrides.txt | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ValueArgumentsToParametersMapper.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ValueArgumentsToParametersMapper.java index 1beca1168a1..2a48fbeb8de 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ValueArgumentsToParametersMapper.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/ValueArgumentsToParametersMapper.java @@ -22,8 +22,7 @@ import com.intellij.psi.impl.source.tree.LeafPsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor; -import org.jetbrains.kotlin.descriptors.CallableDescriptor; -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor; +import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.*; @@ -164,7 +163,8 @@ public class ValueArgumentsToParametersMapper { )); } - if (candidate.hasStableParameterNames() && nameReference != null && valueParameterDescriptor != null) { + if (candidate.hasStableParameterNames() && nameReference != null && valueParameterDescriptor != null && + candidate instanceof CallableMemberDescriptor && ((CallableMemberDescriptor)candidate).getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { for (ValueParameterDescriptor parameterFromSuperclass : valueParameterDescriptor.getOverriddenDescriptors()) { if (OverrideResolver.shouldReportParameterNameOverrideWarning(valueParameterDescriptor, parameterFromSuperclass)) { report(NAME_FOR_AMBIGUOUS_PARAMETER.on(nameReference)); diff --git a/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.kt b/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.kt index 895d390e4b8..46f4c9b742f 100644 --- a/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.kt +++ b/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.kt @@ -13,6 +13,10 @@ interface D : C { override fun foo(d1: Int, d2: Double) } -fun test(d: D) { - d.foo(d1 = 1, d2 = 1.0) +fun test1(d: D) { + d.foo(d1 = 1, d2 = 1.0) +} + +fun test2(c: C) { + c.foo(b1 = 1, b2 = 1.0) } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.txt b/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.txt index d1a5ecd7145..c588127cc5a 100644 --- a/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.txt +++ b/compiler/testData/diagnostics/tests/namedArguments/namedArgumentsInOverrides.txt @@ -1,6 +1,7 @@ package -public fun test(/*0*/ d: D): kotlin.Unit +public fun test1(/*0*/ d: D): kotlin.Unit +public fun test2(/*0*/ c: C): kotlin.Unit public interface A { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean