SI-8229 Source compatible name for implicit any2stringadd

To support the established pattern for disabling it for
an compilation unit.

Update scaladoc's knowledge of our "typeclasses".

Leave a `private[scala]` version of `StringAdd` (public in bytecode)
to ensure binary compatibility with 2.11.0-M8 for partest.
SI-7788 Avoid accidental shadowing of Predef.conforms

Rename `conforms` to `$conforms` and put in a minimal backstop: pos/t7788.scala

TODO: predicate the backwards compatibility shim for `Predef_conforms`
on `-Xsource:2.10`
SI-4577 singleton type pattern test should use `eq`, not `==`

I find it hard to imagine anyone is relying on `case x: foo.type =>`
erroneously being compiled to `foo == x` instead of the spec'ed `foo eq x`,
so let's finally fix this.
SI-8224 Fix regression in f-bound aware LUBs

Disable the heuristic approach to recursive bounds unless
the compiler is running under `-Xstrict-inference`.
[the above was not authored by the original author]

In db46c71e88, steps were taken to avoid blowing up in the
pathological LUB calculation needed for:

    def trav = List(List(), Stream())

This skipped a level in the base class sequence when f-bounds
were detected at the current level.

In that example, when `lublist` was about to:

    mergePrefixAndArgs(
      typeOf[LinearSeqOptimized[A, List[A]]],
      typeOf[LinearSeqOptimized[A, Stream[A]]],
    )

If it proceeded (as in 2.10.3), the LUB is invalid:

    error: type arguments [B[_ >: D with C <: B[_ >: D with C <: A]],s.c.immutable.LinearSeq[B[_ >: D with C <: A]] with s.c.AbstractSeq[B[_ >: D with C <: A]] with s.c.LinearSeqOptimized[B[_ >: D with C <: A],s.c.immutable.LinearSeq[A] with s.c.AbstractSeq[A] with s.c.LinearSeqOptimized[A,Immutable with Equals with java.io.Serializable] with java.io.Serializable] with java.io.Serializable] do not conform to trait LinearSeqOptimized's type parameter bounds [+A,+Repr <: s.c.LinearSeqOptimized[A,Repr]]

To avoid this, the added code would skip to the first non-F-bounded
base type of the same arity of each element in the list. This would
get to:

    LinearSeqLike[D, Stream[D]]
    LinearSeqLike[C, List[C]]

which are lubbable without violating the type constraints.

I don't think this was the right remedy. For starters, as seen in
this bug report, SI-8224, if the list of types are identical we
have let a perfectly good lub slip through our fingers, and end up
calculating too general a type.

More generally, if the type arguments in f-bounded positions coincide,
we don't risk calculating a ill-bounded LUB.

Furthermore, the code was widening each of the types separately;
this isn't something we want to do within `if (isUniformFrontier)`.
AFAICT this was just wasteful and as all `ts0` start with the same
type symbol, so `typeConstructorList` should be uniform.

This commit restricts this base-class skipping to situations where
the argument inferred for an type argument that is used as an f-bound
is not:

    a) an existential (as created by `mergePrefixAndArgs` in invariant
      positions.), or
    b) equivalent to one of the corresponding input type arguments
       (this is the case that fixes the regression in pos/8224.scala)
SI-8306: handle SWITCH nodes with just default case

Handle properly SWITCH nodes that contain just a default case in optimizer
(ConstantOptimization). SWITCH with just default case is expressed as a
node with empty tags and exactly one label. We can handle such nodes
easily by introducing a shortcut in logic that computes reachableLabels.

Add a test case which triggers patmat to generate SWITCH node with just
a default case.

Fixes SI-8306.
SI-1503 don't assume unsound type for ident/literal patterns

The fix only kicks in under -Xfuture. We also warn under -Xlint.

What type should a variable bound to the value matched by a pattern have?
To avoid CCEs, it should be a type that's implied by the matching
semantics of the pattern.

Usually, the type implied by a pattern matching a certain value
is the pattern's type, because pattern matching implies instance-of checks.

However, Stable Identifier and Literal patterns are matched using `==`,
which does not imply a type for the binder that binds the matched value.

The change in type checking due to this fix is that programs that used to crash with a CCE
(because we blindly cast to the type of the pattern, which a `==` check does not imply)
now get a weaker type instead (and no cast). They may still type check, or they may not.

To compensate for this fix, change `case x@Foo => x` to `case x: Foo.type => x`,
if it's important that `x` have type `Foo.type`.

See also:
- SI-4577: matching of singleton type patterns uses `eq`,
  not `==` (so that the types are not a lie).
- SI-5024: patmat strips unused bindings, but affects semantics
Attributed val/var processing for syntactics (SI-8180)
TypedTreesPrinter added
changes based on pull request comments:
print root packages flag; tests for syntactics; SyntacticEmptyTypeTree added to Printers
printers flag processing improvements: printRootPkg flag fixed, comments to flags metadata printing added
lazy vals printing fixed for typechecked trees
CodePrinter: TypedTreePrinter merged with ParsedTreePrinter
move methods for typechecked trees processing to TreeInfo
printOwners support added to Printers; whitespaces removed
block processing fixed for syntactics in typechecked trees
block wrapping for trees modified
fixes for wrappingIntoTerm
PrintersTest commented
Merge pull request #3560 from gkossakowski/issue/SI-8306

SI-8306: handle SWITCH nodes with just default case
SI-8197 Overload resolution should not consider default arguments

The spec says

> Let B be the set of alternatives in A that are applicable (§6.6)
> [...] It is an error if none of the members in B is applicable. If
> there is one single applicable alternative, that alternative is
> chosen. Otherwise, let C be the set of applicable alternatives which
> don’t employ any default argument in the application to e1, ..., em.
> It is again an error if C is empty. Otherwise, one chooses the most
> specific alternative among the alternatives in C [...].

There are many ways to interpret this, but none of them involves
excluding default getters, which is what the old code was doing.
We now exclude all alternatives that define any default arguments.

NOTE: according to SI-4728, this should fail to compile with an
ambiguity error. The compiler has been accepting this program
for all of 2.10.x, as far as I can tell, so let's not change that
for 2.11.0-RC1...
SI-5479 deprecate DelayedInit outside of App

DelayedInit's semantics are way too surprising.

For example, it delays initialization of fields,
so that fields on objects that extend `App`
(which `extends DelayedInit`) are not initialized
until the `main` method is called.

For more details and a proposed alternative,
see https://issues.scala-lang.org/browse/SI-4330?jql=labels%20%3D%20delayedinit%20AND%20resolution%20%3D%20unresolved.

Support for `App` will continue -- we'll special case it.
SI-6675 deprecation warning for auto-tupling in patterns

NOTE: when the deprecation warning becomes an error,
SI-6111 must become a `won't fix`