From 1d0ef01eeadf77396a9de098bc649ddefc49a164 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Thu, 14 Jun 2012 14:06:17 +0400 Subject: [PATCH] REPL overload resolution ambiguity Fix overload resolution ambiguity in REPL. Note, resolution for functions declared in script is very different from regular programs: in scripts function declared later wins. See functionOverloadResolutionAnyBeatsString for example. #KT-2272 Fixed --- .../jetbrains/jet/cli/jvm/repl/ReplInterpreter.java | 3 +++ .../jet/lang/descriptors/ScriptDescriptor.java | 9 ++++++++- .../jet/lang/resolve/ScriptHeaderResolver.java | 11 ++++++++++- .../resolve/calls/OverloadingConflictResolver.java | 10 ++++++++++ .../testData/repl/functionOverloadResolution.repl | 6 ++++++ .../functionOverloadResolutionAnyBeatsString.repl | 6 ++++++ .../org/jetbrains/jet/repl/ReplInterpreterTest.java | 10 ++++++++++ 7 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/repl/functionOverloadResolution.repl create mode 100644 compiler/testData/repl/functionOverloadResolutionAnyBeatsString.repl diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java index b64193739a8..419f715236a 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java @@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; import org.jetbrains.jet.lang.resolve.AnalyzingUtils; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTraceContext; +import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TraceBasedRedeclarationHandler; import org.jetbrains.jet.lang.resolve.java.CompilerDependencies; @@ -150,6 +151,8 @@ public class ReplInterpreter { injector.getTopDownAnalyzer().prepareForTheNextReplLine(); + psiFile.getScript().putUserData(ScriptHeaderResolver.PRIORITY_KEY, lineNumber); + ScriptDescriptor scriptDescriptor = doAnalyze(psiFile); Progress backendProgress = new Progress() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java index 161da23bf37..eb9ff460d60 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java @@ -34,14 +34,17 @@ import java.util.List; public class ScriptDescriptor extends DeclarationDescriptorImpl { private static final Name NAME = Name.special("