diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt
index 2441b303a80..9cb076cec51 100644
--- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt
+++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt
@@ -74,19 +74,24 @@ internal class KtFirExpressionTypeProvider(
is FirNamedReference -> fir.getReferencedElementType().asKtType()
is FirStatement -> with(analysisSession) { builtinTypes.UNIT }
is FirTypeRef, is FirImport, is FirPackageDirective, is FirLabel, is FirTypeParameterRef -> null
- // For invalid code like the following,
+
+ // `listOf<_>(1)` where `expression` is `_`
+ is FirPlaceholderProjection -> null
+
+ // There are various cases where we have no corresponding fir due to invalid code
+ // Some examples:
// ```
// when {
// true, false -> {}
// }
// ```
- // `false` does not have a corresponding elements on the FIR side and hence the containing `FirWhenBranch` is returned. In this
- // case, we simply report null since FIR does not know about it.
- is FirWhenBranch -> null
-
- // `listOf<_>(1)` where `expression` is `_`
- is FirPlaceholderProjection -> null
- else -> error("Unexpected ${fir?.let { it::class }} for ${expression::class} with text `${expression.text}`")
+ // `false` does not have a corresponding elements on the FIR side and hence the containing `FirWhenBranch` is returned.
+ // ```
+ // @Volatile
+ // private var
+ // ```
+ // Volatile does not have corresponding element, so `FirFileImpl` is returned
+ else -> null
}
}
diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.kt
new file mode 100644
index 00000000000..b25e4b22e12
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.kt
@@ -0,0 +1,2 @@
+@Volatile
+private var
diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.txt
new file mode 100644
index 00000000000..e6aa5643c0e
--- /dev/null
+++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.txt
@@ -0,0 +1,6 @@
+KT element: KtConstructorCalleeExpression
+FIR element: FirAnnotationCallImpl
+FIR source kind: KtRealSourceElementKind
+
+FIR element rendered:
+@[Types]()
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java
index ea265827815..890499db3c8 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java
@@ -805,6 +805,12 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon
runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/delegatedProperty.kt");
}
+ @Test
+ @TestMetadata("incompletePropertyWithAnnotation.kt")
+ public void testIncompletePropertyWithAnnotation() throws Exception {
+ runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.kt");
+ }
+
@Test
@TestMetadata("javaClassLiteral.kt")
public void testJavaClassLiteral() throws Exception {
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java
index 6b75ad52249..b39b07d7d92 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java
@@ -805,6 +805,12 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi
runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/delegatedProperty.kt");
}
+ @Test
+ @TestMetadata("incompletePropertyWithAnnotation.kt")
+ public void testIncompletePropertyWithAnnotation() throws Exception {
+ runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/invalidCode/incompletePropertyWithAnnotation.kt");
+ }
+
@Test
@TestMetadata("javaClassLiteral.kt")
public void testJavaClassLiteral() throws Exception {