AA: reuse CoreJarFileSystem from KotlinCoreEnvironment
diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt
index 284b1de..9290101 100644
--- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt
+++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/util/LibraryUtils.kt
@@ -12,8 +12,16 @@
 import java.nio.file.Path
 
 object LibraryUtils {
-    fun getAllVirtualFilesFromJar(jar: Path): Collection<VirtualFile> {
-        val jarFileSystem = CoreJarFileSystem()
+    /**
+     * Get all [VirtualFile]s inside the given [jar] (of [Path])
+     *
+     * Note that, if [CoreJarFileSystem] is not given, a fresh instance will be used, which will create fresh instances of [VirtualFile],
+     *   resulting in potential hash mismatch (e.g., if used in scope membership check).
+     */
+    fun getAllVirtualFilesFromJar(
+        jar: Path,
+        jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
+    ): Collection<VirtualFile> {
         val root = jarFileSystem.refreshAndFindFileByPath(jar.toAbsolutePath().toString() + JAR_SEPARATOR)!!
 
         val files = mutableSetOf<VirtualFile>()
diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneModeUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneModeUtils.kt
index b14e8d7..de9d33a 100644
--- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneModeUtils.kt
+++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneModeUtils.kt
@@ -8,6 +8,7 @@
 import com.intellij.mock.MockApplication
 import com.intellij.mock.MockProject
 import com.intellij.openapi.project.Project
+import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
 import com.intellij.psi.PsiElementFinder
 import com.intellij.psi.search.GlobalSearchScope
 import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
@@ -81,12 +82,16 @@
  *    * given [ktFiles] as Kotlin sources
  *    * other Java sources in [compilerConfig] (set via [addJavaSourceRoots])
  *    * JVM class paths in [compilerConfig] (set via [addJvmClasspathRoots]) as library.
+ *
+ *  To make sure the same instance of [CoreJarFileSystem] is used (and thus file lookup in jars is cached),
+ *    pass [jarFileSystem] from [KotlinCoreEnvironment] if available.
  */
 public fun configureProjectEnvironment(
     project: MockProject,
     compilerConfig: CompilerConfiguration,
     ktFiles: List<KtFile>,
     packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
+    jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
 ) {
     reRegisterJavaElementFinder(project)
 
@@ -115,7 +120,12 @@
 
     project.picoContainer.registerComponentInstance(
         ProjectStructureProvider::class.qualifiedName,
-        ProjectStructureProviderByCompilerConfiguration(compilerConfig, project, ktFiles)
+        ProjectStructureProviderByCompilerConfiguration(
+            compilerConfig,
+            project,
+            ktFiles,
+            jarFileSystem
+        )
     )
     project.picoContainer.registerComponentInstance(
         KotlinDeclarationProviderFactory::class.qualifiedName,
diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleByCompilerConfiguration.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleByCompilerConfiguration.kt
index 72e93d2..b84358e 100644
--- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleByCompilerConfiguration.kt
+++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleByCompilerConfiguration.kt
@@ -7,6 +7,7 @@
 
 import com.intellij.openapi.project.Project
 import com.intellij.openapi.vfs.VirtualFile
+import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
 import com.intellij.psi.search.GlobalSearchScope
 import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
 import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
@@ -51,10 +52,11 @@
     compilerConfig: CompilerConfiguration,
     project: Project,
     ktFiles: List<KtFile>,
+    jarFileSystem: CoreJarFileSystem,
 ) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtSourceModule {
     override val directRegularDependencies: List<KtModule> by lazy {
         (compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots).map {
-            KtLibraryModuleByCompilerConfiguration(compilerConfig, project, it.toPath())
+            KtLibraryModuleByCompilerConfiguration(compilerConfig, project, it.toPath(), jarFileSystem)
         }
     }
 
@@ -66,11 +68,12 @@
     compilerConfig: CompilerConfiguration,
     project: Project,
     private val jar: Path,
+    jarFileSystem: CoreJarFileSystem,
 ) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtLibraryModule {
     override val directRegularDependencies: List<KtModule> get() = emptyList()
 
     internal val virtualFiles: Collection<VirtualFile> by lazy {
-        LibraryUtils.getAllVirtualFilesFromJar(jar)
+        LibraryUtils.getAllVirtualFilesFromJar(jar, jarFileSystem)
     }
 
     override val libraryName: String
diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/ProjectStructureProviderByCompilerConfiguration.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/ProjectStructureProviderByCompilerConfiguration.kt
index 771278e..23ad2e4 100644
--- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/ProjectStructureProviderByCompilerConfiguration.kt
+++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/ProjectStructureProviderByCompilerConfiguration.kt
@@ -6,6 +6,7 @@
 package org.jetbrains.kotlin.analysis.project.structure.impl
 
 import com.intellij.openapi.project.Project
+import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
 import com.intellij.psi.PsiElement
 import org.jetbrains.kotlin.analysis.project.structure.KtModule
 import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
@@ -19,6 +20,7 @@
     private val compilerConfig: CompilerConfiguration,
     project: Project,
     ktFiles: List<KtFile>,
+    jarFileSystem: CoreJarFileSystem,
 ) : ProjectStructureProvider() {
     private val sourceFiles: Set<String> by lazy {
         buildSet {
@@ -37,7 +39,7 @@
         }
     }
 
-    private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles)
+    private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles, jarFileSystem)
 
     override fun getKtModuleForKtElement(element: PsiElement): KtModule {
         val containingFilePath = element.containingFile.virtualFile.path