From 4f69f61ef79625e11ea955dfccd79bb8aab4ac69 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 4 Aug 2022 14:55:07 +0200 Subject: [PATCH] Advance version of kotlinx serialization in imports-dumper File separator are not escaped now, as there's no need to escape / character in JSON strings. --- plugins/imports-dumper/build.gradle.kts | 2 +- .../kotlin/importsDumper/ImportsDumperExtension.kt | 14 +++++++------- .../testData/simpleCase/simpleCase.dump | 2 +- .../kotlin/importsDumper/ImportsDumperTest.kt | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/imports-dumper/build.gradle.kts b/plugins/imports-dumper/build.gradle.kts index 25eee133b88..c4a906c21fe 100644 --- a/plugins/imports-dumper/build.gradle.kts +++ b/plugins/imports-dumper/build.gradle.kts @@ -6,7 +6,7 @@ plugins { id("jps-compatible") } -val kotlinxSerializationVersion = "0.4.2" +val kotlinxSerializationVersion = "0.14.0" dependencies { api(project(":compiler:frontend.java")) diff --git a/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperExtension.kt b/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperExtension.kt index 7a0d496b330..7f6e08888b7 100644 --- a/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperExtension.kt +++ b/plugins/imports-dumper/src/org/jetbrains/kotlin/importsDumper/ImportsDumperExtension.kt @@ -6,10 +6,11 @@ package org.jetbrains.kotlin.importsDumper import com.intellij.openapi.project.Project +import kotlinx.serialization.internal.LinkedHashMapSerializer import kotlinx.serialization.internal.StringSerializer -import kotlinx.serialization.json.JSON +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonConfiguration import kotlinx.serialization.list -import kotlinx.serialization.map import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.context.ProjectContext @@ -29,18 +30,17 @@ class ImportsDumperExtension(destinationPath: String) : AnalysisHandlerExtension files: Collection, bindingTrace: BindingTrace, componentProvider: ComponentProvider - ): AnalysisResult? { + ): AnalysisResult { val filePathToImports: MutableMap> = mutableMapOf() for (file in files) { filePathToImports[file.virtualFilePath] = file.importDirectives.map { it.text } } - val serializer = (StringSerializer to StringSerializer.list).map + val serializer = LinkedHashMapSerializer(StringSerializer, StringSerializer.list) + val jsonStringWithImports = Json(JsonConfiguration.Stable).toJson(serializer, filePathToImports) - val jsonStringWithImports = JSON.stringify(serializer, filePathToImports) - - destination.writeText(jsonStringWithImports) + destination.writeText(jsonStringWithImports.toString()) return AnalysisResult.success(bindingTrace.bindingContext, module, shouldGenerateCode = false) } diff --git a/plugins/imports-dumper/testData/simpleCase/simpleCase.dump b/plugins/imports-dumper/testData/simpleCase/simpleCase.dump index 6abc4556e4c..209278dc045 100644 --- a/plugins/imports-dumper/testData/simpleCase/simpleCase.dump +++ b/plugins/imports-dumper/testData/simpleCase/simpleCase.dump @@ -1 +1 @@ -{"$TESTDATA_DIR$\/a\/A1.kt":["import c.JavaC"],"$TESTDATA_DIR$\/a\/A2.kt":[],"$TESTDATA_DIR$\/b\/B1.kt":["import a.*"],"$TESTDATA_DIR$\/b\/nestedB\/B2.kt":["import a.A1 as AliasedA1","import a.A1"],"$TESTDATA_DIR$\/c\/C1.kt":["import a.A1","import a.A2","import b.B1.Companion.a2","import b.nestedB.bar","import b.nestedB.foo"]} \ No newline at end of file +{"$TESTDATA_DIR$/a/A1.kt":["import c.JavaC"],"$TESTDATA_DIR$/a/A2.kt":[],"$TESTDATA_DIR$/b/B1.kt":["import a.*"],"$TESTDATA_DIR$/b/nestedB/B2.kt":["import a.A1 as AliasedA1","import a.A1"],"$TESTDATA_DIR$/c/C1.kt":["import a.A1","import a.A2","import b.B1.Companion.a2","import b.nestedB.bar","import b.nestedB.foo"]} \ No newline at end of file diff --git a/plugins/imports-dumper/tests/org/jetbrains/kotlin/importsDumper/ImportsDumperTest.kt b/plugins/imports-dumper/tests/org/jetbrains/kotlin/importsDumper/ImportsDumperTest.kt index 1059a01acf6..02a35c5b95e 100644 --- a/plugins/imports-dumper/tests/org/jetbrains/kotlin/importsDumper/ImportsDumperTest.kt +++ b/plugins/imports-dumper/tests/org/jetbrains/kotlin/importsDumper/ImportsDumperTest.kt @@ -70,6 +70,6 @@ class ImportsDumperTest : TestCaseWithTmpdir() { private fun String.relativizeAbsolutePaths(relativeTo: File): String { // JSON escapes slashes - val pattern = relativeTo.absoluteFile.toString().replace(File.separatorChar.toString(), "\\/") + val pattern = relativeTo.absoluteFile.toString().replace(File.separatorChar.toString(), "/") return this.replace(pattern, "\$TESTDATA_DIR$") }