From 1d5c080dd8cf89d9bb3bbf66b493872d5f2ad4b8 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 26 May 2023 16:59:14 +0200 Subject: [PATCH] [AA] calculate ktType based on symbols when possible then, for compiled code deserialized fir would be used instead of building decompiled text and consequence building and resolving of raw fir; type for ktTypeReference from compiled code is called e.g., by UAST inspections when they check annotations of the called function parameters --- ...ourceModuleTypeReferenceTestGenerated.java | 42 ++++++++++++++ .../api/fir/components/KtFirTypeProvider.kt | 58 ++++++++++++++++++- ...ourceModuleTypeReferenceTestGenerated.java | 42 ++++++++++++++ ...ourceModuleTypeReferenceTestGenerated.java | 42 ++++++++++++++ ...ourceModuleTypeReferenceTestGenerated.java | 42 ++++++++++++++ .../typeReference/annotationEntry.kt | 4 ++ .../typeReference/annotationEntry.txt | 2 + .../annotationEntryOnParameter.kt | 3 + .../annotationEntryOnParameter.txt | 2 + .../typeReference/annotationOnFunction.kt | 3 + .../typeReference/annotationOnFunction.txt | 2 + .../typeReference/functionReceiver.kt | 3 + .../typeReference/functionReceiver.txt | 2 + .../typeReference/functionReturn.kt | 3 + .../typeReference/functionReturn.txt | 2 + .../typeReference/propertyReceiver.kt | 3 + .../typeReference/propertyReceiver.txt | 2 + .../typeReference/propertyReturn.kt | 3 + .../typeReference/propertyReturn.txt | 2 + 19 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.txt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.txt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.txt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.txt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.txt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.txt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt create mode 100644 analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeProvider/Fe10IdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeProvider/Fe10IdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java index a73f777b997..70212532ed3 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeProvider/Fe10IdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeProvider/Fe10IdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java @@ -46,6 +46,48 @@ public class Fe10IdeNormalAnalysisSourceModuleTypeReferenceTestGenerated extends KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/typeProvider/typeReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationEntry.kt") + public void testAnnotationEntry() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt"); + } + + @Test + @TestMetadata("annotationEntryOnParameter.kt") + public void testAnnotationEntryOnParameter() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt"); + } + + @Test + @TestMetadata("annotationOnFunction.kt") + public void testAnnotationOnFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt"); + } + + @Test + @TestMetadata("functionReceiver.kt") + public void testFunctionReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt"); + } + + @Test + @TestMetadata("functionReturn.kt") + public void testFunctionReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt"); + } + + @Test + @TestMetadata("propertyReceiver.kt") + public void testPropertyReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt"); + } + + @Test + @TestMetadata("propertyReturn.kt") + public void testPropertyReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt"); + } + @Test @TestMetadata("starProjection.kt") public void testStarProjection() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt index 3a2e3e5e4a0..4e5a6d02103 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt @@ -20,15 +20,21 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbolOfTypeSafe import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.fir.analysis.checkers.ConeTypeCompatibilityChecker import org.jetbrains.kotlin.fir.analysis.checkers.ConeTypeCompatibilityChecker.isCompatible import org.jetbrains.kotlin.fir.analysis.checkers.typeParameterSymbols +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass +import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirGetClassCall +import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.renderer.FirRenderer import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -38,8 +44,16 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.psi.KtAnnotationEntry +import org.jetbrains.kotlin.psi.KtCallableDeclaration +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtConstructorCalleeExpression import org.jetbrains.kotlin.psi.KtDoubleColonExpression import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.psi.KtParameter +import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.types.model.CaptureStatus @@ -94,7 +108,29 @@ internal class KtFirTypeProvider( } override fun getKtType(ktTypeReference: KtTypeReference): KtType { - return when (val fir = ktTypeReference.getOrBuildFir(firResolveSession)) { + val parent = ktTypeReference.parent + val fir = when { + parent is KtParameter && parent.ownerFunction != null && parent.typeReference === ktTypeReference -> parent.resolveToFirSymbolOfTypeSafe( + firResolveSession, FirResolvePhase.TYPES + )?.fir?.returnTypeRef + parent is KtCallableDeclaration && (parent is KtNamedFunction || parent is KtProperty) && (parent.receiverTypeReference === ktTypeReference || parent.typeReference === ktTypeReference) -> { + val firCallable = parent.resolveToFirSymbolOfTypeSafe>( + firResolveSession, FirResolvePhase.TYPES + )?.fir + if (parent.receiverTypeReference === ktTypeReference) firCallable?.receiverParameter?.typeRef else firCallable?.returnTypeRef + } + parent is KtConstructorCalleeExpression && parent.parent is KtAnnotationEntry -> { + val firDeclaration = getFirDeclaration(parent.parent as KtAnnotationEntry, ktTypeReference) + if (firDeclaration != null) { + firDeclaration.annotations.find { it.realPsi === parent.parent }?.annotationTypeRef + ?: (firDeclaration as? FirProperty)?.backingField?.annotations?.find { it.realPsi === parent.parent }?.annotationTypeRef + } else { + ktTypeReference.getOrBuildFir(firResolveSession) + } + } + else -> ktTypeReference.getOrBuildFir(firResolveSession) + } + return when (fir) { is FirResolvedTypeRef -> fir.coneType.asKtType() is FirDelegatedConstructorCall -> fir.constructedTypeRef.coneType.asKtType() is FirTypeProjectionWithVariance -> { @@ -107,6 +143,26 @@ internal class KtFirTypeProvider( } } + private fun getFirDeclaration(annotationEntry: KtAnnotationEntry, ktTypeReference: KtTypeReference): FirMemberDeclaration? { + if (annotationEntry.typeReference !== ktTypeReference) return null + val declaration = annotationEntry.parent?.parent as? KtNamedDeclaration ?: return null + return when { + declaration is KtClassOrObject -> declaration.resolveToFirSymbolOfTypeSafe>( + firResolveSession, FirResolvePhase.TYPES + )?.fir + declaration is KtParameter && declaration.ownerFunction != null -> + declaration.resolveToFirSymbolOfTypeSafe( + firResolveSession, FirResolvePhase.TYPES + )?.fir + declaration is KtCallableDeclaration && (declaration is KtNamedFunction || declaration is KtProperty) -> { + declaration.resolveToFirSymbolOfTypeSafe>( + firResolveSession, FirResolvePhase.TYPES + )?.fir + } + else -> return null + } + } + override fun getReceiverTypeForDoubleColonExpression(expression: KtDoubleColonExpression): KtType? { return when (val fir = expression.getOrBuildFir(firResolveSession)) { is FirGetClassCall -> diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeDependentAnalysisSourceModuleTypeReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeDependentAnalysisSourceModuleTypeReferenceTestGenerated.java index 7cd931157f6..ba1edb07ccc 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeDependentAnalysisSourceModuleTypeReferenceTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeDependentAnalysisSourceModuleTypeReferenceTestGenerated.java @@ -46,6 +46,48 @@ public class FirIdeDependentAnalysisSourceModuleTypeReferenceTestGenerated exten KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/typeProvider/typeReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationEntry.kt") + public void testAnnotationEntry() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt"); + } + + @Test + @TestMetadata("annotationEntryOnParameter.kt") + public void testAnnotationEntryOnParameter() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt"); + } + + @Test + @TestMetadata("annotationOnFunction.kt") + public void testAnnotationOnFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt"); + } + + @Test + @TestMetadata("functionReceiver.kt") + public void testFunctionReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt"); + } + + @Test + @TestMetadata("functionReturn.kt") + public void testFunctionReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt"); + } + + @Test + @TestMetadata("propertyReceiver.kt") + public void testPropertyReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt"); + } + + @Test + @TestMetadata("propertyReturn.kt") + public void testPropertyReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt"); + } + @Test @TestMetadata("starProjection.kt") public void testStarProjection() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java index 7d61942b273..1c202bb6b46 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeProvider/FirIdeNormalAnalysisSourceModuleTypeReferenceTestGenerated.java @@ -46,6 +46,48 @@ public class FirIdeNormalAnalysisSourceModuleTypeReferenceTestGenerated extends KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/typeProvider/typeReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationEntry.kt") + public void testAnnotationEntry() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt"); + } + + @Test + @TestMetadata("annotationEntryOnParameter.kt") + public void testAnnotationEntryOnParameter() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt"); + } + + @Test + @TestMetadata("annotationOnFunction.kt") + public void testAnnotationOnFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt"); + } + + @Test + @TestMetadata("functionReceiver.kt") + public void testFunctionReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt"); + } + + @Test + @TestMetadata("functionReturn.kt") + public void testFunctionReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt"); + } + + @Test + @TestMetadata("propertyReceiver.kt") + public void testPropertyReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt"); + } + + @Test + @TestMetadata("propertyReturn.kt") + public void testPropertyReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt"); + } + @Test @TestMetadata("starProjection.kt") public void testStarProjection() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeProvider/FirStandaloneNormalAnalysisSourceModuleTypeReferenceTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeProvider/FirStandaloneNormalAnalysisSourceModuleTypeReferenceTestGenerated.java index 577a647a4a3..b523b8d7fe5 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeProvider/FirStandaloneNormalAnalysisSourceModuleTypeReferenceTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeProvider/FirStandaloneNormalAnalysisSourceModuleTypeReferenceTestGenerated.java @@ -46,6 +46,48 @@ public class FirStandaloneNormalAnalysisSourceModuleTypeReferenceTestGenerated e KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/typeProvider/typeReference"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test + @TestMetadata("annotationEntry.kt") + public void testAnnotationEntry() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt"); + } + + @Test + @TestMetadata("annotationEntryOnParameter.kt") + public void testAnnotationEntryOnParameter() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt"); + } + + @Test + @TestMetadata("annotationOnFunction.kt") + public void testAnnotationOnFunction() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt"); + } + + @Test + @TestMetadata("functionReceiver.kt") + public void testFunctionReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt"); + } + + @Test + @TestMetadata("functionReturn.kt") + public void testFunctionReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt"); + } + + @Test + @TestMetadata("propertyReceiver.kt") + public void testPropertyReceiver() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt"); + } + + @Test + @TestMetadata("propertyReturn.kt") + public void testPropertyReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt"); + } + @Test @TestMetadata("starProjection.kt") public void testStarProjection() throws Exception { diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt new file mode 100644 index 00000000000..3ef3cd92d4e --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.kt @@ -0,0 +1,4 @@ +annotation class Anno + +@Anno +class Sub \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.txt new file mode 100644 index 00000000000..0c6d286c45d --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntry.txt @@ -0,0 +1,2 @@ +expression: Anno +ktType: Anno diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt new file mode 100644 index 00000000000..94ce6822549 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.kt @@ -0,0 +1,3 @@ +annotation class Anno + +fun f(@Anno p: String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.txt new file mode 100644 index 00000000000..0c6d286c45d --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationEntryOnParameter.txt @@ -0,0 +1,2 @@ +expression: Anno +ktType: Anno diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt new file mode 100644 index 00000000000..791e7c0d5b6 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.kt @@ -0,0 +1,3 @@ +annotation class Anno +@Anno +fun f() {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.txt new file mode 100644 index 00000000000..0c6d286c45d --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/annotationOnFunction.txt @@ -0,0 +1,2 @@ +expression: Anno +ktType: Anno diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt new file mode 100644 index 00000000000..211539e239e --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.kt @@ -0,0 +1,3 @@ +class Foo {} + +fun Foo.f(): Boolean = false \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.txt new file mode 100644 index 00000000000..39c2d2b2141 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReceiver.txt @@ -0,0 +1,2 @@ +expression: Foo +ktType: Foo diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt new file mode 100644 index 00000000000..66b3ac2760d --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.kt @@ -0,0 +1,3 @@ +class Foo {} + +fun Foo.f(): Boolean = false \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.txt new file mode 100644 index 00000000000..8fbfd267e0b --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/functionReturn.txt @@ -0,0 +1,2 @@ +expression: Boolean +ktType: kotlin.Boolean diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt new file mode 100644 index 00000000000..7591e6b125a --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.kt @@ -0,0 +1,3 @@ +class Foo {} + +var Foo.f: Boolean = false \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.txt new file mode 100644 index 00000000000..39c2d2b2141 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReceiver.txt @@ -0,0 +1,2 @@ +expression: Foo +ktType: Foo diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt new file mode 100644 index 00000000000..62517804873 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.kt @@ -0,0 +1,3 @@ +class Foo {} + +var Foo.f: Boolean = false \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.txt b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.txt new file mode 100644 index 00000000000..8fbfd267e0b --- /dev/null +++ b/analysis/analysis-api/testData/components/typeProvider/typeReference/propertyReturn.txt @@ -0,0 +1,2 @@ +expression: Boolean +ktType: kotlin.Boolean