diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-05-22 15:51:18 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-05-23 22:09:55 +0200 |
commit | b941551529e40fc7d71cf25e1ad904ab7badd14c (patch) | |
tree | 2c026ad88f27d1d04c4b6f05e63ab19df77ac639 /CONTRIBUTING.md | |
parent | b45e2b7b30faaa4994740fbe063737934a187d4e (diff) | |
download | scala-b941551529e40fc7d71cf25e1ad904ab7badd14c.tar.gz scala-b941551529e40fc7d71cf25e1ad904ab7badd14c.tar.bz2 scala-b941551529e40fc7d71cf25e1ad904ab7badd14c.zip |
SI-6138 Centralize and refine detection of `getClass` calls
`getClass` is special cased in the compiler; this is described
in in the comments on `Definitions.Any_getClass`.
Part of this happens in `Typer#stabilize`. This was trying to determine
if an Ident or Select node was a call to `getClass` by merits of the name
of the tree's symbol and by checking that the its type (if it was a
MethodType or PolyType) had no parameters in the primary parameter list.
Overloaded user defined `getClass` methods confused this check. In the
enclosed test case, the tree `definitions.this.getClass` had an
`OverloadedType`, and such types always report an empty list of `params`.
This commit:
- changes `stabilize` to use `isGetClass`, rather than the
homebrew check
- changes `isGetClass` to consider a `Set[Symbol]` containing all
`getClass` variants. This moves some similar code from `Erasure`
to `Definitions`
- keeps a fast negative path in `isGetClass` based on the symbol's name
Diffstat (limited to 'CONTRIBUTING.md')
0 files changed, 0 insertions, 0 deletions