FIR/LC: filter out scripts for facade creation

^KTIJ-22016 Fixed
This commit is contained in:
Jinseong Jeon
2022-06-15 12:50:20 -07:00
committed by Ilya Kirillov
parent cd80bddfcd
commit b18999be82
15 changed files with 45 additions and 20 deletions
@@ -32,10 +32,11 @@ class SymbolLightClassFacadeCache(private val project: Project) {
ktFiles: List<KtFile>,
facadeClassFqName: FqName,
): KtLightClassForFacade? {
if (ktFiles.isEmpty()) return null
val key = FacadeKey(facadeClassFqName, ktFiles.toSet())
val ktFilesWithoutScript = ktFiles.filterNot { it.isScript() }
if (ktFilesWithoutScript.isEmpty()) return null
val key = FacadeKey(facadeClassFqName, ktFilesWithoutScript.toSet())
return cache.getOrPut(key) {
getOrCreateFirLightFacadeNoCache(ktFiles, facadeClassFqName)
getOrCreateFirLightFacadeNoCache(ktFilesWithoutScript, facadeClassFqName)
}
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import org.jetbrains.kotlin.asJava.LightClassTestCommon
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.renderClass
import org.jetbrains.kotlin.light.classes.symbol.base.service.withExtendedTypeRenderer
@@ -24,6 +25,7 @@ abstract class AbstractSymbolLightClassesFacadeTest(
) : AbstractSymbolLightClassesTestBase(configurator) {
override fun getRenderResult(ktFile: KtFile, testDataFile: Path, module: TestModule, project: Project): String {
val lightClasses = getFacades(project)
if (lightClasses.isEmpty()) return LightClassTestCommon.NOT_GENERATED_DIRECTIVE
return withExtendedTypeRenderer((testDataFile)) {
lightClasses.joinToString("\n\n") { it.renderClass() }
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.SyntaxTraverser
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
import org.jetbrains.kotlin.asJava.LightClassTestCommon
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.renderClass
import org.jetbrains.kotlin.light.classes.symbol.base.service.withExtendedTypeRenderer
@@ -25,6 +26,7 @@ abstract class AbstractSymbolLightClassesLoadingTest(
override fun getRenderResult(ktFile: KtFile, testDataFile: Path, module: TestModule, project: Project): String {
val lightClasses = getLightClassesFromFile(ktFile, project)
if (lightClasses.isEmpty()) return LightClassTestCommon.NOT_GENERATED_DIRECTIVE
return withExtendedTypeRenderer(testDataFile) {
lightClasses.joinToString("\n\n") { it.renderClass() }
}
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.test.framework.services.libraries.CompiledL
import org.jetbrains.kotlin.analysis.test.framework.services.libraries.CompilerExecutor
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
import org.jetbrains.kotlin.light.classes.symbol.base.service.NullabilityAnnotationSourceProvider
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
@@ -54,7 +55,9 @@ abstract class AbstractSymbolLightClassesTestBase(
if (stopIfCompilationErrorDirectivePresent && CompilerExecutor.Directives.COMPILATION_ERRORS in module.directives) {
return
}
val testDataFile = module.files.first { it.name.endsWith(".kt") }.originalFile.toPath()
val testDataFile = module.files.first {
it.originalFile.extension in DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
}.originalFile.toPath()
val ktFile = ktFiles.first()
val project = ktFile.project
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class SymbolLightClassesFacadeForLibraryTestGenerated extends AbstractSymbolLightClassesFacadeForLibraryTest {
@Test
public void testAllFilesPresentInUltraLightFacades() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightFacades"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightFacades"), Pattern.compile("^(.+)\\.(kt|kts)$"), null, true);
}
@Test
@@ -84,6 +84,12 @@ public class SymbolLightClassesFacadeForLibraryTestGenerated extends AbstractSym
runTest("compiler/testData/asJava/ultraLightFacades/properties.kt");
}
@Test
@TestMetadata("script.kts")
public void testScript() throws Exception {
runTest("compiler/testData/asJava/ultraLightFacades/script.kts");
}
@Test
@TestMetadata("simpleFunctions.kt")
public void testSimpleFunctions() throws Exception {
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class SymbolLightClassesLoadingForLibraryTestGenerated extends AbstractSymbolLightClassesLoadingForLibraryTest {
@Test
public void testAllFilesPresentInUltraLightClasses() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightClasses"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightClasses"), Pattern.compile("^(.+)\\.(kt|kts)$"), null, true);
}
@Test
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class SymbolLightClassesFacadeForSourceTestGenerated extends AbstractSymbolLightClassesFacadeForSourceTest {
@Test
public void testAllFilesPresentInUltraLightFacades() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightFacades"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightFacades"), Pattern.compile("^(.+)\\.(kt|kts)$"), null, true);
}
@Test
@@ -84,6 +84,12 @@ public class SymbolLightClassesFacadeForSourceTestGenerated extends AbstractSymb
runTest("compiler/testData/asJava/ultraLightFacades/properties.kt");
}
@Test
@TestMetadata("script.kts")
public void testScript() throws Exception {
runTest("compiler/testData/asJava/ultraLightFacades/script.kts");
}
@Test
@TestMetadata("simpleFunctions.kt")
public void testSimpleFunctions() throws Exception {
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
public class SymbolLightClassesLoadingForSourceTestGenerated extends AbstractSymbolLightClassesLoadingForSourceTest {
@Test
public void testAllFilesPresentInUltraLightClasses() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightClasses"), Pattern.compile("^(.+)\\.(kt)$"), null, true);
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/asJava/ultraLightClasses"), Pattern.compile("^(.+)\\.(kt|kts)$"), null, true);
}
@Test