Enable diamond import of final methods via `use` chains
commit71cc1f86800034c9966f01b60586add02f882327
authorFrancesco Zappa Nardelli <fzn@fb.com>
Tue, 26 Oct 2021 10:14:32 +0000 (26 03:14 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Tue, 26 Oct 2021 10:15:53 +0000 (26 03:15 -0700)
treebbd2630e809868caec3102a82fa8ec44b96fd133
parent241af124dea209c62c08bd34fad26fe02dc59ff6
Enable diamond import of final methods via `use` chains

Summary:
This diff enables diamond inclusion of traits via `use` chains should be supported even if they define final methods.  Eg. the code below should be accepted:

```
trait T {
    final public function foo() : int { return 1; }
}

trait T1 { use T; }
trait T2 { use T; }

<<__EnableMethodTraitDiamond>>
class C {
    use T1, T2;
}
```

The rationale is that `final` is a constraint about inheritance hierarchy.  We thus still reject:

```
trait T {
    final public function foo() : int { return 1; }
}

class D  { use T; }

<<__EnableMethodTraitDiamond>>
class C extends D {
    use T;
}
```
because this code reuses a final method via the class inheritance.

Reviewed By: Wilfred

Differential Revision: D31857847

fbshipit-source-id: 0661d257e513a27bd5ac7070b8d6cd498d00f489
27 files changed:
hphp/hack/src/typing/nast_check/trait_reuse_check.ml
hphp/hack/test/typecheck/trait_diamond_1.php.exp [deleted file]
hphp/hack/test/typecheck/trait_diamond_4.php.exp [deleted file]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php [copied from hphp/hack/test/typecheck/trait_diamond_1c.php with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php.exp [copied from hphp/hack/test/typecheck/trait_diamond_1c.php.exp with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_abstract_1.good.php [moved from hphp/hack/test/typecheck/trait_diamond_2.php with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_abstract_1.good.php.exp [moved from hphp/hack/test/typecheck/trait_diamond_2.php.exp with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php [copied from hphp/hack/test/typecheck/trait_diamond_1c.php with 55% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.exp [moved from hphp/hack/test/typecheck/trait_diamond_3.php.exp with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_2.bad.php [copied from hphp/hack/test/typecheck/trait_diamond_1c.php with 55% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_2.bad.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_3.bad.php [new file with mode: 0644]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_3.bad.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_1.bad.php [moved from hphp/hack/test/typecheck/trait_diamond_1.php with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_1.bad.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_2.bad.php [moved from hphp/hack/test/typecheck/trait_diamond_1b.php with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_2.bad.php.exp [moved from hphp/hack/test/typecheck/trait_diamond_1b.php.exp with 50% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php [moved from hphp/hack/test/typecheck/trait_diamond_1c.php with 86% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php.exp [copied from hphp/hack/test/typecheck/trait_diamond_1c.php.exp with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_no_attr_1.bad.php [moved from hphp/hack/test/typecheck/trait_diamond_4.php with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_no_attr_1.bad.php.exp [new file with mode: 0644]
hphp/hack/test/typecheck/trait_reuse/trait_require_extends_2.good.php [moved from hphp/hack/test/typecheck/trait_diamond_3.php with 100% similarity]
hphp/hack/test/typecheck/trait_reuse/trait_require_extends_2.good.php.exp [moved from hphp/hack/test/typecheck/trait_diamond_1c.php.exp with 100% similarity]
hphp/test/slow/traits/diamond_use/diamond_use_final1.php [new file with mode: 0644]
hphp/test/slow/traits/diamond_use/diamond_use_final1.php.expectf [new file with mode: 0644]
hphp/test/slow/traits/diamond_use/diamond_use_final2.php [new file with mode: 0644]
hphp/test/slow/traits/diamond_use/diamond_use_final2.php.expectf [new file with mode: 0644]