From 067ca76c7f4340e2d84ecadb2635049fc8640e4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Guillaume=20Perr=C3=A9al?= <guillaume.perreal@inrae.fr>
Date: Thu, 2 Apr 2020 12:08:28 +0200
Subject: [PATCH] =?UTF-8?q?Met=20=C3=A0=20jour=20les=20outlis=20de=20dev?=
 =?UTF-8?q?=20et=20les=20linters.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitlab-ci.yml                                |  17 +++--
 .php_cs.dist                                  |  15 +++--
 composer.json                                 |   2 +-
 composer.lock                                 | Bin 231712 -> 269810 bytes
 src/php/Command/NgModelGenerateCommand.php    |  15 -----
 src/php/Command/NgModelMetadataCommand.php    |   3 -
 .../CallbackFilterRecursorIterator.php        |   2 -
 src/php/Iterators/IteratorBuilder.php         |   7 --
 src/php/Iterators/RecursorIterator.php        |   5 --
 src/php/Iterators/UniqueFilter.php            |   4 --
 src/php/Metadata/CachingMetadataFactory.php   |   7 --
 src/php/Metadata/ClassHierarchy.php           |   7 --
 src/php/Metadata/MetadataFactory.php          |  63 +-----------------
 src/php/Metadata/MetadataFactoryInterface.php |  13 ----
 src/php/Metadata/OperationDef.php             |  33 ---------
 src/php/Metadata/OperationMetadata.php        |  39 -----------
 src/php/Metadata/PaginationMetadata.php       |  13 ----
 src/php/Metadata/PropertyMetadata.php         |  37 ----------
 src/php/Metadata/PropertyMetadataFactory.php  |  32 ---------
 src/php/Metadata/RepresentationMetadata.php   |  11 ---
 src/php/Metadata/ResourceClassHierarchy.php   |   3 -
 src/php/Metadata/ResourceMetadata.php         |  17 +----
 src/php/Metadata/SerializationMetadata.php    |  16 -----
 src/php/ModelGenerator.php                    |  27 --------
 src/php/Models/ClassInfo.php                  |  32 ---------
 src/php/Models/ClassName.php                  |   7 --
 src/php/Models/Declaration.php                |   6 --
 src/php/Models/DeclarationTrait.php           |   3 -
 src/php/Models/HasName.php                    |   3 -
 src/php/Models/MultitonTrait.php              |   2 -
 src/php/Models/NamedTrait.php                 |   3 -
 src/php/Models/PHPClass.php                   |  18 -----
 src/php/Models/Types/AbstractCollection.php   |  11 ---
 src/php/Models/Types/Alias.php                |   4 --
 src/php/Models/Types/ArrayType.php            |   3 -
 src/php/Models/Types/BuiltinType.php          |   2 -
 src/php/Models/Types/Deferred.php             |   6 --
 .../Objects/AbstractHierarchicalObject.php    |  19 ------
 .../Models/Types/Objects/AnonymousObject.php  |  22 ------
 src/php/Models/Types/Objects/Property.php     |  40 -----------
 src/php/Models/Types/Objects/Repository.php   |  23 -------
 src/php/Models/Types/Operations/Operation.php |  10 ---
 src/php/Models/Types/Operations/Parameter.php |  14 ----
 .../Types/Operations/ParameterPathPart.php    |   3 -
 src/php/Models/Types/Operations/Path.php      |  21 ------
 src/php/Models/Types/Operations/PathPart.php  |  17 -----
 src/php/Models/Types/Placeholder.php          |   2 -
 src/php/Models/Types/Reference.php            |   4 --
 src/php/Models/Types/StringConst.php          |   2 -
 src/php/Models/Types/Type.php                 |  24 -------
 src/php/Models/Types/Union.php                |   4 --
 src/php/Models/Types/Unresolved.php           |   3 -
 src/php/OperationMapper.php                   |  37 ----------
 src/php/PathParserInterface.php               |   6 --
 src/php/SerializationMapper.php               |  51 +-------------
 src/php/SerializationMapperFactory.php        |   8 ---
 .../SerializationMapperFactoryInterface.php   |   6 --
 src/php/TypeFactory.php                       |  10 ---
 src/php/TypeFactoryInterface.php              |  19 ------
 src/php/TypescriptHelper.php                  |  28 --------
 src/php/Writers/ConsoleWriter.php             |   3 -
 src/php/Writers/DirectoryWriter.php           |   2 -
 src/php/Writers/FilteringFileWriter.php       |   3 -
 src/php/Writers/MultiFileWriter.php           |   5 --
 src/php/Writers/PhonyFileWriter.php           |   3 -
 src/php/Writers/Writer.php                    |   3 -
 src/php/Writers/ZipFileWriter.php             |   3 -
 src/php/Writers/ZipWriter.php                 |   2 -
 .../Fixtures/Controller/CustomController.php  |   5 --
 tests/Fixtures/Entity/EntityWithAccessors.php |  16 -----
 .../Entity/EntityWithCustomMethods.php        |   2 -
 tests/Fixtures/Entity/EntityWithDTO.php       |   2 -
 tests/Fixtures/Entity/EntityWithNullable.php  |  23 -------
 tests/Fixtures/Entity/Person.php              |  10 ---
 tests/Fixtures/Entity/Project.php             |  28 --------
 tests/Functional/AccessorTest.php             |   4 --
 tests/Functional/CustomMethodTest.php         |   4 --
 tests/Functional/DTOTest.php                  |   4 --
 tests/Functional/GenerationTestCase.php       |   6 --
 tests/Functional/IntegerIdentifierTest.php    |   4 --
 tests/Functional/NullableTest.php             |   4 --
 tests/Functional/ProjectResourceTest.php      |   7 --
 tests/Functional/RelationTest.php             |   4 --
 tests/Iterators/IteratorBuilderTest.php       |   5 --
 tests/Models/ClassInfoTest.php                |   8 ---
 tests/Models/PHPClassTest.php                 |   9 ---
 tests/TypescriptHelperTest.php                |  13 ----
 87 files changed, 25 insertions(+), 1018 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8799f48..dd85809 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,15 +1,22 @@
 include:
   - project: pole-is/tools/ci-config
-    ref: "1.10.0"
-    file: /php-package-ci.yml
+    ref: "2.2.1"
+    file: /defaults.yml
   - project: pole-is/tools/ci-config
-    ref: "1.10.0"
-    file: /nodejs-ci.yml
+    ref: "2.2.1"
+    file: /php/package.yml
+  - project: pole-is/tools/ci-config
+    ref: "2.2.1"
+    file: /php/packagist.yml
+  - project: pole-is/tools/ci-config
+    ref: "2.2.1"
+    file: /node/base.yml
 
 stages:
   - vendor
   - test
   - test-generated
+  - deploy
 
 variables:
   PHP_VERSION: "7.1"
@@ -37,7 +44,7 @@ npm:test:
 test:tsc:
   stage: test-generated
   extends: .nodejs
-  dependencies:
+  needs:
     - node_modules
     - test:generate
   script:
diff --git a/.php_cs.dist b/.php_cs.dist
index a01069c..cadc9a9 100644
--- a/.php_cs.dist
+++ b/.php_cs.dist
@@ -1,7 +1,5 @@
 <?php declare(strict_types=1);
 
-require __DIR__ . '/vendor/autoload.php';
-
 $finder = PhpCsFixer\Finder::create()
     ->files()
     ->name('*.php')
@@ -9,8 +7,13 @@ $finder = PhpCsFixer\Finder::create()
     ->exclude('tests/Fixtures/var')
     ->in('.');
 
-return Irstea\CS\Config::create()
-    ->setIndent('    ')
-    ->setLineEnding("\n")
-    ->setFinder($finder);
+$loader = require __DIR__ . '/vendor/autoload.php';
+try {
+    return Irstea\CS\Config::create()
+	->setIndent('    ')
+	->setLineEnding("\n")
+	->setFinder($finder);
+} finally {
+    $loader->unregister();
+}
 
diff --git a/composer.json b/composer.json
index 35b756f..e6a055a 100644
--- a/composer.json
+++ b/composer.json
@@ -87,7 +87,7 @@
     "test:lint": "@php vendor/bin/parallel-lint src/php tests -j $(nproc)",
     "test:php-cs-fixer": "@php vendor/bin/php-cs-fixer fix --dry-run --verbose --using-cache=false --show-progress=none --no-interaction",
     "test:phpmd": "@php vendor/bin/phpmd src/php,tests text ./phpmd-ruleset.xml",
-    "test:phpcpd": "@php vendor/bin/phpcpd src/php tests --no-interaction --exclude=Fixtures/var",
+    "test:phpcpd": "@php vendor/bin/phpcpd src/php tests --no-interaction --exclude=Fixtures/var --names-exclude=ClassInfoTest.php",
     "test:phpstan": "@php vendor/bin/phpstan analyse --no-progress --no-interaction",
     "test:composer-require-checker": "@php -d xdebug.max_nesting_level=1000 vendor/bin/composer-require-checker --ignore-parse-errors",
     "test:phpunit": "@php vendor/bin/phpunit --colors=never --coverage-text",
diff --git a/composer.lock b/composer.lock
index 88df81847441f74137d25e35d5db5bc927be48b7..7d13d165e502e8c90b1574d091fe413d8ee78f76 100644
GIT binary patch
delta 28826
zcmdUY3wTx4nf9~xPD1V%LV$3~2}%+!N%s8`5F?<JRsjWDMFsZlgriAL$Vo&L1&U}@
ztmsmg+D^e+Tc_26Sdac*fKID+Mk`M3W$ILAoVJeDitYT<i&p1dd!LgF(Ei(*f98=s
zeK6<jwe~t^uWx<V_x;Z9TPlD1MD?CK2+`QtCJE?=#Aueaz}Gd?mnBD0eb3iDOIHF#
zvo$L)4A}_+&C+azz4w8ziT*^G6n6rBsdXG%{uHTdinl;CzDGEN9oSFGSb0A=iLISQ
zX0qzrg_3=f3+@=h*0@3m{dHNAO<PAwiA-P1PTbd7zQ3GSZ>pth|D%|mbEuwvMJ%Pa
zjvdb)K8-ZcBY!??-}&_`#TrFwmE=}gT`3zKirFFCw5CI$N2atBGkO%;r)n*}p*n`G
zsYy>u`m&=qf$ti+ZEJz5YnCbNvZOn%m!yZM(%6I9`m@ON=D2s>`{?;}Z9@V3N)})G
zGYuU@6-ujYuawOWUGC6iw)Yw`m%cD#x*$t*>&spAkX%C7HqB~LEhR9Mn(x|<toWYc
z$@m_!si}_QO12?svg`T2p)mP2ay2!YE1P4^V9s@<j_#RO(G+h2+dV;a*{g%Xbh_n_
z(`aW=?Y?y_pDL!$Nm{XjFQRv-2CLQuo&EFOq=c3BlhS=>%8ezg>K?L=9$8UBU+rjZ
z(afZ-TZUwqmSYEsq$m=;gXwybVj8Bd8@^&&vScv1TeyloxwM4-pShLIF=tVyypAoO
zB~&)WTZK0I4!v{US?sBLv9X{#)q4r68B1#E&ifX!&UK`A-{e#NPOPw7Wo(tjzo90v
zBb4a-5~p1}mc4m}n8f#zTBM|@DwYMw(hbE{BrR$Cn&O(0t|v{!cRV++WI5?Y-|3l^
zHO(<+u!EjZM_=Du*%WUDK7JKHRu!~w;Z6Ha`Rrk#lAjN?RZ&+;c89ElAD`}dvY4jM
zKUvh;Om?_V?4=)`KdV_yYL4m$vXj(oEAXYjF?7|}d{2S6nYJctT3~n%+uJ5=Vu|Tu
ziJtCFrn=fMPxZM@cXxZt`SkGM^w?|FY$oGr=cNH#JDZfUM5kC@uv%@?*h?#f26p71
zgkrkqTPnn{iLTjD#s2MFaXzcQKrEpLswPBZcFrcnbnS+c;c0Zwg=6U2nrcDbL>mhe
zY}Z7wUf8sny>yi@l^wcJEH39OY+9|gNt;&dj2t9q(O+Ej5Ygz(4{YC8zvfwCOmeW-
zPxW@OyF1AoDt)So-ng%<s6Eq{?#-}+k738EjY8VFpt!&r%nY!*Pa^Z_p6ezRCLOmg
z%?@{ydfIn$nYeDyrF+-T<2Ps<Ncll`Dml>RrF+_Qw{P!C4PZ=rpW|KPbfq!_?U{`|
z$#n0=c4)*&`8A63Q`z3rh(up^N~?1_ZgP#NYaJ@vJ07Y<cV`Um_dmF^TV%;~)gVwk
z+f*gXGHhR0@rLS4YSM79>&c{TL4euTg=CxQ;mf7FgQ4AyIh!_a4RuU&%<=5-M6!e3
z<cT)@r9WTXv|6F>UAl-K`lCg62NMf6%|At_ja5@v`C_qHn5Qv$CYi?GT`ZQ-*MdW%
zHo1Xqxt<iWAFU83)7_t+K=%X%^mF$l!kLBGU5#)5N%YHKEgm&(3_Eh3SV{ME6<~3l
z9c&|~?0dIMf?*B!|NhkXPmujrrIj)_EFCgipAhHLzw16J+<&+SJ@m6ZIPaQas8F|_
z6KJw&+e+XiebbO_({>fdwJldwZAYVfn>Nv%TZ-xI-pZDkb9CzTHpU*z_D&bCqSf2V
z+4t+oRDPOomq-=8CcSF(Q9Sse@I`!uXe0jI_q`KjBb1{K;uS~g=$wJ6!<+H=fZYts
z=gO9)+isv3t}P`sH)*J*u4<~{tEy#cy5%NScJ_lL+Ks;%oEm%5)(oj*TU?mMn5(?>
zdx5Lny}9#uj)-$dovMa?Yc||ShK~zddl#uXYLD8;>1?+R)1Th>ZvN2x>lKGjkiFuE
zM(Tj2RKr745%l+``&-vJy?%GlPhWau+R(0*jkv@Pj~AL-%)qu3E9u#m<H%l8F<nhj
zl7R+C$I_CzD><%fs=5{G(^E!F5Bi6+YRr4E^`*k}=9q)&!F%{-rf|ZV*;A*AB}H8O
zwdrhqy*O)3s0ml=^yd3cqgx6p=&M(k4r#{(yMD7!Rm62ASA`>vU+L-m!F-B8muyWr
z84${c-@t=9jV(Dbj3nQ0twS<9R4T7fL%(R!=C+|trjKpbTM!pmfojM&f4-~hfu?zu
zXE+k}6DLzmTB_{2$-ocyl|FfWwKTMyF{d(TJGL|K;6_21Ko9i#c~7T`K7W1bzNfct
z8*wt><czd`)nA%6d}?XmJ(I<}6Gf}9P7HZJ-&!bE9DAJUfv;<!LVok=FXpV^2iyPY
z1Ub-0Dc^mwuA5LiyuEvGZf{8jifzia>L!)IunZ&cZAl7z#YdE4s|KPH%ZEP{xk2=X
zTWXtQ&KPoiVvgsoPnISg=*vCiCvJW5#C*u~HP$-(jH`DSva4p2QhLK3Gg=HKX)C&9
zd$xnqBqOQ`WYe|0r0klCC%K4~keQI(=qz1u=fviiGuX|C$vC?9h02dLfi34*iOycJ
zlI^M?wJb4*RCDd8a^J9#_01M1(68S0g`>{IupYc_-?A_N@C4bU<EXmVSRwTN7`koO
z2ydi%x73nUb;HptJJ4lIhdW~1k|jxc;F?Lr(`85YVdiw-i?-?4yT>)hoDl`I$T@tR
z39E*7XacukwWCbu^p3>z)lnRP2w|L%`<rd)6vqppkKc$Gv4$PlCKl3FWwp0lSVJFr
zrHH<B&wXsUFP4djDA-FyICBr&yO<{K`z`z{9u{&RW>{yk1DnZM`rB<Y=#BSR55LXT
z?2x=9=$5M5FzTeE^esC!2IZk^?XV8!5$TIHRngqe%Zk~ag`)ypsS$z9{#H^kyfVXk
zW7(P|;ut~6ePBr}W2Fg%$=_@t#ayR{`JKdl74-eDm9n!}3MbLdjWg)3iYofKuYaB{
z*>M97skZOt2Ud!oaAO_j_|(=&f_0=Zbhfol?4TVFHV^BWmmX|u(N!<$AXgOFvZf?e
z+tm$8hxRsI$9GiAR()SfYDP|O|MsD=%`s;T%k9UQFf6x_x_Kis`#<g3^+|u^e<6wR
z!Xwj%pZJ<@&ulh)Kd^nzlw^2Dw(MHE<jTGz*--A5CVRT(dYa?1y;G56Mii;{q<V&v
z2r*|n?B;urX^pp(L-#)VE)OCrdYlxzcCH}iX>B}h)j)S=H}JGTNfg@;EAs98w8z^|
z%spXGcwz}#-9d`zvrkSVI+Dki(bZ4QLe5mSlaB4dag{Vf^HtkU%8mg?$51rHCa#fm
zEFXzy<nzJ+Kk@StI`3(oY>hQBOytEJ%XlJh-=U{ZA^3ndKXCcJFC6Ipq(AO3bE>q$
zgG4;27;N)A@s#jk(|Oqvdck+|&w5_AnEvUzGmzPKeZz4y-3?sX^G(DEvf-lqf^@d5
zs&H^D7j`ol8O`uvW9BR0D~UZb%&Np)2FGA6J#|SDed3ueA~X3tp_9ItD5e)bdvAUZ
zo_pexz6UwYFQL3(cSu@?W`~+Tl6hnaOX%M|pW6qXG%Th|UYOBj$;qUzLh=pYluRU4
zlt7ha#kCX@>20JtO+D%9RGxcfUhKoU!(m&z8#s|s*wS3t6l=k7e3+e|!}{Jrk!#h9
zyK*}*aOnCIcqgi;`*O4i_q3=cic+TGnU;$(qi*QPUm21YNVcmPl7l)AYLKRui>4Ak
zub{8|sI)oetf7c1{&*)m0+p}sjGi>Df30%gkA8B+C;e&vCEZg&AATi)ud?;!O?25m
zH=**RAPWSSMhj58aa0whCew3NC>kwr4Z{ymibAm|uX84#@)T=E_^89eQ{3T4J?VY*
zuf2XEK4rS}jS<1?uiwyGOx<&nQc|@n-%<=qhcFwutlPS*+K^{iH6>e;{oFIY>75c3
zPrM+L8Oj31ya9jYxh!q01u=dbT;S3w9s!LgS%s;*#0Mp8%MMaq5Eij`6@za6<#(dY
z0&VzR@xB*-^}A2{_WT7Obm<!<H1YNbKlIn(8wGU#+cR2R!*v2c9VFTD0}ub&zF{Si
zZ;)I|MaADhL}2Jn&IsT1&iL3fLgO3v_AtJmKknYh>G|x`)5RJ4s@`4vm-BU<mzA;`
zHw%>|!*xi$h0)CR_b$#S)*F8Jr4w`$t9~C<Bg1OceZQXrO@`We(lKN;Kq=ifee9#*
z0bJp_o{dUW;G4Q*C8O*)z2Xnm&}6Y@@Lc&xP4UL&Qsw8crM=?ReOvx$5gy$~0XEX0
z6GxO3M}_#KQmV(Vik!k;f0|6(_s;vT<~Q%`4?ppNckTr8z<Wd~k^PB~mZ30^-6D|o
z7RAve%h6Rmsi*)O1xZ&`bQD1>cwUmBB|X=b4B3VIhGH`77D;V$%qi3n>)4)aNo7;K
zCD`5?(aA0^Akze-Mi|*FB-qX(G7<qGZL1m1q#Tth-~IXGx{*bnD8Cd{ixWJnG;UPh
zrh><_Bgf2S7oI1M%p4)rQ_8lKl1g@D2Pt6R8bgY6DJJQzQ5l`%7SkfJq3^t3&vu_L
zeho@|3Y$8KlxCNe5KV~mdA6jSoS>=VY-<(y)tJ02^|I{~NE`51y6ae;kDv)D9K%+U
zu(0rN3`5Z^UG@V-wmjfcB3W8J5wa9>O6ak(JrAQ28gC6gVRRaY9r$|yppJBv()RRp
zB-EzTce}>WEAOl2+p;IOAuA@Ipc^ue{{6kBVHPpFV;XsUXlF9)i6%0u#SH*Na|~0_
zJSbxu_z_LAeAR`!kEqv#-F59CUkYP8o5{H5m{Xz>Slq$+5*R9$#ccOqOnjEEmfJKL
z7?L)bEng{|jI7X1y7vBJ);^QWX39)5l^^I@wqquFIlR@>1>y)j5hi{AYl?!leRaa{
z%;RN%krW<BUoNi0x($&&;5D{<`g){ViHZ?OVi&XX=MZ!FwzTuI61r^c820oWGNu6E
z(qh#sg-N-$tD&c)d`h{5y@tCVXX=_(G7|stag)ylc(hUadFPp8`G~^tD>F&>l7INx
zIs9WxLvp=vyqC$OdI7Wx`dfp`2Kt>)bt-Jlbz}m+UJVG|#^YX@(Bt%9;-@$Cj=b6?
zD?n@li@0$H<9nB_YA06}gop6*Y_Ue3J3(qQqpOtj=$9vyu{-CJD%NR|%Di^`n`Qv;
z)BqR*<g;-Oy(A)OphJ8!kUR?*P6M%?BTIH3vBM8w5!+>v%9fZjBiv5x!Ekc<0h(~E
z{Icb900Bi(a&A<EnTXA;IL>iw0<x=~oivvi(Q(9Cu43Egl7~i!DlcXC%_Bw8DzQ!$
zm;D?_kQZOrtJjlp1suk}OFRGlQVW;$;SYE`fA1Hhg-uiO2zt&ElaV~KrAx))?50!6
z35r`{m5w;V>-(xBwm0jJ<SD+bO7QJe85Y`08cD!-0XYwVE3;t0UCGymvi}Hg#oCsb
zvm8WRKt;q_fhYZM$RY!{XhcvIR@w5~9!lVdO4$C!?4^PD0e8l?YUkWeg+e-Q`lRf?
zc8L$4m?0IreF168>xv#WXCY~Au>%k86Rfmi>ADK%92nieME+BCd=mv4-7_RL7gXKa
z9CLI8K8iUw4?be8r;`fyv!!Hms2a-p*7cc6sQhJi_;Uoc(+Ks)cAQS89}CA`05dr)
zQY8s)Cpm0M&EYdo9}P~)eqk|r|AgE^l^yyFnZ?{&Ns_HSlgQ1oWtvJL$+l#wU~OoM
zX$FC9I+Ehp4uWGH_;Sy;BSf}#7O9InBP`v-y?YLWy_8K|N`A`r-$};iL1Q5#Ec=6H
z<aL4V{E!r9KRSo}jD$fW0P}K436Md?0JJJQ<y_J_ra*2RW;d{>E+kU3g3unGy{Z5#
z=OHccc^a=%X^s!3gJv48E_tr$a^T~3`qr4T;VgaJnIZZy3?O4Jl|w%+0>uGIwABz!
z&fB=@N90nrc|EMj2dl}G^rl(YWaqCXdkVr5h1M!5D<un+=?+~FsT|pkfc&zADD==P
z7jrHLyDd#-w<waX22K(sX{a?Bn;Rf~sQL(u6}Z#DRRCcDq5#+rAak(pK2p^jb4o~k
z2)|{#B^db;xt>+;2a4dESCU4yr4^R<2Mt0ad*Mn@b2w8c3#N`(5~iX-ut5$0{0EyY
z-<D%|WG}daJY6O#;1D2-6NF##`fG{WB3nt6y%bY6OvCqFE3hoZ@m-XNO$U3bfrpd~
zEE{x)+sF=M0l@SlapmzQ4;SQPt`<ge;g0U+B&5~Xk#oXV@5~abM8pZK<}NaU?YWMu
z;(62ZF>NX`rzjia?S>ExQpR(vqu%B4kz?M?r-=$i-=TqlR<gY6sCR#UJ()Oq9A_gG
z!lwrA9jQXPyri0)aRWItKJE28J*mM=dtZP0vW=}hPOsAy^fP$}K3)9|vY7qj0g?z0
zC)>Y+=%a7?e!DoaG?yagO7pOc$ft4<P*0CtPi8QlhdAbYFgQ5{^z8|?$6nziiKE};
z-a7}Hln6sE`BeVtv!!1olL(H%&RJKoqA!zb_V7*Qk8I~xkP6u|g>0jzw0?p0{SCQ;
zeRCJ-qMaF?{pJ?(?<0gx=}>gK^N}2@sO?swaFZPoq}aD_18VDzYYC8LZV&)m#xd)b
zW(FV^SzKYNx@wpb;2*GiuJ3s+7rNceF-MO;mBqV#I3Yrng-7eb+lj;`^plBf_i9qk
zs>ceotn&=;*iNmg14M_O_RB_K5*pcNMt;Ix{4vIDxr5vr0*%&eDCPfUkdZ0$Pur%3
zn~QgvheAHK02AmD1ndWvh~@Nm+fEMoD@D;x<KFX`B#AX)c*qXjMIOV0!!~5G4HuKq
zTad+uOd+E-LSsMJO`fNRt|~0!>@MhWr9+BnYV3(wph*1VBa^Zf_mIaXfoS*o4k2W$
zG2<!H((F4N@@RR1?n?lV0XGJeAJ_({#!8weIRHT$mSco&A=`No+~m@yNqI}mX->qu
zi?@cuPP>x0O!}-?Mb9mp7%IF19Csul_v7ert;b*L^re;ty0)d5o?LtqYpWN-c-p3?
zZ2)u{RscG29Lr8bCK8IVo~&kDZ3L|R3fCX(U{aXKmOm&|u+DFh+WO(c8d7(H)=Pu_
zOp3FEo=OT+Mu>uRJsDpT>KR_9;e{Kv_9{>~tFu_{hX+XWDCA+5bCC!!!%cktJLFd)
zOPq{zbi+TB>0-LShwa@*RQAC$<dkFZTzpJ@S;$aI_h;6n`uNy!tnV^XauiVsY^2%^
z8#c7{IRpJcx;G>w!C9k~|1mjFIVudVF>*eq4_-Ty6PTLvETq3qU}9f-5)NQ~)nlnk
zxpF^fk&?lwE0Pl0Qg+j`NI0t_4Nc2)@Es&j)hsm$*b(4eDD3+IoCXCf7R7L2fxzfg
zBv3qQ<HiPhs42+`zK?`d+)0NEBIaGpH4YbWko}@C%g-)aPab5YKZKomIw?%%8$J^b
zF6T^+XS4nR^7z4hWD+}c6}I543=aKrRO<NgFJujS$c^+W?HV@!t9ZXCjkGa;Tr9Dd
zl$I^$Vw4#OdcA<%y_M9G<!ledutRSMW3$o=<m$rz^^KR~ZM>iM2KtfpnW3D)H*?be
zTLzTSeU#M>JtqTroHN+>s1SKmcvZ?C#9J-EodK@|YAjq~3&18N>HD&gL|6(90Yavw
z!L1BTJ94S6dKuZ`m{WM=f%9WO#&|E(G<^Rj=AFjR<aeG<f0hH#8p9(FQK%JQ<X_K1
zjg(ih<pn|s`|To9&#KoUQ0lxyC}z8UjHHLm-dlv{H6$TfNJtr>6|;-85RthB7oHO&
zy8~|k>Lmf+;9~rlNM#aEB9rRr>kbm#DYxJ0-<TN81b)KZm>5_WBrbLOQ|ZA>Vo`2a
z@)I+O4eL_gx`gBVnM5Yt6R<5k<mAnKO8@XGpeKgQIo+uNem`d*0oG!G$>1v{mVat_
zTVlyT0*uh~hD>5(dN47NPILtW;mRX!lj==EXF1^qcii+K?$YgKGC^ieq9+(wm&Qi`
zy#ybvHr*HW52Ua_W&p!I+<7D0dV?^7E47PR#{!|A?OjP)MwE-8IiNqnxMR)FNumtt
zrL)f^Yi@s)OkwZ832MBnf`klmj;|qUEi00#$VmXv0n)M+<g@|$2NvCQSYw&c#CBdG
zOv>KzZ{#ULcQ;OBof>Ip#lOa;wAG5+*zzgljqIIold&Y!UNWcJLTpvwm27tS4KgqL
zhj++8$bw!Qet<WBkI>FB4e;%(qyzFDc-*G!1E1%(D0lj*7g#_PSWZ$7*w$CcJofaT
zkjG2CPs+1j`~$f~$giV?TqPBXlF9FrwZ!6PIQo(mACUGYqyhmJLjuLIH2^Xl55d3Z
z8v)`eO;;5g$dJI6*v(f9iQ7*V7jdKvd;SCR)8TJ<;9jACt^P9{V|>*&*~K4{Cfe6l
z!k+t(T*L-+ypOPNBK!UdfTQ<ZE3<VUk(0s!&wNDArf&?6<tBrVsb*jLh?LQX*Dkzm
zl`!kJJ;JHC^$2s=DJPTp*;XRx(X#{CPG2dh9SWylh0l(COAuPvvs8#4-3n1qTNH4`
z1IdydT{Ds%_|-t#$w^x>Tp8pX8%%z<8}Rk$`U~dLNu`afv_P1^c3de`v-7?oj0?LC
z(8&c8*^x_yBDSXhCoMdEZY>0<uK@L)hg&%7xV(D!7_tN3BF*eK8-=3cFliyR$+R(O
z%q}k!3iB-plyE;(9af9CAjsZPEPQTU6wRMIRnS{p#ZxR3pn6Mk035*~lfkLhlYs32
zsI2L}r2@GV@E!zLu-0ipef$}mZ5jLadmr`Lfrk(+RK5jceCGo~UG|a&p-T+U4+1@N
zr2^6@>b>;l8ESEFFfb6b`zes$ri2xREpL)FG;wC}&=q#@Cqh$`=^NMr8ORk5w?F`>
z8bDjyAV;Z2QkNB3_0<5)DZpQ}^7kA@$i$o-hVmdXR?UdF8js}Jf$hSlc=SHKG+MV8
zZVg-h4PnZp=rz2X)~)~*31=W3qJ`l<htc4~=z4$JO%JqorvWI*U8arijxUccX1sMl
zkHcPCN~V-W?+gy4x-;~pqA8)Ev4!)6Ms5MdMOWQ)dLV<kM;{lXd5pX%EXdtyAb@4>
zr_Puud4o_KBKT`C+S}M3{u@<G=;0udm3}5%OXv?<$CgiDy!^~orA=y0_jc36KdUR}
zuTlHquQyV1?fIpPoJ&)FVsZbVPY=$4g*lmwEAjbzUHq-}4=*WP%6FL_eAp-nKW1CH
zzl+J0<jl=ScHQ#DM0ho^DCi4%eK;Q*6H9uzo#7^DVY+v~;pLo;#2MYeWhu8in8VFM
zAE4KMsKAqh-QBIpz!@0q$2*IbER5^~bb1o^=;oHm!K{QcIFR0uf|Jk{PRk7T^`-mk
z1`@Cm+?XVKgALrcBupH=_6hZL?c}<`@WZl(yNOy9Ey>;^LLKqx*;DESKNThkijt0p
zjpa{9NTtKK3iv$Um1NBH$fSh!BNuZjNOUM2vc~bgdTwu$DSUCx|C~Z^B^T$GebEr-
zG$T)iV~u_ZATb%1=|iQOniE)>B7s38TSgF|*9bW4p$mG^yzmpZNB0{N|F}1SOB!{z
zh`DIaC!G*28VY74L2X)M)20NgS&6WPH(?o)(wb;!_-`no3TvDrB)Hp>6Yo$=+16`-
zstEm8PBJ;Zh_bcINMH6l4+#@OIW3Chl%7^FeoRh6|C_?O@W`%PZ_Ekj8Q~6fB>0oX
zKi%*axcA_v`XOZLe(pVl?upZzNc9d3rUp`%28q*_F9{uqVL4Jz2$&{zb*H01ekuia
zW5bWZ)xi^CcmKOEE2ktSbtQ}xbiKxT!g(#(8!+iyG7V}{4kO|b3WvUT){JJ=LmM8~
zGl0PNEXfBF*+sHXbCJze(2~Y5QAtU9QrM6urzE+u8j_P(^XZ;HoIE4$ND!+2czWom
z-s6kY@JHj2JS_P58xEb+m;KDWxefmxRZRMkT{k|K+xw-bFI(D?fMQDf`E3uPzxkC=
z8n_mLubJO%s79_e6gDLzPGU>n0C(aZd7Oa#Td$DuL+YV$`bMXxd!%zI!N$WfnjI3`
zI!{z9qvMjdAZ-1Qg>m%tM=B78-#r_dskJ8gY}M#7{fs<FX0{*$Y6b>eFwX(h4SE6q
zH6Yx;vh!Ry@Kiw7Z9t_B?hGtE>JHpa4ar2z8}alo<xur_>!LBvs`_ZzQEH=2IaYD}
z7X^h0i^+=HE#bTW<3?=RkzG6Q$jJ(~AdB<Hz5{VdX!jvDy|7TBec_T58Xbf#ZHX13
z85-c%^X5l8j`<PNKDQ@@)A=(C`&}gpghICJ8d6)F@tkBb-R-l7R+8DF@2<3RLIXOp
z@EC#niesZkJ<`+2`CAIh`&-pVj|saDG@FXyX^17jq%~DL0KgSBKV5T>ZPSo$GZFm;
za4ho%Xu;8U8QFXw=B>CH3cE?f9zVhf%Q;n%1<Y9^eMqQA`cR>d_TN=U?4@P@OHu|`
z>BcQNDLaR|jAw=(V@G0Ls%u?>yE|M3A$1cPCb&p=Juu|?MDAr2O>aoS-N^(_KM%!W
z#JFd~ujd2g(2}Kkd29{WsIRXZG4Vi(ZN5Qh9%0F7+o2Nn-T#aF&PS$DM8EUaIMy~E
z>An>gj2lvL1=HbHvYmT{S$V<%x?HIpvcwv{N%GE5<l<82<!S7-9m2X%j&Eqzl7X8<
zHQCi9UGb2D0oyF8gNu;VfCWII679<ngn|PIqFK%Xitah2#NysTejQNWn5*T=mWxJ;
z)F`+7xQ=&qG&~ecDTE~*-?;&sa|yYCl7rLOmV1SN;X3U9zk{>r$S%4wCsHfIK%)b>
zo9>j4?S`9-{~*mX&_C#L-x>~27d-I{QZI=vcsIR?XiDDZ!NCtb<pSQdi*0Qd(f8{p
zr^Z-`9KWu>sX07@sG}cT82!mSjnb8KYq()xPN~?`qIfbOABJyPmZ_Vz1Co_w*%tao
zp`(~#Shj6~kQKPxn9Yq8P-s<#_CMwghRZP@XF{$VlXG(y<Xqe++~WIu727>l$Yo>y
zvNuaR_cvB``FsNMS;(d(mh{jUTgS7tzaWKj3hl8j9dT_1&vtfYIyyE4=#7@TJZPC2
z9_4}bX&En-YMIII{x_ru!N=>&-R(Ft<{)#H8$Kt|%eBXdJMkFH>BoJ;J2hOKN%xLe
ze<_dWF1+wu9*bUh;iog9U&H-8`so+Tryji|GIc>eK4CE6wY9OsfmqMu<q9=7ZuHHD
z^Nk%HNb8-O305F27xV<Z1DV{XVOKsNjG24PDnW18z`EQr$TUJidt8Vw7iDBDd()8I
zOF`L%PUIeN1N&ceC!xH*v^#gw!iUy@#A(;MfeiuwH^HS9Ap_1Bk4AH!xhdiF_d6RC
zQ0l3^!R|1VIVX|oL18u#b_~K7o0G^O3!V7%3izR+gNpasK}<>W{&91L4s&{DFGh9`
zb|s?Qr}0SokPO|B?)URP3V%%4preknLVx^Lz2K!8c}l1&o(`1|45WIv2U0XW{3!I`
zTXj^LQou3_FmU|vMHl<fQm&Wne@vJ-Cbtp;s&;%KK12#BsGrr*#3Pf6274jdIoD=z
zAlV8yPn|G0K=1yCdb(_el7o6g-V7Qi>9o2-tvROrMf-k+ba+PvDqFlzIBr?Kn7urz
zk9`((4Ys;e1ZUX+fDD~21HfLiq=MRu;d-tLz>9Ai+&4x{?U_DTB%eCoU3iggNULb^
z?iN9h;|>m?$BBgtC-MWB&H%^S#~)d5tJ9a_2XHm5S&T*`b;Y#vt`h29)>)q)*q;9*
z945CJyt>GX0SUJ7BJ|thAd@G)04}$AjZixY>G3GV(mwQ8I8SP0ub&BZ#R~#sR-0{l
zn`}}ttEnn~_uS`UXOAVb;a(R`;nPMuX#R*Uyl@E&1+prv@p0biYrDqkb_$=PYY#M>
ze9TZjKhy8EkGR10r^tKkod?L~H4Af(ArU=>$b&&40@)=Tmmrx;c`2xd#QMRYe<PP+
zeuB7}!s^He^+ghp$X7@cExqYP|6nhK7#eojOeQZN)5?*R)Oj~UG)oP;*{RvOlZ4+k
zu={2svz%BZoX`3e3JXv`R+GMsj4()GNwh>o(@nS_2(%>RAT=EbDi@wI2cDp}DErN4
zgfe!;LSgJMq$uVM!X#2eBZ#*mpRkIT0ZTcEs*dxx>a$x;7n%t@P+CT-%W4WFfJ>;H
zh-!h^>={D8Sc$fy3LG*Em?E_9<beX)KUb*4_{!||PYb(?3NPh=s(gr0#vVKmCFose
z3p1KEUG`LzHjsh>CR39_(geC<fT@V4F5u#zDFc|gv~hpK?H33RyW||9F7~ALch%i)
zAPF09iS>6u!cZCIm2<Y{41`7NRtWbLD;&Uwv?V)rGYauXRv-&?gr{qltQ0D8&<M`8
zIGHW0MVkIAD}~A;9ww|-k$tU?>R~@!DLe=s^+yW_vwu2QxHZaPtF01bg=gVABvgPj
zc6mmqVpkRj)gfY`Y?ZL(Oho=Q_W))0`kg`@8}l_`W{a%>wd!gn`c|M@f@ON}SpZ%|
zERN2n=$)XTwv47wA?IWhJ0t>D@r$ns)y*;Ig%X2WVr5gjbs~Y`Pb~Y>uM7WDoXbs0
z76+MWI<0v_XMf%+v=BSL`NizUhXn~u=ww6Xy^amEc(8PU%FqeLM;8?IL$L!Nt;&4W
zbZicrzk;pZCyYZExmYv8Tyzxn#hh^W1aVcEQJVjVFtsv)twZu4VYk`%e@N=Wc_=Q|
zc`h=s+T{Phx-@anI3!`4cyd&q`0x?ovI2gQe}HLGc{PMvJo{~7Mj^kTa45%kHuq7;
z%KEc}ma^4So82bM;Uv5<f!U9v_LF@S<(*R>5vodBQ4<YyY4n|5d{k%@F_^vgsL)nr
z@oBjaWdIk_SOxakRq#gs<#Xsd-MN1j`&w4m+kl#6Zzj_n>ejrn<8{(ycz?x;Gg;MR
z!j!V`MW&nQ8+d96Icuo+^Bxm6GxKpF&G1~R*{>cGmeU`Umu2@pF8q|RLkYns$yZo2
z^xfy)V;i3mz7ST|&iI}{*?&AKoI`iF&B?YtEiB1nEm15-a|9I%GE7Tx(I{iz-7ho|
zgF~gbXq2&w4hU_{=m-LYC0uee1`jy6RQ2RQMu#)akpM<C6c-><%gv_?xQK)^ONNzX
z+*@z}1(*1kE9R2b0FBkMx05)R$A||99*?Ilme&*_VE}>P9bH&wnV_<>9u>xhdtc1=
zKD>xh(aecjo7JWo(T;`^h8^XvK%E{xw5#(`?>vRAeL|>Yi@%F>RDxBp9nT0g)j-^3
zf{pEigD9Rj2(Q?~&j{DDKR-hzqk3P=I-eCT&835Rj}T}abS7dof_O?+d``H1Jlpyv
zfI>U(hq1omU-1;Dye6PYh@pXt>;sF25E-B}z@VJKk#$e9Wf*+)!bZzw)d*>>IX%NC
z4?q2wH;6#mF$Z&yc6R6M!j6Ip8TD%^R5Iut%)>y9t^JKql1=_XxJ(Ms<>(j9T9N>f
zySgbUHrmL$uqdd<qGK$21xNsyJ81A=AQ5FnoOsQ15WEh#W%1_H#Mbd)bMn~3H-Q{k
zLSMOW3K)51VCNOmDch#7<&(rhwyY7ILZ$@81#M=&)AOjd&uIBuz}~$?EGgw49B2Fj
zjm7bo9N`7LXff04#q&afR=(#jrc{dgzCu~_4}a}AT;Y-&(~}P#1)9c_4BOad8>foK
z2?<u8oBd`&{Lv6Wu!r4$J*m2VrZ}U;w1Dlk{iKcFr@pOA8VY1dB!SRGPWJ2oy%T_D
zR{>iOslbP3iW8e-P6@3>n0bu11jc(Dx>v)VpCw8;)ZS1tIW*;JVBH-#MgngEGbd~Y
z&YRw{mppMZ?>fzv%>;^zQw90%vv151HMVMjIGH6{Noh&CKji-AWr71~YakO`fad9K
zQkyb|_p9cxK9IjB)8D*X#{q~7*iEhC8#y}DUtyJV+Thp`qz5*?U2GrX*!^{)an$&l
zGhj;DhwWnBFkLA}56s_~@ur`{SBLt_6{3n2QK)#s^c+Sw`f4zb5<9p9)|kunD2QU%
zFFQOnds^Wl-QNz9WBv?fQ?jT=<oC<76IAig2}#bI%jOwk)H(lbbkb&r3~_dgZYnmC
zU4SB5I;gRxB?Em7a1n?buIpN8pRejBxD1iVf7KMLnqy8GPI-Nt2}6A?XAgIs%kH+t
z6SQ|ddvcyQ+?1ECIz`l5ED67Q0freUXD)i!d#>W5xgUTv8v14{nyDtyveE>|IMgy7
z^Tqn+m{W#IW${+vrLxemL(*%?uyUcf4lE^k0$S8kG9)hLiHJD+C9pOc$NTF{z7`%L
z+7Hwpul>OAkdREw8ahXv+GATxq9w)D5xOH!ERKkoT-SjHS)Oa{JY?!Pm>GC84sH&6
zjbyJoO<X}(X0h176=6k=uv|eusxBSszCW@RfBDFsdtq~a{M154erRdFSwdc6E?+3B
z9L`?uh9nT~P3JG6^K@l?9@kN)Mg-A{MWRf<G@)wf64$vyFY=s)p*JpBBz}YY*`*a3
zq}&F3*6=KeGeFNSYe3}P#L`8ez8uB+-gCM*DQCAi!(-Hr9o_x2n7)61<!}d3_TmDu
zG@4*UT+?HC;Nt{6yaIDlh{srw+oO>`OHfnO$T}8_<@{1j&2+YgKZ@}0#`2@OP4M2P
zAuW7P_#+4-^!TW@6S<#30AD;d4?Ju@Q$8%b$C`=1(vmbsw8cIRnX5!-LPosgB-#-#
zIbnSG$qiG+k7W%b5ug3{Pm8Zb-7hZBf>-;K6U3Ap-ALu~v&H6N%4W?uVq3G~Ceh&n
zzr_KkSr0&+@X%^XL70Z$VgchDh;|(v7c?HAvFbkytJyA79K+r^M;se_DzD#$OtF|t
zMUh!>9CvAS>xIy9+UpCabJAQ1JGfH3AK^pz3msp+KtzJ#T(Mn<en=oBs?h2`t<L*I
zb*y3@5@WMwA!5z<u8MxU<F7SqIjRXyx*R8}GIw@COdp^7jhE1I&o>6<A0>BUanO!F
zP_ewKq29Z!a6Xt+$Np$c*sO{7`^h(M+04e4Mqh6-b61JUB9v{B49&i{N@V#iE^l8X
zzHoxd@vkotXAR5o_HI#bF#yE{u2r%$Gy@6(G|NZ(KSd7EI3L&+2M!Waw1{~l`wU)q
z0SkJ>n)vg=mas7w0Xw{l_jFoyOyAe+lWFml6Egr~Z)e1)3tG*9cza8blzFLD0to^?
zXU2a*3)yURJCiKn&CnLm)sl{n6hrvHH4bbVipXP54U?Fxa{%3Q;;j{BF^Af#-*TbL
zTW&99pgm0<YD{-}*oK?=8^ou>MhV-qU%yQJyA$#tsM*J^5dX1|-3&B7+jA~-;P1AI
zS_=T6kah$ENgEx^Obh8ZG|BQo%LhXVSZQ>mgJ!p_Fem%>pNFR!b4HZpi8+`jd60)c
zlYM)eco9b=vy0cECCoe(g{YhFTM+)<8C!g{xRj^Evgd6Vorq`vCO1HDK*WaB=I1XU
j)3R?~E9#_aPH6)Fn?79r%G2Dq8;80?n>4-j%F_P?G0AGD

delta 16370
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
BAb0=(

diff --git a/src/php/Command/NgModelGenerateCommand.php b/src/php/Command/NgModelGenerateCommand.php
index 300102c..57f2890 100644
--- a/src/php/Command/NgModelGenerateCommand.php
+++ b/src/php/Command/NgModelGenerateCommand.php
@@ -52,9 +52,6 @@ final class NgModelGenerateCommand extends Command
 
     /**
      * NgModelGenerateCommand constructor.
-     *
-     * @param ModelGenerator $generator
-     * @param Documentation  $documentation
      */
     public function __construct(
         ModelGenerator $generator,
@@ -113,12 +110,6 @@ final class NgModelGenerateCommand extends Command
         }
     }
 
-    /**
-     * @param InputInterface  $input
-     * @param OutputInterface $output
-     *
-     * @return MultiFileWriter
-     */
     private function openWriter(InputInterface $input, OutputInterface $output): MultiFileWriter
     {
         $zipPath = $input->getOption('zip');
@@ -142,12 +133,6 @@ final class NgModelGenerateCommand extends Command
         return new ConsoleWriter($output);
     }
 
-    /**
-     * @param string $path
-     * @param bool   $force
-     *
-     * @return \ZipArchive
-     */
     private function openZipArchive(string $path, bool $force): \ZipArchive
     {
         $archive = new \ZipArchive();
diff --git a/src/php/Command/NgModelMetadataCommand.php b/src/php/Command/NgModelMetadataCommand.php
index f01f7fc..2c3fc65 100644
--- a/src/php/Command/NgModelMetadataCommand.php
+++ b/src/php/Command/NgModelMetadataCommand.php
@@ -47,9 +47,6 @@ final class NgModelMetadataCommand extends Command
 
     /**
      * NgModelGenerateCommand constructor.
-     *
-     * @param MetadataFactoryInterface $metadataFactory
-     * @param Documentation            $documentation
      */
     public function __construct(
         MetadataFactoryInterface $metadataFactory,
diff --git a/src/php/Iterators/CallbackFilterRecursorIterator.php b/src/php/Iterators/CallbackFilterRecursorIterator.php
index ddb35be..a5fe824 100644
--- a/src/php/Iterators/CallbackFilterRecursorIterator.php
+++ b/src/php/Iterators/CallbackFilterRecursorIterator.php
@@ -54,8 +54,6 @@ class CallbackFilterRecursorIterator extends RecursorIterator
 
     /**
      * @param \Iterator $iter
-     *
-     * @return \RecursiveIterator
      */
     protected function doGetChildren(\Traversable $iter): \RecursiveIterator
     {
diff --git a/src/php/Iterators/IteratorBuilder.php b/src/php/Iterators/IteratorBuilder.php
index e0fb1b9..637e9e2 100644
--- a/src/php/Iterators/IteratorBuilder.php
+++ b/src/php/Iterators/IteratorBuilder.php
@@ -63,8 +63,6 @@ final class IteratorBuilder implements \IteratorAggregate
     }
 
     /**
-     * @param int $mode
-     *
      * @return IteratorBuilder
      */
     public function recurse(int $mode): self
@@ -79,9 +77,6 @@ final class IteratorBuilder implements \IteratorAggregate
     }
 
     /**
-     * @param int      $mode
-     * @param callable $filter
-     *
      * @return IteratorBuilder
      */
     public function recurseWhere(int $mode, callable $filter): self
@@ -97,8 +92,6 @@ final class IteratorBuilder implements \IteratorAggregate
     }
 
     /**
-     * @param callable $where
-     *
      * @return IteratorBuilder
      */
     public function where(callable $where): self
diff --git a/src/php/Iterators/RecursorIterator.php b/src/php/Iterators/RecursorIterator.php
index f2f481b..87643b0 100644
--- a/src/php/Iterators/RecursorIterator.php
+++ b/src/php/Iterators/RecursorIterator.php
@@ -55,11 +55,6 @@ class RecursorIterator extends \IteratorIterator implements \RecursiveIterator
         return $this->doGetChildren($iter);
     }
 
-    /**
-     * @param \Traversable $iter
-     *
-     * @return \RecursiveIterator
-     */
     protected function doGetChildren(\Traversable $iter): \RecursiveIterator
     {
         return new self($iter);
diff --git a/src/php/Iterators/UniqueFilter.php b/src/php/Iterators/UniqueFilter.php
index 6ed27fb..022089a 100644
--- a/src/php/Iterators/UniqueFilter.php
+++ b/src/php/Iterators/UniqueFilter.php
@@ -33,8 +33,6 @@ final class UniqueFilter
 
     /**
      * @param mixed $value
-     *
-     * @return bool
      */
     public function __invoke($value): bool
     {
@@ -47,8 +45,6 @@ final class UniqueFilter
 
     /**
      * @param mixed $value
-     *
-     * @return string
      */
     private function getKey($value): string
     {
diff --git a/src/php/Metadata/CachingMetadataFactory.php b/src/php/Metadata/CachingMetadataFactory.php
index 32e79cc..bd832ee 100644
--- a/src/php/Metadata/CachingMetadataFactory.php
+++ b/src/php/Metadata/CachingMetadataFactory.php
@@ -38,9 +38,6 @@ final class CachingMetadataFactory implements MetadataFactoryInterface
 
     /**
      * CachedMetadataFactory constructor.
-     *
-     * @param MetadataFactoryInterface $inner
-     * @param Cache|null               $cache
      */
     public function __construct(MetadataFactoryInterface $inner, Cache $cache = null)
     {
@@ -67,10 +64,6 @@ final class CachingMetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param string   $namespace
-     * @param string   $key
-     * @param callable $compute
-     *
      * @return mixed
      */
     private function memoize(string $namespace, string $key, callable $compute)
diff --git a/src/php/Metadata/ClassHierarchy.php b/src/php/Metadata/ClassHierarchy.php
index 9c4d253..878db9b 100644
--- a/src/php/Metadata/ClassHierarchy.php
+++ b/src/php/Metadata/ClassHierarchy.php
@@ -28,16 +28,9 @@ use Irstea\NgModelGeneratorBundle\Models\ClassName;
  */
 interface ClassHierarchy
 {
-    /**
-     * @param ClassName $class
-     *
-     * @return ClassName|null
-     */
     public function getParent(ClassName $class): ?ClassName;
 
     /**
-     * @param ClassName $class
-     *
      * @return ClassName[]
      */
     public function getChildren(ClassName $class): array;
diff --git a/src/php/Metadata/MetadataFactory.php b/src/php/Metadata/MetadataFactory.php
index 0da2bf9..f68682e 100644
--- a/src/php/Metadata/MetadataFactory.php
+++ b/src/php/Metadata/MetadataFactory.php
@@ -84,17 +84,6 @@ final class MetadataFactory implements MetadataFactoryInterface
 
     /**
      * MetadataFactory constructor.
-     *
-     * @param ResourceClassResolverInterface         $resourceClassResolver
-     * @param ResourceMetadataFactoryInterface       $resourceMetadataFactory
-     * @param PropertyNameCollectionFactoryInterface $propertyNameCollectionFactory
-     * @param PropertyMetadataFactoryInterface       $propertyMetadataFactory
-     * @param PropertyInfoExtractorInterface         $propertyInfoExtractor
-     * @param OperationMethodResolverInterface       $operationMethodResolver
-     * @param ContainerInterface                     $filterLocator
-     * @param PaginationMetadata                     $paginationMetadata
-     * @param RouterInterface                        $router
-     * @param ClassHierarchy                         $classHierarchy
      */
     public function __construct(
         ResourceClassResolverInterface $resourceClassResolver,
@@ -156,12 +145,6 @@ final class MetadataFactory implements MetadataFactoryInterface
         );
     }
 
-    /**
-     * @param bool $enabled
-     * @param bool $clientItemsPerPage
-     *
-     * @return PaginationMetadata
-     */
     private function buildPagination(bool $enabled, bool $clientItemsPerPage): PaginationMetadata
     {
         return new PaginationMetadata(
@@ -174,8 +157,6 @@ final class MetadataFactory implements MetadataFactoryInterface
 
     /**
      * Get paginationMetadata.
-     *
-     * @return PaginationMetadata
      */
     public function getPaginationMetadata(): PaginationMetadata
     {
@@ -183,8 +164,6 @@ final class MetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param ClassName $class
-     *
      * @throws PropertyNotFoundException
      * @throws ResourceClassNotFoundException
      * @throws \ReflectionException
@@ -213,17 +192,9 @@ final class MetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param ClassName           $class
-     * @param APIResourceMetadata $resourceMetadata
-     * @param string              $name
-     * @param string              $type
-     * @param array               $operation
-     *
      * @throws PropertyNotFoundException
      * @throws ResourceClassNotFoundException
      * @throws \ReflectionException
-     *
-     * @return OperationMetadata
      */
     private function getOperation(
         ClassName $class,
@@ -311,14 +282,6 @@ final class MetadataFactory implements MetadataFactoryInterface
         );
     }
 
-    /**
-     * @param ClassName $class
-     * @param string    $type
-     * @param string    $name
-     * @param string    $method
-     *
-     * @return string
-     */
     private function getOperationPath(ClassName $class, string $type, string $name, string $method): string
     {
         $className = $class->getFullName();
@@ -344,9 +307,6 @@ final class MetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param ClassName $class
-     * @param array     $filterIds
-     *
      * @return FilterInterface[]
      */
     private function getFilters(ClassName $class, array $filterIds): array
@@ -367,16 +327,11 @@ final class MetadataFactory implements MetadataFactoryInterface
     /**
      * @parma string $operationName
      *
-     * @param OperationDef|null $opDef
-     * @param ClassName         $class
-     * @param bool              $normalization
-     * @param string[]          $groups
+     * @param string[] $groups
      *
      * @throws PropertyNotFoundException
      * @throws ResourceClassNotFoundException
      * @throws \ReflectionException
-     *
-     * @return SerializationMetadata
      */
     private function getOperationSerialization(
         ?OperationDef $opDef,
@@ -395,16 +350,12 @@ final class MetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param ClassName    $class
-     * @param bool         $normalization
      * @param OperationDef $opDef
      * @param string[]     $groups
      *
      * @throws PropertyNotFoundException
      * @throws ResourceClassNotFoundException
      * @throws \ReflectionException
-     *
-     * @return SerializationMetadata
      */
     private function doGetSerialization(ClassName $class, bool $normalization, ?OperationDef $opDef, array $groups): SerializationMetadata
     {
@@ -474,15 +425,7 @@ final class MetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param ClassName         $root
-     * @param ClassName         $class
-     * @param bool              $normalization
-     * @param OperationDef|null $opDef
-     * @param array             $groups
-     *
      * @throws ResourceClassNotFoundException
-     *
-     * @return string
      */
     private function getRepresentationName(
         ClassName $root,
@@ -515,11 +458,7 @@ final class MetadataFactory implements MetadataFactoryInterface
     }
 
     /**
-     * @param ClassName $class
-     *
      * @throws ResourceClassNotFoundException
-     *
-     * @return array
      */
     private function getDefaultGroups(ClassName $class): array
     {
diff --git a/src/php/Metadata/MetadataFactoryInterface.php b/src/php/Metadata/MetadataFactoryInterface.php
index 8aaeb77..a925320 100644
--- a/src/php/Metadata/MetadataFactoryInterface.php
+++ b/src/php/Metadata/MetadataFactoryInterface.php
@@ -28,22 +28,9 @@ use Irstea\NgModelGeneratorBundle\Models\ClassName;
  */
 interface MetadataFactoryInterface
 {
-    /**
-     * @param ClassName $class
-     *
-     * @return bool
-     */
     public function isResource(ClassName $class): bool;
 
-    /**
-     * @param ClassName $class
-     *
-     * @return ResourceMetadata
-     */
     public function getResourceMetadata(ClassName $class): ResourceMetadata;
 
-    /**
-     * @return PaginationMetadata
-     */
     public function getPaginationMetadata(): PaginationMetadata;
 }
diff --git a/src/php/Metadata/OperationDef.php b/src/php/Metadata/OperationDef.php
index 05e482c..8c4391e 100644
--- a/src/php/Metadata/OperationDef.php
+++ b/src/php/Metadata/OperationDef.php
@@ -46,10 +46,6 @@ final class OperationDef implements \JsonSerializable, HasName
 
     /**
      * OperationDef constructor.
-     *
-     * @param string $name
-     * @param string $method
-     * @param bool   $isCollection
      */
     public function __construct(string $name, string $method, bool $isCollection)
     {
@@ -83,57 +79,36 @@ final class OperationDef implements \JsonSerializable, HasName
         $this->name = $name;
     }
 
-    /**
-     * @return bool
-     */
     public function hasNormalization(): bool
     {
         return \in_array($this->method, ['GET', 'PUT', 'POST']);
     }
 
-    /**
-     * @return bool
-     */
     public function hasDenormalization(): bool
     {
         return \in_array($this->method, ['PUT', 'POST']);
     }
 
-    /**
-     * @return bool
-     */
     public function isGetItem(): bool
     {
         return $this->special === 'GET' && !$this->isCollection;
     }
 
-    /**
-     * @return bool
-     */
     public function isCreateItem(): bool
     {
         return $this->special === 'POST' && !$this->isCollection;
     }
 
-    /**
-     * @return bool
-     */
     public function isUpdateItem(): bool
     {
         return $this->special === 'PUT' && !$this->isCollection;
     }
 
-    /**
-     * @return bool
-     */
     public function isDeleteItem(): bool
     {
         return $this->special === 'DELETE' && !$this->isCollection;
     }
 
-    /**
-     * @return bool
-     */
     public function isGetCollection(): bool
     {
         return $this->method === 'GET' && $this->isCollection;
@@ -141,8 +116,6 @@ final class OperationDef implements \JsonSerializable, HasName
 
     /**
      * Get name.
-     *
-     * @return string
      */
     public function getName(): string
     {
@@ -151,8 +124,6 @@ final class OperationDef implements \JsonSerializable, HasName
 
     /**
      * Get originalName.
-     *
-     * @return string
      */
     public function getOriginalName(): string
     {
@@ -161,8 +132,6 @@ final class OperationDef implements \JsonSerializable, HasName
 
     /**
      * Get method.
-     *
-     * @return string
      */
     public function getMethod(): string
     {
@@ -171,8 +140,6 @@ final class OperationDef implements \JsonSerializable, HasName
 
     /**
      * Get isCollection.
-     *
-     * @return bool
      */
     public function isCollection(): bool
     {
diff --git a/src/php/Metadata/OperationMetadata.php b/src/php/Metadata/OperationMetadata.php
index bdc80b7..62316c0 100644
--- a/src/php/Metadata/OperationMetadata.php
+++ b/src/php/Metadata/OperationMetadata.php
@@ -58,15 +58,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * OperationMetadata constructor.
-     *
-     * @param OperationDef               $opDef
-     * @param string                     $description
-     * @param string                     $path
-     * @param array                      $requirements
-     * @param array                      $filters
-     * @param PaginationMetadata|null    $pagination
-     * @param SerializationMetadata|null $normalization
-     * @param SerializationMetadata|null $denormalization
      */
     public function __construct(
         OperationDef $opDef,
@@ -89,8 +80,6 @@ class OperationMetadata implements \JsonSerializable, HasName
     }
 
     /**
-     * @param ResourceMetadata $resource
-     *
      * @return OperationMetadata
      */
     public function withResource(ResourceMetadata $resource): self
@@ -103,8 +92,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get className.
-     *
-     * @return string
      */
     public function getClassName(): string
     {
@@ -113,8 +100,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get opDef.
-     *
-     * @return OperationDef
      */
     public function getOpDef(): OperationDef
     {
@@ -123,8 +108,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get name.
-     *
-     * @return string
      */
     public function getName(): string
     {
@@ -133,8 +116,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get description.
-     *
-     * @return string
      */
     public function getDescription(): string
     {
@@ -143,25 +124,17 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get type.
-     *
-     * @return string
      */
     public function getType(): string
     {
         return $this->opDef->isCollection() ? 'collection' : 'item';
     }
 
-    /**
-     * @return bool
-     */
     public function isItemOperation(): bool
     {
         return !$this->opDef->isCollection();
     }
 
-    /**
-     * @return bool
-     */
     public function isCollectionOperation(): bool
     {
         return $this->opDef->isCollection();
@@ -169,8 +142,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get method.
-     *
-     * @return string
      */
     public function getMethod(): string
     {
@@ -179,8 +150,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get path.
-     *
-     * @return string
      */
     public function getPath(): string
     {
@@ -199,8 +168,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get pagination.
-     *
-     * @return PaginationMetadata|null
      */
     public function getPagination(): ?PaginationMetadata
     {
@@ -219,8 +186,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get normalization.
-     *
-     * @return SerializationMetadata|null
      */
     public function getNormalization(): ?SerializationMetadata
     {
@@ -229,8 +194,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get denormalization.
-     *
-     * @return SerializationMetadata|null
      */
     public function getDenormalization(): ?SerializationMetadata
     {
@@ -239,8 +202,6 @@ class OperationMetadata implements \JsonSerializable, HasName
 
     /**
      * Get resource.
-     *
-     * @return ResourceMetadata
      */
     public function getResource(): ResourceMetadata
     {
diff --git a/src/php/Metadata/PaginationMetadata.php b/src/php/Metadata/PaginationMetadata.php
index 560bab1..0af323e 100644
--- a/src/php/Metadata/PaginationMetadata.php
+++ b/src/php/Metadata/PaginationMetadata.php
@@ -42,11 +42,6 @@ final class PaginationMetadata implements \JsonSerializable
 
     /**
      * PaginationMetadata constructor.
-     *
-     * @param bool   $enabled
-     * @param string $pageParameterName
-     * @param bool   $clientItemsPerPage
-     * @param string $itemsPerPageParameterName
      */
     public function __construct(bool $enabled, string $pageParameterName, bool $clientItemsPerPage, string $itemsPerPageParameterName)
     {
@@ -58,8 +53,6 @@ final class PaginationMetadata implements \JsonSerializable
 
     /**
      * Get enabled.
-     *
-     * @return bool
      */
     public function isEnabled(): bool
     {
@@ -68,8 +61,6 @@ final class PaginationMetadata implements \JsonSerializable
 
     /**
      * Get pageParameterName.
-     *
-     * @return string
      */
     public function getPageParameterName(): string
     {
@@ -78,8 +69,6 @@ final class PaginationMetadata implements \JsonSerializable
 
     /**
      * Get clientItemsPerPage.
-     *
-     * @return bool
      */
     public function isClientItemsPerPage(): bool
     {
@@ -88,8 +77,6 @@ final class PaginationMetadata implements \JsonSerializable
 
     /**
      * Get itemsPerPageParameterName.
-     *
-     * @return string
      */
     public function getItemsPerPageParameterName(): string
     {
diff --git a/src/php/Metadata/PropertyMetadata.php b/src/php/Metadata/PropertyMetadata.php
index d6c47ac..0534ffa 100644
--- a/src/php/Metadata/PropertyMetadata.php
+++ b/src/php/Metadata/PropertyMetadata.php
@@ -62,17 +62,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * PropertyMetadata constructor.
-     *
-     * @param string $name
-     * @param string $description
-     * @param Type   $type
-     * @param bool   $identifier
-     * @param bool   $nullable
-     * @param bool   $readable
-     * @param bool   $writable
-     * @param bool   $initializable
-     * @param bool   $link
-     * @param bool   $embedded
      */
     public function __construct(
         string $name,
@@ -100,8 +89,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get name.
-     *
-     * @return string
      */
     public function getName(): string
     {
@@ -110,8 +97,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get description.
-     *
-     * @return string
      */
     public function getDescription(): string
     {
@@ -120,17 +105,12 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get type.
-     *
-     * @return Type
      */
     public function getType(): Type
     {
         return $this->type;
     }
 
-    /**
-     * @return Type
-     */
     public function getLeafType(): Type
     {
         $type = $this->type;
@@ -144,8 +124,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get identifier.
-     *
-     * @return bool
      */
     public function isIdentifier(): bool
     {
@@ -154,8 +132,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get readable.
-     *
-     * @return bool
      */
     public function isReadable(): bool
     {
@@ -164,17 +140,12 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get writable.
-     *
-     * @return bool
      */
     public function isWritable(): bool
     {
         return $this->writable;
     }
 
-    /**
-     * @return bool
-     */
     public function isNullable(): bool
     {
         return $this->nullable;
@@ -182,8 +153,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get initializable.
-     *
-     * @return bool
      */
     public function isInitializable(): bool
     {
@@ -192,8 +161,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get link.
-     *
-     * @return bool
      */
     public function isLink(): bool
     {
@@ -202,8 +169,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
 
     /**
      * Get embedded.
-     *
-     * @return bool
      */
     public function isEmbedded(): bool
     {
@@ -223,8 +188,6 @@ class PropertyMetadata implements \JsonSerializable, HasName
     }
 
     /**
-     * @param Type|null $type
-     *
      * @return array|null
      */
     private function serializeType(?Type $type)
diff --git a/src/php/Metadata/PropertyMetadataFactory.php b/src/php/Metadata/PropertyMetadataFactory.php
index 02165ac..7d22c9b 100644
--- a/src/php/Metadata/PropertyMetadataFactory.php
+++ b/src/php/Metadata/PropertyMetadataFactory.php
@@ -62,13 +62,6 @@ class PropertyMetadataFactory
 
     /**
      * PropertyMetadataFactory constructor.
-     *
-     * @param ResourceClassResolverInterface         $resourceClassResolver
-     * @param PropertyNameCollectionFactoryInterface $propertyNameCollectionFactory
-     * @param PropertyMetadataFactoryInterface       $propertyMetadataFactory
-     * @param ClassName                              $resource
-     * @param string                                 $mode
-     * @param array                                  $groups
      */
     public function __construct(
         ResourceClassResolverInterface $resourceClassResolver,
@@ -87,13 +80,8 @@ class PropertyMetadataFactory
     }
 
     /**
-     * @param ClassName $class
-     * @param string    $propertyName
-     *
      * @throws ResourceClassNotFoundException
      * @throws \ApiPlatform\Core\Exception\PropertyNotFoundException
-     *
-     * @return PropertyMetadata
      */
     public function create(ClassName $class, string $propertyName): PropertyMetadata
     {
@@ -120,11 +108,6 @@ class PropertyMetadataFactory
         );
     }
 
-    /**
-     * @param APIPropertyMetadata $propertyMeta
-     *
-     * @return array
-     */
     private function getLinkStatus(APIPropertyMetadata $propertyMeta): array
     {
         $typeMeta = $propertyMeta->getType();
@@ -145,11 +128,6 @@ class PropertyMetadataFactory
         return [true, (bool) $embedded];
     }
 
-    /**
-     * @param Type $type
-     *
-     * @return Type|null
-     */
     private function getLeafType(Type $type): ?Type
     {
         while ($type && $type->isCollection()) {
@@ -160,8 +138,6 @@ class PropertyMetadataFactory
     }
 
     /**
-     * @param ClassName $class
-     *
      * @throws ResourceClassNotFoundException
      * @throws \ApiPlatform\Core\Exception\PropertyNotFoundException
      *
@@ -178,8 +154,6 @@ class PropertyMetadataFactory
     }
 
     /**
-     * @param ClassName $class
-     *
      * @throws \ApiPlatform\Core\Exception\PropertyNotFoundException
      * @throws ResourceClassNotFoundException
      *
@@ -210,12 +184,6 @@ class PropertyMetadataFactory
         return $properties;
     }
 
-    /**
-     * @param bool                $isResource
-     * @param APIPropertyMetadata $propertyMeta
-     *
-     * @return bool
-     */
     private function acceptProperty(bool $isResource, APIPropertyMetadata $propertyMeta): bool
     {
         if (!$isResource && $propertyMeta->isIdentifier()) {
diff --git a/src/php/Metadata/RepresentationMetadata.php b/src/php/Metadata/RepresentationMetadata.php
index 01519d5..6b2dc1b 100644
--- a/src/php/Metadata/RepresentationMetadata.php
+++ b/src/php/Metadata/RepresentationMetadata.php
@@ -61,9 +61,6 @@ final class RepresentationMetadata implements ClassName, HasName
     /**
      * RepresentationMetadata constructor.
      *
-     * @param string             $name
-     * @param ClassName          $class
-     * @param ClassName|null     $parent
      * @param PropertyMetadata[] $properties
      */
     public function __construct(string $name, ClassName $class, ?ClassName $parent, array $properties, bool $abstract, bool $resource)
@@ -87,8 +84,6 @@ final class RepresentationMetadata implements ClassName, HasName
 
     /**
      * Get name.
-     *
-     * @return string
      */
     public function getName(): string
     {
@@ -129,8 +124,6 @@ final class RepresentationMetadata implements ClassName, HasName
 
     /**
      * Get parent.
-     *
-     * @return ClassName|null
      */
     public function getParent(): ?ClassName
     {
@@ -149,8 +142,6 @@ final class RepresentationMetadata implements ClassName, HasName
 
     /**
      * Get abstract.
-     *
-     * @return bool
      */
     public function isAbstract(): bool
     {
@@ -159,8 +150,6 @@ final class RepresentationMetadata implements ClassName, HasName
 
     /**
      * Get resource.
-     *
-     * @return bool
      */
     public function isResource(): bool
     {
diff --git a/src/php/Metadata/ResourceClassHierarchy.php b/src/php/Metadata/ResourceClassHierarchy.php
index 8c233e5..1f8dcf7 100644
--- a/src/php/Metadata/ResourceClassHierarchy.php
+++ b/src/php/Metadata/ResourceClassHierarchy.php
@@ -46,9 +46,6 @@ final class ResourceClassHierarchy implements ClassHierarchy
         }
     }
 
-    /**
-     * @param ClassName $class
-     */
     private function preload(ClassName $class): void
     {
         $className = $class->getFullName();
diff --git a/src/php/Metadata/ResourceMetadata.php b/src/php/Metadata/ResourceMetadata.php
index 250c396..92b02f6 100644
--- a/src/php/Metadata/ResourceMetadata.php
+++ b/src/php/Metadata/ResourceMetadata.php
@@ -49,12 +49,7 @@ class ResourceMetadata implements ClassName
     /**
      * ResourceMetadata constructor.
      *
-     * @param ClassName             $class
-     * @param ClassName|null        $parentClass
-     * @param string                $description
-     * @param bool                  $abstract
-     * @param SerializationMetadata $defaultNormalization
-     * @param OperationMetadata[]   $operations
+     * @param OperationMetadata[] $operations
      */
     public function __construct(
         ClassName $class,
@@ -110,8 +105,6 @@ class ResourceMetadata implements ClassName
 
     /**
      * Get parentClass.
-     *
-     * @return ClassName|null
      */
     public function getParentClass(): ?ClassName
     {
@@ -120,8 +113,6 @@ class ResourceMetadata implements ClassName
 
     /**
      * Get parentClassName.
-     *
-     * @return string|null
      */
     public function getParentClassName(): ?string
     {
@@ -130,8 +121,6 @@ class ResourceMetadata implements ClassName
 
     /**
      * Get description.
-     *
-     * @return string
      */
     public function getDescription(): string
     {
@@ -140,8 +129,6 @@ class ResourceMetadata implements ClassName
 
     /**
      * Get abstract.
-     *
-     * @return bool
      */
     public function isAbstract(): bool
     {
@@ -160,8 +147,6 @@ class ResourceMetadata implements ClassName
 
     /**
      * Get defaultNormalization.
-     *
-     * @return SerializationMetadata
      */
     public function getDefaultNormalization(): SerializationMetadata
     {
diff --git a/src/php/Metadata/SerializationMetadata.php b/src/php/Metadata/SerializationMetadata.php
index a010aba..fec99ae 100644
--- a/src/php/Metadata/SerializationMetadata.php
+++ b/src/php/Metadata/SerializationMetadata.php
@@ -43,9 +43,7 @@ final class SerializationMetadata implements ClassName
     /**
      * SerializationMetadata constructor.
      *
-     * @param ClassName                $root
      * @param string[]                 $groups
-     * @param bool                     $normalization
      * @param RepresentationMetadata[] $representations
      */
     public function __construct(ClassName $root, array $groups, bool $normalization, array $representations)
@@ -74,8 +72,6 @@ final class SerializationMetadata implements ClassName
 
     /**
      * Get root.
-     *
-     * @return ClassName
      */
     public function getRoot(): ClassName
     {
@@ -124,21 +120,11 @@ final class SerializationMetadata implements ClassName
         return $this->representations;
     }
 
-    /**
-     * @param ClassName $class
-     *
-     * @return bool
-     */
     public function hasRepresentationOf(ClassName $class): bool
     {
         return isset($this->representations[$class->getFullName()]);
     }
 
-    /**
-     * @param ClassName $class
-     *
-     * @return RepresentationMetadata
-     */
     public function getRepresentationOf(ClassName $class): RepresentationMetadata
     {
         return $this->representations[$class->getFullName()];
@@ -146,8 +132,6 @@ final class SerializationMetadata implements ClassName
 
     /**
      * Get normalization.
-     *
-     * @return bool
      */
     public function isNormalization(): bool
     {
diff --git a/src/php/ModelGenerator.php b/src/php/ModelGenerator.php
index 20aa390..2a06132 100644
--- a/src/php/ModelGenerator.php
+++ b/src/php/ModelGenerator.php
@@ -65,9 +65,6 @@ final class ModelGenerator
 
     /**
      * Serializer constructor.
-     *
-     * @param MetadataFactoryInterface $metadataFactory
-     * @param Environment              $twigEnv
      */
     public function __construct(
         MetadataFactoryInterface $metadataFactory,
@@ -81,9 +78,6 @@ final class ModelGenerator
      * Génère les modèles Typescript.
      * Cette méthode n'est pas réentrante.
      *
-     * @param Documentation   $doc
-     * @param MultiFileWriter $writer
-     *
      * @throws \Twig_Error_Loader
      * @throws \Twig_Error_Runtime
      * @throws \Twig_Error_Syntax
@@ -106,8 +100,6 @@ final class ModelGenerator
     }
 
     /**
-     * @param MultiFileWriter $writer
-     *
      * @throws \Twig_Error_Loader
      * @throws \Twig_Error_Runtime
      * @throws \Twig_Error_Syntax
@@ -166,8 +158,6 @@ final class ModelGenerator
     }
 
     /**
-     * @param MultiFileWriter $writer
-     *
      * @throws \Twig_Error_Loader
      * @throws \Twig_Error_Runtime
      * @throws \Twig_Error_Syntax
@@ -187,8 +177,6 @@ final class ModelGenerator
 
     /**
      * Crée une usine à types contenant un certain nombre de types par défaut.
-     *
-     * @return TypeFactoryInterface
      */
     private function createTypeFactory(): TypeFactoryInterface
     {
@@ -223,11 +211,6 @@ final class ModelGenerator
         return $factory;
     }
 
-    /**
-     * @param string $name
-     *
-     * @return Type
-     */
     private function createCommonFilters(string $name): Type
     {
         $properties = [];
@@ -243,9 +226,6 @@ final class ModelGenerator
         return new InterfaceType($name, null, $properties);
     }
 
-    /**
-     * @return Type
-     */
     private function createOrdering(): Type
     {
         return new Alias('Ordering', Union::create([StringConst::get('asc'), StringConst::get('desc')]), 'Allowed values for ordering parameters');
@@ -253,8 +233,6 @@ final class ModelGenerator
 
     /**
      * Retourne un iterateur sur les métadonnées des ressources.
-     *
-     * @return \Iterator
      */
     private function getResourceMetadata(): \Iterator
     {
@@ -301,11 +279,6 @@ final class ModelGenerator
         return $repositories;
     }
 
-    /**
-     * @param ResourceMetadata $resourceMeta
-     *
-     * @return Repository|null
-     */
     private function buildRepositories(ResourceMetadata $resourceMeta): ?Repository
     {
         $defaultNormalization = $resourceMeta->getDefaultNormalization();
diff --git a/src/php/Models/ClassInfo.php b/src/php/Models/ClassInfo.php
index 1860d8b..2f271c3 100644
--- a/src/php/Models/ClassInfo.php
+++ b/src/php/Models/ClassInfo.php
@@ -61,10 +61,7 @@ final class ClassInfo implements ClassName
     /**
      * ClassInfo constructor.
      *
-     * @param ClassName          $class
      * @param PropertyMetadata[] $properties
-     * @param bool               $abstract
-     * @param bool               $resource
      */
     public function __construct(ClassName $class, array $properties = [], bool $abstract = false, bool $resource = false)
     {
@@ -124,8 +121,6 @@ final class ClassInfo implements ClassName
 
     /**
      * Get abstract.
-     *
-     * @return bool
      */
     public function isAbstract(): bool
     {
@@ -134,8 +129,6 @@ final class ClassInfo implements ClassName
 
     /**
      * Get resource.
-     *
-     * @return bool
      */
     public function isResource(): bool
     {
@@ -144,8 +137,6 @@ final class ClassInfo implements ClassName
 
     /**
      * Get parent.
-     *
-     * @return ClassInfo|null
      */
     public function getParent(): ?ClassInfo
     {
@@ -154,8 +145,6 @@ final class ClassInfo implements ClassName
 
     /**
      * Set parent.
-     *
-     * @param ClassInfo|null $parent
      */
     public function setParent(?ClassInfo $parent): void
     {
@@ -185,8 +174,6 @@ final class ClassInfo implements ClassName
     }
 
     /**
-     * @param ClassInfo $child
-     *
      * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
      */
     private function addChild(ClassInfo $child): void
@@ -200,43 +187,27 @@ final class ClassInfo implements ClassName
 
     /**
      * Test type.
-     *
-     * @param string $type
-     *
-     * @return bool
      */
     public function isType(string $type): bool
     {
         return $this->type === $type;
     }
 
-    /**
-     * @return bool
-     */
     public function isInterface(): bool
     {
         return $this->isType(self::INTERFACE);
     }
 
-    /**
-     * @return bool
-     */
     public function isUnion(): bool
     {
         return $this->isType(self::UNION);
     }
 
-    /**
-     * @return bool
-     */
     public function isUndefined(): bool
     {
         return $this->isType(self::UNDEFINED);
     }
 
-    /**
-     * @return bool
-     */
     public function isIRI(): bool
     {
         return $this->isType(self::IRI);
@@ -341,9 +312,6 @@ final class ClassInfo implements ClassName
         $this->virtualProperties = array_replace($this->virtualProperties, $commonProperties);
     }
 
-    /**
-     * @return bool
-     */
     private function sinkDownProperties(): bool
     {
         if ($this->parent) {
diff --git a/src/php/Models/ClassName.php b/src/php/Models/ClassName.php
index ecd112f..08550a9 100644
--- a/src/php/Models/ClassName.php
+++ b/src/php/Models/ClassName.php
@@ -28,21 +28,14 @@ interface ClassName extends \JsonSerializable
 {
     /**
      * Get namespace.
-     *
-     * @return string
      */
     public function getNamespace(): string;
 
     /**
      * Get baseName.
-     *
-     * @return string
      */
     public function getBaseName(): string;
 
-    /**
-     * @return string
-     */
     public function getFullName(): string;
 
     /**
diff --git a/src/php/Models/Declaration.php b/src/php/Models/Declaration.php
index 0748f13..009467d 100644
--- a/src/php/Models/Declaration.php
+++ b/src/php/Models/Declaration.php
@@ -26,13 +26,7 @@ namespace Irstea\NgModelGeneratorBundle\Models;
  */
 interface Declaration extends HasName
 {
-    /**
-     * @return string
-     */
     public function getDeclaration(): string;
 
-    /**
-     * @return string
-     */
     public function getDescription(): string;
 }
diff --git a/src/php/Models/DeclarationTrait.php b/src/php/Models/DeclarationTrait.php
index 96a4578..e6e48cd 100644
--- a/src/php/Models/DeclarationTrait.php
+++ b/src/php/Models/DeclarationTrait.php
@@ -31,9 +31,6 @@ trait DeclarationTrait
     /** @var string */
     protected $description = '';
 
-    /**
-     * @return string
-     */
     public function getDescription(): string
     {
         return $this->description;
diff --git a/src/php/Models/HasName.php b/src/php/Models/HasName.php
index dd725bf..6ae177c 100644
--- a/src/php/Models/HasName.php
+++ b/src/php/Models/HasName.php
@@ -26,8 +26,5 @@ namespace Irstea\NgModelGeneratorBundle\Models;
  */
 interface HasName
 {
-    /**
-     * @return string
-     */
     public function getName(): string;
 }
diff --git a/src/php/Models/MultitonTrait.php b/src/php/Models/MultitonTrait.php
index 5bb43f2..e7016d0 100644
--- a/src/php/Models/MultitonTrait.php
+++ b/src/php/Models/MultitonTrait.php
@@ -27,8 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Models;
 trait MultitonTrait
 {
     /**
-     * @param string $name
-     *
      * @return static
      */
     public static function get(string $name): self
diff --git a/src/php/Models/NamedTrait.php b/src/php/Models/NamedTrait.php
index 7b35972..e874283 100644
--- a/src/php/Models/NamedTrait.php
+++ b/src/php/Models/NamedTrait.php
@@ -31,9 +31,6 @@ trait NamedTrait
      */
     protected $name;
 
-    /**
-     * @return string
-     */
     public function getName(): string
     {
         return $this->name;
diff --git a/src/php/Models/PHPClass.php b/src/php/Models/PHPClass.php
index bdb6952..cda6d12 100644
--- a/src/php/Models/PHPClass.php
+++ b/src/php/Models/PHPClass.php
@@ -36,9 +36,6 @@ final class PHPClass implements ClassName
 
     /**
      * ClassName constructor.
-     *
-     * @param string $namespace
-     * @param string $baseName
      */
     private function __construct(string $namespace, string $baseName)
     {
@@ -48,8 +45,6 @@ final class PHPClass implements ClassName
 
     /**
      * Get namespace.
-     *
-     * @return string
      */
     public function getNamespace(): string
     {
@@ -58,17 +53,12 @@ final class PHPClass implements ClassName
 
     /**
      * Get baseName.
-     *
-     * @return string
      */
     public function getBaseName(): string
     {
         return $this->baseName;
     }
 
-    /**
-     * @return string
-     */
     public function getFullName(): string
     {
         return $this->namespace . $this->baseName;
@@ -90,12 +80,6 @@ final class PHPClass implements ClassName
         return $this->getFullName();
     }
 
-    /**
-     * @param PHPClass $a
-     * @param PHPClass $b
-     *
-     * @return bool
-     */
     public static function baseNameOrdering(PHPClass $a, PHPClass $b): bool
     {
         return $a->getBaseName() > $b->getBaseName();
@@ -103,8 +87,6 @@ final class PHPClass implements ClassName
 
     /**
      * @param ClassName|\ReflectionClass|string $name
-     *
-     * @return ClassName
      */
     public static function get($name): ClassName
     {
diff --git a/src/php/Models/Types/AbstractCollection.php b/src/php/Models/Types/AbstractCollection.php
index 5dec9a9..14969ee 100644
--- a/src/php/Models/Types/AbstractCollection.php
+++ b/src/php/Models/Types/AbstractCollection.php
@@ -33,17 +33,12 @@ abstract class AbstractCollection extends AbstractType
 
     /**
      * Collection constructor.
-     *
-     * @param Type $valueType
      */
     public function __construct(Type $valueType)
     {
         $this->valueType = $valueType;
     }
 
-    /**
-     * @return Type
-     */
     public function getValueType(): Type
     {
         return $this->valueType;
@@ -74,14 +69,8 @@ abstract class AbstractCollection extends AbstractType
         return ['type' => $this->getGenericUsage(), 'keyType' => $this->getKeyType(), 'valueType' => $this->valueType];
     }
 
-    /**
-     * @return Type
-     */
     abstract protected function getKeyType(): Type;
 
-    /**
-     * @return string
-     */
     abstract protected function getGenericUsage(): string;
 
     /**
diff --git a/src/php/Models/Types/Alias.php b/src/php/Models/Types/Alias.php
index e9c5227..47eef1f 100644
--- a/src/php/Models/Types/Alias.php
+++ b/src/php/Models/Types/Alias.php
@@ -37,10 +37,6 @@ final class Alias extends AbstractType implements Declaration
 
     /**
      * Alias constructor.
-     *
-     * @param string $name
-     * @param Type   $target
-     * @param string $description
      */
     public function __construct(string $name, Type $target, string $description = '')
     {
diff --git a/src/php/Models/Types/ArrayType.php b/src/php/Models/Types/ArrayType.php
index 7e0cea2..4a7adc6 100644
--- a/src/php/Models/Types/ArrayType.php
+++ b/src/php/Models/Types/ArrayType.php
@@ -74,9 +74,6 @@ class ArrayType extends AbstractCollection
         );
     }
 
-    /**
-     * @return string
-     */
     private function getItemName(): string
     {
         $valueUsage = $this->getValueType()->getUsage();
diff --git a/src/php/Models/Types/BuiltinType.php b/src/php/Models/Types/BuiltinType.php
index d6cef0d..1474da9 100644
--- a/src/php/Models/Types/BuiltinType.php
+++ b/src/php/Models/Types/BuiltinType.php
@@ -35,8 +35,6 @@ class BuiltinType extends AbstractType
 
     /**
      * BuiltinType constructor.
-     *
-     * @param string $name
      */
     private function __construct(string $name)
     {
diff --git a/src/php/Models/Types/Deferred.php b/src/php/Models/Types/Deferred.php
index 264b0be..7ba65f4 100644
--- a/src/php/Models/Types/Deferred.php
+++ b/src/php/Models/Types/Deferred.php
@@ -26,13 +26,7 @@ namespace Irstea\NgModelGeneratorBundle\Models\Types;
  */
 interface Deferred extends Type
 {
-    /**
-     * @param callable $callback
-     */
     public function resolveWith(callable $callback): Type;
 
-    /**
-     * @param Type $result
-     */
     public function resolve(Type $result): Type;
 }
diff --git a/src/php/Models/Types/Objects/AbstractHierarchicalObject.php b/src/php/Models/Types/Objects/AbstractHierarchicalObject.php
index a9b607d..fcb3e01 100644
--- a/src/php/Models/Types/Objects/AbstractHierarchicalObject.php
+++ b/src/php/Models/Types/Objects/AbstractHierarchicalObject.php
@@ -44,11 +44,7 @@ abstract class AbstractHierarchicalObject extends AnonymousObject implements Dec
     /**
      * ObjectClass constructor.
      *
-     * @param string     $name
-     * @param Type|null  $parent
      * @param Property[] $properties
-     * @param string     $description
-     * @param array      $children
      */
     public function __construct(string $name, ?Type $parent, array $properties = [], string $description = '', array $children = [])
     {
@@ -83,9 +79,6 @@ abstract class AbstractHierarchicalObject extends AnonymousObject implements Dec
         return implode("\n", array_filter($parts));
     }
 
-    /**
-     * @return string
-     */
     protected function getComment(): string
     {
         return $this->description
@@ -93,25 +86,16 @@ abstract class AbstractHierarchicalObject extends AnonymousObject implements Dec
              : '';
     }
 
-    /**
-     * @return string
-     */
     protected function getDecoratorDeclaration(): string
     {
         return '';
     }
 
-    /**
-     * @return string
-     */
     protected function getQualifierDeclaration(): string
     {
         return 'export';
     }
 
-    /**
-     * @return string
-     */
     protected function getInheritanceDeclaration(): string
     {
         return $this->parent ? sprintf('extends %s', $this->parent->getUsage()) : '';
@@ -129,8 +113,5 @@ abstract class AbstractHierarchicalObject extends AnonymousObject implements Dec
         yield from parent::getIterator();
     }
 
-    /**
-     * @return string
-     */
     abstract protected function getKind(): string;
 }
diff --git a/src/php/Models/Types/Objects/AnonymousObject.php b/src/php/Models/Types/Objects/AnonymousObject.php
index 9f94fe6..491074b 100644
--- a/src/php/Models/Types/Objects/AnonymousObject.php
+++ b/src/php/Models/Types/Objects/AnonymousObject.php
@@ -61,11 +61,6 @@ class AnonymousObject extends AbstractType
         return $this->properties;
     }
 
-    /**
-     * @param string $name
-     *
-     * @return bool
-     */
     public function hasProperty(string $name): bool
     {
         $props = $this->getProperties();
@@ -73,11 +68,6 @@ class AnonymousObject extends AbstractType
         return isset($props[$name]);
     }
 
-    /**
-     * @param string $name
-     *
-     * @return Property
-     */
     public function getProperty(string $name): Property
     {
         $props = $this->getProperties();
@@ -129,17 +119,11 @@ class AnonymousObject extends AbstractType
         return trim(trim($this->getDeclarationHeader()) . ' ' . $this->getDeclarationBody(true));
     }
 
-    /**
-     * @return string
-     */
     protected function getDeclarationHeader(): string
     {
         return '';
     }
 
-    /**
-     * @return string
-     */
     private function getDeclarationBody(bool $multiline): string
     {
         $body = array_merge(
@@ -154,9 +138,6 @@ class AnonymousObject extends AbstractType
         return '{ ' . implode(' ', $body) . ' }';
     }
 
-    /**
-     * @return array
-     */
     protected function getPropertyDeclarations(): array
     {
         return array_map(
@@ -165,9 +146,6 @@ class AnonymousObject extends AbstractType
         );
     }
 
-    /**
-     * @return array
-     */
     protected function getMethodDeclarations(): array
     {
         return [];
diff --git a/src/php/Models/Types/Objects/Property.php b/src/php/Models/Types/Objects/Property.php
index efcf9c3..3c8861c 100644
--- a/src/php/Models/Types/Objects/Property.php
+++ b/src/php/Models/Types/Objects/Property.php
@@ -49,14 +49,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Property constructor.
-     *
-     * @param string      $name
-     * @param string      $description
-     * @param Type        $type
-     * @param bool        $isIdentifier
-     * @param bool        $isNullable
-     * @param bool        $isReadonly
-     * @param string|null $originalName
      */
     public function __construct(
         string $name,
@@ -78,8 +70,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get type.
-     *
-     * @return Type
      */
     public function getType(): Type
     {
@@ -88,8 +78,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get description.
-     *
-     * @return string
      */
     public function getDescription(): string
     {
@@ -98,8 +86,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get originalName.
-     *
-     * @return string
      */
     public function getOriginalName(): string
     {
@@ -108,8 +94,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get isIdentifier.
-     *
-     * @return bool
      */
     public function isIdentifier(): bool
     {
@@ -118,8 +102,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get isNullable.
-     *
-     * @return bool
      */
     public function isNullable(): bool
     {
@@ -128,8 +110,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get isReadonly.
-     *
-     * @return bool
      */
     public function isReadonly(): bool
     {
@@ -150,11 +130,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
         );
     }
 
-    /**
-     * @param bool $usingOriginal
-     *
-     * @return string
-     */
     public function getObjectKey(bool $usingOriginal = false): string
     {
         return TypescriptHelper::objectLiteralKey($this->doGetName($usingOriginal));
@@ -168,11 +143,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
         return TypescriptHelper::propertyAccessor($varName, $this->doGetName($usingOriginal));
     }
 
-    /**
-     * @param bool $usingOriginal
-     *
-     * @return string
-     */
     private function doGetName(bool $usingOriginal = false): string
     {
         return $usingOriginal ? $this->originalName : $this->name;
@@ -201,12 +171,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
         ];
     }
 
-    /**
-     * @param Property $a
-     * @param Property $b
-     *
-     * @return bool
-     */
     public static function compare(Property $a, Property $b): bool
     {
         if ($a === $b) {
@@ -226,10 +190,6 @@ class Property implements \IteratorAggregate, \JsonSerializable
     }
 
     /**
-     * @param string $name
-     * @param string $description
-     * @param Type   $type
-     *
      * @return static
      */
     public static function createIdentifier(string $name, string $description, Type $type)
diff --git a/src/php/Models/Types/Objects/Repository.php b/src/php/Models/Types/Objects/Repository.php
index 1c3038d..14e8b81 100644
--- a/src/php/Models/Types/Objects/Repository.php
+++ b/src/php/Models/Types/Objects/Repository.php
@@ -54,12 +54,7 @@ final class Repository extends ClassType
     /**
      * Repository constructor.
      *
-     * @param ClassName   $resource
-     * @param Type        $resourceType
-     * @param Property    $identifier
-     * @param Path|null   $iri
      * @param Operation[] $operations
-     * @param string      $description
      */
     public function __construct(ClassName $resource, Type $resourceType, Property $identifier, ?Path $iri, array $operations, string $description = '')
     {
@@ -84,8 +79,6 @@ final class Repository extends ClassType
 
     /**
      * Get resourceName.
-     *
-     * @return string
      */
     public function getResourceName(): string
     {
@@ -94,8 +87,6 @@ final class Repository extends ClassType
 
     /**
      * Get resourceType.
-     *
-     * @return Type
      */
     public function getResource(): Type
     {
@@ -104,17 +95,12 @@ final class Repository extends ClassType
 
     /**
      * Get iri.
-     *
-     * @return Path|null
      */
     public function getIRI(): ?Path
     {
         return $this->iri;
     }
 
-    /**
-     * @return Property
-     */
     public function getIdentifier(): Property
     {
         return $this->identifier;
@@ -146,12 +132,6 @@ final class Repository extends ClassType
         return $this->operations;
     }
 
-    /**
-     * @param self $a
-     * @param self $b
-     *
-     * @return bool
-     */
     public static function compare(self $a, self $b): bool
     {
         return $a->getResourceName() > $b->getResourceName();
@@ -167,9 +147,6 @@ final class Repository extends ClassType
         yield from $this->operations;
     }
 
-    /**
-     * @return \Iterator
-     */
     public function getAtTypes(): \Iterator
     {
         return IteratorBuilder::from($this->resourceType)
diff --git a/src/php/Models/Types/Operations/Operation.php b/src/php/Models/Types/Operations/Operation.php
index 1358727..9539e9c 100644
--- a/src/php/Models/Types/Operations/Operation.php
+++ b/src/php/Models/Types/Operations/Operation.php
@@ -55,13 +55,8 @@ final class Operation implements \IteratorAggregate, \JsonSerializable
     /**
      * Operation constructor.
      *
-     * @param string      $name
      * @param Parameter[] $parameters
-     * @param Path        $path
-     * @param Type|null   $returnType
      * @param string[]    $body
-     * @param string      $description
-     * @param array       $relatedTypes
      */
     public function __construct(
         string $name,
@@ -103,8 +98,6 @@ final class Operation implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get returnType.
-     *
-     * @return Type
      */
     public function getReturnType(): Type
     {
@@ -121,9 +114,6 @@ final class Operation implements \IteratorAggregate, \JsonSerializable
         return $this->body;
     }
 
-    /**
-     * @return Representation|null
-     */
     public function getResourceType(): ?Representation
     {
         $type = $this->returnType;
diff --git a/src/php/Models/Types/Operations/Parameter.php b/src/php/Models/Types/Operations/Parameter.php
index af43da1..a74100f 100644
--- a/src/php/Models/Types/Operations/Parameter.php
+++ b/src/php/Models/Types/Operations/Parameter.php
@@ -48,11 +48,6 @@ class Parameter implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Parameter constructor.
-     *
-     * @param string      $name
-     * @param Type        $type
-     * @param bool        $optional
-     * @param string|null $default
      */
     public function __construct(string $name, Type $type, bool $optional = false, ?string $default = null)
     {
@@ -64,8 +59,6 @@ class Parameter implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get type.
-     *
-     * @return Type
      */
     public function getType(): Type
     {
@@ -93,8 +86,6 @@ class Parameter implements \IteratorAggregate, \JsonSerializable
 
     /**
      * Get optional.
-     *
-     * @return bool
      */
     public function isOptional(): bool
     {
@@ -109,11 +100,6 @@ class Parameter implements \IteratorAggregate, \JsonSerializable
         yield $this->type;
     }
 
-    /**
-     * @param self $other
-     *
-     * @return bool
-     */
     public function isEqual(self $other): bool
     {
         /* @noinspection TypeUnsafeComparisonInspection */
diff --git a/src/php/Models/Types/Operations/ParameterPathPart.php b/src/php/Models/Types/Operations/ParameterPathPart.php
index 79a288d..5c01f67 100644
--- a/src/php/Models/Types/Operations/ParameterPathPart.php
+++ b/src/php/Models/Types/Operations/ParameterPathPart.php
@@ -38,9 +38,6 @@ final class ParameterPathPart implements PathPart
 
     /**
      * ParameterPathPart constructor.
-     *
-     * @param Parameter $parameter
-     * @param string    $requirement
      */
     public function __construct(Parameter $parameter, string $requirement = '[^/]+')
     {
diff --git a/src/php/Models/Types/Operations/Path.php b/src/php/Models/Types/Operations/Path.php
index 1c54025..84ce340 100644
--- a/src/php/Models/Types/Operations/Path.php
+++ b/src/php/Models/Types/Operations/Path.php
@@ -43,9 +43,6 @@ final class Path
         $this->parts = $parts;
     }
 
-    /**
-     * @return string
-     */
     public function getUsage(): string
     {
         return TypescriptHelper::quoteString(
@@ -54,9 +51,6 @@ final class Path
         );
     }
 
-    /**
-     * @return string
-     */
     public function getTemplate(): string
     {
         return implode(
@@ -70,9 +64,6 @@ final class Path
         );
     }
 
-    /**
-     * @return string
-     */
     public function getTestPattern(): string
     {
         return implode(
@@ -86,9 +77,6 @@ final class Path
         );
     }
 
-    /**
-     * @return string
-     */
     public function getCapturePattern(): string
     {
         return implode(
@@ -102,9 +90,6 @@ final class Path
         );
     }
 
-    /**
-     * @return bool
-     */
     public function hasParameters(): bool
     {
         foreach ($this->parts as $part) {
@@ -131,12 +116,6 @@ final class Path
         );
     }
 
-    /**
-     * @param Path      $other
-     * @param Parameter $otherParameter
-     *
-     * @return Path
-     */
     public function buildUsing(Path $other, Parameter $otherParameter): Path
     {
         if (\count($other->parts) > \count($this->parts)) {
diff --git a/src/php/Models/Types/Operations/PathPart.php b/src/php/Models/Types/Operations/PathPart.php
index c6c087e..f1e7934 100644
--- a/src/php/Models/Types/Operations/PathPart.php
+++ b/src/php/Models/Types/Operations/PathPart.php
@@ -26,30 +26,13 @@ namespace Irstea\NgModelGeneratorBundle\Models\Types\Operations;
  */
 interface PathPart
 {
-    /**
-     * @return string
-     */
     public function asTemplate(): string;
 
-    /**
-     * @return string
-     */
     public function asTestPattern(): string;
 
-    /**
-     * @return string
-     */
     public function asCapturePattern(): string;
 
-    /**
-     * @return Parameter|null
-     */
     public function getParameter(): ?Parameter;
 
-    /**
-     * @param PathPart $other
-     *
-     * @return bool
-     */
     public function isEqual(PathPart $other): bool;
 }
diff --git a/src/php/Models/Types/Placeholder.php b/src/php/Models/Types/Placeholder.php
index 5b304e0..d23967d 100644
--- a/src/php/Models/Types/Placeholder.php
+++ b/src/php/Models/Types/Placeholder.php
@@ -34,8 +34,6 @@ class Placeholder extends AbstractType
 
     /**
      * Placeholder constructor.
-     *
-     * @param string $name
      */
     private function __construct(string $name)
     {
diff --git a/src/php/Models/Types/Reference.php b/src/php/Models/Types/Reference.php
index 04ddf53..d429051 100644
--- a/src/php/Models/Types/Reference.php
+++ b/src/php/Models/Types/Reference.php
@@ -41,8 +41,6 @@ class Reference extends AbstractType implements Deferred
 
     /**
      * Reference constructor.
-     *
-     * @param string $name
      */
     public function __construct(string $name = 'anonymous reference')
     {
@@ -52,8 +50,6 @@ class Reference extends AbstractType implements Deferred
 
     /**
      * Get target.
-     *
-     * @return Type
      */
     public function getTarget(): Type
     {
diff --git a/src/php/Models/Types/StringConst.php b/src/php/Models/Types/StringConst.php
index 3be5747..d194fea 100644
--- a/src/php/Models/Types/StringConst.php
+++ b/src/php/Models/Types/StringConst.php
@@ -35,8 +35,6 @@ final class StringConst extends AbstractType
 
     /**
      * StringConst constructor.
-     *
-     * @param string $name
      */
     private function __construct(string $name)
     {
diff --git a/src/php/Models/Types/Type.php b/src/php/Models/Types/Type.php
index aa30f14..30de4bb 100644
--- a/src/php/Models/Types/Type.php
+++ b/src/php/Models/Types/Type.php
@@ -26,37 +26,13 @@ namespace Irstea\NgModelGeneratorBundle\Models\Types;
  */
 interface Type extends \IteratorAggregate, \JsonSerializable
 {
-    /**
-     * @return string
-     */
     public function getUsage(): string;
 
-    /**
-     * @param string $expr
-     *
-     * @return string
-     */
     public function castToStringOrStringArray(string $expr): string;
 
-    /**
-     * @param string $expr
-     * @param bool   $explicit
-     *
-     * @return string
-     */
     public function checkType(string $expr, bool $explicit = false): string;
 
-    /**
-     * @param string $typeClass
-     *
-     * @return Type
-     */
     public function getAsType(string $typeClass): Type;
 
-    /**
-     * @param string $typeClass
-     *
-     * @return Type|null
-     */
     public function findType(string $typeClass): ?Type;
 }
diff --git a/src/php/Models/Types/Union.php b/src/php/Models/Types/Union.php
index 94678c3..106fef7 100644
--- a/src/php/Models/Types/Union.php
+++ b/src/php/Models/Types/Union.php
@@ -33,8 +33,6 @@ final class Union extends AbstractType
 
     /**
      * Union constructor.
-     *
-     * @param array $types
      */
     private function __construct(array $types = [])
     {
@@ -103,8 +101,6 @@ final class Union extends AbstractType
 
     /**
      * @param Type[] $types
-     *
-     * @return Type
      */
     public static function create(array $types): Type
     {
diff --git a/src/php/Models/Types/Unresolved.php b/src/php/Models/Types/Unresolved.php
index 89b4c0f..f9efcdf 100644
--- a/src/php/Models/Types/Unresolved.php
+++ b/src/php/Models/Types/Unresolved.php
@@ -107,9 +107,6 @@ final class Unresolved implements Type, HasName
         return $this->getUsage();
     }
 
-    /**
-     * @return Unresolved
-     */
     public static function get(): Unresolved
     {
         static $instance = null;
diff --git a/src/php/OperationMapper.php b/src/php/OperationMapper.php
index 936b696..4758e8a 100644
--- a/src/php/OperationMapper.php
+++ b/src/php/OperationMapper.php
@@ -39,7 +39,6 @@ use Irstea\NgModelGeneratorBundle\Models\Types\Operations\Path;
 use Irstea\NgModelGeneratorBundle\Models\Types\Placeholder;
 use Irstea\NgModelGeneratorBundle\Models\Types\Reference;
 use Irstea\NgModelGeneratorBundle\Models\Types\Resources\Collection;
-use Irstea\NgModelGeneratorBundle\Models\Types\Resources\IRI;
 use Irstea\NgModelGeneratorBundle\Models\Types\Type;
 use Irstea\NgModelGeneratorBundle\Models\Types\Union;
 
@@ -65,12 +64,6 @@ final class OperationMapper
 
     /**
      * OperationMapper constructor.
-     *
-     * @param TypeFactoryInterface                $typeFactory
-     * @param SerializationMapperFactoryInterface $serializationMapperFactory
-     * @param PathParserInterface                 $pathParser
-     * @param OperationMetadata                   $operation
-     * @param Path|null                           $iri
      */
     public function __construct(
         TypeFactoryInterface $typeFactory,
@@ -86,9 +79,6 @@ final class OperationMapper
         $this->iri = $iri;
     }
 
-    /**
-     * @return Operation
-     */
     public function __invoke(): Operation
     {
         $responseBody = null;
@@ -185,13 +175,6 @@ final class OperationMapper
         return $mapper->get($serializationMetadata->getRoot()->getFullName());
     }
 
-    /**
-     * @param array       $callParameters
-     * @param Type        $returnType
-     * @param string|null $iriParameterName
-     *
-     * @return string
-     */
     private function buildClientCall(array $callParameters, Type $returnType, ?string $iriParameterName): string
     {
         $clientCall = sprintf(
@@ -295,12 +278,6 @@ final class OperationMapper
         return $propDict;
     }
 
-    /**
-     * @param string $class
-     * @param string $property
-     *
-     * @return Type|null
-     */
     private function resolvePropertyType(string $class, string $property): ?Type
     {
         /** @var AnonymousObject|null $type */
@@ -312,12 +289,6 @@ final class OperationMapper
         return $type->getProperty($property)->getType();
     }
 
-    /**
-     * @param string $filterType
-     * @param Type   $baseType
-     *
-     * @return Type
-     */
     private function resolveFilterType(string $filterType, Type $baseType): Type
     {
         switch ($filterType) {
@@ -339,11 +310,6 @@ final class OperationMapper
         return $baseType;
     }
 
-    /**
-     * @param Type $type
-     *
-     * @return Type
-     */
     private function getSingularType(Type $type): Type
     {
         if ($type instanceof AbstractCollection) {
@@ -358,9 +324,6 @@ final class OperationMapper
 
     /**
      * @param Property[] $filterProperties
-     * @param string     $varName
-     *
-     * @return array
      */
     private function buildFilterBody(array $filterProperties, string $varName): array
     {
diff --git a/src/php/PathParserInterface.php b/src/php/PathParserInterface.php
index d32e187..54fe19a 100644
--- a/src/php/PathParserInterface.php
+++ b/src/php/PathParserInterface.php
@@ -28,11 +28,5 @@ use Irstea\NgModelGeneratorBundle\Models\Types\Operations\Path;
  */
 interface PathParserInterface
 {
-    /**
-     * @param string $path
-     * @param array  $requirements
-     *
-     * @return Path
-     */
     public function parse(string $path, array $requirements): Path;
 }
diff --git a/src/php/SerializationMapper.php b/src/php/SerializationMapper.php
index 6252bd9..1976153 100644
--- a/src/php/SerializationMapper.php
+++ b/src/php/SerializationMapper.php
@@ -61,10 +61,6 @@ final class SerializationMapper implements TypeFactoryInterface
 
     /**
      * SerializationMapper constructor.
-     *
-     * @param TypeFactoryInterface  $typeFactory
-     * @param SerializationMetadata $serialization
-     * @param bool                  $withAtFields
      */
     public function __construct(
         TypeFactoryInterface $typeFactory,
@@ -122,9 +118,6 @@ final class SerializationMapper implements TypeFactoryInterface
         return $this->typeFactory->get($name);
     }
 
-    /**
-     * @return array
-     */
     public function getResourceData(): array
     {
         $resource = $this->serialization->getRoot();
@@ -145,11 +138,6 @@ final class SerializationMapper implements TypeFactoryInterface
         return [$this->get($resourceName), $identifier, $properties];
     }
 
-    /**
-     * @param RepresentationMetadata $repr
-     *
-     * @return Type
-     */
     private function mapRepresentation(RepresentationMetadata $repr): Type
     {
         $classInfo = $this->getClassInfo($repr);
@@ -207,11 +195,6 @@ final class SerializationMapper implements TypeFactoryInterface
         return new Representation($repr, $repr->getName(), $parent, $properties, $desc, $children);
     }
 
-    /**
-     * @param array $resources
-     *
-     * @return IRI
-     */
     private function createIRI(array $resources): IRI
     {
         return new IRI(
@@ -224,11 +207,6 @@ final class SerializationMapper implements TypeFactoryInterface
         );
     }
 
-    /**
-     * @param ClassInfo $classInfo
-     *
-     * @return array
-     */
     private function mapProperties(ClassInfo $classInfo): array
     {
         $properties = [];
@@ -245,13 +223,7 @@ final class SerializationMapper implements TypeFactoryInterface
         }
 
         if ($identifierCount > 1) {
-            throw new DomainException(
-                sprintf(
-                    'Resource %s must have at most one identifier, found %d',
-                    $classInfo->getBaseName(),
-                    $identifierCount
-                )
-            );
+            throw new DomainException(sprintf('Resource %s must have at most one identifier, found %d', $classInfo->getBaseName(), $identifierCount));
         }
 
         if ($this->withAtFields && $classInfo->isResource()) {
@@ -277,11 +249,6 @@ final class SerializationMapper implements TypeFactoryInterface
         return $properties;
     }
 
-    /**
-     * @param ClassInfo $classInfo
-     *
-     * @return Type
-     */
     private function buildTypeEnumFor(ClassInfo $classInfo): Type
     {
         $types = [];
@@ -292,11 +259,6 @@ final class SerializationMapper implements TypeFactoryInterface
         return Union::create($types);
     }
 
-    /**
-     * @param PropertyMetadata $propertyMeta
-     *
-     * @return Property
-     */
     private function mapProperty(PropertyMetadata $propertyMeta): Property
     {
         return new Property(
@@ -311,9 +273,6 @@ final class SerializationMapper implements TypeFactoryInterface
 
     /**
      * @param APIType $type
-     * @param bool    $isLink
-     *
-     * @return Type
      */
     private function mapType(?APIType $type, bool $isLink = false): Type
     {
@@ -338,9 +297,6 @@ final class SerializationMapper implements TypeFactoryInterface
 
     /**
      * @param APIType $type
-     * @param bool    $isLink
-     *
-     * @return Type
      */
     private function mapCollection(?APIType $type, bool $isLink = false): Type
     {
@@ -353,11 +309,6 @@ final class SerializationMapper implements TypeFactoryInterface
         throw new DomainException('Cannot handle collection with non-integer index');
     }
 
-    /**
-     * @param ClassName $class
-     *
-     * @return ClassInfo
-     */
     private function getClassInfo(ClassName $class): ClassInfo
     {
         if ($this->classInfo === null) {
diff --git a/src/php/SerializationMapperFactory.php b/src/php/SerializationMapperFactory.php
index d202d7a..22cfb7c 100644
--- a/src/php/SerializationMapperFactory.php
+++ b/src/php/SerializationMapperFactory.php
@@ -36,20 +36,12 @@ final class SerializationMapperFactory implements SerializationMapperFactoryInte
 
     /**
      * SerializationMapperFactory constructor.
-     *
-     * @param TypeFactoryInterface $typeFactory
      */
     public function __construct(TypeFactoryInterface $typeFactory)
     {
         $this->typeFactory = $typeFactory;
     }
 
-    /**
-     * @param SerializationMetadata $serialization
-     * @param bool                  $withAtFields
-     *
-     * @return SerializationMapper
-     */
     public function create(SerializationMetadata $serialization, bool $withAtFields): SerializationMapper
     {
         $key = sprintf(
diff --git a/src/php/SerializationMapperFactoryInterface.php b/src/php/SerializationMapperFactoryInterface.php
index ba51673..a992a3d 100644
--- a/src/php/SerializationMapperFactoryInterface.php
+++ b/src/php/SerializationMapperFactoryInterface.php
@@ -28,11 +28,5 @@ use Irstea\NgModelGeneratorBundle\Metadata\SerializationMetadata;
  */
 interface SerializationMapperFactoryInterface
 {
-    /**
-     * @param SerializationMetadata $serialization
-     * @param bool                  $withAtFields
-     *
-     * @return SerializationMapper
-     */
     public function create(SerializationMetadata $serialization, bool $withAtFields): SerializationMapper;
 }
diff --git a/src/php/TypeFactory.php b/src/php/TypeFactory.php
index b9e3e1f..fa3fea9 100644
--- a/src/php/TypeFactory.php
+++ b/src/php/TypeFactory.php
@@ -43,21 +43,11 @@ final class TypeFactory implements TypeFactoryInterface, \IteratorAggregate
         yield from $this->types;
     }
 
-    /**
-     * @param string $name
-     *
-     * @return bool
-     */
     public function has(string $name): bool
     {
         return isset($this->types[$name]);
     }
 
-    /**
-     * @param string $name
-     *
-     * @return Type
-     */
     public function get(string $name): Type
     {
         // API-platform semble avoir un problème avec les types utilisés dans un Trait.
diff --git a/src/php/TypeFactoryInterface.php b/src/php/TypeFactoryInterface.php
index d87d88e..981de94 100644
--- a/src/php/TypeFactoryInterface.php
+++ b/src/php/TypeFactoryInterface.php
@@ -29,30 +29,11 @@ use Irstea\NgModelGeneratorBundle\Models\Types\Type;
  */
 interface TypeFactoryInterface
 {
-    /**
-     * @param string $name
-     *
-     * @return bool
-     */
     public function has(string $name): bool;
 
-    /**
-     * @param string $name
-     *
-     * @return Type
-     */
     public function get(string $name): Type;
 
-    /**
-     * @param string $name
-     *
-     * @return Deferred
-     */
     public function defer(string $name): Deferred;
 
-    /**
-     * @param string $name
-     * @param Type   $type
-     */
     public function add(string $name, Type $type): void;
 }
diff --git a/src/php/TypescriptHelper.php b/src/php/TypescriptHelper.php
index 3f89a5e..b0a667f 100644
--- a/src/php/TypescriptHelper.php
+++ b/src/php/TypescriptHelper.php
@@ -28,10 +28,6 @@ final class TypescriptHelper
 {
     /**
      * Détermine si une chaîne est un identifiant valide.
-     *
-     * @param string $string
-     *
-     * @return bool
      */
     public static function isValidIdentifier(string $string): bool
     {
@@ -40,11 +36,6 @@ final class TypescriptHelper
 
     /**
      * Retourne une chaîne avec les échappements nécessaires.
-     *
-     * @param string $string
-     * @param string $delimiter
-     *
-     * @return string
      */
     public static function quoteString(string $string, string $delimiter = "'"): string
     {
@@ -63,10 +54,6 @@ final class TypescriptHelper
 
     /**
      * Retourne une chaîne pour déclarer une propriété dans un objet litéral.
-     *
-     * @param string $name
-     *
-     * @return string
      */
     public static function objectLiteralKey(string $name): string
     {
@@ -75,11 +62,6 @@ final class TypescriptHelper
 
     /**
      * Retourne une expression permettant de tester la présence d'une propriété dans un objet.
-     *
-     * @param string $object
-     * @param string $name
-     *
-     * @return string
      */
     public static function propertyTestor(string $object, string $name): string
     {
@@ -88,11 +70,6 @@ final class TypescriptHelper
 
     /**
      * Retourne une expression permettant d'accéder à une propriété dans un objet.
-     *
-     * @param string $object
-     * @param string $name
-     *
-     * @return string
      */
     public static function propertyAccessor(string $object, string $name): string
     {
@@ -105,11 +82,6 @@ final class TypescriptHelper
 
     /**
      * Indente un bloc de code.
-     *
-     * @param string $code
-     * @param string $indentation
-     *
-     * @return string
      */
     public static function indent(string $code, string $indentation = '  '): string
     {
diff --git a/src/php/Writers/ConsoleWriter.php b/src/php/Writers/ConsoleWriter.php
index d66f27c..459163f 100644
--- a/src/php/Writers/ConsoleWriter.php
+++ b/src/php/Writers/ConsoleWriter.php
@@ -21,7 +21,6 @@
 
 namespace Irstea\NgModelGeneratorBundle\Writers;
 
-use Symfony\Component\Console\Output\Output;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -37,8 +36,6 @@ final class ConsoleWriter implements Writer, MultiFileWriter
 
     /**
      * ConsoleWriter constructor.
-     *
-     * @param OutputInterface $output
      */
     public function __construct(OutputInterface $output)
     {
diff --git a/src/php/Writers/DirectoryWriter.php b/src/php/Writers/DirectoryWriter.php
index 58f1c2e..8dcd992 100644
--- a/src/php/Writers/DirectoryWriter.php
+++ b/src/php/Writers/DirectoryWriter.php
@@ -33,8 +33,6 @@ final class DirectoryWriter implements MultiFileWriter
 
     /**
      * DirectoryWriter constructor.
-     *
-     * @param string $rootPath
      */
     public function __construct(string $rootPath)
     {
diff --git a/src/php/Writers/FilteringFileWriter.php b/src/php/Writers/FilteringFileWriter.php
index a4cf1bb..27ea7de 100644
--- a/src/php/Writers/FilteringFileWriter.php
+++ b/src/php/Writers/FilteringFileWriter.php
@@ -38,9 +38,6 @@ final class FilteringFileWriter implements MultiFileWriter
 
     /**
      * FilteringFileWriter constructor.
-     *
-     * @param MultiFileWriter $writer
-     * @param callable        $accept
      */
     public function __construct(MultiFileWriter $writer, callable $accept)
     {
diff --git a/src/php/Writers/MultiFileWriter.php b/src/php/Writers/MultiFileWriter.php
index 6183f9d..7d44a22 100644
--- a/src/php/Writers/MultiFileWriter.php
+++ b/src/php/Writers/MultiFileWriter.php
@@ -26,11 +26,6 @@ namespace Irstea\NgModelGeneratorBundle\Writers;
  */
 interface MultiFileWriter
 {
-    /**
-     * @param string $path
-     *
-     * @return Writer
-     */
     public function newFile(string $path): Writer;
 
     public function close(): void;
diff --git a/src/php/Writers/PhonyFileWriter.php b/src/php/Writers/PhonyFileWriter.php
index 3d51c79..a4f39e8 100644
--- a/src/php/Writers/PhonyFileWriter.php
+++ b/src/php/Writers/PhonyFileWriter.php
@@ -36,9 +36,6 @@ final class PhonyFileWriter implements MultiFileWriter
 
     /**
      * PhonyFileWriter constructor.
-     *
-     * @param MultiFileWriter $decorated
-     * @param OutputInterface $output
      */
     public function __construct(MultiFileWriter $decorated, OutputInterface $output)
     {
diff --git a/src/php/Writers/Writer.php b/src/php/Writers/Writer.php
index 78b432f..b67712a 100644
--- a/src/php/Writers/Writer.php
+++ b/src/php/Writers/Writer.php
@@ -26,9 +26,6 @@ namespace Irstea\NgModelGeneratorBundle\Writers;
  */
 interface Writer
 {
-    /**
-     * @param string $data
-     */
     public function write(string $data): void;
 
     public function close(): void;
diff --git a/src/php/Writers/ZipFileWriter.php b/src/php/Writers/ZipFileWriter.php
index f60f492..da42221 100644
--- a/src/php/Writers/ZipFileWriter.php
+++ b/src/php/Writers/ZipFileWriter.php
@@ -37,9 +37,6 @@ final class ZipFileWriter implements Writer
 
     /**
      * ZipFileWriter constructor.
-     *
-     * @param \ZipArchive $archive
-     * @param string      $path
      */
     public function __construct(\ZipArchive $archive, string $path)
     {
diff --git a/src/php/Writers/ZipWriter.php b/src/php/Writers/ZipWriter.php
index 8bf9e14..ccf0c53 100644
--- a/src/php/Writers/ZipWriter.php
+++ b/src/php/Writers/ZipWriter.php
@@ -31,8 +31,6 @@ class ZipWriter implements MultiFileWriter
 
     /**
      * ZipWriter constructor.
-     *
-     * @param \ZipArchive $archive
      */
     public function __construct(\ZipArchive $archive)
     {
diff --git a/tests/Fixtures/Controller/CustomController.php b/tests/Fixtures/Controller/CustomController.php
index fa71b8d..ea7b3a5 100644
--- a/tests/Fixtures/Controller/CustomController.php
+++ b/tests/Fixtures/Controller/CustomController.php
@@ -28,11 +28,6 @@ use Irstea\NgModelGeneratorBundle\Tests\Fixtures\Entity\EntityWithCustomMethods;
  */
 final class CustomController
 {
-    /**
-     * @param EntityWithCustomMethods $input
-     *
-     * @return EntityWithCustomMethods
-     */
     public function customItem(EntityWithCustomMethods $input): EntityWithCustomMethods
     {
         return new EntityWithCustomMethods();
diff --git a/tests/Fixtures/Entity/EntityWithAccessors.php b/tests/Fixtures/Entity/EntityWithAccessors.php
index 4774ec4..48ffb5e 100644
--- a/tests/Fixtures/Entity/EntityWithAccessors.php
+++ b/tests/Fixtures/Entity/EntityWithAccessors.php
@@ -65,10 +65,6 @@ class EntityWithAccessors
 
     /**
      * EntityWithAccessors constructor.
-     *
-     * @param string $initRead
-     * @param string $initOnly
-     * @param string $full
      */
     public function __construct(string $initRead, string $initOnly, string $full)
     {
@@ -81,8 +77,6 @@ class EntityWithAccessors
 
     /**
      * Get id.
-     *
-     * @return UuidInterface
      */
     public function getId(): UuidInterface
     {
@@ -91,8 +85,6 @@ class EntityWithAccessors
 
     /**
      * Get initRead.
-     *
-     * @return string
      */
     public function getInitRead(): string
     {
@@ -101,8 +93,6 @@ class EntityWithAccessors
 
     /**
      * Get readOnly.
-     *
-     * @return string
      */
     public function getReadOnly(): string
     {
@@ -111,8 +101,6 @@ class EntityWithAccessors
 
     /**
      * Get full.
-     *
-     * @return string
      */
     public function getFull(): string
     {
@@ -121,8 +109,6 @@ class EntityWithAccessors
 
     /**
      * Set full.
-     *
-     * @param string $full
      */
     public function setFull(string $full): void
     {
@@ -131,8 +117,6 @@ class EntityWithAccessors
 
     /**
      * Set writeOnly.
-     *
-     * @param string $writeOnly
      */
     public function setWriteOnly(string $writeOnly): void
     {
diff --git a/tests/Fixtures/Entity/EntityWithCustomMethods.php b/tests/Fixtures/Entity/EntityWithCustomMethods.php
index 43c9c98..b7d5784 100644
--- a/tests/Fixtures/Entity/EntityWithCustomMethods.php
+++ b/tests/Fixtures/Entity/EntityWithCustomMethods.php
@@ -63,8 +63,6 @@ class EntityWithCustomMethods
 
     /**
      * Get id.
-     *
-     * @return UuidInterface
      */
     public function getId(): UuidInterface
     {
diff --git a/tests/Fixtures/Entity/EntityWithDTO.php b/tests/Fixtures/Entity/EntityWithDTO.php
index a35efff..aed6dd2 100644
--- a/tests/Fixtures/Entity/EntityWithDTO.php
+++ b/tests/Fixtures/Entity/EntityWithDTO.php
@@ -63,8 +63,6 @@ class EntityWithDTO
 
     /**
      * Get id.
-     *
-     * @return UuidInterface
      */
     public function getId(): UuidInterface
     {
diff --git a/tests/Fixtures/Entity/EntityWithNullable.php b/tests/Fixtures/Entity/EntityWithNullable.php
index d205d27..895dbfa 100644
--- a/tests/Fixtures/Entity/EntityWithNullable.php
+++ b/tests/Fixtures/Entity/EntityWithNullable.php
@@ -62,11 +62,6 @@ class EntityWithNullable
     /**
      * EntityWithNullable constructor.
      *
-     * @param string|null             $nullableString
-     * @param Person|null             $nullableEntity
-     * @param Person|null             $nullableEmbeddedEntity
-     * @param \DateTimeInterface|null $nullableDate
-     *
      * @throws \Exception
      */
     public function __construct(?string $nullableString, ?Person $nullableEntity, ?Person $nullableEmbeddedEntity, ?\DateTimeInterface $nullableDate)
@@ -80,8 +75,6 @@ class EntityWithNullable
 
     /**
      * Get id.
-     *
-     * @return UuidInterface
      */
     public function getId(): UuidInterface
     {
@@ -90,8 +83,6 @@ class EntityWithNullable
 
     /**
      * Get nullableString.
-     *
-     * @return string|null
      */
     public function getNullableString(): ?string
     {
@@ -100,8 +91,6 @@ class EntityWithNullable
 
     /**
      * Set nullableString.
-     *
-     * @param string|null $nullableString
      */
     public function setNullableString(? string $nullableString): void
     {
@@ -110,8 +99,6 @@ class EntityWithNullable
 
     /**
      * Get nullableEntity.
-     *
-     * @return Person|null
      */
     public function getNullableEntity(): ?Person
     {
@@ -120,8 +107,6 @@ class EntityWithNullable
 
     /**
      * Set nullableEntity.
-     *
-     * @param Person|null $nullableEntity
      */
     public function setNullableEntity(? Person $nullableEntity): void
     {
@@ -130,8 +115,6 @@ class EntityWithNullable
 
     /**
      * Get nullableEmbeddedEntity.
-     *
-     * @return Person|null
      */
     public function getNullableEmbeddedEntity(): ?Person
     {
@@ -140,8 +123,6 @@ class EntityWithNullable
 
     /**
      * Set nullableEmbeddedEntity.
-     *
-     * @param Person|null $nullableEmbeddedEntity
      */
     public function setNullableEmbeddedEntity(? Person $nullableEmbeddedEntity): void
     {
@@ -150,8 +131,6 @@ class EntityWithNullable
 
     /**
      * Get nullableDate.
-     *
-     * @return \DateTimeInterface|null
      */
     public function getNullableDate(): ?\DateTimeInterface
     {
@@ -160,8 +139,6 @@ class EntityWithNullable
 
     /**
      * Set nullableDate.
-     *
-     * @param \DateTimeInterface|null $nullableDate
      */
     public function setNullableDate(? \DateTimeInterface $nullableDate): void
     {
diff --git a/tests/Fixtures/Entity/Person.php b/tests/Fixtures/Entity/Person.php
index 565b1ec..601f6f7 100644
--- a/tests/Fixtures/Entity/Person.php
+++ b/tests/Fixtures/Entity/Person.php
@@ -48,8 +48,6 @@ class Person
     /**
      * Person constructor.
      *
-     * @param string $name
-     *
      * @throws \Exception
      */
     public function __construct(string $name)
@@ -60,8 +58,6 @@ class Person
 
     /**
      * Get id.
-     *
-     * @return UuidInterface
      */
     public function getId(): UuidInterface
     {
@@ -70,8 +66,6 @@ class Person
 
     /**
      * Set id.
-     *
-     * @param UuidInterface $id
      */
     public function setId(UuidInterface $id): void
     {
@@ -80,8 +74,6 @@ class Person
 
     /**
      * Get name.
-     *
-     * @return string
      */
     public function getName(): string
     {
@@ -90,8 +82,6 @@ class Person
 
     /**
      * Set name.
-     *
-     * @param string $name
      */
     public function setName(string $name): void
     {
diff --git a/tests/Fixtures/Entity/Project.php b/tests/Fixtures/Entity/Project.php
index 32f4f12..370a3f8 100644
--- a/tests/Fixtures/Entity/Project.php
+++ b/tests/Fixtures/Entity/Project.php
@@ -84,12 +84,6 @@ class Project
     /**
      * Project constructor.
      *
-     * @param string                  $name
-     * @param string                  $acronym
-     * @param \DateTimeInterface      $startDate
-     * @param array                   $participants
-     * @param \DateTimeInterface|null $endDate
-     *
      * @throws \Exception
      */
     public function __construct(
@@ -109,8 +103,6 @@ class Project
 
     /**
      * Get id.
-     *
-     * @return UuidInterface
      */
     public function getId(): UuidInterface
     {
@@ -119,8 +111,6 @@ class Project
 
     /**
      * Get name.
-     *
-     * @return string
      */
     public function getName(): string
     {
@@ -129,8 +119,6 @@ class Project
 
     /**
      * Set name.
-     *
-     * @param string $name
      */
     public function setName(string $name): void
     {
@@ -139,8 +127,6 @@ class Project
 
     /**
      * Get acronym.
-     *
-     * @return string
      */
     public function getAcronym(): string
     {
@@ -149,8 +135,6 @@ class Project
 
     /**
      * Set acronym.
-     *
-     * @param string $acronym
      */
     public function setAcronym(string $acronym): void
     {
@@ -159,8 +143,6 @@ class Project
 
     /**
      * Get startDate.
-     *
-     * @return \DateTimeInterface
      */
     public function getStartDate(): \DateTimeInterface
     {
@@ -169,8 +151,6 @@ class Project
 
     /**
      * Set startDate.
-     *
-     * @param \DateTimeInterface $startDate
      */
     public function setStartDate(\DateTimeInterface $startDate): void
     {
@@ -179,8 +159,6 @@ class Project
 
     /**
      * Get endDate.
-     *
-     * @return \DateTimeInterface|null
      */
     public function getEndDate(): ?\DateTimeInterface
     {
@@ -189,8 +167,6 @@ class Project
 
     /**
      * Set endDate.
-     *
-     * @param \DateTimeInterface|null $endDate
      */
     public function setEndDate(?\DateTimeInterface $endDate): void
     {
@@ -199,8 +175,6 @@ class Project
 
     /**
      * Get participants.
-     *
-     * @return array
      */
     public function getParticipants(): array
     {
@@ -209,8 +183,6 @@ class Project
 
     /**
      * Set participants.
-     *
-     * @param array $participants
      */
     public function setParticipants(array $participants): void
     {
diff --git a/tests/Functional/AccessorTest.php b/tests/Functional/AccessorTest.php
index c9f6840..d3f97bd 100644
--- a/tests/Functional/AccessorTest.php
+++ b/tests/Functional/AccessorTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class AccessorTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -38,9 +37,6 @@ final class AccessorTest extends GenerationTestCase
         self::assertCodeContains($snippet, self::generateTypescript());
     }
 
-    /**
-     * @return array
-     */
     public function listExpectedSnippets(): array
     {
         return [
diff --git a/tests/Functional/CustomMethodTest.php b/tests/Functional/CustomMethodTest.php
index 8fa7522..e0e2fa4 100644
--- a/tests/Functional/CustomMethodTest.php
+++ b/tests/Functional/CustomMethodTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class CustomMethodTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -38,9 +37,6 @@ final class CustomMethodTest extends GenerationTestCase
         self::assertCodeContains($snippet, self::generateTypescript());
     }
 
-    /**
-     * @return array
-     */
     public function listExpectedSnippets(): array
     {
         return [
diff --git a/tests/Functional/DTOTest.php b/tests/Functional/DTOTest.php
index 4669560..364f20e 100644
--- a/tests/Functional/DTOTest.php
+++ b/tests/Functional/DTOTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class DTOTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -38,9 +37,6 @@ final class DTOTest extends GenerationTestCase
         self::assertCodeContains($snippet, self::generateTypescript());
     }
 
-    /**
-     * @return array
-     */
     public function listExpectedSnippets(): array
     {
         return [
diff --git a/tests/Functional/GenerationTestCase.php b/tests/Functional/GenerationTestCase.php
index bba0916..655072c 100644
--- a/tests/Functional/GenerationTestCase.php
+++ b/tests/Functional/GenerationTestCase.php
@@ -37,8 +37,6 @@ abstract class GenerationTestCase extends KernelTestCase
 
     /**
      * @throws \Exception
-     *
-     * @return string
      */
     public static function generateTypescript(): string
     {
@@ -66,10 +64,6 @@ abstract class GenerationTestCase extends KernelTestCase
 
     /**
      * Vérifie que $code contient $needle en ignorant les différences de whitespaces.
-     *
-     * @param string $needle
-     * @param string $code
-     * @param string $message
      */
     protected static function assertCodeContains(
         string $needle,
diff --git a/tests/Functional/IntegerIdentifierTest.php b/tests/Functional/IntegerIdentifierTest.php
index 6937a66..b3aef9b 100644
--- a/tests/Functional/IntegerIdentifierTest.php
+++ b/tests/Functional/IntegerIdentifierTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class IntegerIdentifierTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -38,9 +37,6 @@ final class IntegerIdentifierTest extends GenerationTestCase
         self::assertCodeContains($snippet, self::generateTypescript());
     }
 
-    /**
-     * @return array
-     */
     public function listExpectedSnippets(): array
     {
         return [
diff --git a/tests/Functional/NullableTest.php b/tests/Functional/NullableTest.php
index 647e11d..dd3ab70 100644
--- a/tests/Functional/NullableTest.php
+++ b/tests/Functional/NullableTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class NullableTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -38,9 +37,6 @@ final class NullableTest extends GenerationTestCase
         self::assertCodeContains($snippet, self::generateTypescript());
     }
 
-    /**
-     * @return array
-     */
     public function listExpectedSnippets(): array
     {
         return [
diff --git a/tests/Functional/ProjectResourceTest.php b/tests/Functional/ProjectResourceTest.php
index 6f22843..9c2071a 100644
--- a/tests/Functional/ProjectResourceTest.php
+++ b/tests/Functional/ProjectResourceTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class ProjectResourceTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -40,10 +39,6 @@ final class ProjectResourceTest extends GenerationTestCase
 
     /**
      * Vérifie que $code contient $needle en ignorant les différences de whitespaces.
-     *
-     * @param string $needle
-     * @param string $code
-     * @param string $message
      */
     protected static function assertCodeContains(
         string $needle,
@@ -56,8 +51,6 @@ final class ProjectResourceTest extends GenerationTestCase
 
     /**
      * Fournit la liste des snippets à vérifier.
-     *
-     * @return array
      */
     public function listExpectedSnippets(): array
     {
diff --git a/tests/Functional/RelationTest.php b/tests/Functional/RelationTest.php
index 6a0631d..a2c0465 100644
--- a/tests/Functional/RelationTest.php
+++ b/tests/Functional/RelationTest.php
@@ -27,7 +27,6 @@ namespace Irstea\NgModelGeneratorBundle\Tests\Functional;
 final class RelationTest extends GenerationTestCase
 {
     /**
-     * @param string $snippet
      * @param string $code
      *
      * @test
@@ -38,9 +37,6 @@ final class RelationTest extends GenerationTestCase
         self::assertCodeContains($snippet, self::generateTypescript());
     }
 
-    /**
-     * @return array
-     */
     public function listExpectedSnippets(): array
     {
         return [
diff --git a/tests/Iterators/IteratorBuilderTest.php b/tests/Iterators/IteratorBuilderTest.php
index ad5aee9..2548703 100644
--- a/tests/Iterators/IteratorBuilderTest.php
+++ b/tests/Iterators/IteratorBuilderTest.php
@@ -205,11 +205,6 @@ final class IteratorBuilderTest extends TestCase
         );
     }
 
-    /**
-     * @param \Traversable $iter
-     *
-     * @return array
-     */
     private static function toArray(\Traversable $iter): array
     {
         $ary = [];
diff --git a/tests/Models/ClassInfoTest.php b/tests/Models/ClassInfoTest.php
index 2fd16fd..94c1ddc 100644
--- a/tests/Models/ClassInfoTest.php
+++ b/tests/Models/ClassInfoTest.php
@@ -208,13 +208,6 @@ final class ClassInfoTest extends TestCase
         self::assertArrayKeys(['id', 'name'], $child1->getVirtualProperties());
     }
 
-    /**
-     * @param string $className
-     * @param array  $propertyNames
-     * @param bool   $abstract
-     *
-     * @return ClassInfo
-     */
     private function create(string $className, array $propertyNames = [], bool $abstract = false): ClassInfo
     {
         return new ClassInfo(
@@ -234,7 +227,6 @@ final class ClassInfoTest extends TestCase
 
     /**
      * @param string[]    $expected
-     * @param array       $actual
      * @param string|null $message
      */
     public static function assertArrayKeys(array $expected, array $actual): void
diff --git a/tests/Models/PHPClassTest.php b/tests/Models/PHPClassTest.php
index 0dc0557..00494e3 100644
--- a/tests/Models/PHPClassTest.php
+++ b/tests/Models/PHPClassTest.php
@@ -41,9 +41,6 @@ class PHPClassTest extends TestCase
         self::assertEquals($expected, $class->getBaseName());
     }
 
-    /**
-     * @return array
-     */
     public function getBaseNameTestCases(): array
     {
         return [
@@ -65,9 +62,6 @@ class PHPClassTest extends TestCase
         self::assertEquals($expected, $class->getNamespace());
     }
 
-    /**
-     * @return array
-     */
     public function getNamespaceTestCases(): array
     {
         return [
@@ -89,9 +83,6 @@ class PHPClassTest extends TestCase
         self::assertEquals($fqcn, $class->getFullName());
     }
 
-    /**
-     * @return array
-     */
     public function getFullNameTestCases(): array
     {
         return [
diff --git a/tests/TypescriptHelperTest.php b/tests/TypescriptHelperTest.php
index 814d7c2..afd9985 100644
--- a/tests/TypescriptHelperTest.php
+++ b/tests/TypescriptHelperTest.php
@@ -30,9 +30,6 @@ use PHPUnit\Framework\TestCase;
 class TypescriptHelperTest extends TestCase
 {
     /**
-     * @param string $name
-     * @param bool   $expected
-     *
      * @dataProvider identifierTestCases
      */
     public function testIsValidIdentifier(string $name, bool $expected): void
@@ -40,9 +37,6 @@ class TypescriptHelperTest extends TestCase
         self::assertEquals($expected, TypescriptHelper::isValidIdentifier($name));
     }
 
-    /**
-     * @return array
-     */
     public function identifierTestCases(): array
     {
         return  [
@@ -57,10 +51,6 @@ class TypescriptHelperTest extends TestCase
     }
 
     /**
-     * @param string $string
-     * @param string $delimiter
-     * @param string $expected
-     *
      * @dataProvider quoteStringTestCases
      */
     public function testQuoteString(string $string, string $delimiter, string $expected): void
@@ -68,9 +58,6 @@ class TypescriptHelperTest extends TestCase
         self::assertEquals($expected, TypescriptHelper::quoteString($string, $delimiter));
     }
 
-    /**
-     * @return array
-     */
     public function quoteStringTestCases(): array
     {
         return [
-- 
GitLab