From 97620030c6b01bd02aa20061c8058d4db6c23da0 Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Tue, 9 May 2023 15:40:18 +0200 Subject: [PATCH] [JS IR] Rollback PL hacks from JS IR IC infra ^KT-57347 related --- .../kotlin/ir/backend/js/ic/CacheUpdater.kt | 22 +++---------------- .../lib1/module.info | 4 ++-- .../lib2/module.info | 1 + .../main/module.info | 4 ++-- .../genericInlineFunctions/lib1/module.info | 2 +- .../genericInlineFunctions/main/module.info | 2 +- .../renameModule/lib1-new/module.info | 4 +++- .../renameModule/lib1/module.info | 4 +++- .../renameModule/main/module.info | 4 ++-- .../splitJoinModule/lib1-a/module.info | 1 + .../splitJoinModule/lib1-b/module.info | 1 + .../splitJoinModule/lib1-c/module.info | 1 + .../splitJoinModule/lib1/module.info | 1 + .../splitJoinModule/lib2/module.info | 4 ++-- .../splitJoinModule/main/module.info | 2 -- .../invalidation/splitJoinModule/project.info | 4 ++-- 16 files changed, 26 insertions(+), 35 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt index 91d7e3021f8..b3a99dd6b69 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt @@ -125,28 +125,12 @@ class CacheUpdater( libs.memoryOptimizedFilter { it.libraryFile.canonicalPath in friendPaths } } - private val klibCacheDirs = libraryDependencies.keys.map { lib -> + private val incrementalCaches = libraryDependencies.keys.associate { lib -> val libFile = KotlinLibraryFile(lib) val file = File(libFile.path) val pathHash = file.absolutePath.cityHash64().toULong().toString(Character.MAX_RADIX) - File(cacheRootDir, "${file.name}.$pathHash") - } - - init { - // Enabled Partial Linkage may replace entire IR expressions with a stub during klib linking and loading. - // This may break the incremental cache dependency graph. - // Dropping incremental cache files after updating klibs (e.g. update klib version) - // covers almost all cases which could not be tracked due to a broken dependency graph. - // TODO: This code could be removed after fixing KT-57347 - val oldKlibCaches = cacheRootDir.listFiles { file: File -> file.isDirectory }?.mapTo(hashSetOf()) { it.name } ?: emptySet() - val newKlibCaches = klibCacheDirs.mapTo(hashSetOf()) { it.name } - if (oldKlibCaches != newKlibCaches) { - cacheRootDir.deleteRecursively() - } - } - - private val incrementalCaches = libraryDependencies.keys.zip(klibCacheDirs).associate { (lib, libraryCacheDir) -> - KotlinLibraryFile(lib) to IncrementalCache(KotlinLoadedLibraryHeader(lib, internationService), libraryCacheDir) + val libraryCacheDir = File(cacheRootDir, "${file.name}.$pathHash") + libFile to IncrementalCache(KotlinLoadedLibraryHeader(lib, internationService), libraryCacheDir) } private val removedIncrementalCaches = buildList { diff --git a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib1/module.info b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib1/module.info index c1523f2c0b5..e4dfcb28c24 100644 --- a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib1/module.info +++ b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib1/module.info @@ -1,11 +1,11 @@ STEP 0: added file: l1a.kt, l1b.kt STEP 1: - added file: l1b.kt, l1a.kt + updated exports: l1b.kt, l1a.kt STEP 2: updated exports: l1a.kt STEP 3: - added file: l1b.kt, l1a.kt + removed inverse depends: l1b.kt, l1a.kt STEP 4: modifications: U : l1a.4.kt -> l1a.kt diff --git a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib2/module.info b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib2/module.info index 6256d9c3f99..886d81def2c 100644 --- a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib2/module.info +++ b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/lib2/module.info @@ -14,5 +14,6 @@ STEP 3: rebuild klib: false modifications: D : l2.kt + removed file: l2.kt STEP 4: rebuild klib: false diff --git a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/main/module.info b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/main/module.info index 82578c5e076..96b32437e2f 100644 --- a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/main/module.info +++ b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/main/module.info @@ -7,7 +7,7 @@ STEP 1: dependencies: lib1, lib2 modifications: U : m.1.kt -> m.kt - added file: m.kt + modified ir: m.kt STEP 2: dependencies: lib1, lib2 updated imports: m.kt @@ -15,6 +15,6 @@ STEP 3: dependencies: lib1 modifications: U : m.0.kt -> m.kt - added file: m.kt + modified ir: m.kt STEP 4: dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/lib1/module.info b/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/lib1/module.info index d9bd08e4415..dec40c07058 100644 --- a/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/lib1/module.info +++ b/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/lib1/module.info @@ -33,7 +33,7 @@ STEP 7: STEP 8: modifications: U : l1.0.kt -> l1.kt - added file: l1.kt + modified ir: l1.kt STEP 9: modifications: U : l1.1.kt -> l1.kt diff --git a/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/main/module.info b/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/main/module.info index ac71e23e291..6fc0dbfd7a1 100644 --- a/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/main/module.info +++ b/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/main/module.info @@ -14,7 +14,7 @@ STEP 8: dependencies: lib1, libProxy modifications: U : m.proxy.kt -> m.kt - added file: m.kt + modified ir: m.kt STEP 9..13: dependencies: lib1, libProxy updated imports: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/renameModule/lib1-new/module.info b/js/js.translator/testData/incremental/invalidation/renameModule/lib1-new/module.info index 0155ab2fe7a..aa15d5b7cbf 100644 --- a/js/js.translator/testData/incremental/invalidation/renameModule/lib1-new/module.info +++ b/js/js.translator/testData/incremental/invalidation/renameModule/lib1-new/module.info @@ -7,4 +7,6 @@ STEP 2: modifications: U : l1.2.kt -> l1.kt modified ir: l1.kt -STEP 3..5: +STEP 3: + removed file: l1.kt +STEP 4..5: diff --git a/js/js.translator/testData/incremental/invalidation/renameModule/lib1/module.info b/js/js.translator/testData/incremental/invalidation/renameModule/lib1/module.info index 202996b9447..62f0f2e4c94 100644 --- a/js/js.translator/testData/incremental/invalidation/renameModule/lib1/module.info +++ b/js/js.translator/testData/incremental/invalidation/renameModule/lib1/module.info @@ -2,7 +2,9 @@ STEP 0: modifications: U : l1.0.kt -> l1.kt added file: l1.kt -STEP 1..2: +STEP 1: + removed file: l1.kt +STEP 2: STEP 3: modifications: U : l1.3.kt -> l1.kt diff --git a/js/js.translator/testData/incremental/invalidation/renameModule/main/module.info b/js/js.translator/testData/incremental/invalidation/renameModule/main/module.info index 393d05936da..0f7fd2be5e4 100644 --- a/js/js.translator/testData/incremental/invalidation/renameModule/main/module.info +++ b/js/js.translator/testData/incremental/invalidation/renameModule/main/module.info @@ -3,13 +3,13 @@ STEP 0: added file: m.kt STEP 1: dependencies: lib1-new - added file: m.kt + removed direct depends: m.kt STEP 2: dependencies: lib1-new updated imports: m.kt STEP 3: dependencies: lib1 - added file: m.kt + removed direct depends: m.kt STEP 4..5: dependencies: lib1 updated imports: m.kt diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-a/module.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-a/module.info index 17d94c8c632..5a2bd11d9f3 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-a/module.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-a/module.info @@ -7,4 +7,5 @@ STEP 2..3: STEP 4: modifications: D : l1a.kt + removed file: l1a.kt STEP 5: diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-b/module.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-b/module.info index 008e5559808..89164691f4f 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-b/module.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-b/module.info @@ -14,4 +14,5 @@ STEP 3: STEP 4: modifications: D : l1b.kt + removed file: l1b.kt STEP 5: diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-c/module.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-c/module.info index 9b184a117f1..c17ee677752 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-c/module.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1-c/module.info @@ -7,4 +7,5 @@ STEP 2..3: STEP 4: modifications: D : l1c.kt + removed file: l1c.kt STEP 5: diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1/module.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1/module.info index 5dcb4bb850a..8899f87339c 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1/module.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib1/module.info @@ -9,6 +9,7 @@ STEP 1: D : l1a.kt D : l1b.kt D : l1c.kt + removed file: l1c.kt, l1b.kt, l1a.kt STEP 2..3: STEP 4: modifications: diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib2/module.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib2/module.info index 9c25ce5580d..37df220edf2 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib2/module.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/lib2/module.info @@ -5,12 +5,12 @@ STEP 0: added file: l2.kt STEP 1: dependencies: lib1-a, lib1-b, lib1-c - added file: l2.kt + removed direct depends: l2.kt STEP 2..3: dependencies: lib1-a, lib1-b, lib1-c updated imports: l2.kt STEP 4: dependencies: lib1 - added file: l2.kt + removed direct depends: l2.kt STEP 5: dependencies: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/main/module.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/main/module.info index 7690a26dfc3..73a2a741d4d 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/main/module.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/main/module.info @@ -3,11 +3,9 @@ STEP 0: added file: m.kt STEP 1: dependencies: lib1-a, lib1-b, lib1-c, lib2 - added file: m.kt STEP 2..3: dependencies: lib1-a, lib1-b, lib1-c, lib2 STEP 4: dependencies: lib1, lib2 - added file: m.kt STEP 5: dependencies: lib1, lib2 diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info index 40b9a393f89..e6e487ff080 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info @@ -5,13 +5,13 @@ STEP 0: dirty js: lib1, lib2, main STEP 1: libs: lib1-a, lib1-b, lib1-c, lib2, main - dirty js: lib1-a, lib1-b, lib1-c, main, lib2 + dirty js: lib1-a, lib1-b, lib1-c, lib2 STEP 2..3: libs: lib1-a, lib1-b, lib1-c, lib2, main dirty js: lib1-b, lib2 STEP 4: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js: lib1, lib2 STEP 5: libs: lib1, lib2, main dirty js: lib1