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 {}
11
12interface A
13{
14    public function foo(TestOne|TestTwo $param): X&Y;
15}
16
17interface B extends A
18{
19    public function foo(X&Y $param): TestOne|TestTwo;
20}
21
22interface C extends A
23{
24    public function foo(X $param): TestTwo;
25}
26
27interface D extends A
28{
29    public function foo(Y $param): TestOne;
30}
31
32interface E extends B
33{
34    public function foo(X $param): TestTwo;
35}
36
37interface F extends B
38{
39    public function foo(Y $param): TestOne;
40}
41
42?>
43===DONE===
44--EXPECT--
45===DONE===
46