From ebafcc4e7cb4734736d6a063d49226f944d74637 Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Wed, 26 Jan 2011 12:07:07 +0000 Subject: One last attempt at getting the presentation co... One last attempt at getting the presentation compiler pass some tests. no review. --- .../nsc/interactive/tests/InteractiveTest.scala | 31 ++++++++++++++++++---- test/files/presentation/simple-tests.check | 6 ++--- .../simple-tests/SimpleInteractiveTest.scala | 1 + 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala b/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala index 1cda29fdba..1d106a5c64 100644 --- a/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala +++ b/src/compiler/scala/tools/nsc/interactive/tests/InteractiveTest.scala @@ -94,19 +94,40 @@ abstract class InteractiveTest { buf.toList } + /** Should askAllSources wait for each ask to finish before issueing the next? */ + val synchronousRequests = true + /** Perform an operation on all sources at all positions that match the given * marker string. For instance, askAllSources("/*!*/")(askTypeAt)(println) would * ask the tyep at all positions marked with /*!*/ and println the result. */ - def askAllSources[T](marker: String)(askAt: Position => Response[T])(f: (Position, T) => Unit) { + def askAllSourcesAsync[T](marker: String)(askAt: Position => Response[T])(f: (Position, T) => Unit) { val positions = allPositionsOf(str = marker).valuesIterator.toList.flatten val responses = for (pos <- positions) yield askAt(pos) - for ((pos, r) <- positions zip responses) r.get(TIMEOUT) match { - case Some(Left(members)) => - f(pos, members) + for ((pos, r) <- positions zip responses) withResponse(pos, r)(f) + } + + /** Synchronous version of askAllSources. Each position is treated in turn, waiting for the + * response before going to the next one. + */ + def askAllSourcesSync[T](marker: String)(askAt: Position => Response[T])(f: (Position, T) => Unit) { + val positions = allPositionsOf(str = marker).valuesIterator.toList.flatten + for (pos <- positions) withResponse(pos, askAt(pos))(f) + } + + def askAllSources[T] = if (synchronousRequests) askAllSourcesSync[T] _ else askAllSourcesAsync[T] _ + + /** Return the filename:line:col version of this position. */ + def showPos(pos: Position): String = + "%s:%d:%d".format(pos.source.file.name, pos.line, pos.column) + + protected def withResponse[T](pos: Position, response: Response[T])(f: (Position, T) => Unit) { + response.get(TIMEOUT) match { + case Some(Left(t)) => + f(pos, t) case None => - println("TIMEOUT: " + r) + println("TIMEOUT: " + showPos(pos)) case Some(r) => println("ERROR: " + r) } diff --git a/test/files/presentation/simple-tests.check b/test/files/presentation/simple-tests.check index 26ddc0836c..ed972ddcda 100644 --- a/test/files/presentation/simple-tests.check +++ b/test/files/presentation/simple-tests.check @@ -1,7 +1,5 @@ reload: Tester.scala askTypeCompletion at Tester.scala(12,39) -askTypeCompletion at Tester.scala(23,24) -askTypeCompletion at Tester.scala(105,29) ================================================================================ [response] aksTypeCompletion at (12,39) @@ -71,6 +69,7 @@ TypeMember(method withSource,[A](src: scala.tools.nsc.util.SourceFile)(op: => A) TypeMember(method withoutTruncating,[T](body: => T)T,true,true,) TypeMember(value x,=> scala.tools.nsc.reporters.StoreReporter,true,false,method any2ArrowAssoc) TypeMember(value x,scala.tools.nsc.reporters.StoreReporter,false,false,method any2ArrowAssoc) +askTypeCompletion at Tester.scala(23,24) ================================================================================ [response] aksTypeCompletion at (23,24) @@ -125,6 +124,7 @@ TypeMember(method wait,(x$1: Long,x$2: Int)Unit,true,true,) TypeMember(method wait,(x$1: Long)Unit,true,true,) TypeMember(value x,=> scala.tools.nsc.interactive.Response[U],true,false,method any2ArrowAssoc) TypeMember(value x,scala.tools.nsc.interactive.Response[U],false,false,method any2ArrowAssoc) +askTypeCompletion at Tester.scala(105,29) ================================================================================ [response] aksTypeCompletion at (105,29) @@ -181,8 +181,8 @@ TypeMember(method wait,(x$1: Long)Unit,true,true,) TypeMember(value x,=> scala.tools.nsc.util.SourceFile,true,false,method any2ArrowAssoc) TypeMember(value x,scala.tools.nsc.util.SourceFile,false,false,method any2ArrowAssoc) askTypeAt at Tester.scala(12,14) -askTypeAt at Tester.scala(13,14) [response] askTypeAt at (12,14) private[this] val reporter: scala.tools.nsc.reporters.StoreReporter = new reporters.StoreReporter() +askTypeAt at Tester.scala(13,14) [response] askTypeAt at (13,14) private[this] val compiler: scala.tools.nsc.interactive.Global = new Global(Tester.this.settings, Tester.this.reporter) diff --git a/test/files/presentation/simple-tests/SimpleInteractiveTest.scala b/test/files/presentation/simple-tests/SimpleInteractiveTest.scala index 0456f9f5e7..cfadc561ae 100644 --- a/test/files/presentation/simple-tests/SimpleInteractiveTest.scala +++ b/test/files/presentation/simple-tests/SimpleInteractiveTest.scala @@ -6,4 +6,5 @@ import scala.tools.nsc.interactive.tests._ */ object Test extends InteractiveTest { override val runRandomTests = false +// override val synchronousRequests = false } -- cgit v1.2.3