diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2012-05-08 16:07:15 +0200 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2012-05-08 17:06:49 +0200 |
commit | 2e8029b127699ecd8ed1f55456faa345bd88c5ee (patch) | |
tree | 446e90390c05750e7bb0de4adfa4acafce7292d5 | |
parent | f9410256d97d8b8001e96291016d25f020013784 (diff) | |
download | scala-2e8029b127699ecd8ed1f55456faa345bd88c5ee.tar.gz scala-2e8029b127699ecd8ed1f55456faa345bd88c5ee.tar.bz2 scala-2e8029b127699ecd8ed1f55456faa345bd88c5ee.zip |
Fixed positions in named default applications (no hyperlinking in conjunction with implicit arguments).
Removed even more code in the presentation compiler testing infrastructure. One less level of indirection,
and a top-level object gone!
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/tests/core/FindOccurrences.scala | 28 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode.scala | 22 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/tests/core/SourcesCollector.scala | 2 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala | 2 | ||||
-rw-r--r-- | test/files/presentation/hyperlinks.check (renamed from test/files/presentation/patmat.check) | 12 | ||||
-rw-r--r-- | test/files/presentation/hyperlinks.flags (renamed from test/files/presentation/patmat.flags) | 0 | ||||
-rw-r--r-- | test/files/presentation/hyperlinks/Runner.scala (renamed from test/files/presentation/patmat/Runner.scala) | 0 | ||||
-rw-r--r-- | test/files/presentation/hyperlinks/src/NameDefaultTests.scala | 16 | ||||
-rw-r--r-- | test/files/presentation/hyperlinks/src/PatMatTests.scala (renamed from test/files/presentation/patmat/src/PatMatTests.scala) | 0 |
9 files changed, 46 insertions, 36 deletions
diff --git a/src/compiler/scala/tools/nsc/interactive/tests/core/FindOccurrences.scala b/src/compiler/scala/tools/nsc/interactive/tests/core/FindOccurrences.scala deleted file mode 100644 index e2a5a3e3ee..0000000000 --- a/src/compiler/scala/tools/nsc/interactive/tests/core/FindOccurrences.scala +++ /dev/null @@ -1,28 +0,0 @@ -package scala.tools.nsc -package interactive -package tests.core - -import scala.tools.nsc.util.Position -import scala.tools.nsc.util.SourceFile - -/** Find occurrences of `text` in the passed `sources`. */ -private[core] object FindOccurrences { - - def apply(sources: Seq[SourceFile])(text: String): Map[SourceFile, Seq[Position]] = - allPositionsOf(sources, text) - - /** All positions of the given string in all source files. */ - private def allPositionsOf(sources: Seq[SourceFile], str: String): Map[SourceFile, Seq[Position]] = - (for (s <- sources; p <- positionsOf(s, str)) yield p).groupBy(_.source) - - /** Return all positions of the given str in the given source file. */ - private def positionsOf(source: SourceFile, str: String): Seq[Position] = { - val buf = new collection.mutable.ListBuffer[Position] - var pos = source.content.indexOfSlice(str) - while (pos >= 0) { - buf += source.position(pos - 1) // we need the position before the first character of this marker - pos = source.content.indexOfSlice(str, pos + 1) - } - buf.toList - } -}
\ No newline at end of file diff --git a/src/compiler/scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode.scala b/src/compiler/scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode.scala index c274e13976..d2baaf32c6 100644 --- a/src/compiler/scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode.scala +++ b/src/compiler/scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode.scala @@ -16,7 +16,7 @@ trait PresentationCompilerRequestsWorkingMode extends TestResources { * ask the type at all positions marked with `TypeMarker.marker` and println the result. */ private def askAllSourcesAsync[T](marker: TestMarker)(askAt: Position => Response[T])(f: (Position, T) => Unit) { - val positions = allPositionsOf(marker.marker).valuesIterator.toList.flatten + val positions = allPositionsOf(str = marker.marker) val responses = for (pos <- positions) yield askAt(pos) for ((pos, r) <- positions zip responses) withResponse(pos, r)(f) @@ -26,13 +26,25 @@ trait PresentationCompilerRequestsWorkingMode extends TestResources { * response before going to the next one. */ private def askAllSourcesSync[T](marker: TestMarker)(askAt: Position => Response[T])(f: (Position, T) => Unit) { - val positions = allPositionsOf(marker.marker).valuesIterator.toList.flatten + val positions = allPositionsOf(str = marker.marker) for (pos <- positions) withResponse(pos, askAt(pos))(f) } - private def allPositionsOf: String => Map[SourceFile, Seq[Position]] = - FindOccurrences(sourceFiles) _ - + /** All positions of the given string in all source files. */ + private def allPositionsOf(srcs: Seq[SourceFile] = sourceFiles, str: String): Seq[Position] = + for (s <- srcs; p <- positionsOf(s, str)) yield p + + /** Return all positions of the given str in the given source file. */ + private def positionsOf(source: SourceFile, str: String): Seq[Position] = { + val buf = new collection.mutable.ListBuffer[Position] + var pos = source.content.indexOfSlice(str) + while (pos >= 0) { + buf += source.position(pos - 1) // we need the position before the first character of this marker + pos = source.content.indexOfSlice(str, pos + 1) + } + buf.toList + } + private def withResponse[T](pos: Position, response: Response[T])(f: (Position, T) => Unit) { /** Return the filename:line:col version of this position. */ def showPos(pos: Position): String = diff --git a/src/compiler/scala/tools/nsc/interactive/tests/core/SourcesCollector.scala b/src/compiler/scala/tools/nsc/interactive/tests/core/SourcesCollector.scala index 518cb7bd76..21e90fe57f 100644 --- a/src/compiler/scala/tools/nsc/interactive/tests/core/SourcesCollector.scala +++ b/src/compiler/scala/tools/nsc/interactive/tests/core/SourcesCollector.scala @@ -13,7 +13,7 @@ private[tests] object SourcesCollector { * */ def apply(base: Path, filter: SourceFilter): Array[SourceFile] = { assert(base.isDirectory) - base.walk.filter(filter).map(source).toArray + base.walk.filter(filter).map(source).toList.toArray.sortBy(_.file.name) } private def source(file: Path): SourceFile = source(AbstractFile.getFile(file.toFile)) diff --git a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala index 90e388c30a..bef6f13bc3 100644 --- a/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala +++ b/src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala @@ -338,7 +338,7 @@ trait NamesDefaults { self: Analyzer => // cannot call blockTyper.typedBlock here, because the method expr might be partially applied only val res = blockTyper.doTypedApply(tree, expr, refArgs, mode, pt) res.setPos(res.pos.makeTransparent) - val block = Block(stats ::: valDefs, res).setType(res.tpe).setPos(tree.pos) + val block = Block(stats ::: valDefs, res).setType(res.tpe).setPos(tree.pos.makeTransparent) context.namedApplyBlockInfo = Some((block, NamedApplyInfo(qual, targs, vargss :+ refArgs, blockTyper))) block diff --git a/test/files/presentation/patmat.check b/test/files/presentation/hyperlinks.check index 29fd8b8e68..85d295dd7d 100644 --- a/test/files/presentation/patmat.check +++ b/test/files/presentation/hyperlinks.check @@ -1,4 +1,14 @@ -reload: PatMatTests.scala +reload: NameDefaultTests.scala, PatMatTests.scala + +askHyperlinkPos for `someOtherInt` at (14,24) NameDefaultTests.scala +================================================================================ +[response] found askHyperlinkPos for `someOtherInt` at (12,9) NameDefaultTests.scala +================================================================================ + +askHyperlinkPos for `someString` at (14,45) NameDefaultTests.scala +================================================================================ +[response] found askHyperlinkPos for `someString` at (3,7) NameDefaultTests.scala +================================================================================ askHyperlinkPos for `CaseOne` at (12,18) PatMatTests.scala ================================================================================ diff --git a/test/files/presentation/patmat.flags b/test/files/presentation/hyperlinks.flags index dc13682c5e..dc13682c5e 100644 --- a/test/files/presentation/patmat.flags +++ b/test/files/presentation/hyperlinks.flags diff --git a/test/files/presentation/patmat/Runner.scala b/test/files/presentation/hyperlinks/Runner.scala index 3d19f2d948..3d19f2d948 100644 --- a/test/files/presentation/patmat/Runner.scala +++ b/test/files/presentation/hyperlinks/Runner.scala diff --git a/test/files/presentation/hyperlinks/src/NameDefaultTests.scala b/test/files/presentation/hyperlinks/src/NameDefaultTests.scala new file mode 100644 index 0000000000..b218040fe3 --- /dev/null +++ b/test/files/presentation/hyperlinks/src/NameDefaultTests.scala @@ -0,0 +1,16 @@ + +class NameDefaults { + val someString = "abc" + val someInt = 42 + + def foo(x: String, y: Int)(implicit logger: Int): Int = y + + implicit val l = 42 + + def bar { + println() + val someOtherInt = 10 + + foo(y = someOtherInt/*#*/, x = someString/*#*/) + } +} diff --git a/test/files/presentation/patmat/src/PatMatTests.scala b/test/files/presentation/hyperlinks/src/PatMatTests.scala index bbd0f2e7ed..bbd0f2e7ed 100644 --- a/test/files/presentation/patmat/src/PatMatTests.scala +++ b/test/files/presentation/hyperlinks/src/PatMatTests.scala |