From 650d4c78e91b56c4e3d1832f91b2afc94046ddc6 Mon Sep 17 00:00:00 2001 From: Igor Chevdar Date: Wed, 3 Nov 2021 17:35:39 +0500 Subject: [PATCH] [K/N][interop] A small optimization --- .../org/jetbrains/kotlin/native/interop/indexer/Utils.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kotlin-native/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Utils.kt b/kotlin-native/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Utils.kt index db5e1613c50..65509436e36 100644 --- a/kotlin-native/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Utils.kt +++ b/kotlin-native/Interop/Indexer/src/main/kotlin/org/jetbrains/kotlin/native/interop/indexer/Utils.kt @@ -25,6 +25,7 @@ import java.nio.file.Path import java.nio.file.Paths import java.security.DigestInputStream import java.security.MessageDigest +import java.util.concurrent.ConcurrentHashMap val CValue.kind: CXTypeKind get() = this.useContents { kind } @@ -818,7 +819,10 @@ internal fun getContainingFile(cursor: CValue): CXFile? { } internal val CXFile.path: String get() = clang_getFileName(this).convertAndDispose() -internal val CXFile.canonicalPath: String get() = File(this.path).canonicalPath + +// TODO: this map doesn't get cleaned up but adds quite significant performance improvement. +private val canonicalPaths = ConcurrentHashMap() +internal val CXFile.canonicalPath: String get() = canonicalPaths.getOrPut(this.path) { File(this.path).canonicalPath } private fun createVfsOverlayFileContents(virtualPathToReal: Map): ByteArray { val overlay = clang_VirtualFileOverlay_create(0)