From 1b1ee18f97cf0adcf4349a9022b5a3bfae734347 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 13 Mar 2013 16:16:28 +0400 Subject: [PATCH] KT-3395 mapOf function can't be used as literal #KT-3395 Fixed --- .../jet/lang/resolve/calls/CallResolver.java | 1 + .../lang/resolve/calls/CandidateResolver.java | 7 ++++ .../tests/inference/nestedCalls/kt3395.kt | 35 +++++++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 5 +++ 4 files changed, 48 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/inference/nestedCalls/kt3395.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index d0533e31165..c0957165038 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -337,6 +337,7 @@ public class CallResolver { CallCandidateResolutionContext callCandidateResolutionContext = CallCandidateResolutionContext.createForCallBeingAnalyzed(resolvedCall, context, tracing); candidateResolver.completeNestedCallsInference(callCandidateResolutionContext); + candidateResolver.checkValueArgumentTypes(callCandidateResolutionContext); return results; } ResolvedCallImpl copy = CallResolverUtil.copy(resolvedCall, context); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 028a0364781..b90ede63dc9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -301,6 +301,7 @@ public class CandidateResolver { } else { completeNestedCallsInference(contextForArgument); + checkValueArgumentTypes(contextForArgument); } } } @@ -507,6 +508,12 @@ public class CandidateResolver { return new ValueArgumentsCheckingResult(resultStatus, checkingResult.argumentTypes); } + public ValueArgumentsCheckingResult checkValueArgumentTypes( + @NotNull CallCandidateResolutionContext context + ) { + return checkValueArgumentTypes(context, context.candidateCall, context.trace, RESOLVE_FUNCTION_ARGUMENTS); + } + private > ValueArgumentsCheckingResult checkValueArgumentTypes( @NotNull CallResolutionContext context, @NotNull ResolvedCallImpl candidateCall, diff --git a/compiler/testData/diagnostics/tests/inference/nestedCalls/kt3395.kt b/compiler/testData/diagnostics/tests/inference/nestedCalls/kt3395.kt new file mode 100644 index 00000000000..0174840583b --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/nestedCalls/kt3395.kt @@ -0,0 +1,35 @@ +//KT-3395 mapOf function can't be used as literal +package b + +import java.util.ArrayList + +public fun query(t: T, args: Map): List { + return ArrayList() +} + +fun test(pair: Pair) { + val id = "Hello" // variable is marked as unused + + println("Some" + query(0, mapOf(id to 1))) + + println("Some" + query(0, mapOf(pair))) +} + + +//from standard library +fun mapOf(vararg values: Pair): Map { throw Exception() } + +fun A.to(that: B): Pair { throw Exception() } + +fun println(message : Any?) { throw Exception() } + +class Pair () {} + +//short example +fun foo(t: T) = t + +fun test(t: String) { + + println("Some" + foo(t)) // t was marked with black square +} + diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 2d992146aff..f1cebbcf5bc 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2170,6 +2170,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/inference/nestedCalls/completeNestedForVariableAsFunctionCall.kt"); } + @TestMetadata("kt3395.kt") + public void testKt3395() throws Exception { + doTest("compiler/testData/diagnostics/tests/inference/nestedCalls/kt3395.kt"); + } + } @TestMetadata("compiler/testData/diagnostics/tests/inference/regressions")