/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . generators . protobuf Ċ Ċ import Ġcom . google . protobuf . Descriptors Ċ import Ġorg . jetbrains . kotlin . generators . util . Generators File Util Ċ import Ġorg . jetbrains . kotlin . serialization . Debug Ext Options Proto Buf Ċ import Ġorg . jetbrains . kotlin . serialization . Debug Proto Buf Ċ import Ġorg . jetbrains . kotlin . serialization . jvm . Debug Jvm Proto Buf Ċ import Ġorg . jetbrains . kotlin . utils . Printer Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġkotlin . platform . platform Static Ċ Ċ class ĠGenerate Proto Buf Compare Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEST _ FILE : ĠFile Ġ= ĠFile (" j ps - plugin / src / org / jetbrains / kotlin / j ps / incremental / Proto Compare Generated . kt ") ĊĊĠĠĠĠĠĠĠ Ġplatform Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġgenerate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGener ators File Util . writeFile If Content Changed ( DEST _ FILE , ĠGenerate Proto Buf Compare (). generate ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠJAVA _ TYPES _ WITH _ IN LIN ED _ EQUAL S : ĠEnum Set < com . google . protobuf . Descriptors . FieldDescriptor . Java Type > Ġ= ĠEnum Set . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . INT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . LONG , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . FLOAT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . DOUBLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . BOOLEAN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . STRING , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDes cript ors . FieldDescriptor . Java Type . ENUM ĊĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġextent ions Map Ġ= ĠDebug Jvm Proto Buf . get Descriptor (). extensions . groupBy Ġ{ Ġit . containing Type Ġ} ĊĊĠĠĠ Ġval Ġdone Messages : ĠMutable Set < Descriptors . Descriptor > Ġ= Ġhash Set Of () ĊĠĠĠ Ġval Ġmessages : ĠMutable List < Descriptors . Descriptor > Ġ= Ġarray ListOf () ĊĠĠĠ Ġval Ġrepeated Fields : ĠMutable List < Descriptors . FieldDescriptor > Ġ= Ġarray ListOf () ĊĊĠĠĠ Ġfun Ġgenerate (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPrinter ( sb ) ĊĠĠĠĠĠĠĠ Ġp . println ( File (" license / LICENSE . txt "). read Text ()) ĊĠĠĠĠĠĠĠ Ġp . println (" package Ġorg . jetbrains . kotlin . j ps . incremental ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĊĠĠĠĠĠĠĠ Ġp . println (" import Ġorg . jetbrains . kotlin . serialization . Proto Buf ") ĊĠĠĠĠĠĠĠ Ġp . println (" import Ġorg . jetbrains . kotlin . serialization . de serialization . Name Resolver ") ĊĠĠĠĠĠĠĠ Ġp . println (" import Ġorg . jetbrains . kotlin . serialization . jvm . Jvm Proto Buf ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" /** ĠThis Ġfile Ġis Ġgenerated Ġby Ġorg . jetbrains . kotlin . generators . protobuf . Generate Proto Buf Compare . ĠDO ĠNOT ĠMODIFY ĠMAN U ALLY Ġ*/ ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĊĠĠĠĠĠĠĠ Ġp . println (" open Ġclass ĠProto Compare Generated ( private Ġval Ġold Name Resolver : ĠName Resolver , Ġprivate Ġval ĠnewName Resolver : ĠName Resolver ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġp . push Indent () ĊĊĠĠĠĠĠĠĠ Ġp . println (" private Ġval Ġstring Id Map : ĠMutable Map < Int , ĠInt > Ġ= Ġhash Map Of () ") ĊĠĠĠĠĠĠĠ Ġp . println (" private Ġval Ġfq Name Id Map : ĠMutable Map < Int , ĠInt > Ġ= Ġhash Map Of () ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĊĠĠĠĠĠĠĠ Ġval ĠfileDescriptor Ġ= ĠDebug Proto Buf . get Descriptor () ĊĊĠĠĠĠĠĠĠ Ġmessages . add ( file Descriptor . find MessageType ByName (" Package ")) ĊĠĠĠĠĠĠĠ Ġmessages . add ( file Descriptor . find MessageType ByName (" Class ")) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! messages . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Descriptor Ġ= Ġmessages . remove ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdone Messages . add ( message Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate For Message ( message Descriptor , Ġp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġp . println () ĊĊĠĠĠĠĠĠĠ Ġrepeated Fields . forEach Ġ{ Ġgenerate Helper Method For RepeatedField ( it , Ġp ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġgenerate Pre defined ( p ) ĊĊĠĠĠĠĠĠĠ Ġp . pop Indent () ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Pre defined ( p : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" fun Ġcheck String Id Equals ( old : ĠInt , Ġnew : ĠInt ): ĠBoolean Ġ{ ") ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġstring Id Map . get ( old )?. let Ġ{ Ġreturn Ġit Ġ== Ġnew Ġ} ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġval ĠoldValue Ġ= Ġold Name Resolver . string Table . getString ( old )") ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġval ĠnewValue Ġ= ĠnewName Resolver . string Table . getString ( new )") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġreturn Ġif Ġ( oldValue Ġ== ĠnewValue ) Ġ{ Ġstring Id Map [ old ] Ġ= Ġnew ; Ġtrue Ġ} Ġelse Ġfalse ") ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" fun Ġcheck Name Id Equals ( old : ĠInt , Ġnew : ĠInt ): ĠBoolean Ġ Ġ= Ġcheck String Id Equals ( old , Ġnew )") ĊĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" fun Ġcheck Fq Name Id Equals ( old : ĠInt , Ġnew : ĠInt ): ĠBoolean Ġ{ ") ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġfq Name Id Map . get ( old )?. let Ġ{ Ġreturn Ġit Ġ== Ġnew Ġ} ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġval ĠoldValue Ġ= Ġold Name Resolver . getF q Name ( old ). asString () ") ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġval ĠnewValue Ġ= ĠnewName Resolver . getF q Name ( new ). asString () ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" ĠĠĠ Ġreturn Ġif Ġ( oldValue Ġ== ĠnewValue ) Ġ{ Ġfq Name Id Map [ old ] Ġ= Ġnew ; Ġtrue Ġ} Ġelse Ġfalse ") ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate For Message ( descriptor : ĠDes cript ors . Descriptor , Ġp : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġdescriptor . typeName () ĊĊĠĠĠĠĠĠĠ Ġp . println (" open Ġfun Ġcheck Equals ( old : Ġ$ typeName , Ġnew : Ġ$ typeName ): ĠBoolean Ġ{ ") ĊĠĠĠĠĠĠĠ Ġp . push Indent () ĊĊĠĠĠĠĠĠĠ Ġdescriptor . fields . forEach Ġ{ Ġgenerate For Field ( it , Ġp ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġextent ions Map [ descriptor ]?. let Ġ{ Ġit . forEach Ġ{ Ġfield Ġ-> Ġgenerate For Extension Field ( field , Ġp ) Ġ}} ĊĊĠĠĠĠĠĠĠ Ġp . println (" return Ġtrue ") ĊĊĠĠĠĠĠĠĠ Ġp . pop Indent () ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate For Field ( field : ĠDes cript ors . FieldDescriptor , Ġp : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġfield . name . to Java Name () ĊĠĠĠĠĠĠĠ Ġval Ġcap FieldName Ġ= ĠfieldName . capitalize () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( field . options . getExtension ( Debug Ext Options Proto Buf . skip In Comparison )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( field . is Repeated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeated Fields . add ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" if Ġ(! ${ field . helper MethodName ()} ( old , Ġnew )) Ġreturn Ġfalse ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( field . isRequired ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println If With Comparison ( field , ĠfieldName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( field . is Optional ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" if Ġ( old . has $ cap FieldName () Ġ!= Ġnew . has $ cap FieldName ()) Ġreturn Ġfalse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" if Ġ( old . has $ cap FieldName ()) Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println If With Comparison ( field , ĠfieldName , Ġwith Indent Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġp . println () ĊĊĠĠĠĠĠĠĠ Ġadd MessageType To Process IfNeeded ( field ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Helper Method For RepeatedField ( field : ĠDes cript ors . FieldDescriptor , Ġp : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( field . is Repeated , Ġ" expected Ġrepeated Ġfield : Ġ${ field . name }") ĊĊĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġfield . containing Type . typeName () ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġfield . name . to Java Name () ĊĠĠĠĠĠĠĠ Ġval Ġcap FieldName Ġ= ĠfieldName . capitalize () ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġfield . helper MethodName () ĊĊĠĠĠĠĠĠĠ Ġp . println (" open Ġfun Ġ$ methodName ( old : Ġ$ typeName , Ġnew : Ġ$ typeName ): ĠBoolean Ġ{ ") ĊĊĠĠĠĠĠĠĠ Ġp . push Indent () ĊĠĠĠĠĠĠĠ Ġp . println (" if Ġ( old .${ fieldName } Count Ġ!= Ġnew .${ fieldName } Count ) Ġreturn Ġfalse ") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" for ( i Ġin Ġ 0 .. old .${ fieldName } Count Ġ- Ġ 1 ) Ġ{ ") ĊĠĠĠĠĠĠĠ Ġp . println If With Comparison ( field , Ġ" get $ cap FieldName ( i )", Ġwith Indent Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġp . println (" return Ġtrue ") ĊĊĠĠĠĠĠĠĠ Ġp . pop Indent () ĊĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate For Extension Field ( field : ĠDes cript ors . FieldDescriptor , Ġp : ĠPrinter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġouter ClassName Ġ= Ġfield . file . options . java OuterClass name . remove Prefix (" Debug ") ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġfield . name . to Java Name () ĊĠĠĠĠĠĠĠ Ġif Ġ( field . options . getExtension ( Debug Ext Options Proto Buf . skip In Comparison )) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġfull FieldName Ġ= Ġ"$ outer ClassName .$ fieldName " ĊĊĠĠĠĠĠĠĠ Ġif Ġ( field . is Repeated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" if Ġ( old . getExtension Count ($ full FieldName ) Ġ!= Ġnew . getExtension Count ($ full FieldName )) Ġreturn Ġfalse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" for ( i Ġin Ġ 0 .. old . getExtension Count ($ full FieldName ) Ġ- Ġ 1 ) Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println If With Comparison ( field , Ġ" getExtension ($ full FieldName , Ġi )", Ġwith Indent Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( field . isRequired ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println If With Comparison ( field , Ġ" getExtension ($ full FieldName )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( field . is Optional ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" if Ġ( old . has Extension ($ full FieldName ) Ġ!= Ġnew . has Extension ($ full FieldName )) Ġreturn Ġfalse ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" if Ġ( old . has Extension ($ full FieldName )) Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println If With Comparison ( field , Ġ" getExtension ($ full FieldName )", Ġwith Indent Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . println (" }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġp . println () ĊĊĠĠĠĠĠĠĠ Ġadd MessageType To Process IfNeeded ( field ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd MessageType To Process IfNeeded ( field : ĠDes cript ors . FieldDescriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( field . java Type Ġ== ĠDes cript ors . FieldDescriptor . Java Type . MESSAGE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! done Messages . contains ( field . message Type ) Ġ&& Ġ! messages . contains ( field . message Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages . add ( field . message Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPrinter . println If With Comparison ( field : ĠDes cript ors . FieldDescriptor , Ġexpr : ĠString , Ġwith Indent : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . options . getExtension ( Debug Ext Options Proto Buf . string Id In Table ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ(! check String Id Equals ( old .$ expr , Ġnew .$ expr )) Ġreturn Ġfalse " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . options . getExtension ( Debug Ext Options Proto Buf . name Id In Table ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ(! check Name Id Equals ( old .$ expr , Ġnew .$ expr )) Ġreturn Ġfalse " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . options . getExtension ( Debug Ext Options Proto Buf . fq Name Id In Table ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ(! check Fq Name Id Equals ( old .$ expr , Ġnew .$ expr )) Ġreturn Ġfalse " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . java Type Ġin ĠJAVA _ TYPES _ WITH _ IN LIN ED _ EQUAL S Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ( old .$ expr Ġ!= Ġnew .$ expr ) Ġreturn Ġfalse " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ(! check Equals ( old .$ expr , Ġnew .$ expr )) Ġreturn Ġfalse " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( with Indent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . push Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . println ( line ) ĊĠĠĠĠĠĠĠ Ġif Ġ( with Indent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pop Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDes cript ors . Descriptor . typeName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġouter ClassName Ġ= Ġthis . file . options . java OuterClass name . remove Prefix (" Debug ") ĊĠĠĠĠĠĠĠ Ġval Ġpackage Header Ġ= Ġthis . file .` package ` ĊĠĠĠĠĠĠĠ Ġreturn Ġouter ClassName Ġ+ Ġthis . fullName . remove Prefix ( package Header ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDes cript ors . FieldDescriptor . helper MethodName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Header Ġ= Ġthis . file .` package ` ĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġthis . containing Type ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġdescriptor . fullName . remove Prefix ( package Header ). replace (".", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġcap FieldName Ġ= Ġthis . name . to Java Name (). capitalize () ĊĠĠĠĠĠĠĠ Ġreturn Ġ" check Equals $ className $ cap FieldName " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . to Java Name () Ġ= Ġthis . split ("_ "). map Ġ{ Ġit . capitalize () Ġ}. join (" "). de capitalize () Ċ }