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.
This commit is contained in:
Nikolay Krasko
2022-08-04 14:55:07 +02:00
committed by teamcity
parent 922ffa80b0
commit 4f69f61ef7
4 changed files with 10 additions and 10 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ plugins {
id("jps-compatible")
}
val kotlinxSerializationVersion = "0.4.2"
val kotlinxSerializationVersion = "0.14.0"
dependencies {
api(project(":compiler:frontend.java"))
@@ -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<KtFile>,
bindingTrace: BindingTrace,
componentProvider: ComponentProvider
): AnalysisResult? {
): AnalysisResult {
val filePathToImports: MutableMap<String, List<String>> = 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)
}
+1 -1
View File
@@ -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"]}
{"$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"]}
@@ -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$")
}