11package org.digma.intellij.plugin.ui.errors
22
3+ import com.fasterxml.jackson.core.type.TypeReference
34import com.fasterxml.jackson.databind.JsonNode
5+ import com.fasterxml.jackson.databind.ObjectReader
46import com.fasterxml.jackson.databind.node.NullNode
57import com.fasterxml.jackson.databind.node.ObjectNode
68import com.intellij.openapi.project.Project
@@ -24,6 +26,7 @@ class ErrorsMessageRouterHandler(project: Project) : BaseCommonMessageRouterHand
2426 " ERRORS/OPEN_RAW_ERROR_STACK_TRACE_IN_EDITOR" -> openStackTrace(project, requestJsonNode)
2527 " ERRORS/GO_TO_CODE_LOCATION" -> navigateToCode(project, requestJsonNode)
2628 " ERRORS/GET_FILES_URIS" -> getFilesUrls(project, browser, requestJsonNode)
29+ " ERRORS/GO_TO_TRACE" -> goToTrace(project, browser, requestJsonNode)
2730
2831 else -> return false
2932 }
@@ -32,6 +35,7 @@ class ErrorsMessageRouterHandler(project: Project) : BaseCommonMessageRouterHand
3235 }
3336
3437
38+
3539 private fun getErrorsData (project : Project , browser : CefBrowser , requestJsonNode : JsonNode ) {
3640 getPayloadFromRequest(requestJsonNode)?.let { payload ->
3741 val spanCodeObjectId = payload.get(" spanCodeObjectId" )?.takeIf { it !is NullNode }?.asText()
@@ -43,7 +47,7 @@ class ErrorsMessageRouterHandler(project: Project) : BaseCommonMessageRouterHand
4347 val errorsDataWrapper = objectMapper.createObjectNode()
4448 errorsDataWrapper.set<JsonNode >(" errors" , errorsData)
4549 val setErrorsDataMessage = SetErrorsDataMessage (errorsDataWrapper)
46- serializeAndExecuteWindowPostMessageJavaScript(browser, setErrorsDataMessage)
50+ serializeAndExecuteWindowPostMessageJavaScript(browser, setErrorsDataMessage, project )
4751 }
4852 }
4953 }
@@ -56,29 +60,61 @@ class ErrorsMessageRouterHandler(project: Project) : BaseCommonMessageRouterHand
5660 val errorDetailsWrapper = objectMapper.createObjectNode()
5761 errorDetailsWrapper.set<JsonNode >(" details" , errorDetails)
5862 val setErrorDetailsMessage = SetErrorsDetailsMessage (errorDetailsWrapper)
59- serializeAndExecuteWindowPostMessageJavaScript(browser, setErrorDetailsMessage)
63+ serializeAndExecuteWindowPostMessageJavaScript(browser, setErrorDetailsMessage, project )
6064 }
6165 }
6266 }
6367
6468 private fun openStackTrace (project : Project , requestJsonNode : JsonNode ) {
69+ getPayloadFromRequest(requestJsonNode)?.let { payload ->
70+ val stackTrace = payload.get(" stackTrace" )?.takeIf { it !is NullNode }?.asText()
71+ if (stackTrace != null ) {
72+ ErrorsService .getInstance(project).openRawStackTrace(stackTrace)
73+ }
74+
75+ }
6576 }
6677
6778 private fun navigateToCode (project : Project , requestJsonNode : JsonNode ) {
79+ getPayloadFromRequest(requestJsonNode)?.let { payload ->
80+ val uri = payload.get(" URI" )?.takeIf { it !is NullNode }?.asText()
81+ val lineNumber = payload.get(" lineNumber" )?.takeIf { it !is NullNode }?.asText() ? : " 1"
82+ val lastInstanceCommitId = payload.get(" lastInstanceCommitId" )?.takeIf { it !is NullNode }?.asText()
83+
84+ if (uri != null ) {
85+ ErrorsService .getInstance(project).openErrorFrameWorkspaceFile(uri, lineNumber, lastInstanceCommitId)
86+ }
87+ }
6888 }
6989
7090 private fun getFilesUrls (project : Project , browser : CefBrowser , requestJsonNode : JsonNode ) {
7191 getPayloadFromRequest(requestJsonNode)?.let { payload ->
7292
7393 val codeObjectIds = payload.get(" codeObjectIds" )
94+ val reader: ObjectReader = objectMapper.readerFor(object : TypeReference <List <String >>() {})
95+ val list: List <String > = reader.readValue(codeObjectIds)
7496
97+ val workspaceUrls = ErrorsService .getInstance(project).getWorkspaceUris(list)
7598
7699 val filesUrlsWrapper = objectMapper.createObjectNode()
77- filesUrlsWrapper.set<ObjectNode >(" filesURIs" , objectMapper.createObjectNode( ))
100+ filesUrlsWrapper.set<ObjectNode >(" filesURIs" , objectMapper.valueToTree< JsonNode >(workspaceUrls ))
78101 val setFilesUrlsMessage = SetFilesUrlsMessage (filesUrlsWrapper)
79- serializeAndExecuteWindowPostMessageJavaScript(browser, setFilesUrlsMessage)
102+ serializeAndExecuteWindowPostMessageJavaScript(browser, setFilesUrlsMessage, project )
80103
81104 }
82105 }
83106
107+
108+ private fun goToTrace (project : Project , browser : CefBrowser , requestJsonNode : JsonNode ) {
109+ getPayloadFromRequest(requestJsonNode)?.let { payload ->
110+ val traceId = payload.get(" traceId" )?.takeIf { it !is NullNode }?.asText()
111+ val spanName = payload.get(" spanName" )?.takeIf { it !is NullNode }?.asText()
112+ val spanCodeObjectId = payload.get(" spanCodeObjectId" )?.takeIf { it !is NullNode }?.asText()
113+
114+ if (traceId != null && spanName != null ) {
115+ ErrorsService .getInstance(project).openTrace(traceId, spanName, spanCodeObjectId)
116+ }
117+ }
118+ }
119+
84120}
0 commit comments