Skip to content

Commit ee88a01

Browse files
janedbalondrejmirtes
authored andcommitted
Fix internal error when DIC param map has > 256 items
1 parent e909a07 commit ee88a01

File tree

3 files changed

+264
-1
lines changed

3 files changed

+264
-1
lines changed

src/Type/Symfony/ParameterDynamicReturnTypeExtension.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use PHPStan\Type\ArrayType;
1414
use PHPStan\Type\BooleanType;
1515
use PHPStan\Type\Constant\ConstantArrayType;
16+
use PHPStan\Type\Constant\ConstantArrayTypeBuilder;
1617
use PHPStan\Type\Constant\ConstantBooleanType;
1718
use PHPStan\Type\ConstantType;
1819
use PHPStan\Type\DynamicMethodReturnTypeExtension;
@@ -168,7 +169,9 @@ private function generalizeTypeFromValue(Scope $scope, $value): Type
168169
$valueTypes[] = $this->generalizeTypeFromValue($scope, $element);
169170
}
170171

171-
return new ConstantArrayType($keyTypes, $valueTypes);
172+
return ConstantArrayTypeBuilder::createFromConstantArray(
173+
new ConstantArrayType($keyTypes, $valueTypes)
174+
)->getArray();
172175
}
173176

174177
return new ArrayType(

tests/Type/Symfony/container.xml

+259
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,265 @@
8282
<parameter key="b">value of b</parameter>
8383
<parameter key="c">value of c</parameter>
8484
</parameter>
85+
<parameter key="app.hugemap" type="collection">
86+
<parameter key="k1">v1</parameter>
87+
<parameter key="k2">v2</parameter>
88+
<parameter key="k3">v3</parameter>
89+
<parameter key="k4">v4</parameter>
90+
<parameter key="k5">v5</parameter>
91+
<parameter key="k6">v6</parameter>
92+
<parameter key="k7">v7</parameter>
93+
<parameter key="k8">v8</parameter>
94+
<parameter key="k9">v9</parameter>
95+
<parameter key="k10">v10</parameter>
96+
<parameter key="k11">v11</parameter>
97+
<parameter key="k12">v12</parameter>
98+
<parameter key="k13">v13</parameter>
99+
<parameter key="k14">v14</parameter>
100+
<parameter key="k15">v15</parameter>
101+
<parameter key="k16">v16</parameter>
102+
<parameter key="k17">v17</parameter>
103+
<parameter key="k18">v18</parameter>
104+
<parameter key="k19">v19</parameter>
105+
<parameter key="k20">v20</parameter>
106+
<parameter key="k21">v21</parameter>
107+
<parameter key="k22">v22</parameter>
108+
<parameter key="k23">v23</parameter>
109+
<parameter key="k24">v24</parameter>
110+
<parameter key="k25">v25</parameter>
111+
<parameter key="k26">v26</parameter>
112+
<parameter key="k27">v27</parameter>
113+
<parameter key="k28">v28</parameter>
114+
<parameter key="k29">v29</parameter>
115+
<parameter key="k30">v30</parameter>
116+
<parameter key="k31">v31</parameter>
117+
<parameter key="k32">v32</parameter>
118+
<parameter key="k33">v33</parameter>
119+
<parameter key="k34">v34</parameter>
120+
<parameter key="k35">v35</parameter>
121+
<parameter key="k36">v36</parameter>
122+
<parameter key="k37">v37</parameter>
123+
<parameter key="k38">v38</parameter>
124+
<parameter key="k39">v39</parameter>
125+
<parameter key="k40">v40</parameter>
126+
<parameter key="k41">v41</parameter>
127+
<parameter key="k42">v42</parameter>
128+
<parameter key="k43">v43</parameter>
129+
<parameter key="k44">v44</parameter>
130+
<parameter key="k45">v45</parameter>
131+
<parameter key="k46">v46</parameter>
132+
<parameter key="k47">v47</parameter>
133+
<parameter key="k48">v48</parameter>
134+
<parameter key="k49">v49</parameter>
135+
<parameter key="k50">v50</parameter>
136+
<parameter key="k51">v51</parameter>
137+
<parameter key="k52">v52</parameter>
138+
<parameter key="k53">v53</parameter>
139+
<parameter key="k54">v54</parameter>
140+
<parameter key="k55">v55</parameter>
141+
<parameter key="k56">v56</parameter>
142+
<parameter key="k57">v57</parameter>
143+
<parameter key="k58">v58</parameter>
144+
<parameter key="k59">v59</parameter>
145+
<parameter key="k60">v60</parameter>
146+
<parameter key="k61">v61</parameter>
147+
<parameter key="k62">v62</parameter>
148+
<parameter key="k63">v63</parameter>
149+
<parameter key="k64">v64</parameter>
150+
<parameter key="k65">v65</parameter>
151+
<parameter key="k66">v66</parameter>
152+
<parameter key="k67">v67</parameter>
153+
<parameter key="k68">v68</parameter>
154+
<parameter key="k69">v69</parameter>
155+
<parameter key="k70">v70</parameter>
156+
<parameter key="k71">v71</parameter>
157+
<parameter key="k72">v72</parameter>
158+
<parameter key="k73">v73</parameter>
159+
<parameter key="k74">v74</parameter>
160+
<parameter key="k75">v75</parameter>
161+
<parameter key="k76">v76</parameter>
162+
<parameter key="k77">v77</parameter>
163+
<parameter key="k78">v78</parameter>
164+
<parameter key="k79">v79</parameter>
165+
<parameter key="k80">v80</parameter>
166+
<parameter key="k81">v81</parameter>
167+
<parameter key="k82">v82</parameter>
168+
<parameter key="k83">v83</parameter>
169+
<parameter key="k84">v84</parameter>
170+
<parameter key="k85">v85</parameter>
171+
<parameter key="k86">v86</parameter>
172+
<parameter key="k87">v87</parameter>
173+
<parameter key="k88">v88</parameter>
174+
<parameter key="k89">v89</parameter>
175+
<parameter key="k90">v90</parameter>
176+
<parameter key="k91">v91</parameter>
177+
<parameter key="k92">v92</parameter>
178+
<parameter key="k93">v93</parameter>
179+
<parameter key="k94">v94</parameter>
180+
<parameter key="k95">v95</parameter>
181+
<parameter key="k96">v96</parameter>
182+
<parameter key="k97">v97</parameter>
183+
<parameter key="k98">v98</parameter>
184+
<parameter key="k99">v99</parameter>
185+
<parameter key="k100">v100</parameter>
186+
<parameter key="k101">v101</parameter>
187+
<parameter key="k102">v102</parameter>
188+
<parameter key="k103">v103</parameter>
189+
<parameter key="k104">v104</parameter>
190+
<parameter key="k105">v105</parameter>
191+
<parameter key="k106">v106</parameter>
192+
<parameter key="k107">v107</parameter>
193+
<parameter key="k108">v108</parameter>
194+
<parameter key="k109">v109</parameter>
195+
<parameter key="k110">v110</parameter>
196+
<parameter key="k111">v111</parameter>
197+
<parameter key="k112">v112</parameter>
198+
<parameter key="k113">v113</parameter>
199+
<parameter key="k114">v114</parameter>
200+
<parameter key="k115">v115</parameter>
201+
<parameter key="k116">v116</parameter>
202+
<parameter key="k117">v117</parameter>
203+
<parameter key="k118">v118</parameter>
204+
<parameter key="k119">v119</parameter>
205+
<parameter key="k120">v120</parameter>
206+
<parameter key="k121">v121</parameter>
207+
<parameter key="k122">v122</parameter>
208+
<parameter key="k123">v123</parameter>
209+
<parameter key="k124">v124</parameter>
210+
<parameter key="k125">v125</parameter>
211+
<parameter key="k126">v126</parameter>
212+
<parameter key="k127">v127</parameter>
213+
<parameter key="k128">v128</parameter>
214+
<parameter key="k129">v129</parameter>
215+
<parameter key="k130">v130</parameter>
216+
<parameter key="k131">v131</parameter>
217+
<parameter key="k132">v132</parameter>
218+
<parameter key="k133">v133</parameter>
219+
<parameter key="k134">v134</parameter>
220+
<parameter key="k135">v135</parameter>
221+
<parameter key="k136">v136</parameter>
222+
<parameter key="k137">v137</parameter>
223+
<parameter key="k138">v138</parameter>
224+
<parameter key="k139">v139</parameter>
225+
<parameter key="k140">v140</parameter>
226+
<parameter key="k141">v141</parameter>
227+
<parameter key="k142">v142</parameter>
228+
<parameter key="k143">v143</parameter>
229+
<parameter key="k144">v144</parameter>
230+
<parameter key="k145">v145</parameter>
231+
<parameter key="k146">v146</parameter>
232+
<parameter key="k147">v147</parameter>
233+
<parameter key="k148">v148</parameter>
234+
<parameter key="k149">v149</parameter>
235+
<parameter key="k150">v150</parameter>
236+
<parameter key="k151">v151</parameter>
237+
<parameter key="k152">v152</parameter>
238+
<parameter key="k153">v153</parameter>
239+
<parameter key="k154">v154</parameter>
240+
<parameter key="k155">v155</parameter>
241+
<parameter key="k156">v156</parameter>
242+
<parameter key="k157">v157</parameter>
243+
<parameter key="k158">v158</parameter>
244+
<parameter key="k159">v159</parameter>
245+
<parameter key="k160">v160</parameter>
246+
<parameter key="k161">v161</parameter>
247+
<parameter key="k162">v162</parameter>
248+
<parameter key="k163">v163</parameter>
249+
<parameter key="k164">v164</parameter>
250+
<parameter key="k165">v165</parameter>
251+
<parameter key="k166">v166</parameter>
252+
<parameter key="k167">v167</parameter>
253+
<parameter key="k168">v168</parameter>
254+
<parameter key="k169">v169</parameter>
255+
<parameter key="k170">v170</parameter>
256+
<parameter key="k171">v171</parameter>
257+
<parameter key="k172">v172</parameter>
258+
<parameter key="k173">v173</parameter>
259+
<parameter key="k174">v174</parameter>
260+
<parameter key="k175">v175</parameter>
261+
<parameter key="k176">v176</parameter>
262+
<parameter key="k177">v177</parameter>
263+
<parameter key="k178">v178</parameter>
264+
<parameter key="k179">v179</parameter>
265+
<parameter key="k180">v180</parameter>
266+
<parameter key="k181">v181</parameter>
267+
<parameter key="k182">v182</parameter>
268+
<parameter key="k183">v183</parameter>
269+
<parameter key="k184">v184</parameter>
270+
<parameter key="k185">v185</parameter>
271+
<parameter key="k186">v186</parameter>
272+
<parameter key="k187">v187</parameter>
273+
<parameter key="k188">v188</parameter>
274+
<parameter key="k189">v189</parameter>
275+
<parameter key="k190">v190</parameter>
276+
<parameter key="k191">v191</parameter>
277+
<parameter key="k192">v192</parameter>
278+
<parameter key="k193">v193</parameter>
279+
<parameter key="k194">v194</parameter>
280+
<parameter key="k195">v195</parameter>
281+
<parameter key="k196">v196</parameter>
282+
<parameter key="k197">v197</parameter>
283+
<parameter key="k198">v198</parameter>
284+
<parameter key="k199">v199</parameter>
285+
<parameter key="k200">v200</parameter>
286+
<parameter key="k201">v201</parameter>
287+
<parameter key="k202">v202</parameter>
288+
<parameter key="k203">v203</parameter>
289+
<parameter key="k204">v204</parameter>
290+
<parameter key="k205">v205</parameter>
291+
<parameter key="k206">v206</parameter>
292+
<parameter key="k207">v207</parameter>
293+
<parameter key="k208">v208</parameter>
294+
<parameter key="k209">v209</parameter>
295+
<parameter key="k210">v210</parameter>
296+
<parameter key="k211">v211</parameter>
297+
<parameter key="k212">v212</parameter>
298+
<parameter key="k213">v213</parameter>
299+
<parameter key="k214">v214</parameter>
300+
<parameter key="k215">v215</parameter>
301+
<parameter key="k216">v216</parameter>
302+
<parameter key="k217">v217</parameter>
303+
<parameter key="k218">v218</parameter>
304+
<parameter key="k219">v219</parameter>
305+
<parameter key="k220">v220</parameter>
306+
<parameter key="k221">v221</parameter>
307+
<parameter key="k222">v222</parameter>
308+
<parameter key="k223">v223</parameter>
309+
<parameter key="k224">v224</parameter>
310+
<parameter key="k225">v225</parameter>
311+
<parameter key="k226">v226</parameter>
312+
<parameter key="k227">v227</parameter>
313+
<parameter key="k228">v228</parameter>
314+
<parameter key="k229">v229</parameter>
315+
<parameter key="k230">v230</parameter>
316+
<parameter key="k231">v231</parameter>
317+
<parameter key="k232">v232</parameter>
318+
<parameter key="k233">v233</parameter>
319+
<parameter key="k234">v234</parameter>
320+
<parameter key="k235">v235</parameter>
321+
<parameter key="k236">v236</parameter>
322+
<parameter key="k237">v237</parameter>
323+
<parameter key="k238">v238</parameter>
324+
<parameter key="k239">v239</parameter>
325+
<parameter key="k240">v240</parameter>
326+
<parameter key="k241">v241</parameter>
327+
<parameter key="k242">v242</parameter>
328+
<parameter key="k243">v243</parameter>
329+
<parameter key="k244">v244</parameter>
330+
<parameter key="k245">v245</parameter>
331+
<parameter key="k246">v246</parameter>
332+
<parameter key="k247">v247</parameter>
333+
<parameter key="k248">v248</parameter>
334+
<parameter key="k249">v249</parameter>
335+
<parameter key="k250">v250</parameter>
336+
<parameter key="k251">v251</parameter>
337+
<parameter key="k252">v252</parameter>
338+
<parameter key="k253">v253</parameter>
339+
<parameter key="k254">v254</parameter>
340+
<parameter key="k255">v255</parameter>
341+
<parameter key="k256">v256</parameter>
342+
<parameter key="k257">v257</parameter>
343+
</parameter>
85344
<parameter key="app.binary" type="binary">VGhpcyBpcyBhIEJlbGwgY2hhciAH</parameter>
86345
<parameter key="app.constant">Y-m-d\TH:i:sP</parameter>
87346
<parameter key="test_collection" type="collection"/>

tests/Type/Symfony/data/ExampleAbstractController.php

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public function parameters(ContainerInterface $container, ParameterBagInterface
8080
assertType("array{a: string, b: string, c: string}", $container->getParameter('app.map'));
8181
assertType("array{a: string, b: string, c: string}", $parameterBag->get('app.map'));
8282
assertType("array{a: string, b: string, c: string}", $this->getParameter('app.map'));
83+
assertType("non-falsy-string", implode(',', $this->getParameter('app.hugemap')));
8384
assertType("string", $container->getParameter('app.binary'));
8485
assertType("string", $parameterBag->get('app.binary'));
8586
assertType("string", $this->getParameter('app.binary'));

0 commit comments

Comments
 (0)