diff --git a/.idea/vcs.xml b/.idea/vcs.xml index cfc97b321d9..9d7262701af 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -44,5 +44,6 @@ + \ No newline at end of file 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 a3678efb1f4..65662187fba 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 @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.components.KtExpressionTypeProvider -import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode +import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionTypeProvider/AbstractKtFe10DeclarationReturnTypeTest.kt b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionTypeProvider/AbstractKtFe10DeclarationReturnTypeTest.kt new file mode 100644 index 00000000000..e853e173d1a --- /dev/null +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionTypeProvider/AbstractKtFe10DeclarationReturnTypeTest.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionTypeProvider + +import org.jetbrains.kotlin.analysis.api.descriptors.test.KtFe10FrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.components.expressionTypeProvider.AbstractDeclarationReturnTypeTest + +abstract class AbstractKtFe10DeclarationReturnTypeTest : AbstractDeclarationReturnTypeTest(KtFe10FrontendApiTestConfiguratorService) \ No newline at end of file diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionTypeProvider/KtFe10DeclarationReturnTypeTestGenerated.java b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionTypeProvider/KtFe10DeclarationReturnTypeTestGenerated.java new file mode 100644 index 00000000000..563dcced31d --- /dev/null +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionTypeProvider/KtFe10DeclarationReturnTypeTestGenerated.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionTypeProvider; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType") +@TestDataPath("$PROJECT_ROOT") +public class KtFe10DeclarationReturnTypeTestGenerated extends AbstractKtFe10DeclarationReturnTypeTest { + @Test + public void testAllFilesPresentInDeclarationReturnType() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("declarationInPrimaryConstructor.kt") + public void testDeclarationInPrimaryConstructor() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.kt"); + } + + @Test + @TestMetadata("delegateProperties.kt") + public void testDelegateProperties() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.kt"); + } + + @Test + @TestMetadata("funtionType.kt") + public void testFuntionType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.kt"); + } + + @Test + @TestMetadata("localDeclarations.kt") + public void testLocalDeclarations() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.kt"); + } + + @Test + @TestMetadata("overriddenMember.kt") + public void testOverriddenMember() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.kt"); + } + + @Test + @TestMetadata("propertyAccessor.kt") + public void testPropertyAccessor() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.kt"); + } + + @Test + @TestMetadata("simpleDeclaration.kt") + public void testSimpleDeclaration() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.kt"); + } + + @Test + @TestMetadata("typeParameters.kt") + public void testTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.kt"); + } +} diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionTypeProvider/AbstractFirDeclarationReturnTypeTest.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionTypeProvider/AbstractFirDeclarationReturnTypeTest.kt new file mode 100644 index 00000000000..ff230ca9862 --- /dev/null +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionTypeProvider/AbstractFirDeclarationReturnTypeTest.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.fir.components.expressionTypeProvider + +import org.jetbrains.kotlin.analysis.api.fir.FirFrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.components.expressionTypeProvider.AbstractDeclarationReturnTypeTest + +abstract class AbstractFirDeclarationReturnTypeTest : AbstractDeclarationReturnTypeTest(FirFrontendApiTestConfiguratorService) \ No newline at end of file diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionTypeProvider/FirDeclarationReturnTypeTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionTypeProvider/FirDeclarationReturnTypeTestGenerated.java new file mode 100644 index 00000000000..f8df78e9695 --- /dev/null +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionTypeProvider/FirDeclarationReturnTypeTestGenerated.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.fir.components.expressionTypeProvider; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType") +@TestDataPath("$PROJECT_ROOT") +public class FirDeclarationReturnTypeTestGenerated extends AbstractFirDeclarationReturnTypeTest { + @Test + public void testAllFilesPresentInDeclarationReturnType() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("declarationInPrimaryConstructor.kt") + public void testDeclarationInPrimaryConstructor() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.kt"); + } + + @Test + @TestMetadata("delegateProperties.kt") + public void testDelegateProperties() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.kt"); + } + + @Test + @TestMetadata("funtionType.kt") + public void testFuntionType() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.kt"); + } + + @Test + @TestMetadata("localDeclarations.kt") + public void testLocalDeclarations() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.kt"); + } + + @Test + @TestMetadata("overriddenMember.kt") + public void testOverriddenMember() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.kt"); + } + + @Test + @TestMetadata("propertyAccessor.kt") + public void testPropertyAccessor() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.kt"); + } + + @Test + @TestMetadata("simpleDeclaration.kt") + public void testSimpleDeclaration() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.kt"); + } + + @Test + @TestMetadata("typeParameters.kt") + public void testTypeParameters() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.kt"); + } +} diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/commonTestUtils.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/commonTestUtils.kt index 5dc01f188f1..ec61d8a6980 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/commonTestUtils.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/commonTestUtils.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.analyse import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn +import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclarationWithBody import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -45,4 +46,8 @@ fun KtSymbol.getNameWithPositionString(): String { fun String.indented(indent: Int): String { val indentString = " ".repeat(indent) return indentString + replace("\n", "\n$indentString") -} \ No newline at end of file +} + +fun KtDeclaration.getNameWithPositionString(): String { + return (presentation?.presentableText ?: name ?: this::class.simpleName) + "@" + position() +} diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionTypeProvider/AbstractDeclarationReturnTypeTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionTypeProvider/AbstractDeclarationReturnTypeTest.kt new file mode 100644 index 00000000000..97adf009e81 --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionTypeProvider/AbstractDeclarationReturnTypeTest.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.impl.base.test.components.expressionTypeProvider + +import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.getNameWithPositionString +import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleFileTest +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractDeclarationReturnTypeTest( + configurator: FrontendApiTestConfiguratorService +) : AbstractHLApiSingleFileTest(configurator) { + override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { + val actual = buildString { + ktFile.accept(object : KtTreeVisitor() { + override fun visitDeclaration(dcl: KtDeclaration, data: Int): Void? { + if (dcl is KtTypeParameter) return null + append(" ".repeat(data)) + if (dcl is KtClassLikeDeclaration) { + appendLine(dcl.getNameWithPositionString()) + } else { + analyseForTest(dcl) { + val returnType = dcl.getReturnKtType() + append(dcl.getNameWithPositionString()) + append(" : ") + appendLine(returnType.render()) + } + } + return super.visitDeclaration(dcl, data + 2) + } + }, 0) + } + testServices.assertions.assertEqualsToTestDataFileSibling(actual) + } +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.descriptors.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.descriptors.txt new file mode 100644 index 00000000000..e5ab048d694 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.descriptors.txt @@ -0,0 +1,4 @@ +Foo@(1,1) + Foo@(1,13) : kotlin.Unit + t@(1,14) : T + i@(1,24) : kotlin.Int diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.kt new file mode 100644 index 00000000000..7849ee83a2c --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.kt @@ -0,0 +1 @@ +class Foo(val t: T, val i: Int) \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.txt new file mode 100644 index 00000000000..5e77ec82dbf --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/declarationInPrimaryConstructor.txt @@ -0,0 +1,4 @@ +Foo@(1,1) + Foo@(1,13) : Foo + t@(1,14) : T + i@(1,24) : kotlin.Int diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.descriptors.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.descriptors.txt new file mode 100644 index 00000000000..aa20b734ab0 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.descriptors.txt @@ -0,0 +1,10 @@ +lazy@(3,1) : Lazy + initializer@(3,14) : () -> T +Lazy@(5,1) + Lazy@(5,14) : kotlin.Unit + value@(5,15) : T +getValue@(7,1) : T + thisRef@(7,42) : kotlin.Any? + property@(7,57) : kotlin.reflect.KProperty<*> +A@(9,1) + i@(10,5) : kotlin.Int diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.kt new file mode 100644 index 00000000000..08bb409f7d9 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.kt @@ -0,0 +1,13 @@ +import kotlin.reflect.KProperty + +fun lazy(initializer: () -> T): Lazy = Lazy(initializer()) + +class Lazy(val value: T) + +inline operator fun Lazy.getValue(thisRef: Any?, property: KProperty<*>): T = value + +class A { + val i by lazy { + 1 + } +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.txt new file mode 100644 index 00000000000..2f215e4e391 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/delegateProperties.txt @@ -0,0 +1,10 @@ +lazy@(3,1) : Lazy + initializer@(3,14) : () -> T +Lazy@(5,1) + Lazy@(5,14) : Lazy + value@(5,15) : T +getValue@(7,1) : T + thisRef@(7,42) : kotlin.Any? + property@(7,57) : kotlin.reflect.KProperty<*> +A@(9,1) + i@(10,5) : kotlin.Int diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.kt new file mode 100644 index 00000000000..24615f5d318 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.kt @@ -0,0 +1,4 @@ +val f1: () -> Unit = {} +val f2 = {} +val f3: String.() -> String = { this } +fun f4(): Int.(T) -> String = { "" } \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.txt new file mode 100644 index 00000000000..25194d56768 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/funtionType.txt @@ -0,0 +1,5 @@ +f1@(1,1) : () -> kotlin.Unit +f2@(2,1) : () -> kotlin.Unit +f3@(3,1) : kotlin.String.() -> kotlin.String +f4@(4,1) : kotlin.Int.(T) -> kotlin.String + KtParameter@(4,20) : T diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.kt new file mode 100644 index 00000000000..f08fd04a186 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.kt @@ -0,0 +1,20 @@ +fun test1() { + val i = 1 + fun foo() = "" + val f1 = {} + val f2: String.(Int) -> String = { this + it } +} + +fun test2(t1: T) { + val t2 = t1 + fun foo() = t1 + val f = { t1 } +} + +fun test3( + val i: Int = run { + val j = 1 + j + } +) { +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.txt new file mode 100644 index 00000000000..c9f494cf134 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/localDeclarations.txt @@ -0,0 +1,14 @@ +test1@(1,1) : kotlin.Unit + i@(2,5) : kotlin.Int + foo@(3,5) : kotlin.String + f1@(4,5) : () -> kotlin.Unit + f2@(5,5) : kotlin.String.(kotlin.Int) -> kotlin.String + KtParameter@(5,21) : kotlin.Int +test2@(8,1) : kotlin.Unit + t1@(8,15) : T + t2@(9,5) : T + foo@(10,5) : T + f@(11,5) : () -> T +test3@(14,1) : kotlin.Unit + i@(15,5) : kotlin.Int + j@(16,9) : kotlin.Int diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.kt new file mode 100644 index 00000000000..1cd76684230 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.kt @@ -0,0 +1,17 @@ +interface A + +class B: A + +abstract class Super { + abstract val a: A + abstract val b: B + abstract fun getA(): A + abstract fun getB(): B +} + +class Sub: { + override val a = B() + override val b = B() + override fun getA() = B() + override fun getB() = B() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.txt new file mode 100644 index 00000000000..caca7b58aab --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/overriddenMember.txt @@ -0,0 +1,12 @@ +A@(1,1) +B@(3,1) +Super@(5,1) + a@(6,5) : A + b@(7,5) : B + getA@(8,5) : A + getB@(9,5) : B +Sub@(12,1) + a@(13,5) : B + b@(14,5) : B + getA@(15,5) : B + getB@(16,5) : B diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.descriptors.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.descriptors.txt new file mode 100644 index 00000000000..3c6b5cd65a4 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.descriptors.txt @@ -0,0 +1,9 @@ +i@(1,1) : kotlin.Int + KtPropertyAccessor@(2,5) : kotlin.Int + KtPropertyAccessor@(3,5) : kotlin.Unit + value@(3,9) : kotlin.Unit +A@(5,1) + j@(6,5) : kotlin.Int + KtPropertyAccessor@(7,9) : kotlin.Int + KtPropertyAccessor@(8,9) : kotlin.Unit + value@(8,13) : kotlin.Unit diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.kt new file mode 100644 index 00000000000..234b600c54e --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.kt @@ -0,0 +1,9 @@ +var i: Int + get() = 1 + set(value) {} + +class A { + val j: Int + get() = 2 + set(value) {} +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.txt new file mode 100644 index 00000000000..39aea790d57 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/propertyAccessor.txt @@ -0,0 +1,9 @@ +i@(1,1) : kotlin.Int + KtPropertyAccessor@(2,5) : kotlin.Int + KtPropertyAccessor@(3,5) : kotlin.Unit + value@(3,9) : kotlin.Int +A@(5,1) + j@(6,5) : kotlin.Int + KtPropertyAccessor@(7,9) : kotlin.Int + KtPropertyAccessor@(8,9) : kotlin.Unit + value@(8,13) : kotlin.Int diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.kt new file mode 100644 index 00000000000..0140e3fd255 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.kt @@ -0,0 +1,8 @@ +val i: Int +val j = 1 +val s = "" +fun procedure() {} +fun procedure(i: Int) {} +fun returnIntOne() = 1 +fun id(i: Int) = i +fun throwException() = throw Exception() \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.txt new file mode 100644 index 00000000000..b715fd8c785 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/simpleDeclaration.txt @@ -0,0 +1,10 @@ +i@(1,1) : kotlin.Int +j@(2,1) : kotlin.Int +s@(3,1) : kotlin.String +procedure@(4,1) : kotlin.Unit +procedure@(5,1) : kotlin.Unit + i@(5,15) : kotlin.Int +returnIntOne@(6,1) : kotlin.Int +id@(7,1) : kotlin.Int + i@(7,8) : kotlin.Int +throwException@(8,1) : kotlin.Nothing diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.kt new file mode 100644 index 00000000000..754d24aa499 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.kt @@ -0,0 +1,8 @@ +fun id(t: T) = t +fun > C.mySize = size +fun foo(): Foo = Foo() +class Foo { + val t: T + fun getT(): T + fun getR(): R +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.txt new file mode 100644 index 00000000000..666b1dee3ee --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/declarationReturnType/typeParameters.txt @@ -0,0 +1,8 @@ +id@(1,1) : T + t@(1,12) : T +mySize@(2,1) : kotlin.Int +foo@(3,1) : Foo +Foo@(4,1) + t@(5,5) : T + getT@(6,5) : T + getR@(7,5) : R diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt index e9f074b9f94..e05c705936e 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.test.components.symbolDecla import org.jetbrains.kotlin.analysis.api.descriptors.test.components.symbolDeclarationRenderer.AbstractKtFe10RendererTest import org.jetbrains.kotlin.analysis.api.descriptors.test.components.typeCreator.AbstractKtFe10TypeParameterTypeTest import org.jetbrains.kotlin.analysis.api.descriptors.test.components.typeProvider.AbstractKtFe10HasCommonSubtypeTest +import org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionTypeProvider.AbstractKtFe10DeclarationReturnTypeTest import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByFqNameTest import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByPsiTest import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByReferenceTest @@ -30,6 +31,7 @@ import org.jetbrains.kotlin.analysis.api.fir.components.callResolver.AbstractFir import org.jetbrains.kotlin.analysis.api.fir.components.compileTimeConstantProvider.AbstractFirCompileTimeConstantEvaluatorTest import org.jetbrains.kotlin.analysis.api.fir.components.expressionInfoProvider.AbstractFirReturnTargetSymbolTest import org.jetbrains.kotlin.analysis.api.fir.components.expressionInfoProvider.AbstractFirWhenMissingCasesTest +import org.jetbrains.kotlin.analysis.api.fir.components.expressionTypeProvider.AbstractFirDeclarationReturnTypeTest import org.jetbrains.kotlin.analysis.api.fir.components.expressionTypeProvider.AbstractFirExpectedExpressionTypeTest import org.jetbrains.kotlin.analysis.api.fir.components.expressionTypeProvider.AbstractFirHLExpressionTypeTest import org.jetbrains.kotlin.analysis.api.fir.components.importOptimizer.AbstractHLImportOptimizerTest @@ -186,6 +188,12 @@ private fun TestGroupSuite.generateAnalysisApiComponentsTests() { ) { model("expressionType") } + + test( + fir = AbstractFirDeclarationReturnTypeTest::class, fe10 = AbstractKtFe10DeclarationReturnTypeTest::class + ) { + model("declarationReturnType") + } } component("importOptimizer") {