~ use new source file representation in the new pipeline
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/VfsBasedProjectEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/VfsBasedProjectEnvironment.kt
index 125e1eb6..0afedde 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/VfsBasedProjectEnvironment.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/VfsBasedProjectEnvironment.kt
@@ -7,12 +7,17 @@
 
 import com.intellij.openapi.project.Project
 import com.intellij.openapi.vfs.StandardFileSystems
+import com.intellij.openapi.vfs.VirtualFile
 import com.intellij.openapi.vfs.VirtualFileManager
 import com.intellij.openapi.vfs.VirtualFileSystem
 import com.intellij.psi.PsiElementFinder
 import com.intellij.psi.PsiFile
 import com.intellij.psi.search.GlobalSearchScope
 import com.intellij.psi.search.ProjectScope
+import org.jetbrains.kotlin.KtIoFileSourceFile
+import org.jetbrains.kotlin.KtPsiSourceFile
+import org.jetbrains.kotlin.KtSourceFile
+import org.jetbrains.kotlin.KtVirtualFileSourceFile
 import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
 import org.jetbrains.kotlin.fir.FirModuleData
 import org.jetbrains.kotlin.fir.FirSession
@@ -65,16 +70,33 @@
         psiFinderExtensionPoint.registerExtension(FirJavaElementFinder(firSession, project), project)
     }
 
+    private fun List<VirtualFile>.toSearchScope(allowOutOfProjectRoots: Boolean) =
+        takeIf { it.isNotEmpty() }
+            ?.let {
+                if (allowOutOfProjectRoots) GlobalSearchScope.filesWithLibrariesScope(project, it)
+                else GlobalSearchScope.filesWithoutLibrariesScope(project, it)
+            }
+            ?: GlobalSearchScope.EMPTY_SCOPE
+
     override fun getSearchScopeByIoFiles(files: Iterable<File>, allowOutOfProjectRoots: Boolean): AbstractProjectFileSearchScope =
         PsiBasedProjectFileSearchScope(
             files
                 .mapNotNull { localFileSystem.findFileByPath(it.absolutePath) }
-                .toList()
-                .takeIf { it.isNotEmpty() }
-                ?.let {
-                    if (allowOutOfProjectRoots) GlobalSearchScope.filesWithLibrariesScope(project, it)
-                    else GlobalSearchScope.filesWithoutLibrariesScope(project, it)
-                } ?: GlobalSearchScope.EMPTY_SCOPE
+                .toSearchScope(allowOutOfProjectRoots)
+        )
+
+    override fun getSearchScopeBySourceFiles(files: Iterable<KtSourceFile>, allowOutOfProjectRoots: Boolean): AbstractProjectFileSearchScope =
+        PsiBasedProjectFileSearchScope(
+            files
+                .mapNotNull {
+                    when (it) {
+                        is KtPsiSourceFile -> it.psiFile.virtualFile
+                        is KtVirtualFileSourceFile -> it.virtualFile
+                        is KtIoFileSourceFile -> localFileSystem.findFileByPath(it.file.absolutePath)
+                        else -> null // TODO: find out whether other use cases should be supported
+                    }
+                }
+                .toSearchScope(allowOutOfProjectRoots)
         )
 
     override fun getSearchScopeByDirectories(directories: Iterable<File>): AbstractProjectFileSearchScope =
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt
index 2da0cbc..2e348f0 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipeline.kt
@@ -17,6 +17,8 @@
 import com.intellij.psi.PsiManager
 import com.intellij.psi.search.GlobalSearchScope
 import com.intellij.util.io.URLUtil
+import org.jetbrains.kotlin.KtSourceFile
+import org.jetbrains.kotlin.KtVirtualFileSourceFile
 import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
@@ -103,13 +105,12 @@
 
     for (module in chunk) {
         val moduleConfiguration = compilerConfiguration.applyModuleProperties(module, buildFile)
-        val platformSources = linkedSetOf<File>()
-        val commonSources = linkedSetOf<File>()
+        val platformSources = linkedSetOf<KtSourceFile>()
+        val commonSources = linkedSetOf<KtSourceFile>()
 
         // !!
         compilerConfiguration.kotlinSourceRoots.forAllFiles(compilerConfiguration, projectEnvironment.project) { virtualFile, isCommon ->
-            val file = File(virtualFile.canonicalPath ?: virtualFile.path)
-            if (!file.isFile) error("TODO: better error: file not found $virtualFile")
+            val file = KtVirtualFileSourceFile(virtualFile)
             if (isCommon) commonSources.add(file)
             else platformSources.add(file)
         }
@@ -259,14 +260,14 @@
     diagnosticsReporter: DiagnosticReporter,
     performanceManager: CommonCompilerPerformanceManager?
 ): ModuleCompilerAnalyzedOutput {
-    var sourcesScope = environment.projectEnvironment.getSearchScopeByIoFiles(input.platformSources) //!!
+    var sourcesScope = environment.projectEnvironment.getSearchScopeBySourceFiles(input.platformSources)
     val sessionProvider = FirProjectSessionProvider()
     val extendedAnalysisMode = input.configuration.getBoolean(CommonConfigurationKeys.USE_FIR_EXTENDED_CHECKERS)
 
     val commonSession = runIf(
         input.commonSources.isNotEmpty() && input.configuration.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)
     ) {
-        val commonSourcesScope = environment.projectEnvironment.getSearchScopeByIoFiles(input.commonSources) //!!
+        val commonSourcesScope = environment.projectEnvironment.getSearchScopeBySourceFiles(input.commonSources)
         sourcesScope -= commonSourcesScope
         createSession(
             "${input.targetId.name}-common",
diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt
index 4935561..9262543 100644
--- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt
+++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/pipeline/compilerPipelineData.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.cli.jvm.compiler.pipeline
 
+import org.jetbrains.kotlin.KtSourceFile
 import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
 import org.jetbrains.kotlin.codegen.state.GenerationState
 import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -27,9 +28,9 @@
 data class ModuleCompilerInput(
     val targetId: TargetId,
     val commonPlatform: TargetPlatform,
-    val commonSources: Collection<File>,
+    val commonSources: Collection<KtSourceFile>,
     val platform: TargetPlatform,
-    val platformSources: Collection<File>,
+    val platformSources: Collection<KtSourceFile>,
     val configuration: CompilerConfiguration,
     val friendFirModules: Collection<FirModuleData> = emptyList()
 )
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/buildFir.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/buildFir.kt
index 63b09de..45bbdd1 100644
--- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/buildFir.kt
+++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/buildFir.kt
@@ -5,7 +5,7 @@
 
 package org.jetbrains.kotlin.fir.pipeline
 
-import org.jetbrains.kotlin.KtIoFileSourceFile
+import org.jetbrains.kotlin.KtSourceFile
 import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
 import org.jetbrains.kotlin.fir.FirSession
 import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
@@ -17,10 +17,9 @@
 import org.jetbrains.kotlin.fir.session.sourcesToPathsMapper
 import org.jetbrains.kotlin.psi.KtFile
 import org.jetbrains.kotlin.readSourceFileWithMapping
-import java.io.File
 
 fun FirSession.buildFirViaLightTree(
-    files: Collection<File>,
+    files: Collection<KtSourceFile>,
     diagnosticsReporter: DiagnosticReporter? = null,
     reportFilesAndLines: ((Int, Int) -> Unit)? = null
 ): List<FirFile> {
@@ -30,16 +29,15 @@
     val shouldCountLines = (reportFilesAndLines != null)
     var linesCount = 0
     val firFiles = files.map { file ->
-        val sourceFile = KtIoFileSourceFile(file)
-        val (code, linesMapping) = with(file.inputStream().reader(Charsets.UTF_8)) {
+        val (code, linesMapping) = with(file.getContentsAsStream().reader(Charsets.UTF_8)) {
             this.readSourceFileWithMapping()
         }
         if (shouldCountLines) {
             linesCount += linesMapping.lastOffset
         }
-        builder.buildFirFile(code, sourceFile, linesMapping).also { firFile ->
+        builder.buildFirFile(code, file, linesMapping).also { firFile ->
             firProvider.recordFile(firFile)
-            sourcesToPathsMapper.registerFileSource(firFile.source!!, file.path)
+            sourcesToPathsMapper.registerFileSource(firFile.source!!, file.path ?: file.name)
         }
     }
     reportFilesAndLines?.invoke(files.count(), linesCount)
diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt
index cfdea44..517e381 100644
--- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt
+++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.fir.session.environment
 
+import org.jetbrains.kotlin.KtSourceFile
 import org.jetbrains.kotlin.fir.FirModuleData
 import org.jetbrains.kotlin.fir.FirSession
 import org.jetbrains.kotlin.fir.java.FirJavaFacade
@@ -49,6 +50,8 @@
 
     fun getSearchScopeByIoFiles(files: Iterable<File>, allowOutOfProjectRoots: Boolean = false): AbstractProjectFileSearchScope
 
+    fun getSearchScopeBySourceFiles(files: Iterable<KtSourceFile>, allowOutOfProjectRoots: Boolean = false): AbstractProjectFileSearchScope
+
     fun getSearchScopeByDirectories(directories: Iterable<File>): AbstractProjectFileSearchScope
 
     fun getSearchScopeForProjectLibraries(): AbstractProjectFileSearchScope
diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt
index 71c8c31..ed00a90 100644
--- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt
+++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunner.kt
@@ -8,6 +8,8 @@
 import com.intellij.ide.highlighter.JavaFileType
 import com.intellij.openapi.util.Disposer
 import com.intellij.psi.PsiJavaModule
+import org.jetbrains.kotlin.KtSourceFile
+import org.jetbrains.kotlin.KtVirtualFileSourceFile
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.backend.jvm.JvmGeneratorExtensionsImpl
 import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor
@@ -175,12 +177,11 @@
                 createProjectEnvironment(configuration, rootDisposable, EnvironmentConfigFiles.JVM_CONFIG_FILES, messageCollector)
 
             // -sources
-            val allPlatformSourceFiles = linkedSetOf<File>() // TODO: get from caller
-            val allCommonSourceFiles = linkedSetOf<File>()
+            val allPlatformSourceFiles = linkedSetOf<KtSourceFile>() // TODO: get from caller
+            val allCommonSourceFiles = linkedSetOf<KtSourceFile>()
 
             configuration.kotlinSourceRoots.forAllFiles(configuration, projectEnvironment.project) { virtualFile, isCommon ->
-                val file = File(virtualFile.canonicalPath ?: virtualFile.path)
-                if (!file.isFile) error("TODO: better error: file not found $virtualFile")
+                val file = KtVirtualFileSourceFile(virtualFile)
                 if (isCommon) allCommonSourceFiles.add(file)
                 else allPlatformSourceFiles.add(file)
             }
@@ -203,8 +204,8 @@
 
                     val compilerInput = ModuleCompilerInput(
                         targetId,
-                        CommonPlatforms.defaultCommonPlatform, dirtySources.filter { it in allCommonSourceFiles },
-                        JvmPlatforms.unspecifiedJvmPlatform, dirtySources.filter { it in allPlatformSourceFiles },
+                        CommonPlatforms.defaultCommonPlatform, allCommonSourceFiles.filter { dirtySources.any { df -> df.path == it.path } },
+                        JvmPlatforms.unspecifiedJvmPlatform, allPlatformSourceFiles.filter { dirtySources.any { df -> df.path == it.path } },
                         configuration
                     )