/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . analysis . api . components Ċ Ċ import Ġorg . jetbrains . kotlin . analysis . api . base . Kt Constant Value Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ Ċ public Ġenum Ġclass ĠK t Constant Evaluation Mode Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn Ġthis Ġmode , Ġwhat Ġa Ġcompiler Ġviews Ġas Ġconstants Ġwill Ġbe Ġevaluated . ĠIn Ġother Ġwords , ĊĠĠĠĠ Ġ* Ġexpressions Ġand Ġproperties Ġthat Ġare Ġfree Ġfrom Ġruntime Ġbehaviors / changes Ġwill Ġbe Ġevaluated , ĊĠĠĠĠ Ġ* ĠĠ Ġsuch Ġas Ġ` const Ġval ` Ġproperties Ġor Ġbinary Ġexpressions Ġwhose Ġoperands Ġare Ġconstants . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠCONSTANT _ EXPRESSION _ EVAL UATION , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn Ġthis Ġmode , Ġwhat Ġa Ġchecker Ġcan Ġapproximate Ġas Ġconstants Ġwill Ġbe Ġevaluated . ĠIn Ġother Ġwords , ĊĠĠĠĠ Ġ* ĠĠ Ġmore Ġexpressions Ġand Ġproperties Ġthat Ġcould Ġbe Ġcomp os ites Ġof Ġother Ġconstants Ġwill Ġbe Ġevaluated , ĊĠĠĠĠ Ġ* ĠĠ Ġsuch Ġas Ġ` val ` Ġproperties Ġwith Ġconstant Ġinitial izers Ġor Ġbinary Ġexpressions Ġwhose Ġoperands Ġcould Ġbe Ġconstants . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote Ġthat , Ġas Ġan Ġapproximation , Ġthe Ġresult Ġcan Ġbe Ġsometimes Ġincorrect Ġor Ġpresent Ġeven Ġthough Ġthere Ġis Ġan Ġerror . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠCONSTANT _ LIKE _ EXPRESSION _ EVAL UATION ; Ċ } Ċ Ċ public Ġabstract Ġclass ĠK t Compile Time Constant Provider Ġ: ĠK t Analysis Session Component () Ġ{ ĊĠĠĠ Ġpublic Ġabstract Ġfun Ġevaluate ( ĊĠĠĠĠĠĠĠ Ġexpression : ĠK t Expression , ĊĠĠĠĠĠĠĠ Ġmode : ĠK t Constant Evaluation Mode , ĊĠĠĠ Ġ): ĠK t Constant Value ? Ċ } Ċ Ċ public Ġinterface ĠK t Compile Time Constant Provider Mix In Ġ: ĠK t Analysis Session Mix In Ġ{ ĊĠĠĠ Ġpublic Ġfun ĠK t Expression . evaluate ( mode : ĠK t Constant Evaluation Mode ): ĠK t Constant Value ? Ġ= ĊĠĠĠĠĠĠĠ Ġanalysis Session . compile Time Constant Provider . evaluate ( this , Ġmode ) Ċ } Ċ