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:
@@ -6,7 +6,7 @@ plugins {
|
|||||||
id("jps-compatible")
|
id("jps-compatible")
|
||||||
}
|
}
|
||||||
|
|
||||||
val kotlinxSerializationVersion = "0.4.2"
|
val kotlinxSerializationVersion = "0.14.0"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":compiler:frontend.java"))
|
api(project(":compiler:frontend.java"))
|
||||||
|
|||||||
+7
-7
@@ -6,10 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.importsDumper
|
package org.jetbrains.kotlin.importsDumper
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import kotlinx.serialization.internal.LinkedHashMapSerializer
|
||||||
import kotlinx.serialization.internal.StringSerializer
|
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.list
|
||||||
import kotlinx.serialization.map
|
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.container.ComponentProvider
|
import org.jetbrains.kotlin.container.ComponentProvider
|
||||||
import org.jetbrains.kotlin.context.ProjectContext
|
import org.jetbrains.kotlin.context.ProjectContext
|
||||||
@@ -29,18 +30,17 @@ class ImportsDumperExtension(destinationPath: String) : AnalysisHandlerExtension
|
|||||||
files: Collection<KtFile>,
|
files: Collection<KtFile>,
|
||||||
bindingTrace: BindingTrace,
|
bindingTrace: BindingTrace,
|
||||||
componentProvider: ComponentProvider
|
componentProvider: ComponentProvider
|
||||||
): AnalysisResult? {
|
): AnalysisResult {
|
||||||
val filePathToImports: MutableMap<String, List<String>> = mutableMapOf()
|
val filePathToImports: MutableMap<String, List<String>> = mutableMapOf()
|
||||||
|
|
||||||
for (file in files) {
|
for (file in files) {
|
||||||
filePathToImports[file.virtualFilePath] = file.importDirectives.map { it.text }
|
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.toString())
|
||||||
|
|
||||||
destination.writeText(jsonStringWithImports)
|
|
||||||
|
|
||||||
return AnalysisResult.success(bindingTrace.bindingContext, module, shouldGenerateCode = false)
|
return AnalysisResult.success(bindingTrace.bindingContext, module, shouldGenerateCode = false)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"]}
|
||||||
+1
-1
@@ -70,6 +70,6 @@ class ImportsDumperTest : TestCaseWithTmpdir() {
|
|||||||
|
|
||||||
private fun String.relativizeAbsolutePaths(relativeTo: File): String {
|
private fun String.relativizeAbsolutePaths(relativeTo: File): String {
|
||||||
// JSON escapes slashes
|
// 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$")
|
return this.replace(pattern, "\$TESTDATA_DIR$")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user