You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
disable runtime enforcement of require class constraints for mock classes
Summary:
A trait with a `require class C` constraints can only be used by class `C`, which must be final. This is enforced by HHVM when loading the class that uses the trait with the constraint.
HHVM enforcement is however too strict in presence of mock classes (see test mock.php in this diff). This diff disables HHVM enforcement for classes with the `<<__MockClass>>` attribute.
Additionally, this diff improves the error message printed when HHVM enforcement of `require class` constraints detects an error.
Reviewed By: ricklavoie
Differential Revision: D40547447
fbshipit-source-id: 56acc7e2c0a8abdb52b5d465b17b7f8b392bf118
Fatal error: Trait 'T' may only be used from class 'C', which must be final in %s/requireclass_abstract_01.bad.php on line 6
1
+
Fatal error: Non final class 'C' uses trait 'T', but trait 'T' may only be used from class 'C', which must be final in %s/requireclass_abstract_01.bad.php on line 6
Fatal error: Trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_abstract_01.bad.php on line 6
1
+
Fatal error: Non final class 'C' uses trait '<<flattened>>', but trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_abstract_01.bad.php on line 6
Fatal error: Trait 'T' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_02.bad.php on line 12
1
+
Fatal error: Non final class 'D' uses trait 'T', but trait 'T' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_02.bad.php on line 12
Fatal error: Trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_02.bad.php on line 12
1
+
Fatal error: Non final class 'D' uses trait '<<flattened>>', but trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_02.bad.php on line 12
Fatal error: Trait 'T' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_03.bad.php on line 12
1
+
Fatal error: Non final class 'D' uses trait 'T', but trait 'T' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_03.bad.php on line 12
Fatal error: Trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_03.bad.php on line 12
1
+
Fatal error: Non final class 'D' uses trait '<<flattened>>', but trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_hierarchy_03.bad.php on line 12
Fatal error: Trait 'T' may only be used from class 'C', which must be final in %s/requireclass_nonfinal_01.bad.php on line 6
1
+
Fatal error: Non final class 'C' uses trait 'T', but trait 'T' may only be used from class 'C', which must be final in %s/requireclass_nonfinal_01.bad.php on line 6
Fatal error: Trait '<<flattened>>'may only be used from class 'C', which must be final in %s/requireclass/requireclass_nonfinal_01.bad.php on line 6
1
+
Fatal error: Non final class 'C' uses trait '<<flattened>>', but trait '<<flattened>>' may only be used from class 'C', which must be final in %s/requireclass_nonfinal_01.bad.php on line 6
0 commit comments