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)