[java, compilation-charts] fix JSON deserialization problem

GitOrigin-RevId: 50cfa28cb1238fd0d7f8dcd2f712720e38ef64a2
This commit is contained in:
Aleksey Dobrynin
2024-08-08 11:38:29 +00:00
committed by intellij-monorepo-bot
parent c8e3bd6733
commit ca3f72e76b
4 changed files with 48 additions and 13 deletions
@@ -32,12 +32,12 @@
<orderEntry type="module" module-name="intellij.platform.lang.impl" />
<orderEntry type="library" name="jackson" level="project" />
<orderEntry type="library" name="jackson-databind" level="project" />
<orderEntry type="library" name="jackson-module-kotlin" level="project" />
<orderEntry type="library" name="rd-core" level="project" />
<orderEntry type="library" name="rd-swing" level="project" />
<orderEntry type="library" name="kotlinx-coroutines-core" level="project" />
<orderEntry type="module" module-name="intellij.platform.rd.community" />
<orderEntry type="library" name="kotlinx-collections-immutable" level="project" />
<orderEntry type="module" module-name="intellij.java.compiler.charts.jps" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
</component>
</module>
@@ -5,14 +5,12 @@ import com.fasterxml.jackson.core.JsonFactory
import com.fasterxml.jackson.core.JsonProcessingException
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.KotlinModule
import com.intellij.build.BuildProgressListener
import com.intellij.build.BuildViewManager
import com.intellij.build.events.FinishBuildEvent
import com.intellij.build.events.StartBuildEvent
import com.intellij.compiler.server.CustomBuilderMessageHandler
import com.intellij.java.compiler.charts.jps.ChartsBuilderService.COMPILATION_STATISTIC_BUILDER_ID
import com.intellij.java.compiler.charts.jps.ChartsBuilderService.COMPILATION_STATUS_BUILDER_ID
import com.intellij.java.compiler.charts.jps.CompileStatisticBuilderMessage.*
import com.intellij.java.compiler.charts.ui.CompilationChartsBuildEvent
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.project.Project
@@ -26,6 +24,8 @@ class CompilationChartsProjectActivity : ProjectActivity {
companion object {
private val LOG: Logger = Logger.getInstance(CompilationChartsProjectActivity::class.java)
const val COMPILATION_CHARTS_KEY: String = "compilation.charts"
const val COMPILATION_STATISTIC_BUILDER_ID: String = "jps.compile.statistic"
const val COMPILATION_STATUS_BUILDER_ID: String = "jps.compile.status"
}
override suspend fun execute(project: Project) {
@@ -54,7 +54,7 @@ class CompilationChartsProjectActivity : ProjectActivity {
}
private class CompilationChartsMessageHandler : CustomBuilderMessageHandler {
private val json = ObjectMapper(JsonFactory())
private val json = ObjectMapper(JsonFactory()).registerModule(KotlinModule.Builder().build())
private val states: Queue<CompilationChartsBuildEvent> = ArrayDeque()
private var currentState: CompilationChartsBuildEvent? = null
private val defaultUUID: UUID = UUID.randomUUID()
@@ -2,7 +2,6 @@
package com.intellij.java.compiler.charts
import com.intellij.java.compiler.charts.CompilationChartsViewModel.Modules.EventKey
import com.intellij.java.compiler.charts.jps.CompileStatisticBuilderMessage.*
import com.jetbrains.rd.framework.impl.RdList
import com.jetbrains.rd.framework.impl.RdMap
import com.jetbrains.rd.framework.impl.RdProperty
@@ -37,15 +36,13 @@ class CompilationChartsViewModel(val lifetime: Lifetime) {
}
private fun index(threadId: Long): Int {
var index: Int? = threadIndexes[threadId]
val index: Int? = threadIndexes[threadId]
if (index != null) return index
synchronized(threadIndexes) {
index = threadIndexes[threadId]
if (index != null) return index!!
index = threadIndexes.size
threadIndexes[threadId] = index!!
return index!!
val updateAndGetIndex = { threadId: Long ->
threadIndexes.size.also { newIndex -> threadIndexes[threadId] = newIndex }
}
return threadIndexes[threadId] ?: updateAndGetIndex(threadId)
}
}
@@ -0,0 +1,38 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.java.compiler.charts
interface TargetEvent {
val name: String
val type: String
val isTest: Boolean
val isFileBased: Boolean
val time: Long
val thread: Long
}
data class StartTarget(
override val name: String,
override val type: String,
override val isTest: Boolean,
override val isFileBased: Boolean,
override val thread: Long,
override val time: Long,
) : TargetEvent
data class FinishTarget(
override val name: String,
override val type: String,
override val isTest: Boolean,
override val isFileBased: Boolean,
override val thread: Long,
override val time: Long,
) : TargetEvent
data class CpuMemoryStatistics(
val heapUsed: Long,
val heapMax: Long,
val nonHeapUsed: Long,
val nonHeapMax: Long,
val cpu: Long,
val time: Long,
)