From 7bd12e33c0545de23a2c5af4fe73fa37f2f4608b Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Thu, 3 Sep 2015 12:45:46 +1000 Subject: Don't offer `asInstanceOf` et al as completions in a fresh REPL Trying harder to keep the synthetic interpretter wrapper classes behind the curtain --- .../scala/tools/nsc/interpreter/PresentationCompilerCompleter.scala | 4 +++- test/junit/scala/tools/nsc/interpreter/CompletionTest.scala | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/repl/scala/tools/nsc/interpreter/PresentationCompilerCompleter.scala b/src/repl/scala/tools/nsc/interpreter/PresentationCompilerCompleter.scala index 3fb4428e76..56819cf08e 100644 --- a/src/repl/scala/tools/nsc/interpreter/PresentationCompilerCompleter.scala +++ b/src/repl/scala/tools/nsc/interpreter/PresentationCompilerCompleter.scala @@ -71,7 +71,9 @@ class PresentationCompilerCompleter(intp: IMain) extends Completion with ScalaCo val found = result.completionsAt(cursor) match { case NoResults => Completion.NoCandidates case r => - val matching = r.matchingResults() + def isInterpreterWrapperMember(m: Member): Boolean = + definitions.isUniversalMember(m.sym) && nme.isReplWrapperName(m.prefix.typeSymbol.name) + val matching = r.matchingResults().filterNot(isInterpreterWrapperMember) val tabAfterCommonPrefixCompletion = lastCommonPrefixCompletion.contains(buf.substring(0, cursor)) && matching.exists(_.symNameDropLocal == r.name) val doubleTab = tabCount > 0 && matching.forall(_.symNameDropLocal == r.name) if (tabAfterCommonPrefixCompletion || doubleTab) defStringCandidates(matching, r.name) diff --git a/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala b/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala index 8c72ed7b32..003a138e47 100644 --- a/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala +++ b/test/junit/scala/tools/nsc/interpreter/CompletionTest.scala @@ -42,6 +42,10 @@ class CompletionTest { // stable terms are offered in type completion as they might be used as a prefix checkExact(completer, """object O { def x_y_z = 0; val x_z_y = ""; type T = x_""")("x_z_y") checkExact(completer, """def method { def x_y_z = 0; val x_z_y = ""; type T = x_""")("x_z_y") + + // We exclude inherited members of the synthetic interpreter wrapper classes + checkExact(completer, """asInstanceO""")() + checkExact(completer, """class C { asInstanceO""")("asInstanceOf") } @Test -- cgit v1.2.3