/* Ċ Ġ* Ġ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 . idea . intent ions Ċ Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġjava . util .* Ċ Ċ public Ġclass ĠConvert Neg ated Expression With Dem org ans Law Int ention Ġ: ĠSelf Target ing Offset In dependent Int ention < Kt Prefix Expression >( java Class (), Ġ" De M organ ĠLaw ") Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġis Applicable To ( element : ĠK t Prefix Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Operator Ġ= Ġelement . get Operation Reference (). get Referenced Name ElementType () ĊĠĠĠĠĠĠĠ Ġif Ġ( prefix Operator Ġ!= ĠK t Tokens . EXCL ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġparent hesized Expression Ġ= Ġelement . getBase Expression () Ġas ? ĠK t Parent hesized Expression ĊĠĠĠĠĠĠĠ Ġval Ġbase Expression Ġ= Ġparent hesized Expression ?. get Expression () Ġas ? ĠK t Binary Expression Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( base Expression . get Operation Token ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Tokens . AND AND Ġ-> Ġset Text (" Replace Ġ' && ' Ġwith Ġ'|| '") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Tokens . OR OR Ġ-> Ġset Text (" Replace Ġ'|| ' Ġwith Ġ' && '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsplit Boolean Sequence ( base Expression ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply To ( element : ĠK t Prefix Expression , Ġeditor : ĠEditor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapply To ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply To ( element : ĠK t Prefix Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent hesized Expression Ġ= Ġelement . getBase Expression () Ġas ĠK t Parent hesized Expression ĊĠĠĠĠĠĠĠ Ġval Ġbase Expression Ġ= Ġparent hesized Expression . get Expression () Ġas ĠK t Binary Expression ĊĊĠĠĠĠĠĠĠ Ġval Ġoperator Text Ġ= Ġwhen Ġ( base Expression . get Operation Token ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Tokens . AND AND Ġ-> ĠK t Tokens . OR OR . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Tokens . OR OR Ġ-> ĠK t Tokens . AND AND . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoperands Ġ= Ġsplit Boolean Sequence ( base Expression ) !!. as Re versed () ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Expression Ġ= ĠK t Psi Factory ( element ). build Expression Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Expressions ( operands . map Ġ{ Ġit . neg ate () Ġ}, Ġseparator Ġ= Ġoperator Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelement . replace ( new Expression ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsplit Boolean Sequence ( expression : ĠK t Binary Expression ): ĠList < Kt Expression >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Kt Expression >() ĊĠĠĠĠĠĠĠ Ġval Ġfirst Operator Ġ= Ġexpression . get Operation Token () ĊĊĠĠĠĠĠĠĠ Ġvar Ġremaining Expression : ĠK t Expression Ġ= Ġexpression ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remaining Expression Ġ! is ĠK t Binary Expression ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġremaining Expression . get Operation Token () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation Ġ!= ĠK t Tokens . AND AND Ġ&& Ġoperation Ġ!= ĠK t Tokens . OR OR ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation Ġ!= Ġfirst Operator ) Ġreturn Ġnull Ġ// Boolean Ġsequence Ġmust Ġbe Ġhom ogen ous ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( remaining Expression . get Right () Ġ?: Ġreturn Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Expression Ġ= Ġremaining Expression . get Left () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult . add ( remaining Expression ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ } Ċ