From d0d1c8c4b9d00c46cfce829077dd7e3aeadd08a8 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Tue, 16 Nov 2021 19:59:43 -0800 Subject: [PATCH] Analysis API: add test for getReturnExpressionTargetSymbol Also fix FIR and FE1.0 implementations. --- .../KtFe10ExpressionInfoProvider.kt | 8 ++- .../AbstractKtFe10ReturnTargetSymbolTest.kt | 11 ++++ ...KtFe10ReturnTargetSymbolTestGenerated.java | 44 ++++++++++++++ .../components/KtFirExpressionInfoProvider.kt | 2 + .../AbstractFirReturnTargetSymbolTest.kt | 11 ++++ .../FirReturnTargetSymbolTestGenerated.java | 44 ++++++++++++++ .../api/impl/base/test/commonTestUtils.kt | 21 ++++++- .../AbstractReturnTargetSymbolTest.kt | 58 +++++++++++++++++++ .../labeledReturn.kt | 22 +++++++ .../normalReturn.kt | 36 ++++++++++++ ...returnFromFunctionViaLambdaWithoutLabel.kt | 8 --- .../returnFromFunctionWithLabel.kt | 3 - .../returnFromFunctionWithoutLabel.kt | 3 - .../returnFromLambdaWithLabel.kt | 8 --- .../unresolvedReturn.kt | 11 ++++ .../tests/analysis/api/analysisApi.kt | 6 +- 16 files changed, 269 insertions(+), 27 deletions(-) create mode 100644 analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/AbstractKtFe10ReturnTargetSymbolTest.kt create mode 100644 analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/KtFe10ReturnTargetSymbolTestGenerated.java create mode 100644 analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/AbstractFirReturnTargetSymbolTest.kt create mode 100644 analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/FirReturnTargetSymbolTestGenerated.java create mode 100644 analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionInfoProvider/AbstractReturnTargetSymbolTest.kt create mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/labeledReturn.kt create mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/normalReturn.kt delete mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionViaLambdaWithoutLabel.kt delete mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithLabel.kt delete mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithoutLabel.kt delete mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromLambdaWithLabel.kt create mode 100644 analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/unresolvedReturn.kt diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionInfoProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionInfoProvider.kt index 6e5859379ec..90877e80954 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionInfoProvider.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10ExpressionInfoProvider.kt @@ -6,15 +6,17 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components import org.jetbrains.kotlin.analysis.api.components.KtExpressionInfoProvider -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.impl.barebone.parentOfType import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken import org.jetbrains.kotlin.analysis.api.withValidityAssertion import org.jetbrains.kotlin.cfg.WhenChecker import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtWhenExpression import org.jetbrains.kotlin.resolve.BindingContext @@ -27,7 +29,9 @@ internal class KtFe10ExpressionInfoProvider( override fun getReturnExpressionTargetSymbol(returnExpression: KtReturnExpression): KtCallableSymbol? = withValidityAssertion { val bindingContext = analysisContext.analyze(returnExpression, AnalysisMode.PARTIAL) - val targetLabel = returnExpression.getTargetLabel() ?: return null + val targetLabel = returnExpression.getTargetLabel() + ?: return returnExpression.parentOfType() + ?.let { with(analysisSession) { it.getSymbol() as? KtCallableSymbol } } val labelTarget = bindingContext[BindingContext.LABEL_TARGET, targetLabel] as? KtDeclaration ?: return null return with(analysisSession) { labelTarget.getSymbol() as? KtCallableSymbol } } diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/AbstractKtFe10ReturnTargetSymbolTest.kt b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/AbstractKtFe10ReturnTargetSymbolTest.kt new file mode 100644 index 00000000000..ab6833a9e7f --- /dev/null +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/AbstractKtFe10ReturnTargetSymbolTest.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.expressionInfoProvider + +import org.jetbrains.kotlin.analysis.api.descriptors.test.KtFe10FrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.components.expressionInfoProvider.AbstractReturnTargetSymbolTest + +abstract class AbstractKtFe10ReturnTargetSymbolTest : AbstractReturnTargetSymbolTest(KtFe10FrontendApiTestConfiguratorService) \ No newline at end of file diff --git a/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/KtFe10ReturnTargetSymbolTestGenerated.java b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/KtFe10ReturnTargetSymbolTestGenerated.java new file mode 100644 index 00000000000..4f9fb809870 --- /dev/null +++ b/analysis/analysis-api-fe10/tests/org/jetbrains/kotlin/analysis/api/descriptors/test/components/expressionInfoProvider/KtFe10ReturnTargetSymbolTestGenerated.java @@ -0,0 +1,44 @@ +/* + * 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.expressionInfoProvider; + +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/expressionInfoProvider/returnExpressionTargetSymbol") +@TestDataPath("$PROJECT_ROOT") +public class KtFe10ReturnTargetSymbolTestGenerated extends AbstractKtFe10ReturnTargetSymbolTest { + @Test + public void testAllFilesPresentInReturnExpressionTargetSymbol() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("labeledReturn.kt") + public void testLabeledReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/labeledReturn.kt"); + } + + @Test + @TestMetadata("normalReturn.kt") + public void testNormalReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/normalReturn.kt"); + } + + @Test + @TestMetadata("unresolvedReturn.kt") + public void testUnresolvedReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/unresolvedReturn.kt"); + } +} diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionInfoProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionInfoProvider.kt index d5cef691d18..14ac8934a93 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionInfoProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionInfoProvider.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.components.KtExpressionInfoProvider import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken +import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.psi.KtReturnExpression import org.jetbrains.kotlin.psi.KtWhenExpression @@ -24,6 +25,7 @@ internal class KtFirExpressionInfoProvider( override fun getReturnExpressionTargetSymbol(returnExpression: KtReturnExpression): KtCallableSymbol? { val fir = returnExpression.getOrBuildFirSafe(firResolveState) ?: return null val firTargetSymbol = fir.target.labeledElement + if (firTargetSymbol is FirErrorFunction) return null return firSymbolBuilder.callableBuilder.buildCallableSymbol(firTargetSymbol) } diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/AbstractFirReturnTargetSymbolTest.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/AbstractFirReturnTargetSymbolTest.kt new file mode 100644 index 00000000000..e328ab335e9 --- /dev/null +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/AbstractFirReturnTargetSymbolTest.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.expressionInfoProvider + +import org.jetbrains.kotlin.analysis.api.fir.FirFrontendApiTestConfiguratorService +import org.jetbrains.kotlin.analysis.api.impl.base.test.components.expressionInfoProvider.AbstractReturnTargetSymbolTest + +abstract class AbstractFirReturnTargetSymbolTest : AbstractReturnTargetSymbolTest(FirFrontendApiTestConfiguratorService) \ No newline at end of file diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/FirReturnTargetSymbolTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/FirReturnTargetSymbolTestGenerated.java new file mode 100644 index 00000000000..f290daa6b44 --- /dev/null +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/expressionInfoProvider/FirReturnTargetSymbolTestGenerated.java @@ -0,0 +1,44 @@ +/* + * 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.expressionInfoProvider; + +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/expressionInfoProvider/returnExpressionTargetSymbol") +@TestDataPath("$PROJECT_ROOT") +public class FirReturnTargetSymbolTestGenerated extends AbstractFirReturnTargetSymbolTest { + @Test + public void testAllFilesPresentInReturnExpressionTargetSymbol() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("labeledReturn.kt") + public void testLabeledReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/labeledReturn.kt"); + } + + @Test + @TestMetadata("normalReturn.kt") + public void testNormalReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/normalReturn.kt"); + } + + @Test + @TestMetadata("unresolvedReturn.kt") + public void testUnresolvedReturn() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/unresolvedReturn.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 f3c5efa13b4..9c30879d886 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 @@ -7,9 +7,14 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.util.Computable +import com.intellij.psi.PsiElement 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.KtDeclarationWithBody import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtNamedDeclaration inline fun runReadAction(crossinline runnable: () -> T): T { return ApplicationManager.getApplication().runReadAction(Computable { runnable() }) @@ -21,4 +26,18 @@ fun executeOnPooledThreadInReadAction(action: () -> R): R = inline fun analyseOnPooledThreadInReadAction(context: KtElement, crossinline action: KtAnalysisSession.() -> R): R = executeOnPooledThreadInReadAction { analyse(context) { action() } - } \ No newline at end of file + } + +fun PsiElement?.position(): String { + if (this == null) return "(unknown)" + return offsetToLineAndColumn(containingFile.viewProvider.document, textRange.startOffset).toString() +} + +fun KtSymbol.getNameWithPositionString(): String { + return when (val psi = this.psi) { + is KtDeclarationWithBody -> psi.name + is KtNamedDeclaration -> psi.name + null -> "null" + else -> psi::class.simpleName + } + "@" + psi.position() +} \ No newline at end of file diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionInfoProvider/AbstractReturnTargetSymbolTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionInfoProvider/AbstractReturnTargetSymbolTest.kt new file mode 100644 index 00000000000..ecffcd7dacf --- /dev/null +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/components/expressionInfoProvider/AbstractReturnTargetSymbolTest.kt @@ -0,0 +1,58 @@ +/* + * 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.expressionInfoProvider + +import com.intellij.psi.PsiComment +import com.intellij.psi.PsiElement +import com.intellij.psi.impl.source.tree.LeafPsiElement +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.KtFile +import org.jetbrains.kotlin.psi.KtReturnExpression +import org.jetbrains.kotlin.psi.KtTreeVisitorVoid +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractReturnTargetSymbolTest( + configurator: FrontendApiTestConfiguratorService +) : AbstractHLApiSingleFileTest(configurator) { + val commentRegex = Regex("""/\* (.+@\(.+\)|null) \*/""") + override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) { + super.doTestByFileStructure(ktFile, module, testServices) + val original = ktFile.text + val actual = buildString { + ktFile.accept(object : KtTreeVisitorVoid() { + override fun visitElement(element: PsiElement) { + if (element is LeafPsiElement) { + append(element.text) + } + super.visitElement(element) + } + + override fun visitReturnExpression(expression: KtReturnExpression) { + expression.returnKeyword.accept(this) + expression.labeledExpression?.accept(this) + analyseForTest(expression) { + val target = expression.getReturnTargetSymbol() + append("/* " + target?.getNameWithPositionString() + " */") + } + expression.returnedExpression?.accept(this) + } + + override fun visitComment(comment: PsiComment) { + // Skip such comments so that test become idempotent + if (comment.text.matches(commentRegex)) return + super.visitComment(comment) + } + }) + } + if (actual != original) { + testServices.assertions.assertEqualsToFile(testDataPath, actual) + } + } +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/labeledReturn.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/labeledReturn.kt new file mode 100644 index 00000000000..8d4377fa880 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/labeledReturn.kt @@ -0,0 +1,22 @@ +fun test() { + run { + return@run/* @(2,9) */ + } + run { + return@test/* test@(1,1) */ + } + run a@{ + return@a/* @(8,11) */ + } + run { + with("") { + return@with/* @(12,18) */ + return@run/* @(11,9) */ + return@test/* test@(1,1) */ + } + } +} + +val i = a@{ + return@a/* @(20,11) */ +} diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/normalReturn.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/normalReturn.kt new file mode 100644 index 00000000000..a3d86b8e127 --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/normalReturn.kt @@ -0,0 +1,36 @@ +fun foo() { + return/* foo@(1,1) */ +} + +fun bar(): String { + return/* bar@(5,1) */"" +} + +fun baz(): Int { + if (true) { + return/* baz@(9,1) */1 + } else { + return/* baz@(9,1) */2 + } +} + +fun quux(): Int { + while(true) { + return/* quux@(17,1) */1 + } + return/* quux@(17,1) */2 +} + +fun test() { + run { + return/* test@(24,1) */ + } + fun() { + return/* null@(28,5) */ + } + run { + with("") { + return/* test@(24,1) */ + } + } +} diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionViaLambdaWithoutLabel.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionViaLambdaWithoutLabel.kt deleted file mode 100644 index 3a56362d76f..00000000000 --- a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionViaLambdaWithoutLabel.kt +++ /dev/null @@ -1,8 +0,0 @@ -fun /* EXPECTED_TARGET */x(): Int { - receiveLambda { - return 1 - } - return 2 -} - -inline fun receiveLambda(x: () -> Unit){} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithLabel.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithLabel.kt deleted file mode 100644 index a241be8a3e7..00000000000 --- a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithLabel.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun /* EXPECTED_TARGET */x(): Int { - return 1 -} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithoutLabel.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithoutLabel.kt deleted file mode 100644 index 8c33f8dfe24..00000000000 --- a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromFunctionWithoutLabel.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun /* EXPECTED_TARGET */x(): Int { - return 1 -} diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromLambdaWithLabel.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromLambdaWithLabel.kt deleted file mode 100644 index fa270faa0ce..00000000000 --- a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/returnFromLambdaWithLabel.kt +++ /dev/null @@ -1,8 +0,0 @@ -fun x(): Int { - receiveLambda { /* EXPECTED_TARGET */ - return@receiveLambda 1 - } - return 2 -} - -fun receiveLambda(x: () -> Int){} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/unresolvedReturn.kt b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/unresolvedReturn.kt new file mode 100644 index 00000000000..2162924168c --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionInfoProvider/returnExpressionTargetSymbol/unresolvedReturn.kt @@ -0,0 +1,11 @@ +fun test() { + return@blah/* null */ +} + +val i = { + return/* null */ +} + +val i = { + return@i/* null */ +} 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 273b335a8f9..cec5703b9e3 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 @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.generators.tests.analysis.api import org.jetbrains.kotlin.analysis.api.descriptors.test.components.callResolver.AbstractKtFe10ResolveCallTest +import org.jetbrains.kotlin.analysis.api.descriptors.test.components.compileTimeConstantProvider.AbstractKtFe10CompileTimeConstantEvaluatorTest +import org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionInfoProvider.AbstractKtFe10ReturnTargetSymbolTest import org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionInfoProvider.AbstractKtFe10WhenMissingCasesTest import org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionTypeProvider.AbstractKtFe10ExpectedExpressionTypeTest import org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionTypeProvider.AbstractKtFe10HLExpressionTypeTest @@ -14,13 +16,13 @@ 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.compileTimeConstantProvider.AbstractKtFe10CompileTimeConstantEvaluatorTest 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 import org.jetbrains.kotlin.analysis.api.fir.AbstractFirReferenceResolveTest import org.jetbrains.kotlin.analysis.api.fir.components.callResolver.AbstractFirResolveCallTest 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.AbstractFirExpectedExpressionTypeTest import org.jetbrains.kotlin.analysis.api.fir.components.expressionTypeProvider.AbstractFirHLExpressionTypeTest @@ -128,7 +130,7 @@ private fun TestGroupSuite.generateAnalysisApiComponentsTests() { } test( - fir = null /*TODO*/, fe10 = null + fir = AbstractFirReturnTargetSymbolTest::class, fe10 = AbstractKtFe10ReturnTargetSymbolTest::class ) { model("returnExpressionTargetSymbol") }