summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* SI-5691 lint warning when a type parameter shadows an existing type.Antoine Gourlay2014-08-1210-7/+85
| | | | | | | | | | | | | | | | | | | | | | | | | This adds a new lint warning for when a class/method/type-member's type parameter shadows an existing type: `-Xlint:type-parameter-shadow`. It excludes type parameters of synthetic methods (the user can't rename or remove those anyway), otherwise, for example, every case class triggers the warning. Also fixes a test that contained wrong java sources (that didn't even compile...), discovered thanks to the warning. --- This kind of errors shows up every now and then on the mailing-list, on stackoverflow, etc. so maybe a warning would be useful. I was afraid this would yield too many warnings for libraries that are heavy on type parameters, but no: running this on scalaz and shapeless HEAD (`v7.1.0-RC1-41-g1cc0a96` and `v2.0.0-M1-225-g78426a0` respectively) yields 44 warnings. None of them are false positives; they usually come from: - scalaz loving using `A` as type parameter, even several levels deep of parametrized classes/methods - or calling a type parameter that will hold a map `Map`, or similar, thus shadowing an existing type
* Merge pull request #3895 from lrytz/jline-updateGrzegorz Kossakowski2014-07-251-0/+2
|\ | | | | Also update jline.version when update.versions is set during build
| * Also update jline.version when update.versions is set during buildLukas Rytz2014-07-221-0/+2
| |
* | Merge pull request #3894 from adriaanm/depmsgGrzegorz Kossakowski2014-07-256-21/+25
|\ \ | | | | | | Better error message than 'bad symbolic reference'.
| * | Better error message than 'bad symbolic reference'.Adriaan Moors2014-07-226-21/+25
| |/ | | | | | | | | | | Let's not scare people, and try to give them some advice. PS: we should really come up with a better mechanism for testing errors/warnings
* | Merge pull request #3897 from lrytz/2.11.2-bumpGrzegorz Kossakowski2014-07-252-7/+7
|\ \ | | | | | | Bump versions for Scala 2.11.2
| * | Bump versions for Scala 2.11.2Lukas Rytz2014-07-232-7/+7
| |/
* | Merge pull request #3890 from dhgarrette/2.11.xGrzegorz Kossakowski2014-07-251-3/+1
|\ \ | | | | | | Remove "throws InvalidEscapeException" from StringContext.raw doc
| * | Fixed incorrect example in StringContext.raw docDan Garrette2014-07-211-1/+1
| | | | | | | | | As pointed out by @som-snytt, \u0023 is #, not \u0025.
| * | Remove "throws InvalidEscapeException" from StringContext.raw docDan Garrette2014-07-211-2/+0
| |/ | | | | Since StringContext.raw doesn't escape its input, it does not call `treatEscapes` and cannot throw the InvalidEscapeException.
* | Merge pull request #3884 from mpociecha/remove-invalidation-from-globalGrzegorz Kossakowski2014-07-252-238/+0
|\ \ | | | | | | Remove invalidation from Global.scala
| * | Remove invalidation from Global.scalampociecha2014-07-172-238/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The invalidation has been introduced in these commits: https://github.com/scala/scala/commit/167309afd10f9b65b35e6874a30ea6340a1ddc44 https://github.com/scala/scala/commit/ace051ff0abe112b767c3912f846eb4d50e52cf5 https://github.com/scala/scala/commit/e156d4a7cf4afdab91b7c281a0e8ae6e4743cc4a It's safe to remove this functionality. It was added originally to support an experiment with resident compilation. The experiment was performed in sbt and dropped in https://github.com/sbt/sbt/commit/6def08e029e474dc35af04b7403a2aeaddd0dec6 Since then Scala team concluded to not work on resident compilation so it's safe to delete unused code.
* | | Merge pull request #3826 from lrytz/opt/refactorTrackedGrzegorz Kossakowski2014-07-2515-89/+481
|\ \ \ | | | | | | | | Assortiment of cleanups and comments around the backend
| * | | Documentation for isModuleClassLukas Rytz2014-07-081-0/+3
| | | |
| * | | Support writing classfile of version 52Lukas Rytz2014-07-083-1/+3
| | | |
| * | | Clean up and document some usages of flags in the backendLukas Rytz2014-07-089-44/+154
| | | |
| * | | Pattern matching on ClassBType extracts the inernalNameLukas Rytz2014-07-081-22/+27
| | | |
| * | | Remove unnessecary check when computing InnerClass attribute flagsLukas Rytz2014-07-081-2/+13
| | | | | | | | | | | | | | | | The final flag is computed correctly by javaFlags.
| * | | Comment summarizing the JVM spec for InnerClass / EnclosingMethodLukas Rytz2014-07-081-0/+199
| | | |
| * | | Minor cleanups and comments in GenBCodeLukas Rytz2014-07-086-21/+83
| | | |
* | | | Merge pull request #3896 from retronym/ticket/8743Grzegorz Kossakowski2014-07-256-34/+35
|\ \ \ \ | |_|_|/ |/| | | SI-8743 Fix crasher with poly-methods annotated with @varargs
| * | | SI-8743 Fix crasher with poly-methods annotated with @varargsJason Zaugg2014-07-236-34/+35
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code that generated the Java varargs forwarder was basing things on the `ValDef-s` of the parameters of the source method. But, their types refer to a type parameter skolems of the enclosing method, which led to a type mismatch when typechecking the forwarder. Instead, I've reworked the code to simply use the `DefDef`-s symbol's info, which *doesn't* refer to skolems. This actually simplifies the surrounding code somewhat; rather than repeated symbols in a map we can just time travel the pre-uncurry method signatures to figure out which params are releated.
* | | Merge pull request #3888 from som-snytt/issue/8736v2.11.2Lukas Rytz2014-07-2110-9/+54
|\ \ \ | | | | | | | | SI-8736 Restore -language to former glory
| * | | SI-8736 Error if no arg and no defaultSom Snytt2014-07-201-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now `-language` with no option will emit an error: ``` $ skalac -feature -language unused.scala scalac error: '-language' requires an option. See '-language:help'. scalac -help gives more information ```
| * | | SI-8736 Restore -language to former glorySom Snytt2014-07-2010-8/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MultiChoice allows -language to work like -Xlint. The bug as described was that the setting value was set instead of updated (++=) with additional flags. The unreported bug was that `_` no longer set all settings. The corrected behavior is that "contains" means "it was enabled, or _ was set and it was not disabled explicitly." That is the behavior of `-Xlint` but with a different mechanism, since each lint option is a Setting. A semantic difference is that -Xlint enables all the lint options, but -language does not enable all the language features. `scalac -X` does not explain this additional behavior of the `-Xlint` flag. Also worth noting that `scalac -feature -language unused.scala` failed in 2.11.1 but succeeds silently now.
* | | | Merge pull request #3887 from Ichoran/issue/8738Lukas Rytz2014-07-202-9/+26
|\ \ \ \ | |/ / / |/| | | SI-8738 Regression in range equality
| * | | SI-8738 Regression in range equalityRex Kerr2014-07-202-9/+26
|/ / / | | | | | | | | | | | | | | | Missed the case of comparing a non-empty range to an empty one. Fixed by checking nonEmpty/isEmpty on other collection. Added a test to verify the behavior.
* | | Merge pull request #3885 from som-snytt/issue/8525-cleanupLukas Rytz2014-07-189-110/+133
|\ \ \ | | | | | | | | SI-8525 Clarify usage of -Xlint:_,flag
| * | | SI-8525 MultiChoice takes a helper functionSom Snytt2014-07-185-20/+40
| | | | | | | | | | | | | | | | | | | | | | | | Clean-up code review comments. MultiChoice takes a helper function for outputting help text.
| * | | SI-8525 Multichoice helpSom Snytt2014-07-174-14/+38
| | | | | | | | | | | | | | | | | | | | | | | | Enables -Xlint:help and -language:help. The Settings API makes it difficult to innovate.
| * | | SI-8525 Clarify usage of -Xlint:_,flagSom Snytt2014-07-166-98/+77
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also clarify usage of -Xlint flag. Align more with javac -Xlint:all,-flag,flag where once a flag is explicitly enabled it cannot be disabled, but where the wildcard is a backstop only. (There is no all option yet here.) -Xlint and -Xlint:_ just set a flag which is consulted by any unset lint warning. Xlint warnings consult the state of Xlint when they are unset. Individual -Ywarn-ings do not. Other warnings are explicitly set to false. They can only be enabled programmatically. Some tests are corrected. Also, option order is no longer significant, see the unit test.
* | | Merge pull request #3792 from som-snytt/issue/8525Lukas Rytz2014-07-1628-75/+318
|\ \ \ | | | | | | | | SI-8525 -Xlint:nowarn-missing-interpolator
| * | | SI-8525 No anonymous lintSom Snytt2014-07-1016-40/+122
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Turn anonymous references to `settings.lint` into named settings. After that, trust to Adriaan to make them filterable. There are a few remaining top-level -Y lint warnings that are deprecated.
| * | | SI-8525 Add -Xlint:-warn-missing-interpolatorSom Snytt2014-07-0814-59/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Turn off lint warnings with negating prefix, and add a lint-only warning for the infamously nagging "Did you forget the interpolator?" That message is made more dignified. Without `-Xlint:false`, there is no mechanism to turn off anonymous linters once `-Xlint` is selected.
| * | | SI-8616 Error on -deprecation:true,falseSom Snytt2014-07-081-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an error, not a crash. Alternatively, one could define the multivalued colon case as equivalent to specifying the option multiple times. That would be very regular. But sometimes it's nicer just to error out.
| * | | SI-8610 -Xlint is multichoice optionSom Snytt2014-07-0812-20/+116
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make -Xlint a "multichoice" option for purposes of option parsing. This allows turning on "lint with these warnings" instead of only "turn off these warnings but enable other lint warnings". ``` $ scalac -Xlint:warn-adapted-args linty.scala # lint plus a warning $ scalac -Xlint warn-adapted-args linty.scala # same $ scalac -Xlint linty.scala # same as now $ scalac -Xlint -- linty.scala # ok, not necessary $ scalac -Xlint _ -- linty.scala # another funky underscore ``` This would also enable Xlint options that are not standalone options, although that is not implemented in this commit. For example, `-Xlint:no-missing-interpolator` could be used to disable that warning. (There is no `-Xoption:flavor=off` syntax.) (`no-` switches would not be enabled by `_`.)
* | | | Merge pull request #3883 from gourlaysama/wip/t8557Vlad Ureche2014-07-154-2/+35
|\ \ \ \ | | | | | | | | | | SI-8557 make scaladoc normalize paths of external jars.
| * | | | SI-8557 make scaladoc normalize paths of external jars.Antoine Gourlay2014-07-154-2/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Scaladoc compares (string representations of) the paths from -doc-external-doc and the paths form `sym.underlyingSource`. We now normalize on both ends before comparing them.
* | | | | Merge pull request #3817 from phaller/topic/typetagsLukas Rytz2014-07-1510-35/+99
|\ \ \ \ \ | | | | | | | | | | | | SI-5919 TypeTags and Exprs should be serializable
| * | | | | Add SerialVersionUID to SerializedTypeTag and SerializedExprPhilipp Haller2014-07-152-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The reason for adding the SerialVersionUID annotations is to be able to provide serialization stability throughout the 2.11.x series. And since type tags (and exprs) have not been serializable before, this does not break serialization for existing code.
| * | | | | SI-5919 TypeTags and Exprs should be serializablePhilipp Haller2014-07-1510-35/+99
| | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Make TypeCreator and TreeCreator extend Serializable. - When replacing a SerializedTypeTag with a TypeTag or WeakTypeTag, do not use scala.reflect.runtime.universe.rootMirror, since it is unlikely to find user classes; instead, create a runtime mirror using the context ClassLoader of the current thread. Use the same logic for SerializedExpr. - Remove writeObject/readObject methods from SerializedTypeTag and SerializedExpr since they are unused. - Add @throws annotation on writeReplace and readResolve methods. - Handle SecurityException if the current thread cannot access the context ClassLoader. - To make type tags of primitive value classes serializable, make PredefTypeCreator a top-level class. Otherwise, it would retain a reference to the enclosing Universe, rendering the TypeCreator non-serializable. Binary compatibility: - Keep nested PredefTypeCreator class to avoid backward binary incompatible change. - Keep `var` modifiers on the class parameters of SerializedTypeTag for backward binary compatibility. - Adds filter rules to forward binary compatibility whitelist: - `TypeCreator`, `PredefTypeCreator`, and `TreeCreator` must now extend from `Serializable`. - Must have new class `scala.reflect.api.PredefTypeCreator` to avoid problematic outer reference.
* | | | | Merge pull request #3858 from densh/si/8703Jason Zaugg2014-07-153-5/+19
|\ \ \ \ \ | | | | | | | | | | | | SI-8703 add support for blocks with just a single expression to quasiquotes
| * | | | | Address pull request feedbackDenys Shabalin2014-07-141-1/+3
| | | | | |
| * | | | | SI-8703 add support for blocks with just a single expression to quasiquotesDenys Shabalin2014-07-023-5/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously it was impossible to match a block that was constructed as Block(Nil, term) Due to the fact that quasiquotes always flatten those into just term. This is a correct behaviour for construction (for sake of consistency with parser) but doing it in deconstruction mode make it impossible to match such blocks which could have been constructed manually somewhere. To fix this we just disable block flattening in deconstruction mode. Interestingly enough this doesn't break existing code due to the fact that quasiquote's block matcher also matches expressions as single-element blocks. This allows to match single-element blocks with patterns like q"{ $foo }".
* | | | | | Merge pull request #3882 from adriaanm/jline-2.12Lukas Rytz2014-07-152-2/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | Bump jline version to 2.12 (Re: SI-8535)
| * | | | | | Bump jline version to 2.12 (Re: SI-8535)Adriaan Moors2014-07-152-2/+1
| | |/ / / / | |/| | | | | | | | | | | | | | | | Move version info where it belongs: versions.properties
* | | | | | Merge pull request #3845 from xeno-by/topic/attachment-subclassingJason Zaugg2014-07-154-1/+23
|\ \ \ \ \ \ | | | | | | | | | | | | | | relaxes attachment-matching rules
| * | | | | | relaxes attachment-matching rulesEugene Burmako2014-07-104-1/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It came as a surprise recently, but attachments.contains/get/update/remove require the class of the payload to match the provided tag exactly, not taking subclassing into account. This commit fixes the oversight.
* | | | | | | Merge pull request #3844 from xeno-by/topic/rangepos-subpatternsJason Zaugg2014-07-155-1/+26
|\ \ \ \ \ \ \ | |_|/ / / / / |/| | | | | | prevents c.internal.subpatterns from destroying rangeposes
| * | | | | | prevents some reflection APIs from destroying rangeposesEugene Burmako2014-07-105-1/+26
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit continues the work started in fcb3932b32. As we've figured out the hard way, exposing internally maintained trees (e.g. macro application) to the user is dangerous, because they can mutate the trees in place using one of the public APIs, potentially corrupting our internal state. Therefore, at some point we started duplicating everything that comes from the user and goes back to the user. This was generally a good idea due to the reason described above, but there was a problem that we didn't foresee - the problem of corrupted positions. It turns out that Tree.duplicate focuses positions in the tree being processed, turning range positions into offset ones, and that makes it impossible for macro users to make use of precise position information. I also went through the calls to Tree.duplicate to see what can be done to them. In cases when corruptions could happen, I tried to replace duplicate with duplicateAndKeepPositions. Some notes: 1) Tree rehashing performed in TreeGen uses duplicates here and there (e.g. in mkTemplate or in mkFor), which means that if one deconstructs a macro argument and then constructs it back, some of the positions in synthetic trees might become inaccurate. That's a general problem with synthetic trees though, so I don't think it should be addressed here. 2) TypeTree.copyAttrs does duplication of originals, which means that even duplicateAndKeepPositions will adversely affect positions of certain publicly accessible parts of type trees. I'm really scared to change this though, because who knows who can use this invariant. 3) Some methods that can be reached from the public API (Tree.substituteXXX, c.reifyXXX, c.untypecheck, ...) do duplicate internally, but that shouldn't be a big problem for us, because nothing is irreversibly corrupted here. It's the user's choice to call those methods (unlike with TypeTree.copyAttrs) and, if necessary, they can fixup the positions themselves afterwards. 4) Macro engine internals (macro impl binding creation, exploratory typechecking in typedMacroBody) use duplicate, but these aren't supposed to be seen by the user, so this shouldn't be a problem. 5) Certain parser functions, member syntheses and typer desugarings also duplicate, but in those cases we aren't talking about taking user trees and screwing them up, but rather about emitting potentially imprecise positions in the first place. Hence this commit isn't the right place to address these potential issues.