Fix an issue with abstract trait methods
Summary:
If a trait declared an abstract method, and it was included in a class with a
non-unique ancestor declaring that method, this was incorrectly triggering an
error saying that the abstract method was trying to override the concrete method
from the ancestor class. This was only an issue with non-unique base classes
because in this case we can't statically determine whether or not the abstract
trait method will be declared.
This diff fixes the issue by properly annotating which methods were imported
from a trait (using the AttrTrait attribute), and then using this to prevent an
abstract method that came from a trait from attempting to override a concrete
method.
Reviewed By: mxw
Differential Revision:
D3869226
fbshipit-source-id:
7753ed1c52a4205963c2a04e1b6ca32a25b1d914