diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt index 95699284603..ddfcc0c3052 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionTypeProvider.kt @@ -191,6 +191,8 @@ class KtFe10ExpressionTypeProvider( return null } + if (parentExpression.typeReference == null) return null + val bindingContext = analysisContext.analyze(parentExpression) val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, parentExpression] if (descriptor is CallableDescriptor) { diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java index fc420635db6..5ec4c09d974 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java @@ -280,6 +280,12 @@ public class Fe10IdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerate runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclaration.kt"); } + @Test + @TestMetadata("propertyDeclarationNoExplicitType.kt") + public void testPropertyDeclarationNoExplicitType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt"); + } + @Test @TestMetadata("propertyDeclarationQualified.kt") public void testPropertyDeclarationQualified() throws Exception { 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 7787fbf9dab..be5ff596836 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 @@ -317,6 +317,7 @@ internal class KtFirExpressionTypeProvider( // Given: `val x: T = expression` // Expected type of `expression` is `T` val property = expression.unwrapQualified { property, expr -> property.initializer == expr } ?: return null + if (property.typeReference == null) return null return getReturnTypeForKtDeclaration(property).nonErrorTypeOrNull() } @@ -329,6 +330,7 @@ internal class KtFirExpressionTypeProvider( // which may raise an exception if we attempt to retrieve, e.g., callable declaration from it. return null } + if (function.typeReference == null) return null return getReturnTypeForKtDeclaration(function).nonErrorTypeOrNull() } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java index 6be77728556..cb2ee77f97d 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java @@ -280,6 +280,12 @@ public class FirIdeDependentAnalysisSourceModuleExpectedExpressionTypeTestGenera runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclaration.kt"); } + @Test + @TestMetadata("propertyDeclarationNoExplicitType.kt") + public void testPropertyDeclarationNoExplicitType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt"); + } + @Test @TestMetadata("propertyDeclarationQualified.kt") public void testPropertyDeclarationQualified() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java index b4c539e523f..db259e81262 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java @@ -280,6 +280,12 @@ public class FirIdeNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclaration.kt"); } + @Test + @TestMetadata("propertyDeclarationNoExplicitType.kt") + public void testPropertyDeclarationNoExplicitType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt"); + } + @Test @TestMetadata("propertyDeclarationQualified.kt") public void testPropertyDeclarationQualified() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java index 577beefdd7e..20d3009f8b9 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleExpectedExpressionTypeTestGenerated.java @@ -280,6 +280,12 @@ public class FirStandaloneNormalAnalysisSourceModuleExpectedExpressionTypeTestGe runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclaration.kt"); } + @Test + @TestMetadata("propertyDeclarationNoExplicitType.kt") + public void testPropertyDeclarationNoExplicitType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt"); + } + @Test @TestMetadata("propertyDeclarationQualified.kt") public void testPropertyDeclarationQualified() throws Exception { diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/functionExpressionBodyWithTypeFromRHS.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/functionExpressionBodyWithTypeFromRHS.txt index 906f355865a..53684a9cf4e 100644 --- a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/functionExpressionBodyWithTypeFromRHS.txt +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/functionExpressionBodyWithTypeFromRHS.txt @@ -1,5 +1,2 @@ expression: av -expected type: KtUsualClassType: - annotationsList: [] - ownTypeArguments: [] - type: kotlin/String +expected type: null diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/lambdaWithoutReturnNorExplicitType.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/lambdaWithoutReturnNorExplicitType.txt index 3c49b95cbc1..09ae7aff186 100644 --- a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/lambdaWithoutReturnNorExplicitType.txt +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/lambdaWithoutReturnNorExplicitType.txt @@ -2,16 +2,4 @@ expression: { a: Int -> val b = 1 a + b } -expected type: KtFunctionalType: - annotationsList: [] - ownTypeArguments: [ - KtUsualClassType: - annotationsList: [] - ownTypeArguments: [] - type: kotlin/Int - KtUsualClassType: - annotationsList: [] - ownTypeArguments: [] - type: kotlin/Int - ] - type: kotlin/Function1 +expected type: null diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt new file mode 100644 index 00000000000..f4b165f4b2a --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.kt @@ -0,0 +1,4 @@ +class C { + var y = "" +} + diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.txt new file mode 100644 index 00000000000..1681fb483c9 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationNoExplicitType.txt @@ -0,0 +1,2 @@ +expression: "" +expected type: null diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationWithTypeFromRHS.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationWithTypeFromRHS.txt index 906f355865a..53684a9cf4e 100644 --- a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationWithTypeFromRHS.txt +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/propertyDeclarationWithTypeFromRHS.txt @@ -1,5 +1,2 @@ expression: av -expected type: KtUsualClassType: - annotationsList: [] - ownTypeArguments: [] - type: kotlin/String +expected type: null diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/statementInWhenWithoutExplicitType.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/statementInWhenWithoutExplicitType.txt index e9676394ca4..c659d706f85 100644 --- a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/statementInWhenWithoutExplicitType.txt +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/statementInWhenWithoutExplicitType.txt @@ -1,5 +1,4 @@ expression: av -expected type: KtUsualClassType: +expected type: KtIntersectionType: annotationsList: [] - ownTypeArguments: [] - type: kotlin/Any + type: it(kotlin/Int & kotlin/String)