@@ -2450,7 +2450,7 @@ public function testPHP8IntersectionTypes()
2450
2450
2451
2451
2452
2452
/**
2453
- * Verify recognition of PHP8 intersection type declaration when the variable
2453
+ * Verify recognition of PHP8.1 intersection type declaration when the variable
2454
2454
* has either a spread operator or a reference.
2455
2455
*
2456
2456
* @return void
@@ -2702,6 +2702,161 @@ public function testPHP81NewInInitializers()
2702
2702
}//end testPHP81NewInInitializers()
2703
2703
2704
2704
2705
+ /**
2706
+ * Verify recognition of 8.2 DNF parameter type declarations.
2707
+ *
2708
+ * @return void
2709
+ */
2710
+ public function testPHP82DNFTypes ()
2711
+ {
2712
+ // Offsets are relative to the T_FUNCTION token.
2713
+ $ expected = [];
2714
+ $ expected [0 ] = [
2715
+ 'token ' => 21 ,
2716
+ 'name ' => '$obj1 ' ,
2717
+ 'content ' => '#[MyAttribute]
2718
+ false|(Foo&Bar)|true $obj1 ' ,
2719
+ 'has_attributes ' => true ,
2720
+ 'pass_by_reference ' => false ,
2721
+ 'reference_token ' => false ,
2722
+ 'variable_length ' => false ,
2723
+ 'variadic_token ' => false ,
2724
+ 'type_hint ' => 'false|(Foo&Bar)|true ' ,
2725
+ 'type_hint_token ' => 11 ,
2726
+ 'type_hint_end_token ' => 19 ,
2727
+ 'nullable_type ' => false ,
2728
+ 'comma_token ' => 22 ,
2729
+ ];
2730
+ $ expected [1 ] = [
2731
+ 'token ' => 41 ,
2732
+ 'name ' => '$obj2 ' ,
2733
+ 'content ' => '(\Boo&\Pck\Bar)|(Boo&Baz) $obj2 = new Boo() ' ,
2734
+ 'default ' => 'new Boo() ' ,
2735
+ 'default_token ' => 45 ,
2736
+ 'default_equal_token ' => 43 ,
2737
+ 'has_attributes ' => false ,
2738
+ 'pass_by_reference ' => false ,
2739
+ 'reference_token ' => false ,
2740
+ 'variable_length ' => false ,
2741
+ 'variadic_token ' => false ,
2742
+ 'type_hint ' => '(\Boo&\Pck\Bar)|(Boo&Baz) ' ,
2743
+ 'type_hint_token ' => 25 ,
2744
+ 'type_hint_end_token ' => 39 ,
2745
+ 'nullable_type ' => false ,
2746
+ 'comma_token ' => false ,
2747
+ ];
2748
+
2749
+ $ this ->getMethodParametersTestHelper ('/* ' .__FUNCTION__ .' */ ' , $ expected );
2750
+
2751
+ }//end testPHP82DNFTypes()
2752
+
2753
+
2754
+ /**
2755
+ * Verify recognition of PHP 8.2 DNF parameter type declarations when the variable
2756
+ * has either a spread operator or a reference.
2757
+ *
2758
+ * @return void
2759
+ */
2760
+ public function testPHP82DNFTypesWithSpreadOperatorAndReference ()
2761
+ {
2762
+ // Offsets are relative to the T_FUNCTION token.
2763
+ $ expected = [];
2764
+ $ expected [0 ] = [
2765
+ 'token ' => 13 ,
2766
+ 'name ' => '$paramA ' ,
2767
+ 'content ' => '(Countable&MeMe)|iterable &$paramA ' ,
2768
+ 'has_attributes ' => false ,
2769
+ 'pass_by_reference ' => true ,
2770
+ 'reference_token ' => 12 ,
2771
+ 'variable_length ' => false ,
2772
+ 'variadic_token ' => false ,
2773
+ 'type_hint ' => '(Countable&MeMe)|iterable ' ,
2774
+ 'type_hint_token ' => 4 ,
2775
+ 'type_hint_end_token ' => 10 ,
2776
+ 'nullable_type ' => false ,
2777
+ 'comma_token ' => 14 ,
2778
+ ];
2779
+ $ expected [1 ] = [
2780
+ 'token ' => 25 ,
2781
+ 'name ' => '$paramB ' ,
2782
+ 'content ' => 'true|(Foo&Bar) ...$paramB ' ,
2783
+ 'has_attributes ' => false ,
2784
+ 'pass_by_reference ' => false ,
2785
+ 'reference_token ' => false ,
2786
+ 'variable_length ' => true ,
2787
+ 'variadic_token ' => 24 ,
2788
+ 'type_hint ' => 'true|(Foo&Bar) ' ,
2789
+ 'type_hint_token ' => 16 ,
2790
+ 'type_hint_end_token ' => 22 ,
2791
+ 'nullable_type ' => false ,
2792
+ 'comma_token ' => false ,
2793
+ ];
2794
+
2795
+ $ this ->getMethodParametersTestHelper ('/* ' .__FUNCTION__ .' */ ' , $ expected );
2796
+
2797
+ }//end testPHP82DNFTypesWithSpreadOperatorAndReference()
2798
+
2799
+
2800
+ /**
2801
+ * Verify recognition of PHP 8.2 DNF parameter type declarations using the nullability operator (not allowed).
2802
+ *
2803
+ * @return void
2804
+ */
2805
+ public function testPHP82DNFTypesIllegalNullable ()
2806
+ {
2807
+ // Offsets are relative to the T_FUNCTION token.
2808
+ $ expected = [];
2809
+ $ expected [0 ] = [
2810
+ 'token ' => 27 ,
2811
+ 'name ' => '$var ' ,
2812
+ 'content ' => '? ( MyClassA & /*comment*/ \Package\MyClassB & \Package\MyClassC ) $var ' ,
2813
+ 'has_attributes ' => false ,
2814
+ 'pass_by_reference ' => false ,
2815
+ 'reference_token ' => false ,
2816
+ 'variable_length ' => false ,
2817
+ 'variadic_token ' => false ,
2818
+ 'type_hint ' => '?(MyClassA&\Package\MyClassB&\Package\MyClassC) ' ,
2819
+ 'type_hint_token ' => 5 ,
2820
+ 'type_hint_end_token ' => 25 ,
2821
+ 'nullable_type ' => true ,
2822
+ 'comma_token ' => false ,
2823
+ ];
2824
+
2825
+ $ this ->getMethodParametersTestHelper ('/* ' .__FUNCTION__ .' */ ' , $ expected );
2826
+
2827
+ }//end testPHP82DNFTypesIllegalNullable()
2828
+
2829
+
2830
+ /**
2831
+ * Verify recognition of PHP 8.2 DNF parameter type declarations in an arrow function.
2832
+ *
2833
+ * @return void
2834
+ */
2835
+ public function testPHP82DNFTypesInArrow ()
2836
+ {
2837
+ // Offsets are relative to the T_FUNCTION token.
2838
+ $ expected = [];
2839
+ $ expected [0 ] = [
2840
+ 'token ' => 12 ,
2841
+ 'name ' => '$range ' ,
2842
+ 'content ' => '(Hi&Ho)|FALSE &...$range ' ,
2843
+ 'has_attributes ' => false ,
2844
+ 'pass_by_reference ' => true ,
2845
+ 'reference_token ' => 10 ,
2846
+ 'variable_length ' => true ,
2847
+ 'variadic_token ' => 11 ,
2848
+ 'type_hint ' => '(Hi&Ho)|FALSE ' ,
2849
+ 'type_hint_token ' => 2 ,
2850
+ 'type_hint_end_token ' => 8 ,
2851
+ 'nullable_type ' => false ,
2852
+ 'comma_token ' => false ,
2853
+ ];
2854
+
2855
+ $ this ->getMethodParametersTestHelper ('/* ' .__FUNCTION__ .' */ ' , $ expected );
2856
+
2857
+ }//end testPHP82DNFTypesInArrow()
2858
+
2859
+
2705
2860
/**
2706
2861
* Verify handling of a closure.
2707
2862
*
0 commit comments