Analysis API: add test for getReturnExpressionTargetSymbol

Also fix FIR and FE1.0 implementations.
This commit is contained in:
Tianyu Geng
2021-11-16 19:59:43 -08:00
committed by Ilya Kirillov
parent 7aef45d5cf
commit d0d1c8c4b9
16 changed files with 269 additions and 27 deletions
@@ -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<FirReturnExpression>(firResolveState) ?: return null
val firTargetSymbol = fir.target.labeledElement
if (firTargetSymbol is FirErrorFunction) return null
return firSymbolBuilder.callableBuilder.buildCallableSymbol(firTargetSymbol)
}
@@ -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)
@@ -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");
}
}