/* Ċ Ġ* ĠProblem Type . kt Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 1 , ĠThe ĠAv ail ĠFoundation , ĠLLC . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ* ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġthe Ġcontributors Ċ Ġ* ĠĠ Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ċ Ġ* ĠĠ Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . avail . compiler . problems Ċ Ċ import Ġcom . avail . descriptor . ph rases . Phrase Descriptor Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Problem ] Ġhas Ġa Ġ` Problem Type `, Ġindicating Ġits Ġbasic Ġnature Ċ Ġ* Ġand Ġseverity . Ġ ĠThis Ġhelps Ġa Ġ[ Problem Handler ] Ġdecide Ġhow Ġbest Ġto Ġrespond Ċ Ġ* Ġto Ġthe ĠProblem , Ġsuch Ġas Ġdec iding Ġwhether Ġto Ġproceed Ġand Ġlook Ġfor Ġsubsequent Ċ Ġ* Ġproblems Ġor Ġto Ġgive Ġup Ġbuilding Ġthe Ġmodules . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark Ġvan ĠG ul ik Ġ& lt ; mark @ avail lang . org & gt ; Ċ Ġ*/ Ċ enum Ġclass ĠProblem Type Ċ { Ċ ĉ /** Ċĉ Ġ* ĠThe Ġcorresponding Ġ[ Problem ] Ġis Ġnot Ġactually Ġan Ġunexpected Ġcondition , Ġbut Ċĉ Ġ* Ġit Ġmay Ġstill Ġbe Ġuseful Ġto Ġreport Ġthe Ġinformation Ġto Ġthe Ġuser . Ġ ĠIt 's Ċĉ Ġ* Ġun clear Ġwhether Ġthis Ġwill Ġactually Ġbe Ġused Ġfor Ġanything Ġother Ġthan Ċĉ Ġ* Ġdebugging Ġthe Ġcompiler . Ċĉ Ġ*/ Ċ ĉ INFORMATION Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle Information ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }, ĊĊ ĉ /** Ċĉ Ġ* ĠThe Ġcorresponding Ġ[ Problem ] Ġindicates Ġa Ġsituation Ġthat Ġis Ġless Ġthan Ċĉ Ġ* Ġideal . Ġ ĠA Ġ[ Problem Handler ] Ġmay Ġchoose Ġto Ġpresent Ġthis Ġwarning , Ġand Ġthen Ċĉ Ġ* Ġ[ continue &# 3 2 ; compilation ][ Problem . continue Compilation ]. Ċĉ Ġ*/ Ċ ĉ WARNING Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle Warning ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }, ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġ[ Problem ] Ġoccurred Ġwhile Ġtracing Ġa Ġmodule 's Ġdependencies . Ġ ĠThis Ċĉ Ġ* Ġcondition Ġonly Ġindicates Ġa Ġnarrow Ġrange Ġof Ġproblems , Ġsuch Ġas Ġun resolved Ċĉ Ġ* Ġor Ġrecursive Ġdependencies . Ġ ĠSyntax Ġerrors Ġin Ġthe Ġmodule Ġheader Ġthat Ċĉ Ġ* Ġpre clude Ġa Ġcorrect Ġtrace Ġare Ġtreated Ġas Ġ[ PARSE ] Ġproblems . Ċĉ Ġ*/ Ċ ĉ TRACE Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle Trace ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }, ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġ[ Problem ] Ġoccurred Ġwhile Ġparsing Ġa Ġmodule 's Ġbody . Ġ ĠThis Ġincludes Ġboth Ċĉ Ġ* Ġmalformed Ġtokens Ġand Ġassemblies Ġof Ġtokens Ġthat Ġcould Ġnot Ġbe Ġsuccessfully Ċĉ Ġ* Ġtransformed Ġinto Ġ[ ph rases ][ Phrase Descriptor ]. Ċĉ Ġ*/ Ċ ĉ PARSE Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle Parse ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }, ĊĊ ĉ /** Ċĉ Ġ* ĠA Ġ[ Problem ] Ġoccurred Ġwhile Ġexecuting ĠAv ail Ġcode . Ġ ĠTypically Ġthis Ġmeans Ġan Ċĉ Ġ* Ġunhandled Ġexception , Ġor Ġinvoking Ġa Ġbootstrap Ġprimitive Ġbefore Ġthe Ċĉ Ġ* Ġrelevant Ġexception Ġhandling Ġmechanisms Ġare Ġin Ġplace . Ġ ĠThis Ġshould Ġbe Ċĉ Ġ* Ġtreated Ġas Ġa Ġfatal Ġproblem . Ċĉ Ġ*/ Ċ ĉ EXEC UTION Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle Execution ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }, ĊĊ ĉ /** Ċĉ Ġ* ĠAn Ġinternal Ġ[ Problem ] Ġoccurred Ġin Ġthe Ġvirtual Ġmachine . Ġ ĠThis Ġshould Ġnot Ċĉ Ġ* Ġhappen , Ġand Ġis Ġnot Ġthe Ġfault Ġof Ġthe ĠAv ail Ġcode , Ġbut Ġrather ĠY ours ĠTr uly , Ċĉ Ġ* Ġthe ĠAv ail Ġvirtual Ġmachine Ġauthors . Ċĉ Ġ*/ Ċ ĉ INTERNAL Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle Internal ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }, ĊĊ ĉ /** Ċĉ Ġ* ĠAn Ġexternal Ġ[ Problem ] Ġoccurred . Ġ ĠThis Ġindicates Ġa Ġfailure Ġin Ġsomething Ċĉ Ġ* Ġoutside Ġthe Ġcontrol Ġof Ġthe Ġvirtual Ġmachine , Ġfor Ġexample Ġa Ġdisk Ġread Ċĉ Ġ* Ġfailure . Ċĉ Ġ*/ Ċ ĉ EXTERNAL Ċ ĉ { Ċĉ ĉ override Ġfun Ġreport ( Ċĉĉ ĉ problem : ĠProblem , Ċĉĉ ĉ handler : ĠProblem Handler , Ċĉĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċĉ ĉ { Ċĉĉ ĉ assert ( problem . type Ġ=== Ġthis ) Ċĉĉ ĉ handler . handle External ( problem , Ġdec ider ) Ċĉ ĉ } Ċ ĉ }; ĊĊ ĉ /** Ċĉ Ġ* ĠReport Ġthe Ġgiven Ġ[ Problem ] Ġto Ġthe Ġ[ Problem Handler ]. ĠThe Ġproblem 's Ġtype Ċĉ Ġ* Ġmust Ġbe Ġthe Ġreceiver . Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġproblem Ċĉ Ġ* ĠĠ ĠThe Ġproblem Ġto Ġreport . Ċĉ Ġ* Ġ@ param Ġhandler Ċĉ Ġ* ĠĠ ĠThe Ġproblem Ġhandler Ġto Ġnotify . Ċĉ Ġ* Ġ@ param Ġdec ider Ċĉ Ġ* ĠĠ ĠHow Ġto Ġ[ continue ][ Problem . continue Compilation ] Ġor Ċĉ Ġ* ĠĠ Ġ[ abort ][ Problem . abort Compilation ] Ġcompilation . ĠAccept s Ġa Ċĉ Ġ* ĠĠ Ġ[ boolean ][ Boolean ] Ġthat Ġis Ġ` true ` Ġiff Ġcompilation Ġshould Ġcontinue . Ċĉ Ġ*/ Ċ ĉ internal Ġabstract Ġfun Ġreport ( Ċĉ ĉ problem : ĠProblem , Ċĉ ĉ handler : ĠProblem Handler , Ċĉ ĉ dec ider : Ġ( Boolean ) Ġ-> ĠUnit ) Ċ } Ċ