From b4c7e14379a437f7f1f9eaf5fb1cc6885357f4d6 Mon Sep 17 00:00:00 2001 From: Nikolay Chashnikov Date: Mon, 4 Aug 2025 12:47:28 +0200 Subject: [PATCH] [project structure tests] optimization: reuse the 'processModuleProductionOutput' function in ApiCheckTest If the module output is packed in a JAR, it's better to close the FileSystem instance after use to close the corresponding ZIP file. Also, this simplifies code. GitOrigin-RevId: 6e1896864cdd61b555d64b5b3b4a2b84df2052d5 --- .../monorepo/tests/api/ModuleApi.kt | 16 +++------------- tools/apiDump/src/impl.kt | 18 ++---------------- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/platform/testFramework/monorepo/tests/api/ModuleApi.kt b/platform/testFramework/monorepo/tests/api/ModuleApi.kt index 8f523581b943..13df92366050 100644 --- a/platform/testFramework/monorepo/tests/api/ModuleApi.kt +++ b/platform/testFramework/monorepo/tests/api/ModuleApi.kt @@ -1,7 +1,7 @@ // Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.platform.testFramework.monorepo.api -import com.intellij.openapi.application.PathManager +import com.intellij.platform.testFramework.monorepo.processModuleProductionOutput import com.intellij.tools.apiDump.API import com.intellij.tools.apiDump.api import com.intellij.tools.apiDump.emptyApiIndex @@ -13,13 +13,9 @@ import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.fold import kotlinx.coroutines.launch import org.jetbrains.annotations.ApiStatus -import org.jetbrains.jps.ProjectPaths import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModule -import org.junit.jupiter.api.fail -import java.nio.file.Path import java.util.concurrent.ConcurrentHashMap -import kotlin.io.path.name @ApiStatus.Internal class ModuleApi(private val cs: CoroutineScope) { @@ -57,14 +53,8 @@ class ModuleApi(private val cs: CoroutineScope) { acc + item } - var outputDir = ProjectPaths.getModuleOutputDir(module, false)?.toPath() - ?: fail("'${module.name}' has no out directory") - val mapping = PathManager.getArchivedCompiledClassesMapping() - if (mapping != null) { - // path is absolute, mapping contains only the last two path elements - outputDir = mapping[outputDir.parent.name + "/" + outputDir.name]?.let { Path.of(it) } ?: outputDir + return processModuleProductionOutput(module) { outputRoot -> + api(dependencyIndex, outputRoot) } - - return api(dependencyIndex, outputDir) } } \ No newline at end of file diff --git a/tools/apiDump/src/impl.kt b/tools/apiDump/src/impl.kt index 3fb2c8cba95d..799d18c1554c 100644 --- a/tools/apiDump/src/impl.kt +++ b/tools/apiDump/src/impl.kt @@ -10,9 +10,6 @@ import kotlinx.validation.api.* import org.objectweb.asm.Opcodes import org.objectweb.asm.Type import org.objectweb.asm.tree.AnnotationNode -import java.net.URI -import java.nio.file.FileSystemAlreadyExistsException -import java.nio.file.FileSystems import java.nio.file.Path import kotlin.io.path.* import kotlin.metadata.jvm.JvmFieldSignature @@ -310,22 +307,11 @@ private fun stableAndExperimentalApi(classSignatures: List): Pair { - var root = classRoot - if (root.isRegularFile() && root.extension == "jar") { - val uri = URI("jar:${classRoot.toUri()}!/") - val fs = try { - FileSystems.newFileSystem(uri, emptyMap()) - } - catch (ignored: FileSystemAlreadyExistsException) { - FileSystems.getFileSystem(uri) - } - root = fs.rootDirectories.single() - } - return root + return classRoot .walk() .filter { path -> path.extension == "class" && - !root.relativize(path).startsWith("META-INF/") + !classRoot.relativize(path).startsWith("META-INF/") } }