[Analysis API] Introduce `KaLocalVariableSymbol.isLateInit`

See https://kotlinlang.org/docs/properties.html#late-initialized-properties-and-variables

^KT-70770 fixed
diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KaFe10DescLocalVariableSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KaFe10DescLocalVariableSymbol.kt
index ad5ed17..e3e9b70 100644
--- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KaFe10DescLocalVariableSymbol.kt
+++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KaFe10DescLocalVariableSymbol.kt
@@ -32,6 +32,9 @@
     override val returnType: KaType
         get() = withValidityAssertion { descriptor.type.toKtType(analysisContext) }
 
+    override val isLateInit: Boolean
+        get() = withValidityAssertion { descriptor.isLateInit }
+
     override fun createPointer(): KaSymbolPointer<KaLocalVariableSymbol> = withValidityAssertion {
         KaBasePsiSymbolPointer.createForSymbolFromSource<KaLocalVariableSymbol>(this) ?: KaFe10NeverRestoringSymbolPointer()
     }
diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLocalVariableSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLocalVariableSymbol.kt
index 7c49db2..ff9f7e4 100644
--- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLocalVariableSymbol.kt
+++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLocalVariableSymbol.kt
@@ -20,6 +20,7 @@
 import org.jetbrains.kotlin.analysis.api.symbols.pointers.KaSymbolPointer
 import org.jetbrains.kotlin.analysis.api.types.KaType
 import org.jetbrains.kotlin.descriptors.VariableDescriptor
+import org.jetbrains.kotlin.lexer.KtTokens
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.SpecialNames
 import org.jetbrains.kotlin.psi.KtVariableDeclaration
@@ -48,6 +49,9 @@
     override val isVal: Boolean
         get() = withValidityAssertion { !psi.isVar }
 
+    override val isLateInit: Boolean
+        get() = withValidityAssertion { psi.hasModifier(KtTokens.LATEINIT_KEYWORD) }
+
     override fun createPointer(): KaSymbolPointer<KaLocalVariableSymbol> = withValidityAssertion {
         KaBasePsiSymbolPointer.createForSymbolFromSource<KaLocalVariableSymbol>(this) ?: KaFe10NeverRestoringSymbolPointer()
     }
diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLoopParameterLocalVariableSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLoopParameterLocalVariableSymbol.kt
index d5d5df5..783eb6c 100644
--- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLoopParameterLocalVariableSymbol.kt
+++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KaFe10PsiLoopParameterLocalVariableSymbol.kt
@@ -20,6 +20,7 @@
 import org.jetbrains.kotlin.analysis.api.symbols.pointers.KaSymbolPointer
 import org.jetbrains.kotlin.analysis.api.types.KaType
 import org.jetbrains.kotlin.descriptors.VariableDescriptor
+import org.jetbrains.kotlin.lexer.KtTokens
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.psi.KtParameter
 import org.jetbrains.kotlin.resolve.BindingContext
@@ -42,6 +43,9 @@
     override val isVal: Boolean
         get() = withValidityAssertion { !psi.isMutable }
 
+    override val isLateInit: Boolean
+        get() = withValidityAssertion { psi.hasModifier(KtTokens.LATEINIT_KEYWORD) }
+
     override fun createPointer(): KaSymbolPointer<KaLocalVariableSymbol> = withValidityAssertion {
         KaBasePsiSymbolPointer.createForSymbolFromSource<KaLocalVariableSymbol>(this) ?: KaFe10NeverRestoringSymbolPointer()
     }
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KaFirLocalVariableSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KaFirLocalVariableSymbol.kt
index 8fd3f94..4fba019 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KaFirLocalVariableSymbol.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KaFirLocalVariableSymbol.kt
@@ -20,9 +20,11 @@
 import org.jetbrains.kotlin.analysis.api.symbols.pointers.KaSymbolPointer
 import org.jetbrains.kotlin.analysis.api.types.KaType
 import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
+import org.jetbrains.kotlin.fir.declarations.utils.isLateInit
 import org.jetbrains.kotlin.fir.symbols.impl.FirErrorPropertySymbol
 import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
 import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
+import org.jetbrains.kotlin.lexer.KtTokens
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.SpecialNames
 import org.jetbrains.kotlin.psi.*
@@ -53,6 +55,12 @@
     override val returnType: KaType
         get() = withValidityAssertion { firSymbol.returnType(builder) }
 
+    override val isLateInit: Boolean
+        // Note that for loop parameters having the `lateinit` keyword, the NON-PSI version returns `false`.
+        // This happens because `lateinit` is not propagated to the FIR status of the loop parameter symbol.
+        // See changes in KT-76578
+        get() = withValidityAssertion { backingPsi?.hasModifier(KtTokens.LATEINIT_KEYWORD) ?: firSymbol.isLateInit }
+
     override fun createPointer(): KaSymbolPointer<KaLocalVariableSymbol> = withValidityAssertion {
         psiBasedSymbolPointerOfTypeIfSource<KaLocalVariableSymbol>()?.let { return it }
 
diff --git a/analysis/analysis-api/api/analysis-api.api b/analysis/analysis-api/api/analysis-api.api
index cd55d73..d3d5266 100644
--- a/analysis/analysis-api/api/analysis-api.api
+++ b/analysis/analysis-api/api/analysis-api.api
@@ -954,6 +954,7 @@
 	public final fun isActual ()Z
 	public final fun isExpect ()Z
 	public final fun isExtension ()Z
+	public abstract fun isLateInit ()Z
 }
 
 public abstract class org/jetbrains/kotlin/analysis/api/symbols/KaNamedClassSymbol : org/jetbrains/kotlin/analysis/api/symbols/KaClassSymbol, org/jetbrains/kotlin/analysis/api/base/KaContextReceiversOwner, org/jetbrains/kotlin/analysis/api/symbols/markers/KaNamedSymbol, org/jetbrains/kotlin/analysis/api/symbols/markers/KaTypeParameterOwnerSymbol {
diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KaRendererOtherModifiersProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KaRendererOtherModifiersProvider.kt
index 49f4012..1de61e4 100644
--- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KaRendererOtherModifiersProvider.kt
+++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/renderer/declarations/modifiers/renderers/KaRendererOtherModifiersProvider.kt
@@ -73,6 +73,10 @@
                     if (symbol.isLateInit) add(KtTokens.LATEINIT_KEYWORD)
                 }
 
+                if (symbol is KaLocalVariableSymbol) {
+                    if (symbol.isLateInit) add(KtTokens.LATEINIT_KEYWORD)
+                }
+
                 if (symbol is KaNamedClassSymbol) {
                     if (symbol.isExternal) add(KtTokens.EXTERNAL_KEYWORD)
                     if (symbol.isInline) add(KtTokens.INLINE_KEYWORD)
diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KaVariableSymbol.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KaVariableSymbol.kt
index 07632c8..1d2faa3 100644
--- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KaVariableSymbol.kt
+++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KaVariableSymbol.kt
@@ -397,6 +397,11 @@
     final override val isActual: Boolean get() = withValidityAssertion { false }
     final override val isExpect: Boolean get() = withValidityAssertion { false }
 
+    /**
+     * Whether the variable is a [late-initialized variable](https://kotlinlang.org/docs/properties.html#late-initialized-properties-and-variables).
+     */
+    public abstract val isLateInit: Boolean
+
     @KaExperimentalApi
     final override val compilerVisibility: Visibility get() = withValidityAssertion { Visibilities.Local }
 
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameter.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameter.txt
index 3d66557..7170637 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameter.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameter.txt
@@ -378,6 +378,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameterAfter.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameterAfter.txt
index 0d1b57f..03603b0 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameterAfter.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/contextParameters/nestedContextParameterAfter.txt
@@ -21,6 +21,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt
index 653b46d..22ae244 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt
@@ -19,6 +19,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/localTypeScope.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/localTypeScope.txt
index 089933c..867368c 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/localTypeScope.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/localTypeScope.txt
@@ -22,6 +22,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
@@ -337,6 +338,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.standalone.fir.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.standalone.fir.txt
index 89ca920..6714346 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.standalone.fir.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.standalone.fir.txt
@@ -428,6 +428,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
@@ -484,6 +485,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.txt
index afb0e90..21dd40f 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/simpleScopeContextForPosition.txt
@@ -428,6 +428,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
@@ -484,6 +485,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/withTestCompilerPluginEnabled/callShapeBasedInjector_variable.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/withTestCompilerPluginEnabled/callShapeBasedInjector_variable.txt
index 16c134f4..cb67137 100644
--- a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/withTestCompilerPluginEnabled/callShapeBasedInjector_variable.txt
+++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/withTestCompilerPluginEnabled/callShapeBasedInjector_variable.txt
@@ -296,6 +296,7 @@
         isActual: false
         isExpect: false
         isExtension: false
+        isLateInit: false
         isVal: true
         location: LOCAL
         modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithName.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithName.txt
index c5838cd..7de3b57 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithName.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithName.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithoutName.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithoutName.txt
index 4976bbd..715906b 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithoutName.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/catchWithoutName.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclaration.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclaration.txt
index f455cd6..d411f95 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclaration.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclaration.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationMutable.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationMutable.txt
index aff5934..98408d2 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationMutable.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationMutable.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: false
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationParameterInLambda.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationParameterInLambda.txt
index f6b7073..bfa23c2f 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationParameterInLambda.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationParameterInLambda.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclaration.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclaration.txt
index 15ad4cf..6f29a15 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclaration.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclaration.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclarationParameterInLambda.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclarationParameterInLambda.txt
index edc95ce..b2787ed 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclarationParameterInLambda.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclarationParameterInLambda.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.descriptors.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.descriptors.txt
index 4cbd34a..d890599 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.descriptors.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.descriptors.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: false
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.txt
index 1116c3a..929db77 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitDestructingDeclarationWithoutInitialization.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: false
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.kt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.kt
index 9ae0379..3f11e0c 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.kt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.kt
@@ -1,4 +1,5 @@
 // DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE
+// PSI/NON-PSI DIFF: `lateinit` is not propagated to the FIR status of loop parameters, see changes in KT-76578
 
 class A
 
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.nonPsi.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.nonPsi.pretty.txt
new file mode 100644
index 0000000..2168520
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.nonPsi.pretty.txt
@@ -0,0 +1 @@
+val something: A
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.nonPsi.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.nonPsi.txt
new file mode 100644
index 0000000..42aa137
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.nonPsi.txt
@@ -0,0 +1,24 @@
+KaLocalVariableSymbol:
+  annotations: []
+  callableId: null
+  compilerVisibility: Local
+  contextReceivers: []
+  isActual: false
+  isExpect: false
+  isExtension: false
+  isLateInit: false
+  isVal: true
+  location: LOCAL
+  modality: FINAL
+  name: something
+  origin: SOURCE
+  receiverParameter: null
+  returnType: KaUsualClassType:
+    annotations: []
+    typeArguments: []
+    type: A
+  visibility: LOCAL
+  getContainingFileSymbol: KaFileSymbol(lateinitLoopParameter.kt)
+  getContainingJvmClassName: null
+  getContainingModule: KaSourceModule "Sources of main"
+  deprecationStatus: null
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.pretty.txt
index 2168520..3c9378a 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.pretty.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.pretty.txt
@@ -1 +1 @@
-val something: A
\ No newline at end of file
+lateinit val something: A
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.txt
index ef9afcc..4a28e64 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/lateinitLoopParameter.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: true
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntry.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntry.txt
index 3012736..a93eda7 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntry.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntry.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -19,4 +20,4 @@
   getContainingFileSymbol: KaFileSymbol(memberLevelDestructuringDeclarationEntry.kt)
   getContainingJvmClassName: null
   getContainingModule: KaSourceModule "Sources of main"
-  deprecationStatus: null
+  deprecationStatus: null
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntryMutable.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntryMutable.txt
index f886a15..373147f 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntryMutable.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/memberLevelDestructuringDeclarationEntryMutable.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -19,4 +20,4 @@
   getContainingFileSymbol: KaFileSymbol(memberLevelDestructuringDeclarationEntryMutable.kt)
   getContainingJvmClassName: null
   getContainingModule: KaSourceModule "Sources of main"
-  deprecationStatus: null
+  deprecationStatus: null
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntry.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntry.txt
index 303cfe1..3e0576a 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntry.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntry.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntryMutable.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntryMutable.txt
index eb5b574..5ec2af9 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntryMutable.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/topLevelDestructuringDeclarationEntryMutable.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.pretty.txt
index 09f90cd..75cb3a0 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.pretty.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.pretty.txt
@@ -1 +1 @@
-var something: MyClass
\ No newline at end of file
+lateinit var something: MyClass
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.txt
index dea53bd..4ebd079 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/lateinitVariable.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: true
   isVal: false
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromInitBlock.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromInitBlock.txt
index 969395c..0108366 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromInitBlock.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromInitBlock.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromWhenExpression.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromWhenExpression.txt
index 1607781..d426597 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromWhenExpression.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/propertyFromWhenExpression.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/variableFromScriptStatement.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/variableFromScriptStatement.txt
index 7a48394..5642634 100644
--- a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/variableFromScriptStatement.txt
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/variableFromScriptStatement.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: false
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.descriptors.txt
index 40c0d87..946f562 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.descriptors.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.descriptors.txt
@@ -323,6 +323,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -347,6 +348,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.txt
index eafaa2f..5d4c953 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/destructuringDeclaration.txt
@@ -323,6 +323,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -347,6 +348,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/forLoopVariable.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/forLoopVariable.txt
index efe811f..17f39b8 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/forLoopVariable.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/forLoopVariable.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.descriptors.txt
index 70884c4..2a34237 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.descriptors.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.descriptors.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -85,6 +86,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -118,6 +120,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -197,6 +200,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -230,6 +234,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.txt
index 8816e56..aa9f5c2 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/implicitReturnInLambda.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -85,6 +86,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -118,6 +120,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -197,6 +200,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -230,6 +234,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/localDeclarations.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/localDeclarations.txt
index c73c09a..bca20b2 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/localDeclarations.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/localDeclarations.txt
@@ -6,6 +6,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
@@ -127,4 +128,4 @@
   getContainingJvmClassName: LocalDeclarationsKt
   canBeOperator: false
   getContainingModule: KaSourceModule "Sources of main"
-  deprecationStatus: null
\ No newline at end of file
+  deprecationStatus: null
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.descriptors.txt
index 7e11223..d853130 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.descriptors.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.descriptors.txt
@@ -23,6 +23,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.txt
index 8284072..28329c5 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParameters.txt
@@ -27,6 +27,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.descriptors.txt
index 3a4d020..3a2e0c0 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.descriptors.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.descriptors.txt
@@ -1125,6 +1125,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL
diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.txt
index a7c9a99..18d5a04 100644
--- a/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.txt
+++ b/analysis/analysis-api/testData/symbols/symbolByPsi/typeParametersStressTest.txt
@@ -1138,6 +1138,7 @@
   isActual: false
   isExpect: false
   isExtension: false
+  isLateInit: false
   isVal: true
   location: LOCAL
   modality: FINAL