[AA] getExpectedType should not calculate expression type

if property doesn't specify explicit type,
property's return type would be calculated by provided initializer

^KT-62588 fixed


Merge-request: KT-MR-12564
Merged-by: Anna Kozlova <Anna.Kozlova@jetbrains.com>
This commit is contained in:
Anna Kozlova
2023-10-16 09:31:52 +00:00
committed by Space Team
parent 16dfc6df71
commit 3c2be4551b
12 changed files with 39 additions and 24 deletions
@@ -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) {
@@ -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 {
@@ -317,6 +317,7 @@ internal class KtFirExpressionTypeProvider(
// Given: `val x: T = expression`
// Expected type of `expression` is `T`
val property = expression.unwrapQualified<KtProperty> { 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()
}
@@ -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 {
@@ -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 {
@@ -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 {
@@ -1,5 +1,2 @@
expression: av
expected type: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
expected type: null
@@ -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<kotlin/Int, kotlin/Int>
expected type: null
@@ -0,0 +1,2 @@
expression: ""
expected type: null
@@ -1,5 +1,2 @@
expression: av
expected type: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/String
expected type: null
@@ -1,5 +1,4 @@
expression: av
expected type: KtUsualClassType:
expected type: KtIntersectionType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Any
type: it(kotlin/Int & kotlin/String)