fix check for ambiguous parameter names for overriding methods

This commit is contained in:
Michael Nedzelsky
2015-10-10 01:43:36 +03:00
parent c3d3160345
commit 396f38e9b3
3 changed files with 11 additions and 6 deletions
@@ -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));
@@ -13,6 +13,10 @@ interface D : C {
override fun foo(<!PARAMETER_NAME_CHANGED_ON_OVERRIDE!>d1<!>: Int, <!PARAMETER_NAME_CHANGED_ON_OVERRIDE!>d2<!>: Double)
}
fun test(d: D) {
d.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>d1<!> = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>d2<!> = 1.0)
fun test1(d: D) {
d.foo(d1 = 1, d2 = 1.0)
}
fun test2(c: C) {
c.foo(<!NAME_FOR_AMBIGUOUS_PARAMETER!>b1<!> = 1, <!NAME_FOR_AMBIGUOUS_PARAMETER!>b2<!> = 1.0)
}
@@ -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