FIR IDE: add APIs about FunctionClassKind

This commit is contained in:
Jinseong Jeon
2021-11-03 16:26:12 -07:00
committed by Ilya Kirillov
parent d029e84b96
commit 6d150fb7a5
16 changed files with 202 additions and 1 deletions
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.types.KtFirType
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
import org.jetbrains.kotlin.fir.types.functionClassKind
internal class KtFirTypeInfoProvider(
override val analysisSession: KtFirAnalysisSession,
@@ -25,5 +27,10 @@ internal class KtFirTypeInfoProvider(
return samResolver.getFunctionTypeForPossibleSamType(coneType) != null
}
override fun getFunctionClassKind(type: KtType): FunctionClassKind? {
val coneType = (type as KtFirType).coneType
return coneType.functionClassKind(analysisSession.rootModuleSession)
}
override fun canBeNull(type: KtType): Boolean = (type as KtFirType).coneType.canBeNull
}
@@ -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
import org.jetbrains.kotlin.analysis.api.fir.FirFrontendApiTestConfiguratorService
import org.jetbrains.kotlin.analysis.api.impl.base.test.components.AbstractFunctionClassKindTest
abstract class AbstractFirFunctionClassKindTest : AbstractFunctionClassKindTest(FirFrontendApiTestConfiguratorService)
@@ -0,0 +1,50 @@
/*
* 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;
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/functionClassKind")
@TestDataPath("$PROJECT_ROOT")
public class FirFunctionClassKindTestGenerated extends AbstractFirFunctionClassKindTest {
@Test
public void testAllFilesPresentInFunctionClassKind() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/functionClassKind"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("function.kt")
public void testFunction() throws Exception {
runTest("analysis/analysis-api/testData/components/functionClassKind/function.kt");
}
@Test
@TestMetadata("kFunction.kt")
public void testKFunction() throws Exception {
runTest("analysis/analysis-api/testData/components/functionClassKind/kFunction.kt");
}
@Test
@TestMetadata("kSuspendFunction.kt")
public void testKSuspendFunction() throws Exception {
runTest("analysis/analysis-api/testData/components/functionClassKind/kSuspendFunction.kt");
}
@Test
@TestMetadata("suspendFunction.kt")
public void testSuspendFunction() throws Exception {
runTest("analysis/analysis-api/testData/components/functionClassKind/suspendFunction.kt");
}
}