package Ġcom . im in ling . core . config . swagger Ċ Ċ import Ġcom . fasterxml . class mate . Resolved Type Ċ import Ġcom . fasterxml . class mate . Type Resolver Ċ import Ġcom . google . common . base . Case Format Ċ import Ġcom . im in ling . core . annotation . Enable Resolve Ċ import Ġcom . im in ling . core . config . value . Result Model Ċ import Ġcom . im in ling . core . constant . Resolve Strategy Ċ import Ġio . swagger . annotations . Api Implicit Param Ċ import Ġio . swagger . annotations . Api Implicit Params Ċ import Ġio . swagger . annotations . ApiModelProperty Ċ import Ġjav assist .* Ċ import Ġjav assist . byte code . Access Flag Ċ import Ġjav assist . byte code . Annotations Attribute Ċ import Ġjav assist . byte code . annotation . Annotation Ċ import Ġjav assist . byte code . annotation . String Member Value Ċ import Ġspring fox . documentation . schema . plugins . Schema Plugins Manager Ċ import Ġspring fox . documentation . spi . Documentation Type Ċ import Ġspring fox . documentation . spi . service . Operation Models Provider Plugin Ċ import Ġspring fox . documentation . spi . service . contexts . RequestMapping Context Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ Ġy sl ao @ outlook . com Ċ Ġ* Ġ@ since ĠĠ 2 0 2 1 / 1 2 / 8 Ċ Ġ*/ Ċ class ĠCustom ize Operation Models Provider Plugin ( ĊĠĠĠ Ġprivate Ġval Ġplugins Manager : ĠSchema Plugins Manager , ĊĠĠĠ Ġprivate Ġval Ġresolver : ĠType Resolver Ċ ) Ġ: ĊĠĠĠ ĠOperation Models Provider Plugin Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( context : ĠRequest Mapping Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æĸ¹æ³ķ åĴĮ ç±» ä¸ĬçļĦ æīĢæľī Enable Resolve æ³¨è§£ ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æĸ¹æ³ķ åĴĮ ç±» ä¸ĬçļĦ æīĢæľī Enable Resolve æ³¨è§£ ĊĠĠĠĠĠĠĠ Ġval Ġannotations Ġ= Ġcontext . find Annotations ( Enable Resolve :: class . java ) ĊĠĠĠĠĠĠĠ Ġvar Ġenable Resolve : ĠEnable Resolve ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( annotations . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ æĸ¹æ³ķ ä¸ĬçļĦ Enable Resolve æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptional Enable Resolve Ġ= Ġcontext . find Annotation ( Enable Resolve :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Resolve Ġ= Ġif Ġ( optional Enable Resolve . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptional Enable Resolve . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotations [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Resolve Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrategy Ġ= Ġenable Resolve . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( strategy Ġ== ĠResolve Strategy . ARGUMENT S Ġ|| Ġstrategy Ġ== ĠResolve Strategy . ALL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Parameters Ġ= Ġcontext . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Pool Ġ= ĠClass Pool . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĽå»º ç±» åĲį ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCase Format . LOWER _ HY P HEN . to ( Case Format . UPPER _ C AME L , Ġcontext . groupName ) Ġ+ ĠCase Format . LOWER _ C AME L . to ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCase Format . UPPER _ C AME L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġct Class Ġ= Ġclass Pool . make Class (" com . im in ling . jav assist . model .$ className ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( method Parameter Ġin Ġmethod Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Optional Ġ= Ġmethod Parameter . default Name () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġmethod Parameter . parameter Type . typeName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠfieldName Ġ= Ġ" unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fieldName Optional . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfieldName Ġ= ĠfieldName Optional . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġct Field Ġ= ĠC t Field ( class Pool [ typeName ], ĠfieldName , Ġct Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupper Name Ġ= ĠCase Format . LOWER _ C AME L . to ( Case Format . UPPER _ C AME L , ĠfieldName !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class . add Method ( Ct New Method . setter (" set $ upper Name ", Ġct Field )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class . add Method ( Ct New Method . getter (" get $ upper Name ", Ġct Field )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ·»åĬł æ³¨è§£ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Annotation ( context , Ġct Class , Ġct Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Field . field Info . access Flags Ġ= ĠAccess Flag . PRIVATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Class . addField ( ct Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCannot Compile Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNotFound Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolve Ġ= Ġresolver . resolve ( ct Class . to Class ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . operation Models Builder (). add Return ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview For Return ( context , Ġresolve ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCannot Compile Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmodel Type Ġ= Ġresolver . resolve ( Result Model :: class . java , Ġcontext . returnType ) ĊĠĠĠĠĠĠĠ Ġmodel Type Ġ= Ġcontext . alternate For ( model Type ) ĊĠĠĠĠĠĠĠ Ġcontext . operation Models Builder (). add Return ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview For Return ( context , Ġmodel Type ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsupports ( delimiter : ĠDocumentation Type ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġview For Return ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠRequest Mapping Context , ĊĠĠĠĠĠĠĠ Ġregular Model : ĠResolved Type ĊĠĠĠ Ġ): ĠOptional < Resolved Type ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Provider Ġ= Ġplugins Manager . view Provider ( context . documentation Context . documentation Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview Provider . view For ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Model , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Annotation ( context : ĠRequest Mapping Context , Ġct Class : ĠC t Class , Ġct Field : ĠC t Field ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimplicit Param Optional Ġ= Ġcontext . find Annotation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Implicit Param :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( implicit Param Optional . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å°± ä¸Ģä¸ª åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Implicit Param Ġ= Ġimplicit Param Optional . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġct Field . field Info . addAttribute ( get Annotations Attribute ( ct Class , Ġapi Implicit Param . value )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . find Annotation ( Api Implicit Params :: class . java ). if Present Ġ{ Ġimplicit Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . stream ( implicit Params . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġapi Implicit Param Ġ-> Ġct Field . name Ġ== Ġapi Implicit Param . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Present Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct Field . field Info . addAttribute ( get Annotations Attribute ( ct Class , Ġparam . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Annotations Attribute ( ct Class : ĠC t Class , Ġvalue : ĠString ): ĠAn notations Attribute Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconst Pool Ġ= Ġct Class . class File . const Pool ĊĠĠĠĠĠĠĠ Ġval Ġattr Ġ= ĠAn notations Attribute ( const Pool , ĠAn notations Attribute . visible Tag ) ĊĠĠĠĠĠĠĠ Ġval Ġann Ġ= ĠAnnotation ( ApiModelProperty :: class . java . name , Ġconst Pool ) ĊĠĠĠĠĠĠĠ Ġann . add Member Value (" value ", ĠString Member Value ( value , Ġconst Pool )) ĊĠĠĠĠĠĠĠ Ġattr . add Annotation ( ann ) ĊĠĠĠĠĠĠĠ Ġreturn Ġattr ĊĠĠĠ Ġ} Ċ }