diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.java index 9b33ae89b8e..fcb160acda3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.java @@ -516,9 +516,6 @@ public class CandidateResolver { if (expression == null) continue; JetType expectedType = getEffectiveExpectedType(parameterDescriptor, argument); - if (TypeUtils.dependsOnTypeParameters(expectedType, candidateCall.getCandidateDescriptor().getTypeParameters())) { - expectedType = NO_EXPECTED_TYPE; - } CallResolutionContext newContext = context.replaceDataFlowInfo(infoForArguments.getInfo(argument)) .replaceBindingTrace(trace).replaceExpectedType(expectedType); diff --git a/compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.kt b/compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.kt new file mode 100644 index 00000000000..319b5bc8737 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +fun foo(x: R, y: String) {} +fun foo(x: R, y: R) { + foo(x, "") // ok, resolved foo(x: R, y: String) + foo(x, "") // ok, foo(x: R, y: String) + foo(x, x) // ok, resolved foo(x: R, y: R) + foo(x, x) // ok, resolved foo(x: R, y: R) +} + +class Q(x: R) { + fun foo() { + Q("") + } +} +fun Q(x: String) {} diff --git a/compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.txt b/compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.txt new file mode 100644 index 00000000000..767e79eea34 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.txt @@ -0,0 +1,13 @@ +package + +internal fun Q(/*0*/ x: kotlin.String): kotlin.Unit +internal fun foo(/*0*/ x: R, /*1*/ y: R): kotlin.Unit +internal fun foo(/*0*/ x: R, /*1*/ y: kotlin.String): kotlin.Unit + +internal final class Q { + public constructor Q(/*0*/ x: R) + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + internal final fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index e8c40e7afff..60e86934aea 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -5095,6 +5095,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("sameTypeParameterUse.kt") + public void testSameTypeParameterUse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/generics/sameTypeParameterUse.kt"); + doTest(fileName); + } + @TestMetadata("compiler/testData/diagnostics/tests/generics/starProjections") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)