FIR/LC: filter out scripts for facade creation

^KTIJ-22016 Fixed
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/caches/SymbolLightClassFacadeCache.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/caches/SymbolLightClassFacadeCache.kt
index e239156..4b20cd9 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/caches/SymbolLightClassFacadeCache.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/caches/SymbolLightClassFacadeCache.kt
@@ -32,10 +32,11 @@
         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)
         }
     }
 
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesFacadeTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesFacadeTest.kt
index 6725972..6f7fa27 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesFacadeTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesFacadeTest.kt
@@ -9,6 +9,7 @@
 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 @@
 ) : 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() }
         }
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesLoadingTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesLoadingTest.kt
index cfd5106..e520333 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesLoadingTest.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesLoadingTest.kt
@@ -9,6 +9,7 @@
 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 @@
 
     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() }
         }
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesTestBase.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesTestBase.kt
index 73cf23d..514fe72 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesTestBase.kt
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesTestBase.kt
@@ -13,6 +13,7 @@
 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 @@
         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
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesFacadeForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesFacadeForLibraryTestGenerated.java
index dcc0797..416a8cb 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesFacadeForLibraryTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesFacadeForLibraryTestGenerated.java
@@ -21,7 +21,7 @@
 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
@@ -85,6 +85,12 @@
     }
 
     @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 {
         runTest("compiler/testData/asJava/ultraLightFacades/simpleFunctions.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesLoadingForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesLoadingForLibraryTestGenerated.java
index a547ea0..3bcca71 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesLoadingForLibraryTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesLoadingForLibraryTestGenerated.java
@@ -21,7 +21,7 @@
 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
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesFacadeForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesFacadeForSourceTestGenerated.java
index 9d90dd2..e3b60a3 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesFacadeForSourceTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesFacadeForSourceTestGenerated.java
@@ -21,7 +21,7 @@
 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
@@ -85,6 +85,12 @@
     }
 
     @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 {
         runTest("compiler/testData/asJava/ultraLightFacades/simpleFunctions.kt");
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesLoadingForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesLoadingForSourceTestGenerated.java
index ba70e5b..038bc81 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesLoadingForSourceTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesLoadingForSourceTestGenerated.java
@@ -21,7 +21,7 @@
 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
diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt
index d71194e..3877e32 100644
--- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt
+++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.kt
@@ -61,16 +61,19 @@
 
     abstract val useUltraLightClasses: Boolean
 
+    internal fun canCreateUltraLightClassForFacade(
+        files: Collection<KtFile>,
+    ): Boolean {
+        return useUltraLightClasses && files.none { it.isScript() }
+    }
+
     fun createUltraLightClassForFacade(
         manager: PsiManager,
         facadeClassFqName: FqName,
         lightClassDataCache: CachedValue<LightClassDataHolder.ForFacade>,
         files: Collection<KtFile>,
     ): KtUltraLightClassForFacade? {
-
-        if (!useUltraLightClasses) return null
-
-        if (files.any { it.isScript() }) return null
+        if (!canCreateUltraLightClassForFacade(files)) return null
 
         val filesToSupports: List<Pair<KtFile, KtUltraLightSupport>> = files.map {
             it to getUltraLightClassSupport(it)
diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacadeImpl.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacadeImpl.kt
index 3b0a02c..6de8783 100644
--- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacadeImpl.kt
+++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForFacadeImpl.kt
@@ -233,7 +233,7 @@
         fun createForFacadeNoCache(fqName: FqName, searchScope: GlobalSearchScope, project: Project): KtLightClassForFacade? {
 
             val sources = KotlinAsJavaSupport.getInstance(project).findFilesForFacade(fqName, searchScope)
-                .filterNot { it.isCompiled }
+                .filterNot { it.isCompiled || it.isScript() }
 
             if (sources.isEmpty()) return null
 
@@ -244,7 +244,7 @@
             val manager = PsiManager.getInstance(project)
 
             return LightClassGenerationSupport.getInstance(project).run {
-                if (useUltraLightClasses) createUltraLightClassForFacade(manager, fqName, stubValue, sources)
+                if (canCreateUltraLightClassForFacade(sources)) createUltraLightClassForFacade(manager, fqName, stubValue, sources)
                     ?: error("Unable to create UL class for facade: $fqName for ${sources.joinToString { it.virtualFilePath }}")
                 else KtLightClassForFacadeImpl(manager, fqName, stubValue, sources)
             }
diff --git a/compiler/testData/asJava/ultraLightClasses/typeAliases.lib.java b/compiler/testData/asJava/ultraLightClasses/typeAliases.lib.java
index 8b13789..ff22586 100644
--- a/compiler/testData/asJava/ultraLightClasses/typeAliases.lib.java
+++ b/compiler/testData/asJava/ultraLightClasses/typeAliases.lib.java
@@ -1 +1 @@
-
+// NOT_GENERATED
\ No newline at end of file
diff --git a/compiler/testData/asJava/ultraLightFacades/script.java b/compiler/testData/asJava/ultraLightFacades/script.java
new file mode 100644
index 0000000..ff22586
--- /dev/null
+++ b/compiler/testData/asJava/ultraLightFacades/script.java
@@ -0,0 +1 @@
+// NOT_GENERATED
\ No newline at end of file
diff --git a/compiler/testData/asJava/ultraLightFacades/script.kts b/compiler/testData/asJava/ultraLightFacades/script.kts
new file mode 100644
index 0000000..dbb4bfd
--- /dev/null
+++ b/compiler/testData/asJava/ultraLightFacades/script.kts
@@ -0,0 +1 @@
+println("Hello, I'm in <root> package")
diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt
index c399890..e2d6a16 100644
--- a/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt
+++ b/compiler/tests-common/tests/org/jetbrains/kotlin/asJava/LightClassTestCommon.kt
@@ -14,7 +14,7 @@
 
 object LightClassTestCommon {
     private val SUBJECT_FQ_NAME_PATTERN = Pattern.compile("^//\\s*(.*)$", Pattern.MULTILINE)
-    private const val NOT_GENERATED_DIRECTIVE = "// NOT_GENERATED"
+    const val NOT_GENERATED_DIRECTIVE = "// NOT_GENERATED"
 
     fun getActualLightClassText(
         testDataFile: File,
diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt
index 2b02612..20c2646 100644
--- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt
+++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/lightClasses.kt
@@ -38,21 +38,21 @@
 
         run {
             testClass<AbstractSymbolLightClassesLoadingForSourceTest> {
-                model("asJava/ultraLightClasses", pattern = TestGeneratorUtil.KT)
+                model("asJava/ultraLightClasses", pattern = TestGeneratorUtil.KT_OR_KTS)
             }
 
             testClass<AbstractSymbolLightClassesLoadingForLibraryTest> {
-                model("asJava/ultraLightClasses", pattern = TestGeneratorUtil.KT)
+                model("asJava/ultraLightClasses", pattern = TestGeneratorUtil.KT_OR_KTS)
             }
         }
 
         run {
             testClass<AbstractSymbolLightClassesFacadeForSourceTest> {
-                model("asJava/ultraLightFacades", pattern = TestGeneratorUtil.KT)
+                model("asJava/ultraLightFacades", pattern = TestGeneratorUtil.KT_OR_KTS)
             }
 
             testClass<AbstractSymbolLightClassesFacadeForLibraryTest> {
-                model("asJava/ultraLightFacades", pattern = TestGeneratorUtil.KT)
+                model("asJava/ultraLightFacades", pattern = TestGeneratorUtil.KT_OR_KTS)
             }
         }
     }