]> granicus.if.org Git - php/commitdiff
Enable better trait conflict error message
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 10 Mar 2020 15:17:32 +0000 (16:17 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 10 Mar 2020 15:19:11 +0000 (16:19 +0100)
I don't think there is any reason to disable this anymore,
at least all the messages generated in tests look correct and
more useful.

Zend/tests/traits/bugs/case-sensitive.phpt
Zend/tests/traits/conflict001.phpt
Zend/tests/traits/conflict003.phpt
Zend/tests/traits/error_011.phpt
Zend/tests/traits/error_015.phpt
Zend/tests/traits/language010.phpt
Zend/tests/traits/language011.phpt
Zend/tests/traits/language014.phpt
Zend/tests/traits/methods_002.phpt
Zend/zend_inheritance.c

index 080b6b7cce4832ee0d82f0df3f7c4fadfe6297cf..b0a2e4b5454097364ceb6c641bf1a58dfe18558c 100644 (file)
@@ -20,4 +20,4 @@ class MyClass {
 }
 ?>
 --EXPECTF--
-Fatal error: Trait method M1 has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
+Fatal error: Trait method B::M1 has not been applied as MyClass::M1, because of collision with A::M1 in %s on line %d
index c288df735101c4c1ecae86c7ddc7734c50a6472c..16dd6fc2d5317019abd4b66de7b71379547fd852 100644 (file)
@@ -22,4 +22,4 @@ class TraitsTest {
 }
 ?>
 --EXPECTF--
-Fatal error: Trait method hello has not been applied, because there are collisions with other trait methods on TraitsTest in %s on line %d
+Fatal error: Trait method THello2::hello has not been applied as TraitsTest::hello, because of collision with THello1::hello in %s on line %d
index e274063a6f112daae0a910264da26f28f80e1c27..23ab97edc6af777588dac3d11dab9b6562fa7181 100644 (file)
@@ -28,4 +28,4 @@ class Talker {
 
 ?>
 --EXPECTF--
-Fatal error: Trait method smallTalk has not been applied, because there are collisions with other trait methods on Talker in %s on line %d
+Fatal error: Trait method B::smallTalk has not been applied as Talker::smallTalk, because of collision with A::smallTalk in %s on line %d
index 5042a4be1c4439744aeddc84a5b1d62c589abce4..9fb6bffe8ba793bc5fe08e9f77a9ab88fd1464ad 100644 (file)
@@ -23,4 +23,4 @@ var_dump($x->test());
 
 ?>
 --EXPECTF--
-Fatal error: Trait method test has not been applied, because there are collisions with other trait methods on bar in %s on line %d
+Fatal error: Trait method c::test has not been applied as bar::test, because of collision with foo::test in %s on line %d
index e494eb680e7e8a9b6a2e16b49052bd1d5bc310c8..c1309bd71354dff0e559307dcc5484f759cd35a1 100644 (file)
@@ -23,4 +23,4 @@ var_dump($x->test());
 
 ?>
 --EXPECTF--
-Fatal error: Trait method test has not been applied, because there are collisions with other trait methods on bar in %s on line %d
+Fatal error: Trait method baz::test has not been applied as bar::test, because of collision with foo::test in %s on line %d
index cd518f43e201990df55e6f05ebbee0eb9918db41..a5e85d07963343c6669a59c1a6e12cd861fe2f1c 100644 (file)
@@ -27,4 +27,4 @@ $o->world();
 
 ?>
 --EXPECTF--
-Fatal error: Trait method world has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
+Fatal error: Trait method World::world has not been applied as MyClass::world, because of collision with Hello::world in %s on line %d
index 1f5b4963088785621cabe26355d7320c1f801e77..6b66da86ce793f038dca8707edf09f9e8422e37e 100644 (file)
@@ -27,4 +27,4 @@ $o->sayWorld();
 
 ?>
 --EXPECTF--
-Fatal error: Trait method sayHello has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
+Fatal error: Trait method World::sayHello has not been applied as MyClass::sayHello, because of collision with Hello::sayHello in %s on line %d
index 20dcdea7c8a96b9c0bd46231fd4f2332b2c30e9c..2e1046fc3d42291617dd78a867a74048f62d8e9a 100644 (file)
@@ -27,4 +27,4 @@ $o->world();
 
 ?>
 --EXPECTF--
-Fatal error: Trait method hello has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
+Fatal error: Trait method World::world has not been applied as MyClass::hello, because of collision with Hello::hello in %s on line %d
index b23f8df27a3ff79238fdffee2c50d7ed90faca0b..2c72f6c5a68d6f5d451ba3ab62dc8352bda3f951 100644 (file)
@@ -25,4 +25,4 @@ var_dump(clone $o);
 
 ?>
 --EXPECTF--
-Fatal error: Trait method __clone has not been applied, because there are collisions with other trait methods on bar in %s on line %d
+Fatal error: Trait method baz::__clone has not been applied as bar::__clone, because of collision with foo::__clone in %s on line %d
index eab275e5094210311c6f3901e2fd7fdaf3921af2..a4371db6f20beb0dcb0f4803595f8874b346ec8c 100644 (file)
@@ -1612,15 +1612,10 @@ static void zend_add_trait_method(zend_class_entry *ce, zend_string *name, zend_
                } else if (UNEXPECTED((existing_fn->common.scope->ce_flags & ZEND_ACC_TRAIT)
                                && !(existing_fn->common.fn_flags & ZEND_ACC_ABSTRACT))) {
                        /* two traits can't define the same non-abstract method */
-#if 1
-                       zend_error_noreturn(E_COMPILE_ERROR, "Trait method %s has not been applied, because there are collisions with other trait methods on %s",
-                               ZSTR_VAL(name), ZSTR_VAL(ce->name));
-#else          /* TODO: better error message */
                        zend_error_noreturn(E_COMPILE_ERROR, "Trait method %s::%s has not been applied as %s::%s, because of collision with %s::%s",
                                ZSTR_VAL(fn->common.scope->name), ZSTR_VAL(fn->common.function_name),
                                ZSTR_VAL(ce->name), ZSTR_VAL(name),
                                ZSTR_VAL(existing_fn->common.scope->name), ZSTR_VAL(existing_fn->common.function_name));
-#endif
                } else {
                        /* inherited members are overridden by members inserted by traits */
                        /* check whether the trait method fulfills the inheritance requirements */