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 {