summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Remove manual mixins in JFunctionN.v2.12.0-M3-dc9effeJason Zaugg2016-03-1824-264/+2
| | | | | | | | | | | | | | | | | | | These manual mixins were forwarding to the impl classes have just been removed. We can now rely on default methods instead. Update Tests: - Fix test/files/pos/t1237.scala, we can't have an outer field in an interface, always use the outer method. - Don't crash on meaningless trait early init fields test/files/neg/t2796.scala - Remove impl class relate parts of inner class test - Remove impl class relate parts of elidable test - Remove impl class related reflection test. - Remove test solely about trait impl classes renaming - Update check file with additional stub symbol error - Disable unstable parts of serialization test. - TODO explain, and reset the expectation
* New trait encoding: use default methods, jettison impl classesJason Zaugg2016-03-1831-816/+188
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until now, concrete methods in traits were encoded with "trait implementation classes". - Such a trait would compile to two class files - the trait interface, a Java interface, and - the implementation class, containing "trait implementation methods" - trait implementation methods are static methods has an explicit self parameter. - some methods don't require addition of an interface method, such as private methods. Calls to these directly call the implementation method - classes that mixin a trait install "trait forwarders", which implement the abstract method in the interface by forwarding to the trait implementation method. The new encoding: - no longer emits trait implementation classes or trait implementation methods. - instead, concrete methods are simply retained in the interface, as JVM 8 default interface methods (the JVM spec changes in [JSR-335](http://download.oracle.com/otndocs/jcp/lambda-0_9_3-fr-eval-spec/index.html) pave the way) - use `invokespecial` to call private or particular super implementations of a method (rather `invokestatic`) - in cases when we `invokespecial` to a method in an indirect ancestor, we add that ancestor redundantly as a direct parent. We are investigating alternatives approaches here. - we still emit trait fowrarders, although we are [investigating](https://github.com/scala/scala-dev/issues/98) ways to only do this when the JVM would be unable to resolve the correct method using its rules for default method resolution. Here's an example: ``` trait T { println("T") def m1 = m2 private def m2 = "m2" } trait U extends T { println("T") override def m1 = super[T].m1 } class C extends U { println("C") def test = m1 } ``` The old and new encodings are displayed and diffed here: https://gist.github.com/retronym/f174d23f859f0e053580 Some notes in the implementation: - No need to filter members from class decls at all in AddInterfaces (although we do have to trigger side effecting info transformers) - We can now emit an EnclosingMethod attribute for classes nested in private trait methods - Created a factory method for an AST shape that is used in a number of places to symbolically bind to a particular super method without needed to specify the qualifier of the `Super` tree (which is too limiting, as it only allows you to refer to direct parents.) - I also found a similar tree shape created in Delambdafy, that is better expressed with an existing tree creation factory method, mkSuperInit.
* Merge pull request #5037 from janekdb/topic/2.12.x-scaladoc-fix-Source-linksAdriaan Moors2016-03-141-10/+8
|\ | | | | Fix Scaladoc links in scala.io.Source
| * Fix Scaladoc links in scala.io.SourceJanek Bogucki2016-03-131-10/+8
| | | | | | | | | | The link to iter will work if the restriction to showing only public members is lifted in the visibility section.
* | Merge pull request #4974 from szeiger/wip/patmat-outertestAdriaan Moors2016-03-145-64/+55
|\ \ | | | | | | More conservative optimization for unnecessary outer ref checks
| * | Improved outer ref checking in pattern matches:Adriaan Moors2016-03-075-64/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old algorithm omitted necessary outer ref checks in some places. This new one is more conservative. It only omits outer ref checks when the expected type and the scrutinee type match up, or when the expected type is defined in a static location. For this specific purpose the top level of a method or other code block (which is not a trait or class definition) is also considered static because it does not have a prefix. This change comes with a spec update to clarify the prefix rule for type patterns. The new wording makes it clear that the presence of a prefix is to be interpreted in a *semantic* way, i.e. the existence of a prefix determines the necessity for an outer ref check, no matter if the prefix is actually spelled out *syntactically*. Note that the old outer ref check implementation did not use the alternative interpretation of requiring prefixes to be given syntactically. It never created an outer ref check for a local class `C`, no matter if the pattern was `_: C` or `_: this.C`, thus violating both interpretations of the spec. There is now explicit support for unchecked matches (like `case _: (T @unchecked) =>`) to suppress warnings for unchecked outer refs. `@unchecked` worked before and was used for this purpose in `neg/t7721` but never actually existed as a feature. It was a result of a bug that prevented an outer ref check from being generated in the first place if *any* annotation was used on an expected type in a type pattern. This new version will still generate the outer ref check if an outer ref is available but suppress the warning otherwise. Other annotations on type patterns are ignored. New tests are in `neg/outer-ref-checks`. The expected results of tests `neg/t7171` and `neg/t7171b` have changed because the compiler now tries to generate additional outer ref checks that were not present before (which was a bug).
* | | Merge pull request #5040 from adriaanm/rebase-5031Jason Zaugg2016-03-156-112/+122
|\ \ \ | | | | | | | | Merge 2.11.x into 2.12.x [ci: last-only]
| * \ \ Merge 2.11.x into 2.12.xAdriaan Moors2016-03-145-66/+76
| |\ \ \ | | | | | | | | | | | | | | | Resolved conflicts as in b0e05b67c7
| | * \ \ Merge pull request #5005 from janekdb/2.11.x-man-page-scalacv2.11.8Seth Tisue2016-03-041-25/+26
| | |\ \ \ | | | | | | | | | | | | Document -Xxml:coalescing in scalac man page
| | | * | | Document -Xxml:coalescing in scalac man pageJanek Bogucki2016-03-031-25/+26
| | | | | | | | | | | | | | | | | | | | | | | | The formatting style is based on -g and -target.
| | * | | | Merge pull request #4994 from dk14/patch-1Seth Tisue2016-03-041-1/+1
| | |\ \ \ \ | | | | | | | | | | | | | | explicitly specify insertion-order feature in docs
| | | * | | | explicitly specify insertion-order feature in docsdk142016-02-231-1/+1
| | | | | | |
| | * | | | | Typesafe -> Lightbend in more placesSeth Tisue2016-03-042-2/+2
| | | | | | |
| | * | | | | SI-9425 Fix a residual bug with multi-param-list case classesJason Zaugg2016-03-041-3/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During code review for the fix for SI-9546, we found a corner case in the SI-9425 that remained broken. Using `finalResultType` peels off all the constructor param lists, and solves that problem.
| | * | | | | SI-9546 Fix regression in rewrite of case apply to constructor callJason Zaugg2016-03-021-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In SI-9425, I disabled the rewrite of `CaseClass.apply(x)` to `new CaseClass(x)` if the constructor was was less accessible than the apply method. This solved a problem with spurious "constructor cannot be accessed" errors during refchecks for case classes with non-public constructors. However, for polymorphic case classes, refchecks was persistent, and even after refusing to transform the `TypeApply` within: CaseClass.apply[String]("") It *would* try again to transform the enclosing `Select`, a code path only intended for monomorphic case classes. The tree has a `PolyType`, which foiled the newly added accessibility check. I've modified the call to `isSimpleCaseApply` from the transform of `Select` nodes to exclude polymorphic apply's from being considered twice.
| | * | | | | Refactor transform of case apply in refchecksJason Zaugg2016-03-021-28/+30
| | | |/ / / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've identified a dead call to `transformCaseApply` that seems to date back to Scala 2.6 vintages, in which case factory methods were a fictional companion method, rather than a real apply method in a companion module. This commit adds an abort in that code path to aide code review (if our test suite still passes, we know that I've removed dead code, rather than silently changing behaviour.) The following commit will remove it altogether I then inlined a slightly clunky abstraction in the two remaining calls to `transformCaseApply`. It was getting in the way of a clean fix to SI-9546, the topic of the next commit.
| | * | | | Fix bold text in reflect API for 2.11.xFelix Mulder2016-02-271-1/+1
| | | | | | | | | | | | | | | | | | Same as #4999
| * | | | | Merge commit 2.11.x into 2.12.x.Adriaan Moors2016-03-141-46/+46
| |\| | | |
| | * | | | Merge pull request #4993 from SethTisue/sbt-0.13.11Seth Tisue2016-02-261-46/+46
| | |\ \ \ \ | | | | | | | | | | | | | | upgrade to sbt 0.13.11
| | | * | | | upgrade to sbt 0.13.11Seth Tisue2016-02-221-46/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | yum! delicious dogfood!
* | | | | | | Merge pull request #5018 from ↵Seth Tisue2016-03-141-5/+31
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | janekdb/topic/2.12.x-scaladoc-advertise-deprecated-read-methods-less-Predef Remove mention of deprecated I/O methods from Predef main comment
| * | | | | | | Remove mention of deprecated I/O methods from Predef main commentJanek Bogucki2016-03-141-5/+31
| |/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The read* functions are deprecated so should not be highlighted. Copied Scaladoc from Console on the assumption that few people will tarry for long once they have seen the existence of the print* methods. Linkified print* methods. Added note to printf encouraging use of f interpolator.
* | | | | | | Merge pull request #5013 from janekdb/2.12.x-Scaladoc-ConversionsSeth Tisue2016-03-143-49/+49
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Format collection conversions Scaladoc as code blocks instead of bullets
| * | | | | | | Format collection conversions Scaladoc as code blocks instead of bulletsJanek Bogucki2016-03-093-49/+49
| | |_|_|_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | - Makes the list of conversions easier to scan - Makes main comment formatting internally consistent
* | | | | | | Merge pull request #5014 from janekdb/2.12.x-WeakHashSet-spellingSeth Tisue2016-03-141-6/+6
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Fix var spelling in WeakHashSet
| * | | | | | | Fix var spelling in WeakHashSetJanek Bogucki2016-03-091-6/+6
| |/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | WeakHashSet is internal so an exception was made against binary compatibility to allow the var to be made private.
* | / / / / / Change behavior of clear-button on input fieldsFelix Mulder2016-03-142-19/+13
| |/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit changes the behavior to only remove the "x" if there is no input in the input field. The old behavior was to bind the blur event to be fired later - but this had the drawback of not working properly on fast hardware as the timeout would actually beat the click event.
* | | | | | Merge pull request #4717 from Ichoran/issue/9347Adriaan Moors2016-03-146-3/+79
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-9347 Efficient head/tail, if possible, for immutable maps & sets
| * | | | | | SI-9347 Efficient head/tail, if possible, for immutable maps & setsRex Kerr2016-02-176-3/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most immutable collections, including sets and maps, have a better-than-O(n) method for removing an element. In those cases, tail and possibly head were overridden so the head/tail pattern can be used with less of a performance penalty. Speed improvements on head/tail pattern are (for sets/maps of size 1024, unless otherwise specified): ``` BitSet 190x HashSet 250x Set 400x Set2 9x Set4 12x HashMap 430x ListMap 2500x // size 128 Map 430x ``` Note: `ListMap` is actually `init`/`last` because it's maintained in reverse order. Altered ListMap docs to explain that reverse traversal is the fast way to do it. All tested sets/maps that were already fast are still fast. Test code is reproduced below, except it does ListSet with head/tail which doesn't show the improvement: ```scala object BenchTailSetMap { val th = new ichi.bench.Thyme val standard = 1 to 1024 val sets = Map[String, Set[Int]]( "Set" -> (Set.empty[Int] ++ standard), "Set4"-> Set(4, 7, 2, 1), "Set2"-> Set(3, 4), "HashSet" -> (collection.immutable.HashSet.empty[Int] ++ standard), "BitSet" -> (collection.immutable.BitSet.empty ++ standard), "SortedSet" -> (collection.immutable.SortedSet.empty[Int] ++ standard), "ListSet" -> (collection.immutable.ListSet.empty[Int] ++ standard) ) val pairs = standard.map(i => i -> i.toString) // ListMap implementation is HORRIBLE, O(n^3) tail! Cut down size. val maps = Map[String, Map[Int, String]]( "Map" -> (Map.empty[Int, String] ++ pairs), "HashMap" -> (collection.immutable.HashMap.empty[Int, String] ++ pairs), "SortedMap" -> (collection.immutable.SortedMap.empty[Int, String] ++ pairs), "ListMap" -> (collection.immutable.ListMap.empty[Int, String] ++ pairs.take(128)) ) def hts(s: Set[Int]) = { var si = s var x = 0 while (si.nonEmpty) { x += si.head si = si.tail } x } def htm(m: Map[Int, String]) = { var mi = m var x = 0 while (mi.nonEmpty) { x += mi.head._2.length mi = mi.tail } x } def run() { sets.toList.sortBy(_._1).foreach{ case (name, s) => th.pbench(hts(s), s.size, name) } maps.toList.sortBy(_._1).foreach{ case (name, m) => th.pbench(htm(m), m.size, name) } } } ```
* | | | | | | Remove unused classes from ScaladocFelix Mulder2016-03-1411-1226/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Several elements of the old Scaladoc are not in use anymore. To help with any reverting, the removal of these is done in a single commit (this one). The removal includes: - Old `Index`, the old top "index.html" - The letter index (with "_" and "deprecated") - The old `Template` which is superceded by `Entity`
* | | | | | | Scaladoc: Fix elidable threshold off-by-one comment and link elidableJanek Bogucki2016-03-091-8/+8
| |/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When -Xelide-below is 2000 (i.e. at least ASSERTION) the assert methods are not elided. - Fixed the above off-by-one error. - Made elidable a link
* | | | | | Fix typomathhun2016-03-091-2/+2
| | | | | |
* | | | | | Merge pull request #4970 from retronym/ticket/9658Jason Zaugg2016-03-091-2/+2
|\ \ \ \ \ \ | |_|_|_|_|/ |/| | | | | SI-9658 Fix crosstalk between partial fun. and GADT match
| * | | | | SI-9658 Fix crosstalk between partial fun. and GADT matchJason Zaugg2016-03-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When typechecking the synthetic default case of a pattern matching anonymous partial function, we failed to create a new `Context`. This led to crosstalk with the management of the saved type bounds of an enclosing GADT pattern match. This commit avoids the direct call to `typeCase` and instead indirects through `typedCases`, which spawns a new nested typer context, and hence avoids the crosstalk when `restoreSavedTypeBounds` runs.
* | | | | | Add fallback typefaces for monospaced sections in scaladocFelix Mulder2016-03-073-31/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit will also fix the `Filter All Members` input appearing if there are no members - please see root for an example. There's also a small CSS fix that addresses a vertical scrollbar on smaller viewports (footer was not responsively resized). review: @VladUreche lol
* | | | | | SI-6886: Deprecate -expand-all-typesJanek Bogucki2016-03-041-1/+5
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This Scaladoc flag was added to assist with debugging and was not intended to have general availability. If an element requires a separate Scaladoc page add @documentable.
* | | | | Fix diagrams for `Content Hierarchies` in scaladocFelix Mulder2016-03-023-10/+14
| | | | |
* | | | | Merge pull request #4934 from Shadow53/2.12.xSeth Tisue2016-03-011-0/+2
|\ \ \ \ \ | | | | | | | | | | | | Added Properties.isLinux to compliment the isWin and isMac methods
| * | | | | Added Properties.isLinux to compliment the isWin and isMac methodsShadow532016-01-301-0/+2
| | | | | |
* | | | | | Unclutter scaladoc entity membersFelix Mulder2016-03-017-145/+155
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit attempts to fix some minor annoyances regarding the UI when it comes to how things are shown. I.e. the complete definition is now hidden. Long signatures like: ```scala class HashMap[A, +B] extends AbstractMap[A, B] with Map[A, B] with MapLike[A, B, HashMap[A, B]] with Serializable with CustomParallelizable[(A, B), ParHashMap[A, B]] ``` will be reduced to: `class HashMap[A, +B]`. Full signature will be shown on hover and unfold. The package-view has been tweaked to look better on non-HiDPI displays. Also, subpackages to current package are now displayed before other entities.
* | | | | | Add package view to scaladocFelix Mulder2016-02-265-11/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The package view shows the current package's: - siblings - children packages - path to root package - child entities (objects, traits, abstract types and classes)
* | | | | | Merge remote-tracking branch 'origin/2.11.x' into ↵Jason Zaugg2016-02-2541-86/+108
|\ \ \ \ \ \ | | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | merge/2.11.x-to-2.12.x-20160225 Conflicts: scripts/jobs/integrate/bootstrap src/build/maven/scala-actors-pom.xml test/files/pos/t3420.flags Conflicts were trivial to resolve.
| * | | | | Typesafe is now LightbendSeth Tisue2016-02-249-18/+18
| | | | | |
| * | | | | Remove GIJ memory configuration advice from fsc, scala and scalac man pages.Janek Bogucki2016-02-203-15/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GIJ is uncommonly used so general guidance on setting memory configuration in the fsc, scala and scalac man pages would only be of use to a highly select group of individuals. For 99.99999999999999% of users this info would be an historical curio at best and random noise at worst.
| * | | | | fix smhasher urlxuwei-k2016-02-152-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | google code is dead http://google-opensource.blogspot.jp/2015/03/farewell-to-google-code.html
| * | | | | Fix off-by-one documentation error in Product<N>Janek Bogucki2016-02-1123-24/+23
| | |_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sanity check: scala> case class P2(i: Int, j: Int) defined class P2 val p2 = P2(1, 3) p2.productElement(0) res0: Any = 1 p2.productElement(1) res1: Any = 3 p2.productElement(2) java.lang.IndexOutOfBoundsException: 2 at P2.productElement(<console>:10)
| * | | | Merge pull request #4954 from retronym/topic/fullnameLukas Rytz2016-02-101-13/+25
| |\ \ \ \ | | | | | | | | | | | | Micro optimise Symbol#fullName
| | * | | | Micro optimise Symbol#fullNameJason Zaugg2016-02-091-13/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old approach of recursively calling `fullNameAsName` creates a lot of garbage for intermediate results, in addition to needless interning of those results into the name table. This commit instead creates a string buffer of the correct capacity and writes the component names directly into this. I compared old and new approaches and this shows a 2x speedup. ``` scala> val th = ichi.bench.Thyme.warmed(verbose = print) th: ichi.bench.Thyme = ichi.bench.Thyme@1643e817 scala> val w_old = th.Warm(sym.fullNameAsNameOld('.')) w_old: th.Warm[$r.intp.global.Name] = ichi.bench.Thyme$Warm@7a8d001b scala> val w_new = th.Warm(sym.fullNameAsName('.')) w_new: th.Warm[$r.intp.global.Name] = ichi.bench.Thyme$Warm@1ec14586 scala> th.pbenchOffWarm("", x => println(x))(w_old, 10, "old")(w_new, 10, "new") Benchmark comparison (in 4.084 s) old vs new Significantly different (p ~= 0) Time ratio: 0.53572 95% CI 0.51618 - 0.55525 (n=20) old 64.54 ns 95% CI 62.41 ns - 66.67 ns new 34.57 ns 95% CI 34.04 ns - 35.11 ns res3: $r.intp.global.Name = scala.collection.parallel.mutable.ParSeq ``` It is still expensive enough that we should still consider caching. The call to full name in `classBTypeFromSymbol` in the new backed is a prime candidate for optimization.
| * | | | | Merge pull request #4939 from szeiger/issue/9624Lukas Rytz2016-02-103-15/+25
| |\ \ \ \ \ | | | | | | | | | | | | | | SI-9624 Improve documentation for TraversableOnce
| | * | | | | SI-9624 Improve documentation for TraversableOnceStefan Zeiger2016-02-043-15/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Move the doc comment for `hasDefiniteSize` up from TraversableLike to GenTraversableOnce and improve it. - Add a note to `GenTraversableOnce.isEmpty` that implementations must not consume elements. - Clarify alternatives to subclassing TraversableOnce.