scala/scala — pull request #2141 by paulp (2013-02-19 21:12:13+00:00)
Title: Fix and optimization in overriding logic.

Given:

trait Foo { def f: Int = 5 }
trait Bar extends Foo { def f: Int }

I noticed allOverriddenSymbols for the abstract f defined in Bar
was returning the method from Foo, even though an abstract method
cannot override a concrete one. There were other bits of code
which accidentally depended on this outcome. Now allOverriddenSymbols
for Bar is empty.

The optimization is that whether or not a symbol overrides
any other symbols is known at creation time and does not change.
We now spend a lot less time looking for overridden symbols in
base classes by storing that value, "isOverridingSymbol".