Passed
Push — feature/v4 ( e5e380...dac4aa )
by Samuel
11:37
created

MapHelperBuilder::createSubscribers()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 233
Code Lines 177

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 158
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 177
c 1
b 0
f 0
dl 0
loc 233
ccs 158
cts 158
cp 1
rs 8
cc 1
nc 1
nop 0
crap 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Ivory Google Map package.
7
 *
8
 * (c) Eric GELOEN <[email protected]>
9
 *
10
 * For the full copyright and license information, please read the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Ivory\GoogleMap\Helper\Builder;
15
16
use Ivory\GoogleMap\Helper\Collector\Base\BoundCollector;
17
use Ivory\GoogleMap\Helper\Collector\Base\CoordinateCollector;
18
use Ivory\GoogleMap\Helper\Collector\Base\PointCollector;
19
use Ivory\GoogleMap\Helper\Collector\Base\SizeCollector;
20
use Ivory\GoogleMap\Helper\Collector\Control\CustomControlCollector;
21
use Ivory\GoogleMap\Helper\Collector\Event\DomEventCollector;
22
use Ivory\GoogleMap\Helper\Collector\Event\DomEventOnceCollector;
23
use Ivory\GoogleMap\Helper\Collector\Event\EventCollector;
24
use Ivory\GoogleMap\Helper\Collector\Event\EventOnceCollector;
25
use Ivory\GoogleMap\Helper\Collector\Layer\GeoJsonLayerCollector;
26
use Ivory\GoogleMap\Helper\Collector\Layer\HeatmapLayerCollector;
27
use Ivory\GoogleMap\Helper\Collector\Layer\KmlLayerCollector;
28
use Ivory\GoogleMap\Helper\Collector\Overlay\CircleCollector;
29
use Ivory\GoogleMap\Helper\Collector\Overlay\DefaultInfoWindowCollector;
30
use Ivory\GoogleMap\Helper\Collector\Overlay\EncodedPolylineCollector;
31
use Ivory\GoogleMap\Helper\Collector\Overlay\ExtendableCollector;
32
use Ivory\GoogleMap\Helper\Collector\Overlay\GroundOverlayCollector;
33
use Ivory\GoogleMap\Helper\Collector\Overlay\IconCollector;
34
use Ivory\GoogleMap\Helper\Collector\Overlay\IconSequenceCollector;
35
use Ivory\GoogleMap\Helper\Collector\Overlay\InfoBoxCollector;
36
use Ivory\GoogleMap\Helper\Collector\Overlay\InfoWindowCollector;
37
use Ivory\GoogleMap\Helper\Collector\Overlay\MarkerCollector;
38
use Ivory\GoogleMap\Helper\Collector\Overlay\MarkerShapeCollector;
39
use Ivory\GoogleMap\Helper\Collector\Overlay\PolygonCollector;
40
use Ivory\GoogleMap\Helper\Collector\Overlay\PolylineCollector;
41
use Ivory\GoogleMap\Helper\Collector\Overlay\RectangleCollector;
42
use Ivory\GoogleMap\Helper\Collector\Overlay\SymbolCollector;
43
use Ivory\GoogleMap\Helper\MapHelper;
44
use Ivory\GoogleMap\Helper\Renderer\Base\BoundRenderer;
45
use Ivory\GoogleMap\Helper\Renderer\Base\CoordinateRenderer;
46
use Ivory\GoogleMap\Helper\Renderer\Base\PointRenderer;
47
use Ivory\GoogleMap\Helper\Renderer\Base\SizeRenderer;
48
use Ivory\GoogleMap\Helper\Renderer\Control\ControlManagerRenderer;
49
use Ivory\GoogleMap\Helper\Renderer\Control\ControlPositionRenderer;
50
use Ivory\GoogleMap\Helper\Renderer\Control\CustomControlRenderer;
51
use Ivory\GoogleMap\Helper\Renderer\Control\FullscreenControlRenderer;
52
use Ivory\GoogleMap\Helper\Renderer\Control\MapTypeControlRenderer;
53
use Ivory\GoogleMap\Helper\Renderer\Control\MapTypeControlStyleRenderer;
54
use Ivory\GoogleMap\Helper\Renderer\Control\RotateControlRenderer;
55
use Ivory\GoogleMap\Helper\Renderer\Control\ScaleControlRenderer;
56
use Ivory\GoogleMap\Helper\Renderer\Control\ScaleControlStyleRenderer;
57
use Ivory\GoogleMap\Helper\Renderer\Control\StreetViewControlRenderer;
58
use Ivory\GoogleMap\Helper\Renderer\Control\ZoomControlRenderer;
59
use Ivory\GoogleMap\Helper\Renderer\Control\ZoomControlStyleRenderer;
60
use Ivory\GoogleMap\Helper\Renderer\Event\DomEventOnceRenderer;
61
use Ivory\GoogleMap\Helper\Renderer\Event\DomEventRenderer;
62
use Ivory\GoogleMap\Helper\Renderer\Event\EventOnceRenderer;
63
use Ivory\GoogleMap\Helper\Renderer\Event\EventRenderer;
64
use Ivory\GoogleMap\Helper\Renderer\Geometry\EncodingRenderer;
65
use Ivory\GoogleMap\Helper\Renderer\Html\JavascriptTagRenderer;
66
use Ivory\GoogleMap\Helper\Renderer\Html\StylesheetRenderer;
67
use Ivory\GoogleMap\Helper\Renderer\Html\StylesheetTagRenderer;
68
use Ivory\GoogleMap\Helper\Renderer\Html\TagRenderer;
69
use Ivory\GoogleMap\Helper\Renderer\Layer\GeoJsonLayerRenderer;
70
use Ivory\GoogleMap\Helper\Renderer\Layer\HeatmapLayerRenderer;
71
use Ivory\GoogleMap\Helper\Renderer\Layer\KmlLayerRenderer;
72
use Ivory\GoogleMap\Helper\Renderer\MapBoundRenderer;
73
use Ivory\GoogleMap\Helper\Renderer\MapCenterRenderer;
74
use Ivory\GoogleMap\Helper\Renderer\MapContainerRenderer;
75
use Ivory\GoogleMap\Helper\Renderer\MapHtmlRenderer;
76
use Ivory\GoogleMap\Helper\Renderer\MapRenderer;
77
use Ivory\GoogleMap\Helper\Renderer\MapTypeIdRenderer;
78
use Ivory\GoogleMap\Helper\Renderer\Overlay\AnimationRenderer;
79
use Ivory\GoogleMap\Helper\Renderer\Overlay\CircleRenderer;
80
use Ivory\GoogleMap\Helper\Renderer\Overlay\DefaultInfoWindowRenderer;
81
use Ivory\GoogleMap\Helper\Renderer\Overlay\EncodedPolylineRenderer;
82
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\BoundsExtendableRenderer;
83
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\DefaultViewportExtendableRenderer;
84
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\ExtendableRenderer;
85
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\HeatmapLayerExtendableRenderer;
86
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\PathExtendableRenderer;
87
use Ivory\GoogleMap\Helper\Renderer\Overlay\Extendable\PositionExtendableRenderer;
88
use Ivory\GoogleMap\Helper\Renderer\Overlay\GroundOverlayRenderer;
89
use Ivory\GoogleMap\Helper\Renderer\Overlay\IconRenderer;
90
use Ivory\GoogleMap\Helper\Renderer\Overlay\IconSequenceRenderer;
91
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoBoxRenderer;
92
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoWindowCloseRenderer;
93
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoWindowOpenRenderer;
94
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerClustererRenderer;
95
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerRenderer;
96
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerShapeRenderer;
97
use Ivory\GoogleMap\Helper\Renderer\Overlay\PolygonRenderer;
98
use Ivory\GoogleMap\Helper\Renderer\Overlay\PolylineRenderer;
99
use Ivory\GoogleMap\Helper\Renderer\Overlay\RectangleRenderer;
100
use Ivory\GoogleMap\Helper\Renderer\Overlay\SymbolPathRenderer;
101
use Ivory\GoogleMap\Helper\Renderer\Overlay\SymbolRenderer;
102
use Ivory\GoogleMap\Helper\Renderer\Utility\CallbackRenderer;
103
use Ivory\GoogleMap\Helper\Renderer\Utility\ObjectToArrayRenderer;
104
use Ivory\GoogleMap\Helper\Renderer\Utility\RequirementRenderer;
105
use Ivory\GoogleMap\Helper\Subscriber\Base\BaseSubscriber;
106
use Ivory\GoogleMap\Helper\Subscriber\Base\BoundSubscriber;
107
use Ivory\GoogleMap\Helper\Subscriber\Base\CoordinateSubscriber;
108
use Ivory\GoogleMap\Helper\Subscriber\Base\PointSubscriber;
109
use Ivory\GoogleMap\Helper\Subscriber\Base\SizeSubscriber;
110
use Ivory\GoogleMap\Helper\Subscriber\Control\ControlSubscriber;
111
use Ivory\GoogleMap\Helper\Subscriber\Control\CustomControlSubscriber;
112
use Ivory\GoogleMap\Helper\Subscriber\Event\DomEventOnceSubscriber;
113
use Ivory\GoogleMap\Helper\Subscriber\Event\DomEventSubscriber;
114
use Ivory\GoogleMap\Helper\Subscriber\Event\EventOnceSubscriber;
115
use Ivory\GoogleMap\Helper\Subscriber\Event\EventSubscriber;
116
use Ivory\GoogleMap\Helper\Subscriber\Event\SimpleEventSubscriber;
117
use Ivory\GoogleMap\Helper\Subscriber\Layer\GeoJsonLayerSubscriber;
118
use Ivory\GoogleMap\Helper\Subscriber\Layer\HeatmapLayerSubscriber;
119
use Ivory\GoogleMap\Helper\Subscriber\Layer\KmlLayerSubscriber;
120
use Ivory\GoogleMap\Helper\Subscriber\Layer\LayerSubscriber;
121
use Ivory\GoogleMap\Helper\Subscriber\MapBoundSubscriber;
122
use Ivory\GoogleMap\Helper\Subscriber\MapCenterSubscriber;
123
use Ivory\GoogleMap\Helper\Subscriber\MapContainerSubscriber;
124
use Ivory\GoogleMap\Helper\Subscriber\MapHtmlSubscriber;
125
use Ivory\GoogleMap\Helper\Subscriber\MapInitSubscriber;
126
use Ivory\GoogleMap\Helper\Subscriber\MapJavascriptSubscriber;
127
use Ivory\GoogleMap\Helper\Subscriber\MapStylesheetSubscriber;
128
use Ivory\GoogleMap\Helper\Subscriber\MapSubscriber;
129
use Ivory\GoogleMap\Helper\Subscriber\Overlay\CircleSubscriber;
130
use Ivory\GoogleMap\Helper\Subscriber\Overlay\DefaultInfoWindowSubscriber;
131
use Ivory\GoogleMap\Helper\Subscriber\Overlay\EncodedPolylineSubscriber;
132
use Ivory\GoogleMap\Helper\Subscriber\Overlay\ExtendableSubscriber;
133
use Ivory\GoogleMap\Helper\Subscriber\Overlay\GroundOverlaySubscriber;
134
use Ivory\GoogleMap\Helper\Subscriber\Overlay\IconSequenceSubscriber;
135
use Ivory\GoogleMap\Helper\Subscriber\Overlay\IconSubscriber;
136
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoBoxSubscriber;
137
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoWindowCloseSubscriber;
138
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoWindowOpenSubscriber;
139
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerClustererSubscriber;
140
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerInfoWindowOpenSubscriber;
141
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerShapeSubscriber;
142
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerSubscriber;
143
use Ivory\GoogleMap\Helper\Subscriber\Overlay\OverlaySubscriber;
144
use Ivory\GoogleMap\Helper\Subscriber\Overlay\PolygonSubscriber;
145
use Ivory\GoogleMap\Helper\Subscriber\Overlay\PolylineSubscriber;
146
use Ivory\GoogleMap\Helper\Subscriber\Overlay\RectangleSubscriber;
147
use Ivory\GoogleMap\Helper\Subscriber\Overlay\SymbolSubscriber;
148
use Ivory\GoogleMap\Helper\Subscriber\Utility\ObjectToArraySubscriber;
149
use Ivory\GoogleMap\Layer\HeatmapLayer;
150
use Ivory\GoogleMap\Layer\KmlLayer;
151
use Ivory\GoogleMap\Overlay\Circle;
152
use Ivory\GoogleMap\Overlay\EncodedPolyline;
153
use Ivory\GoogleMap\Overlay\GroundOverlay;
154
use Ivory\GoogleMap\Overlay\InfoWindow;
155
use Ivory\GoogleMap\Overlay\Marker;
156
use Ivory\GoogleMap\Overlay\Polygon;
157
use Ivory\GoogleMap\Overlay\Polyline;
158
use Ivory\GoogleMap\Overlay\Rectangle;
159
160
class MapHelperBuilder extends AbstractJavascriptHelperBuilder
161
{
162 1
    public function build(): MapHelper
163
    {
164 1
        return new MapHelper($this->createEventDispatcher());
165
    }
166
167
    /** {@inheritdoc} */
168 1
    protected function createSubscribers(): array
169
    {
170 1
        $formatter   = $this->getFormatter();
171 1
        $jsonBuilder = $this->getJsonBuilder();
172
173
        // Overlay collectors
174 1
        $markerCollector            = new MarkerCollector();
175 1
        $polylineCollector          = new PolylineCollector();
176 1
        $circleCollector            = new CircleCollector();
177 1
        $defaultInfoWindowCollector = new DefaultInfoWindowCollector($markerCollector);
178 1
        $encodedPolylineCollector   = new EncodedPolylineCollector();
179 1
        $extendableCollector        = new ExtendableCollector();
180 1
        $groundOverlayCollector     = new GroundOverlayCollector();
181 1
        $iconSequenceCollector      = new IconSequenceCollector($polylineCollector);
182 1
        $infoBoxCollector           = new InfoBoxCollector($markerCollector);
183 1
        $infoWindowCollector        = new InfoWindowCollector($markerCollector);
184 1
        $iconCollector              = new IconCollector($markerCollector);
185 1
        $markerShapeCollector       = new MarkerShapeCollector($markerCollector);
186 1
        $polygonCollector           = new PolygonCollector();
187 1
        $rectangleCollector         = new RectangleCollector();
188 1
        $symbolCollector            = new SymbolCollector($markerCollector, $iconSequenceCollector);
189
190
        // Layer collectors
191 1
        $geoJsonLayerCollector = new GeoJsonLayerCollector();
192 1
        $heatmapLayerCollector = new HeatmapLayerCollector();
193 1
        $kmlLayerCollector     = new KmlLayerCollector();
194
195
        // Event collectors
196 1
        $domEventCollector     = new DomEventCollector();
197 1
        $domEventOnceCollector = new DomEventOnceCollector();
198 1
        $eventCollector        = new EventCollector();
199 1
        $eventOnceCollector    = new EventOnceCollector();
200
201
        // Control collectors
202 1
        $customControlCollector = new CustomControlCollector();
203
204
        // Base collectors
205 1
        $boundCollector      = new BoundCollector($groundOverlayCollector, $rectangleCollector);
206 1
        $pointCollector      = new PointCollector($markerCollector);
207 1
        $sizeCollector       = new SizeCollector($infoWindowCollector, $iconCollector);
208 1
        $coordinateCollector = new CoordinateCollector(
209 1
            $boundCollector,
210
            $circleCollector,
211
            $infoWindowCollector,
212
            $markerCollector,
213
            $polygonCollector,
214
            $polylineCollector,
215
            $heatmapLayerCollector
216
        );
217
218
        // Base renderers
219 1
        $boundRenderer      = new BoundRenderer($formatter);
220 1
        $coordinateRenderer = new CoordinateRenderer($formatter);
221 1
        $mapTypeIdRenderer  = new MapTypeIdRenderer($formatter);
222 1
        $pointRenderer      = new PointRenderer($formatter);
223 1
        $sizeRenderer       = new SizeRenderer($formatter);
224
225
        // Control renderers
226 1
        $controlPositionRenderer     = new ControlPositionRenderer($formatter);
227 1
        $customControlRenderer       = new CustomControlRenderer($formatter, $controlPositionRenderer);
228 1
        $fullscreenControlRenderer   = new FullscreenControlRenderer($formatter, $jsonBuilder, $controlPositionRenderer);
229 1
        $mapTypeControlStyleRenderer = new MapTypeControlStyleRenderer($formatter);
230 1
        $rotateControlRenderer       = new RotateControlRenderer($formatter, $jsonBuilder, $controlPositionRenderer);
231 1
        $scaleControlStyleRenderer   = new ScaleControlStyleRenderer($formatter);
232 1
        $streetViewControlRenderer   = new StreetViewControlRenderer($formatter, $jsonBuilder, $controlPositionRenderer);
233 1
        $zoomControlStyleRenderer    = new ZoomControlStyleRenderer($formatter);
234
235 1
        $mapTypeControlRenderer = new MapTypeControlRenderer(
236 1
            $formatter,
237
            $jsonBuilder,
238
            $mapTypeIdRenderer,
239
            $controlPositionRenderer,
240
            $mapTypeControlStyleRenderer
241
        );
242
243 1
        $scaleControlRenderer = new ScaleControlRenderer(
244 1
            $formatter,
245
            $jsonBuilder,
246
            $controlPositionRenderer,
247
            $scaleControlStyleRenderer
248
        );
249
250 1
        $zoomControlRenderer = new ZoomControlRenderer(
251 1
            $formatter,
252
            $jsonBuilder,
253
            $controlPositionRenderer,
254
            $zoomControlStyleRenderer
255
        );
256
257 1
        $controlManagerRenderer = new ControlManagerRenderer();
258 1
        $controlManagerRenderer->addRenderer($fullscreenControlRenderer);
259 1
        $controlManagerRenderer->addRenderer($mapTypeControlRenderer);
260 1
        $controlManagerRenderer->addRenderer($rotateControlRenderer);
261 1
        $controlManagerRenderer->addRenderer($scaleControlRenderer);
262 1
        $controlManagerRenderer->addRenderer($streetViewControlRenderer);
263 1
        $controlManagerRenderer->addRenderer($zoomControlRenderer);
264
265
        // Event renderers
266 1
        $domEventOnceRenderer = new DomEventOnceRenderer($formatter);
267 1
        $domEventRenderer     = new DomEventRenderer($formatter);
268 1
        $eventOnceRenderer    = new EventOnceRenderer($formatter);
269 1
        $eventRenderer        = new EventRenderer($formatter);
270
271
        // Geometry renderers
272 1
        $encodingRenderer = new EncodingRenderer($formatter);
273
274
        // Html renderers
275 1
        $tagRenderer           = new TagRenderer($formatter);
276 1
        $javascriptTagRenderer = new JavascriptTagRenderer($formatter, $tagRenderer);
277 1
        $stylesheetRenderer    = new StylesheetRenderer($formatter);
278 1
        $stylesheetTagRenderer = new StylesheetTagRenderer($formatter, $tagRenderer, $stylesheetRenderer);
279
280
        // Utility
281 1
        $callbackRenderer      = new CallbackRenderer($formatter);
282 1
        $objectToArrayRenderer = new ObjectToArrayRenderer($formatter);
283 1
        $requirementRenderer   = new RequirementRenderer($formatter);
284
285
        // Map renderers
286 1
        $mapBoundRenderer     = new MapBoundRenderer($formatter);
287 1
        $mapCenterRenderer    = new MapCenterRenderer($formatter);
288 1
        $mapContainerRenderer = new MapContainerRenderer($formatter, $jsonBuilder);
289 1
        $mapHtmlRenderer      = new MapHtmlRenderer($formatter, $tagRenderer, $stylesheetRenderer);
290 1
        $mapRenderer          = new MapRenderer(
291 1
            $formatter,
292
            $jsonBuilder,
293
            $mapTypeIdRenderer,
294
            $controlManagerRenderer,
295
            $requirementRenderer
296
        );
297
298
        // Overlay renderers
299 1
        $animationRenderer         = new AnimationRenderer($formatter);
300 1
        $circleRenderer            = new CircleRenderer($formatter, $jsonBuilder);
301 1
        $defaultInfoWindowRenderer = new DefaultInfoWindowRenderer($formatter, $jsonBuilder);
302 1
        $encodedPolylineRenderer   = new EncodedPolylineRenderer($formatter, $jsonBuilder, $encodingRenderer);
303 1
        $groundOverlayRenderer     = new GroundOverlayRenderer($formatter, $jsonBuilder);
304 1
        $infoBoxRenderer           = new InfoBoxRenderer($formatter, $jsonBuilder, $requirementRenderer);
305 1
        $infoWindowCloseRenderer   = new InfoWindowCloseRenderer($formatter);
306 1
        $infoWindowOpenRenderer    = new InfoWindowOpenRenderer($formatter);
307 1
        $iconRenderer              = new IconRenderer($formatter, $jsonBuilder);
308 1
        $iconSequenceRenderer      = new IconSequenceRenderer($formatter, $jsonBuilder);
309 1
        $markerClustererRenderer   = new MarkerClustererRenderer($formatter, $jsonBuilder, $requirementRenderer);
310 1
        $markerRenderer            = new MarkerRenderer($formatter, $jsonBuilder, $animationRenderer);
311 1
        $markerShapeRenderer       = new MarkerShapeRenderer($formatter, $jsonBuilder);
312 1
        $polygonRenderer           = new PolygonRenderer($formatter, $jsonBuilder);
313 1
        $polylineRenderer          = new PolylineRenderer($formatter, $jsonBuilder);
314 1
        $rectangleRenderer         = new RectangleRenderer($formatter, $jsonBuilder);
315 1
        $symbolPathRenderer        = new SymbolPathRenderer($formatter);
316 1
        $symbolRenderer            = new SymbolRenderer($formatter, $jsonBuilder, $symbolPathRenderer);
317
318
        // Extendable renderers
319 1
        $defaultViewportExtendableRenderer = new DefaultViewportExtendableRenderer($formatter);
320 1
        $heatmapLayerExtendableRenderer    = new HeatmapLayerExtendableRenderer($formatter);
321 1
        $pathExtendableRenderer            = new PathExtendableRenderer($formatter);
322 1
        $positionExtendableRenderer        = new PositionExtendableRenderer($formatter);
323 1
        $boundsExtendableRenderer          = new BoundsExtendableRenderer($formatter);
324
325 1
        $extendableRenderer = new ExtendableRenderer();
326 1
        $extendableRenderer->setRenderer(Circle::class, $boundsExtendableRenderer);
327 1
        $extendableRenderer->setRenderer(EncodedPolyline::class, $pathExtendableRenderer);
328 1
        $extendableRenderer->setRenderer(GroundOverlay::class, $boundsExtendableRenderer);
329 1
        $extendableRenderer->setRenderer(HeatmapLayer::class, $heatmapLayerExtendableRenderer);
330 1
        $extendableRenderer->setRenderer(InfoWindow::class, $positionExtendableRenderer);
331 1
        $extendableRenderer->setRenderer(KmlLayer::class, $defaultViewportExtendableRenderer);
332 1
        $extendableRenderer->setRenderer(Marker::class, $positionExtendableRenderer);
333 1
        $extendableRenderer->setRenderer(Polyline::class, $pathExtendableRenderer);
334 1
        $extendableRenderer->setRenderer(Polygon::class, $pathExtendableRenderer);
335 1
        $extendableRenderer->setRenderer(Rectangle::class, $boundsExtendableRenderer);
336
337
        // Layer renderers
338 1
        $geoJsonLayerRenderer = new GeoJsonLayerRenderer($formatter, $jsonBuilder);
339 1
        $heatmapLayerRenderer = new HeatmapLayerRenderer($formatter, $jsonBuilder);
340 1
        $kmlLayerRenderer     = new KmlLayerRenderer($formatter, $jsonBuilder);
341
342 1
        return array_merge([
343
            // Base
344 1
            new BaseSubscriber($formatter),
345 1
            new BoundSubscriber($formatter, $boundCollector, $boundRenderer),
346 1
            new CoordinateSubscriber($formatter, $coordinateCollector, $coordinateRenderer),
347 1
            new PointSubscriber($formatter, $pointCollector, $pointRenderer),
348 1
            new SizeSubscriber($formatter, $sizeCollector, $sizeRenderer),
349
350
            // Control
351 1
            new ControlSubscriber($formatter),
352 1
            new CustomControlSubscriber($formatter, $customControlCollector, $customControlRenderer),
353
354
            // Event
355 1
            new DomEventOnceSubscriber($formatter, $domEventOnceCollector, $domEventOnceRenderer),
356 1
            new DomEventSubscriber($formatter, $domEventCollector, $domEventRenderer),
357 1
            new EventOnceSubscriber($formatter, $eventOnceCollector, $eventOnceRenderer),
358 1
            new EventSubscriber($formatter),
359 1
            new SimpleEventSubscriber($formatter, $eventCollector, $eventRenderer),
360
361
            // Layer
362 1
            new GeoJsonLayerSubscriber($formatter, $geoJsonLayerCollector, $geoJsonLayerRenderer),
363 1
            new HeatmapLayerSubscriber($formatter, $heatmapLayerCollector, $heatmapLayerRenderer),
364 1
            new KmlLayerSubscriber($formatter, $kmlLayerCollector, $kmlLayerRenderer),
365 1
            new LayerSubscriber($formatter),
366
367
            // Overlay
368 1
            new CircleSubscriber($formatter, $circleCollector, $circleRenderer),
369 1
            new DefaultInfoWindowSubscriber($formatter, $defaultInfoWindowCollector, $defaultInfoWindowRenderer),
370 1
            new EncodedPolylineSubscriber($formatter, $encodedPolylineCollector, $encodedPolylineRenderer),
371 1
            new ExtendableSubscriber($formatter, $extendableCollector, $extendableRenderer),
372 1
            new GroundOverlaySubscriber($formatter, $groundOverlayCollector, $groundOverlayRenderer),
373 1
            new IconSequenceSubscriber($formatter, $iconSequenceCollector, $iconSequenceRenderer),
374 1
            new IconSubscriber($formatter, $iconCollector, $iconRenderer),
375 1
            new InfoBoxSubscriber($formatter, $infoBoxCollector, $infoBoxRenderer),
376 1
            new InfoWindowCloseSubscriber($formatter, $infoWindowCollector, $infoWindowCloseRenderer),
377 1
            new InfoWindowOpenSubscriber($formatter, $infoWindowCollector, $infoWindowOpenRenderer),
378 1
            new MarkerClustererSubscriber($formatter, $markerClustererRenderer),
379 1
            new MarkerInfoWindowOpenSubscriber($formatter, $markerCollector, $infoWindowOpenRenderer, $eventRenderer),
380 1
            new MarkerShapeSubscriber($formatter, $markerShapeCollector, $markerShapeRenderer),
381 1
            new MarkerSubscriber($formatter, $markerCollector, $markerRenderer),
382 1
            new OverlaySubscriber($formatter),
383 1
            new PolygonSubscriber($formatter, $polygonCollector, $polygonRenderer),
384 1
            new PolylineSubscriber($formatter, $polylineCollector, $polylineRenderer),
385 1
            new RectangleSubscriber($formatter, $rectangleCollector, $rectangleRenderer),
386 1
            new SymbolSubscriber($formatter, $symbolCollector, $symbolRenderer),
387
388
            // Map
389 1
            new MapBoundSubscriber($formatter, $mapBoundRenderer),
390 1
            new MapCenterSubscriber($formatter, $mapCenterRenderer),
391 1
            new MapContainerSubscriber($formatter, $mapContainerRenderer),
392 1
            new MapHtmlSubscriber($formatter, $mapHtmlRenderer),
393 1
            new MapInitSubscriber($formatter),
394 1
            new MapJavascriptSubscriber($formatter, $mapRenderer, $callbackRenderer, $javascriptTagRenderer),
395 1
            new MapStylesheetSubscriber($formatter, $stylesheetTagRenderer),
396 1
            new MapSubscriber($formatter, $mapRenderer),
397
398
            // Utility
399 1
            new ObjectToArraySubscriber($formatter, $objectToArrayRenderer),
400 1
        ], parent::createSubscribers());
401
    }
402
}
403