[Low Level FIR] fix exception when creating symbol by invalid code
diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java
new file mode 100644
index 0000000..8d6136e1
--- /dev/null
+++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2010-2022 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.fe10.test.cases.generated.cases.symbols;
+
+import com.intellij.testFramework.TestDataPath;
+import org.jetbrains.kotlin.test.util.KtTestUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.kotlin.analysis.api.fe10.test.configurator.AnalysisApiFe10TestConfiguratorFactory;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfiguratorFactoryData;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode;
+import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSingleSymbolByPsi;
+import org.jetbrains.kotlin.test.TestMetadata;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.util.regex.Pattern;
+
+/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
+@SuppressWarnings("all")
+@TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi")
+@TestDataPath("$PROJECT_ROOT")
+public class Fe10IdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated extends AbstractSingleSymbolByPsi {
+    @NotNull
+    @Override
+    public AnalysisApiTestConfigurator getConfigurator() {
+        return AnalysisApiFe10TestConfiguratorFactory.INSTANCE.createConfigurator(
+            new AnalysisApiTestConfiguratorFactoryData(
+                FrontendKind.Fe10,
+                TestModuleKind.Source,
+                AnalysisSessionMode.Normal,
+                AnalysisApiMode.Ide
+            )
+        );
+    }
+
+    @Test
+    public void testAllFilesPresentInSingleSymbolByPsi() throws Exception {
+        KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi"), Pattern.compile("^(.+)\\.kt$"), null, true);
+    }
+
+    @Nested
+    @TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Errors {
+        @Test
+        public void testAllFilesPresentInErrors() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors"), Pattern.compile("^(.+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("anonympuseObjectInInvalidPosition.kt")
+        public void testAnonympuseObjectInInvalidPosition() throws Exception {
+            runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.kt");
+        }
+
+        @Test
+        @TestMetadata("objectWithTypeArgsAsExpression.kt")
+        public void testObjectWithTypeArgsAsExpression() throws Exception {
+            runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.kt");
+        }
+    }
+}
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java
new file mode 100644
index 0000000..ab6018c
--- /dev/null
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2010-2022 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.fir.test.cases.generated.cases.symbols;
+
+import com.intellij.testFramework.TestDataPath;
+import org.jetbrains.kotlin.test.util.KtTestUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.kotlin.analysis.api.fir.test.configurators.AnalysisApiFirTestConfiguratorFactory;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfiguratorFactoryData;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode;
+import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSingleSymbolByPsi;
+import org.jetbrains.kotlin.test.TestMetadata;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.util.regex.Pattern;
+
+/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
+@SuppressWarnings("all")
+@TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi")
+@TestDataPath("$PROJECT_ROOT")
+public class FirIdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated extends AbstractSingleSymbolByPsi {
+    @NotNull
+    @Override
+    public AnalysisApiTestConfigurator getConfigurator() {
+        return AnalysisApiFirTestConfiguratorFactory.INSTANCE.createConfigurator(
+            new AnalysisApiTestConfiguratorFactoryData(
+                FrontendKind.Fir,
+                TestModuleKind.Source,
+                AnalysisSessionMode.Normal,
+                AnalysisApiMode.Ide
+            )
+        );
+    }
+
+    @Test
+    public void testAllFilesPresentInSingleSymbolByPsi() throws Exception {
+        KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi"), Pattern.compile("^(.+)\\.kt$"), null, true);
+    }
+
+    @Nested
+    @TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Errors {
+        @Test
+        public void testAllFilesPresentInErrors() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors"), Pattern.compile("^(.+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("anonympuseObjectInInvalidPosition.kt")
+        public void testAnonympuseObjectInInvalidPosition() throws Exception {
+            runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.kt");
+        }
+
+        @Test
+        @TestMetadata("objectWithTypeArgsAsExpression.kt")
+        public void testObjectWithTypeArgsAsExpression() throws Exception {
+            runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.kt");
+        }
+    }
+}
diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSingleSymbolByPsi.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSingleSymbolByPsi.kt
new file mode 100644
index 0000000..afd4645
--- /dev/null
+++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/AbstractSingleSymbolByPsi.kt
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2010-2022 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.impl.base.test.cases.symbols
+
+import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
+import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
+import org.jetbrains.kotlin.psi.KtDeclaration
+import org.jetbrains.kotlin.psi.KtFile
+import org.jetbrains.kotlin.test.services.TestServices
+
+abstract class AbstractSingleSymbolByPsi : AbstractSymbolTest() {
+    override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
+        val declaration = testServices.expressionMarkerProvider.getSelectedElementOfType<KtDeclaration>(ktFile)
+        val symbol = declaration.getSymbol()
+        return SymbolsData(listOf(symbol))
+    }
+}
\ No newline at end of file
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java
new file mode 100644
index 0000000..d51a91a
--- /dev/null
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSingleSymbolByPsiGenerated.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2010-2022 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.standalone.fir.test.cases.generated.cases.symbols;
+
+import com.intellij.testFramework.TestDataPath;
+import org.jetbrains.kotlin.test.util.KtTestUtil;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.kotlin.analysis.api.standalone.fir.test.AnalysisApiFirStandaloneModeTestConfiguratorFactory;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfiguratorFactoryData;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode;
+import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode;
+import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSingleSymbolByPsi;
+import org.jetbrains.kotlin.test.TestMetadata;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.util.regex.Pattern;
+
+/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
+@SuppressWarnings("all")
+@TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi")
+@TestDataPath("$PROJECT_ROOT")
+public class FirStandaloneNormalAnalysisSourceModuleSingleSymbolByPsiGenerated extends AbstractSingleSymbolByPsi {
+    @NotNull
+    @Override
+    public AnalysisApiTestConfigurator getConfigurator() {
+        return AnalysisApiFirStandaloneModeTestConfiguratorFactory.INSTANCE.createConfigurator(
+            new AnalysisApiTestConfiguratorFactoryData(
+                FrontendKind.Fir,
+                TestModuleKind.Source,
+                AnalysisSessionMode.Normal,
+                AnalysisApiMode.Standalone
+            )
+        );
+    }
+
+    @Test
+    public void testAllFilesPresentInSingleSymbolByPsi() throws Exception {
+        KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi"), Pattern.compile("^(.+)\\.kt$"), null, true);
+    }
+
+    @Nested
+    @TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Errors {
+        @Test
+        public void testAllFilesPresentInErrors() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors"), Pattern.compile("^(.+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("anonympuseObjectInInvalidPosition.kt")
+        public void testAnonympuseObjectInInvalidPosition() throws Exception {
+            runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.kt");
+        }
+
+        @Test
+        @TestMetadata("objectWithTypeArgsAsExpression.kt")
+        public void testObjectWithTypeArgsAsExpression() throws Exception {
+            runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.kt");
+        }
+    }
+}
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.descriptors.txt
new file mode 100644
index 0000000..ca0d176
--- /dev/null
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.descriptors.txt
@@ -0,0 +1,3 @@
+KtErrorCallInfo:
+  candidateCalls = []
+  diagnostic = ERROR<ASSIGNMENT_IN_EXPRESSION_CONTEXT: Assignments are not expressions, and only expressions are allowed in this context>
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.txt
index e58ddba..0f14bf4 100644
--- a/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.txt
+++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode/getterAssignment.txt
@@ -1,3 +1,3 @@
 KtErrorCallInfo:
   candidateCalls = []
-  diagnostic = ERROR<ASSIGNMENT_IN_EXPRESSION_CONTEXT: Assignments are not expressions, and only expressions are allowed in this context>
+  diagnostic = ERROR<VARIABLE_EXPECTED: Variable expected>
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.kt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.kt
new file mode 100644
index 0000000..72ea85d
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.kt
@@ -0,0 +1,7 @@
+private val _commonSettingsLazy: A = null = <expr>object : A<Int> {
+    override fun x() {}
+}</expr>
+
+interface A<T> {
+    fun x()
+}
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.pretty.txt
new file mode 100644
index 0000000..d1fe996
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.pretty.txt
@@ -0,0 +1 @@
+object : A<kotlin.Int>
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.txt
new file mode 100644
index 0000000..408e336
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/anonympuseObjectInInvalidPosition.txt
@@ -0,0 +1,13 @@
+KtAnonymousObjectSymbol:
+  annotationsList: []
+  classIdIfNonLocal: null
+  classKind: ANONYMOUS_OBJECT
+  name: null
+  origin: SOURCE
+  superTypes: [
+    A<kotlin/Int>
+  ]
+  symbolKind: LOCAL
+  typeParameters: []
+  getContainingModule: KtSourceModule "Sources of main"
+  deprecationStatus: null
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.descriptors.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.descriptors.pretty.txt
new file mode 100644
index 0000000..d281175
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.descriptors.pretty.txt
@@ -0,0 +1 @@
+object<LanguageVersionSettings>
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.kt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.kt
new file mode 100644
index 0000000..986da96
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.kt
@@ -0,0 +1,3 @@
+private val commonSettingsLazy = <expr>object A<LanguageVersionSettings> {
+   println(x)
+}</expr>
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.pretty.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.pretty.txt
new file mode 100644
index 0000000..e2f6b77
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.pretty.txt
@@ -0,0 +1 @@
+object
diff --git a/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.txt b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.txt
new file mode 100644
index 0000000..be4b3f7
--- /dev/null
+++ b/analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors/objectWithTypeArgsAsExpression.txt
@@ -0,0 +1,13 @@
+KtAnonymousObjectSymbol:
+  annotationsList: []
+  classIdIfNonLocal: null
+  classKind: ANONYMOUS_OBJECT
+  name: null
+  origin: SOURCE
+  superTypes: [
+    kotlin/Any
+  ]
+  symbolKind: LOCAL
+  typeParameters: []
+  getContainingModule: KtSourceModule "Sources of main"
+  deprecationStatus: null
diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.kt b/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.kt
new file mode 100644
index 0000000..dc8c640
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.kt
@@ -0,0 +1,7 @@
+private val resolveMe: A = null = <expr>object : A<Int> {
+    override fun x() {}
+}</expr>
+
+interface A<T> {
+    fun x()
+}
diff --git a/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.txt b/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.txt
new file mode 100644
index 0000000..e83e7c7
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.txt
@@ -0,0 +1,162 @@
+
+RAW_FIR:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final? [RAW_FIR] val resolveMe: A = LAZY_EXPRESSION
+        private [RAW_FIR] get(): A
+    public? final? [RAW_FIR] interface A<[RAW_FIR] T> : R|kotlin/Any| {
+        public? final? [RAW_FIR] fun x(): R|kotlin/Unit|
+
+    }
+
+IMPORTS:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final? [RAW_FIR] val resolveMe: A = LAZY_EXPRESSION
+        private [RAW_FIR] get(): A
+    public? final? [RAW_FIR] interface A<[RAW_FIR] T> : R|kotlin/Any| {
+        public? final? [RAW_FIR] fun x(): R|kotlin/Unit|
+
+    }
+
+COMPILER_REQUIRED_ANNOTATIONS:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final? [COMPILER_REQUIRED_ANNOTATIONS] val resolveMe: A = LAZY_EXPRESSION
+        private [COMPILER_REQUIRED_ANNOTATIONS] get(): A
+    public? final? [RAW_FIR] interface A<[RAW_FIR] T> : R|kotlin/Any| {
+        public? final? [RAW_FIR] fun x(): R|kotlin/Unit|
+
+    }
+
+COMPANION_GENERATION:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final? [COMPANION_GENERATION] val resolveMe: A = LAZY_EXPRESSION
+        private [COMPANION_GENERATION] get(): A
+    public? final? [RAW_FIR] interface A<[RAW_FIR] T> : R|kotlin/Any| {
+        public? final? [RAW_FIR] fun x(): R|kotlin/Unit|
+
+    }
+
+SUPER_TYPES:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final? [SUPER_TYPES] val resolveMe: A = LAZY_EXPRESSION
+        private [SUPER_TYPES] get(): A
+    public? final? [RAW_FIR] interface A<[RAW_FIR] T> : R|kotlin/Any| {
+        public? final? [RAW_FIR] fun x(): R|kotlin/Unit|
+
+    }
+
+TYPES:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final? [TYPES] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = LAZY_EXPRESSION
+        private [TYPES] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface A<[COMPILER_REQUIRED_ANNOTATIONS] T> : R|kotlin/Any| {
+        public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun x(): R|kotlin/Unit|
+
+    }
+
+STATUS:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [STATUS] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = LAZY_EXPRESSION
+        private [STATUS] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface A<[COMPILER_REQUIRED_ANNOTATIONS] T> : R|kotlin/Any| {
+        public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun x(): R|kotlin/Unit|
+
+    }
+
+ARGUMENTS_OF_ANNOTATIONS:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [ARGUMENTS_OF_ANNOTATIONS] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = LAZY_EXPRESSION
+        private [ARGUMENTS_OF_ANNOTATIONS] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface A<[COMPILER_REQUIRED_ANNOTATIONS] T> : R|kotlin/Any| {
+        public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun x(): R|kotlin/Unit|
+
+    }
+
+CONTRACTS:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [CONTRACTS] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = ERROR_EXPR(Should have initializer)<Unsupported LValue: NULL># = object : A<Int> {
+        private [RAW_FIR] [ContainingClassKey=<anonymous>] constructor(): R|<anonymous>| {
+            super<<implicit>>()
+        }
+
+        public? open? override [RAW_FIR] fun x(): R|kotlin/Unit| {
+        }
+
+    }
+
+        private [CONTRACTS] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface A<[COMPILER_REQUIRED_ANNOTATIONS] T> : R|kotlin/Any| {
+        public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun x(): R|kotlin/Unit|
+
+    }
+
+IMPLICIT_TYPES_BODY_RESOLVE:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [IMPLICIT_TYPES_BODY_RESOLVE] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = ERROR_EXPR(Should have initializer)<Unsupported LValue: NULL># = object : A<Int> {
+        private [RAW_FIR] [ContainingClassKey=<anonymous>] constructor(): R|<anonymous>| {
+            super<<implicit>>()
+        }
+
+        public? open? override [RAW_FIR] fun x(): R|kotlin/Unit| {
+        }
+
+    }
+
+        private [IMPLICIT_TYPES_BODY_RESOLVE] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface A<[COMPILER_REQUIRED_ANNOTATIONS] T> : R|kotlin/Any| {
+        public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun x(): R|kotlin/Unit|
+
+    }
+
+EXPECT_ACTUAL_MATCHING:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [EXPECT_ACTUAL_MATCHING] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = ERROR_EXPR(Should have initializer)<Unsupported LValue: NULL># = object : A<Int> {
+        private [RAW_FIR] [ContainingClassKey=<anonymous>] constructor(): R|<anonymous>| {
+            super<<implicit>>()
+        }
+
+        public? open? override [RAW_FIR] fun x(): R|kotlin/Unit| {
+        }
+
+    }
+
+        private [EXPECT_ACTUAL_MATCHING] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface A<[COMPILER_REQUIRED_ANNOTATIONS] T> : R|kotlin/Any| {
+        public? final? [COMPILER_REQUIRED_ANNOTATIONS] fun x(): R|kotlin/Unit|
+
+    }
+
+BODY_RESOLVE:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [BODY_RESOLVE] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = ERROR_EXPR(Should have initializer)<Unsupported LValue: NULL># = object : R|A<kotlin/Int>| {
+        private [BODY_RESOLVE] [ContainingClassKey=<anonymous>] constructor(): R|<anonymous>| {
+            super<R|kotlin/Any|>()
+        }
+
+        public final override [BODY_RESOLVE] fun x(): R|kotlin/Unit| {
+        }
+
+    }
+
+        private [BODY_RESOLVE] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public abstract [SUPER_TYPES] interface A<[SUPER_TYPES] T> : R|kotlin/Any| {
+        public abstract [STATUS] fun x(): R|kotlin/Unit|
+
+    }
+
+FILE RAW TO BODY:
+FILE: anonympuseObjectInInvalidPosition.kt
+    private final [BODY_RESOLVE] val resolveMe: <ERROR TYPE REF: Wrong number of type arguments> = ERROR_EXPR(Should have initializer)<Unsupported LValue: NULL># = object : R|A<kotlin/Int>| {
+        private [BODY_RESOLVE] [ContainingClassKey=<anonymous>] constructor(): R|<anonymous>| {
+            super<R|kotlin/Any|>()
+        }
+
+        public final override [BODY_RESOLVE] fun x(): R|kotlin/Unit| {
+        }
+
+    }
+
+        private [BODY_RESOLVE] get(): <ERROR TYPE REF: Wrong number of type arguments>
+    public abstract [BODY_RESOLVE] interface A<[BODY_RESOLVE] T> : R|kotlin/Any| {
+        public abstract [BODY_RESOLVE] fun x(): R|kotlin/Unit|
+
+    }
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt
index 51d9a4b..f475e18 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/AbstractFirLazyDeclarationResolveTest.kt
@@ -13,6 +13,7 @@
 import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
 import org.jetbrains.kotlin.fir.realPsi
 import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithAttributes
+import org.jetbrains.kotlin.fir.renderer.FirErrorExpressionExtendedRenderer
 import org.jetbrains.kotlin.fir.renderer.FirRenderer
 import org.jetbrains.kotlin.fir.renderer.FirResolvePhaseRenderer
 import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
@@ -57,7 +58,8 @@
         val renderer = FirRenderer(
             builder = resultBuilder,
             declarationRenderer = FirDeclarationRendererWithAttributes(),
-            resolvePhaseRenderer = FirResolvePhaseRenderer()
+            resolvePhaseRenderer = FirResolvePhaseRenderer(),
+            errorExpressionRenderer = FirErrorExpressionExtendedRenderer(),
         )
         resolveWithClearCaches(ktFile) { firResolveSession ->
             check(firResolveSession is LLFirSourceResolveSession)
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java
index abc40c4..eb0100c 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FirLazyDeclarationResolveTestGenerated.java
@@ -161,6 +161,22 @@
     }
 
     @Nested
+    @TestMetadata("analysis/low-level-api-fir/testdata/lazyResolve/errors")
+    @TestDataPath("$PROJECT_ROOT")
+    public class Errors {
+        @Test
+        public void testAllFilesPresentInErrors() throws Exception {
+            KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/low-level-api-fir/testdata/lazyResolve/errors"), Pattern.compile("^(.+)\\.kt$"), null, true);
+        }
+
+        @Test
+        @TestMetadata("anonympuseObjectInInvalidPosition.kt")
+        public void testAnonympuseObjectInInvalidPosition() throws Exception {
+            runTest("analysis/low-level-api-fir/testdata/lazyResolve/errors/anonympuseObjectInInvalidPosition.kt");
+        }
+    }
+
+    @Nested
     @TestMetadata("analysis/low-level-api-fir/testdata/lazyResolve/functions")
     @TestDataPath("$PROJECT_ROOT")
     public class Functions {
diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
index 62f8716..cdfc861 100644
--- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
+++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
@@ -202,51 +202,59 @@
 
         // Here we accept lambda as receiver to prevent expression calculation in stub mode
         private fun (() -> KtExpression?).toFirExpression(errorReason: String): FirExpression =
-            with(this()) {
-                convertSafe() ?: buildErrorExpression(
-                    this?.toFirSourceElement(), ConeSimpleDiagnostic(errorReason, DiagnosticKind.ExpressionExpected),
-                )
-            }
+            this().toFirExpression(errorReason)
 
         private fun KtElement?.toFirExpression(
             errorReason: String,
             kind: DiagnosticKind = DiagnosticKind.ExpressionExpected
         ): FirExpression {
-            val result = this.convertSafe<FirExpression>()
+            if (this == null) {
+                return buildErrorExpression(source = null, ConeSimpleDiagnostic(errorReason, kind))
+            }
 
-            if (result != null) {
-                if (this == null) {
-                    return result
-                }
-
-                val callExpressionCallee = (this as? KtCallExpression)?.calleeExpression?.unwrapParenthesesLabelsAndAnnotations()
-
-                if (this is KtNameReferenceExpression ||
-                    this is KtConstantExpression ||
-                    (this is KtCallExpression && callExpressionCallee !is KtLambdaExpression) ||
-                    getQualifiedExpressionForSelector() == null
-                ) {
-                    return result
-                }
-
-                return buildErrorExpression {
-                    source = callExpressionCallee?.toFirSourceElement() ?: toFirSourceElement()
-                    diagnostic =
-                        ConeSimpleDiagnostic(
-                            "The expression cannot be a selector (occur after a dot)",
-                            if (callExpressionCallee == null) DiagnosticKind.IllegalSelector else DiagnosticKind.NoReceiverAllowed
-                        )
-                    expression = result
+            val result = when (val fir = convertElement(this)) {
+                is FirExpression -> fir
+                else -> {
+                    return buildErrorExpression {
+                        nonExpressionElement = fir
+                        diagnostic = ConeSimpleDiagnostic(errorReason, kind)
+                        source = toFirSourceElement()
+                    }
                 }
             }
 
-            return buildErrorExpression(
-                this?.toFirSourceElement(), ConeSimpleDiagnostic(errorReason, kind),
-            )
+
+            val callExpressionCallee = (this as? KtCallExpression)?.calleeExpression?.unwrapParenthesesLabelsAndAnnotations()
+
+            if (this is KtNameReferenceExpression ||
+                this is KtConstantExpression ||
+                (this is KtCallExpression && callExpressionCallee !is KtLambdaExpression) ||
+                getQualifiedExpressionForSelector() == null
+            ) {
+                return result
+            }
+
+            return buildErrorExpression {
+                source = callExpressionCallee?.toFirSourceElement() ?: toFirSourceElement()
+                diagnostic =
+                    ConeSimpleDiagnostic(
+                        "The expression cannot be a selector (occur after a dot)",
+                        if (callExpressionCallee == null) DiagnosticKind.IllegalSelector else DiagnosticKind.NoReceiverAllowed
+                    )
+                expression = result
+            }
         }
 
-        private inline fun KtExpression.toFirStatement(errorReasonLazy: () -> String): FirStatement =
-            convertSafe() ?: buildErrorExpression(this.toFirSourceElement(), ConeSimpleDiagnostic(errorReasonLazy(), DiagnosticKind.Syntax))
+        private inline fun KtExpression.toFirStatement(errorReasonLazy: () -> String): FirStatement {
+            return when (val fir = convertElement(this)) {
+                is FirStatement -> fir
+                else -> buildErrorExpression {
+                    nonExpressionElement = fir
+                    diagnostic = ConeSimpleDiagnostic(errorReasonLazy(), DiagnosticKind.Syntax)
+                    source = toFirSourceElement()
+                }
+            }
+        }
 
         private fun KtExpression.toFirStatement(): FirStatement =
             convert()
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt
index 83f8782..2b12a00 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt
@@ -23,6 +23,7 @@
     abstract override val annotations: List<FirAnnotation>
     abstract override val diagnostic: ConeDiagnostic
     abstract val expression: FirExpression?
+    abstract val nonExpressionElement: FirElement?
 
     override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorExpression(this, data)
 
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorExpressionBuilder.kt
index 4941bc3..252affa 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorExpressionBuilder.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirErrorExpressionBuilder.kt
@@ -9,6 +9,7 @@
 
 import kotlin.contracts.*
 import org.jetbrains.kotlin.KtSourceElement
+import org.jetbrains.kotlin.fir.FirElement
 import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
 import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
 import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
@@ -33,6 +34,7 @@
     override val annotations: MutableList<FirAnnotation> = mutableListOf()
     lateinit var diagnostic: ConeDiagnostic
     var expression: FirExpression? = null
+    var nonExpressionElement: FirElement? = null
 
     override fun build(): FirErrorExpression {
         return FirErrorExpressionImpl(
@@ -40,6 +42,7 @@
             annotations,
             diagnostic,
             expression,
+            nonExpressionElement,
         )
     }
 
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt
index a78b162..f682bf3 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt
@@ -8,6 +8,7 @@
 package org.jetbrains.kotlin.fir.expressions.impl
 
 import org.jetbrains.kotlin.KtSourceElement
+import org.jetbrains.kotlin.fir.FirElement
 import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
 import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic
 import org.jetbrains.kotlin.fir.expressions.FirAnnotation
@@ -27,6 +28,7 @@
     override val annotations: MutableList<FirAnnotation>,
     override val diagnostic: ConeDiagnostic,
     override var expression: FirExpression?,
+    override var nonExpressionElement: FirElement?,
 ) : FirErrorExpression() {
     override var typeRef: FirTypeRef = FirErrorTypeRefImpl(source, null, ConeStubDiagnostic(diagnostic), false)
 
@@ -34,12 +36,14 @@
         typeRef.accept(visitor, data)
         annotations.forEach { it.accept(visitor, data) }
         expression?.accept(visitor, data)
+        nonExpressionElement?.accept(visitor, data)
     }
 
     override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirErrorExpressionImpl {
         typeRef = typeRef.transform(transformer, data)
         transformAnnotations(transformer, data)
         expression = expression?.transform(transformer, data)
+        nonExpressionElement = nonExpressionElement?.transform(transformer, data)
         return this
     }
 
diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt
index 558fc47..dc758bb 100644
--- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt
+++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoopImpl.kt
@@ -30,7 +30,7 @@
     override val diagnostic: ConeDiagnostic,
 ) : FirErrorLoop() {
     override var block: FirBlock = FirEmptyExpressionBlock()
-    override var condition: FirExpression = FirErrorExpressionImpl(source, mutableListOf(), ConeStubDiagnostic(diagnostic), null)
+    override var condition: FirExpression = FirErrorExpressionImpl(source, mutableListOf(), ConeStubDiagnostic(diagnostic), null, null)
 
     override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
         annotations.forEach { it.accept(visitor, data) }
diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirErrorExpressionRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirErrorExpressionRenderer.kt
new file mode 100644
index 0000000..36be4d7
--- /dev/null
+++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirErrorExpressionRenderer.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2010-2022 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.renderer
+
+import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
+
+abstract class FirErrorExpressionRenderer {
+    internal lateinit var components: FirRendererComponents
+    protected val printer get() = components.printer
+
+    abstract fun renderErrorExpression(errorExpression: FirErrorExpression)
+}
+
+class FirErrorExpressionOnlyErrorRenderer : FirErrorExpressionRenderer() {
+    override fun renderErrorExpression(errorExpression: FirErrorExpression) {
+        printer.print("ERROR_EXPR(${errorExpression.diagnostic.reason})")
+    }
+}
+
+class FirErrorExpressionExtendedRenderer : FirErrorExpressionRenderer() {
+    override fun renderErrorExpression(errorExpression: FirErrorExpression) {
+        printer.print("ERROR_EXPR(${errorExpression.diagnostic.reason})")
+        errorExpression.nonExpressionElement?.accept(components.visitor)
+    }
+}
\ No newline at end of file
diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt
index a4df682..a026ce4e 100644
--- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt
+++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt
@@ -41,6 +41,7 @@
     override val resolvePhaseRenderer: FirResolvePhaseRenderer? = null,
     override val typeRenderer: ConeTypeRenderer = ConeTypeRendererForDebugging(),
     override val valueParameterRenderer: FirValueParameterRenderer = FirValueParameterRenderer(),
+    override val errorExpressionRenderer: FirErrorExpressionRenderer = FirErrorExpressionOnlyErrorRenderer(),
 ) : FirRendererComponents {
 
     override val visitor = Visitor()
@@ -75,6 +76,7 @@
         typeRenderer.builder = builder
         typeRenderer.idRenderer = idRenderer
         valueParameterRenderer.components = this
+        errorExpressionRenderer.components = this
     }
 
     fun renderElementAsString(element: FirElement): String {
@@ -1000,7 +1002,7 @@
         }
 
         override fun visitErrorExpression(errorExpression: FirErrorExpression) {
-            print("ERROR_EXPR(${errorExpression.diagnostic.reason})")
+            errorExpressionRenderer.renderErrorExpression(errorExpression)
         }
 
         override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) {
diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt
index 44191f4..0814e2a 100644
--- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt
+++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt
@@ -23,4 +23,5 @@
     val resolvePhaseRenderer: FirResolvePhaseRenderer?
     val typeRenderer: ConeTypeRenderer
     val valueParameterRenderer: FirValueParameterRenderer
+    val errorExpressionRenderer: FirErrorExpressionRenderer
 }
\ No newline at end of file
diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt
index 67f53ae..4fbf04e 100644
--- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt
+++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt
@@ -159,7 +159,7 @@
 
         impl(errorLoop) {
             default("block", "FirEmptyExpressionBlock()")
-            default("condition", "FirErrorExpressionImpl(source, mutableListOf(), ConeStubDiagnostic(diagnostic), null)")
+            default("condition", "FirErrorExpressionImpl(source, mutableListOf(), ConeStubDiagnostic(diagnostic), null, null)")
             useTypes(emptyExpressionBlock, coneStubDiagnosticType)
         }
 
diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt
index ee43664..4dd7be4 100644
--- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt
+++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt
@@ -32,6 +32,7 @@
 import org.jetbrains.kotlin.fir.tree.generator.FieldSets.visibility
 import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFieldConfigurator
 import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder
+import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder.Companion.baseFirElement
 import org.jetbrains.kotlin.fir.tree.generator.context.type
 import org.jetbrains.kotlin.fir.tree.generator.model.*
 import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
@@ -105,6 +106,7 @@
 
         errorExpression.configure {
             +field("expression", expression, nullable = true)
+            +field("nonExpressionElement", baseFirElement, nullable = true)
         }
 
         errorFunction.configure {
diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt
index 26c5b49..405d538 100644
--- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt
+++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt
@@ -19,6 +19,7 @@
                 is FieldList -> field.baseType as AbstractElement
                 else -> throw IllegalArgumentException()
             }
+            if (fieldElement == AbstractFirTreeBuilder.baseFirElement) continue
             usedAsFieldType[fieldElement] = true
         }
     }
diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt
index be672b8..501ac2c 100644
--- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt
+++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt
@@ -36,6 +36,7 @@
 import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.typeProvider.AbstractHasCommonSubtypeTest
 import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.references.AbstractReferenceResolveTest
 import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.scopes.*
+import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSingleSymbolByPsi
 import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByFqNameTest
 import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByPsiTest
 import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByReferenceTest
@@ -110,6 +111,10 @@
             model("symbolByPsi")
         }
 
+        test(AbstractSingleSymbolByPsi::class) {
+            model("singleSymbolByPsi")
+        }
+
         test(
             AbstractSymbolByFqNameTest::class
         ) {