1--TEST--
2Replacing union of classes respecting intersection type by intersection type
3--FILE--
4<?php
5
6interface X {}
7interface Y {}
8
9class TestOne implements X, Y {}
10class TestTwo implements X, Y {}
11class Foo {}
12
13interface A
14{
15    public function foo(TestOne|TestTwo|Foo $param): (X&Y)|Foo;
16}
17
18interface B extends A
19{
20    public function foo((X&Y)|Foo $param): TestOne|TestTwo|Foo;
21}
22
23interface C extends A
24{
25    public function foo(X|Foo $param): TestTwo;
26}
27
28interface D extends A
29{
30    public function foo(Y|Foo $param): TestOne;
31}
32
33interface E extends B
34{
35    public function foo(X|Foo $param): TestTwo;
36}
37
38interface F extends B
39{
40    public function foo(Y|Foo $param): TestOne;
41}
42
43?>
44===DONE===
45--EXPECT--
46===DONE===
47