/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 Ġ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 . fir . analysis . diagnostics Ċ Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġorg . jetbrains . kotlin . diagnostics . Severity Ċ import Ġorg . jetbrains . kotlin . fir . F ir Light Source Element Ċ import Ġorg . jetbrains . kotlin . fir . F ir Psi Source Element Ċ import Ġorg . jetbrains . kotlin . fir . F ir Source Element Ċ Ċ // Ġ---------------- -------------- Ġdiagnostics Ġ---------------- -------------- Ċ Ċ sealed Ġclass ĠF ir Diagnostic Ġ{ ĊĠĠĠ Ġabstract Ġval Ġelement : ĠF ir Source Element ĊĠĠĠ Ġabstract Ġval Ġseverity : ĠSeverity ĊĠĠĠ Ġabstract Ġval Ġfactory : ĠAbstract F ir Diagnostic Factory ĊĠĠĠ Ġabstract Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy ĊĊĠĠĠ Ġval Ġtext Ranges : ĠList < Text Range > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġposition ing Strategy . mark Diagnostic ( this ) ĊĊĠĠĠ Ġval ĠisValid : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġposition ing Strategy . isValid ( element ) Ċ } Ċ Ċ sealed Ġclass ĠF ir Simple Diagnostic Ġ: ĠF ir Diagnostic () Ġ{ ĊĠĠĠ Ġabstract Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 0 Ċ } Ċ Ċ sealed Ġclass ĠF ir Diagnostic With Parameters 1 < A > Ġ: ĠF ir Diagnostic () Ġ{ ĊĠĠĠ Ġabstract Ġval Ġa : ĠA ĊĠĠĠ Ġabstract Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 1 < A > Ċ } Ċ Ċ sealed Ġclass ĠF ir Diagnostic With Parameters 2 < A , ĠB > Ġ: ĠF ir Diagnostic () Ġ{ ĊĠĠĠ Ġabstract Ġval Ġa : ĠA ĊĠĠĠ Ġabstract Ġval Ġb : ĠB ĊĠĠĠ Ġabstract Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 2 < A , ĠB > Ċ } Ċ Ċ sealed Ġclass ĠF ir Diagnostic With Parameters 3 < A , ĠB , ĠC > Ġ: ĠF ir Diagnostic () Ġ{ ĊĠĠĠ Ġabstract Ġval Ġa : ĠA ĊĠĠĠ Ġabstract Ġval Ġb : ĠB ĊĠĠĠ Ġabstract Ġval Ġc : ĠC ĊĠĠĠ Ġabstract Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 3 < A , ĠB , ĠC > Ċ } Ċ Ċ sealed Ġclass ĠF ir Diagnostic With Parameters 4 < A , ĠB , ĠC , ĠD > Ġ: ĠF ir Diagnostic () Ġ{ ĊĠĠĠ Ġabstract Ġval Ġa : ĠA ĊĠĠĠ Ġabstract Ġval Ġb : ĠB ĊĠĠĠ Ġabstract Ġval Ġc : ĠC ĊĠĠĠ Ġabstract Ġval Ġd : ĠD ĊĠĠĠ Ġabstract Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 4 < A , ĠB , ĠC , ĠD > Ċ } Ċ Ċ // Ġ---------------- -------------- Ġpsi Ġdiagnostics Ġ---------------- -------------- Ċ Ċ interface ĠF ir Psi Diagnostic Ġ{ ĊĠĠĠ Ġval Ġfactory : ĠAbstract F ir Diagnostic Factory ĊĠĠĠ Ġval Ġelement : ĠF ir Psi Source Element ĊĠĠĠ Ġval Ġtext Ranges : ĠList < Text Range > ĊĠĠĠ Ġval Ġseverity : ĠSeverity ĊĊĠĠĠ Ġval Ġpsi Element : ĠPsi Element ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġelement . psi ĊĊĠĠĠ Ġval Ġpsi File : ĠPsi File ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpsi Element . containing File Ċ } Ċ Ċ private Ġconst Ġval ĠCHECK _ P SI _ CON SIST ENCY _ IN _ DIAG NO ST ICS Ġ= Ġtrue Ċ Ċ private Ġfun ĠF ir Psi Diagnostic . check Psi Type Consistency () Ġ{ ĊĠĠĠ Ġif Ġ( CHECK _ P SI _ CON SIST ENCY _ IN _ DIAG NO ST ICS ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( factory . psi Type . is Instance ( element . psi )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ element . psi :: class } Ġis Ġnot Ġa Ġsubtype Ġof Ġ${ factory . psi Type } Ġfor Ġfactory Ġ$ factory " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠF ir Psi Simple Diagnostic ( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Psi Source Element , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 0 , ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Simple Diagnostic (), ĠF ir Psi Diagnostic Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Psi Type Consistency () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠF ir Psi Diagnostic With Parameters 1 < A >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Psi Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 1 < A >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 1 < A >(), ĠF ir Psi Diagnostic Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Psi Type Consistency () ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ data Ġclass ĠF ir Psi Diagnostic With Parameters 2 < A , ĠB >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Psi Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġb : ĠB , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 2 < A , ĠB >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 2 < A , ĠB >(), ĠF ir Psi Diagnostic Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Psi Type Consistency () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠF ir Psi Diagnostic With Parameters 3 < A , ĠB , ĠC >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Psi Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġb : ĠB , ĊĠĠĠ Ġoverride Ġval Ġc : ĠC , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 3 < A , ĠB , ĠC >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 3 < A , ĠB , ĠC >(), ĠF ir Psi Diagnostic Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Psi Type Consistency () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠF ir Psi Diagnostic With Parameters 4 < A , ĠB , ĠC , ĠD >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Psi Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġb : ĠB , ĊĠĠĠ Ġoverride Ġval Ġc : ĠC , ĊĠĠĠ Ġoverride Ġval Ġd : ĠD , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 4 < A , ĠB , ĠC , ĠD >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 4 < A , ĠB , ĠC , ĠD >(), ĠF ir Psi Diagnostic Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Psi Type Consistency () ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġ---------------- -------------- Ġlight Ġtree Ġdiagnostics Ġ---------------- -------------- Ċ Ċ interface ĠF ir Light Diagnostic Ġ{ ĊĠĠĠ Ġval Ġelement : ĠF ir Light Source Element Ċ } Ċ Ċ data Ġclass ĠF ir Light Simple Diagnostic ( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Light Source Element , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 0 , ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Simple Diagnostic (), ĠF ir Light Diagnostic Ċ Ċ data Ġclass ĠF ir Light Diagnostic With Parameters 1 < A >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Light Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 1 < A >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 1 < A >(), ĠF ir Light Diagnostic Ċ Ċ data Ġclass ĠF ir Light Diagnostic With Parameters 2 < A , ĠB >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Light Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġb : ĠB , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 2 < A , ĠB >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 2 < A , ĠB >(), ĠF ir Light Diagnostic Ċ Ċ data Ġclass ĠF ir Light Diagnostic With Parameters 3 < A , ĠB , ĠC >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Light Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġb : ĠB , ĊĠĠĠ Ġoverride Ġval Ġc : ĠC , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 3 < A , ĠB , ĠC >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 3 < A , ĠB , ĠC >(), ĠF ir Light Diagnostic Ċ Ċ data Ġclass ĠF ir Light Diagnostic With Parameters 4 < A , ĠB , ĠC , ĠD >( ĊĠĠĠ Ġoverride Ġval Ġelement : ĠF ir Light Source Element , ĊĠĠĠ Ġoverride Ġval Ġa : ĠA , ĊĠĠĠ Ġoverride Ġval Ġb : ĠB , ĊĠĠĠ Ġoverride Ġval Ġc : ĠC , ĊĠĠĠ Ġoverride Ġval Ġd : ĠD , ĊĠĠĠ Ġoverride Ġval Ġseverity : ĠSeverity , ĊĠĠĠ Ġoverride Ġval Ġfactory : ĠF ir Diagnostic Factory 4 < A , ĠB , ĠC , ĠD >, ĊĠĠĠ Ġoverride Ġval Ġposition ing Strategy : ĠSource Element Position ing Strategy Ċ ) Ġ: ĠF ir Diagnostic With Parameters 4 < A , ĠB , ĠC , ĠD >(), ĠF ir Light Diagnostic Ċ