From 78c432bafcbcaf846d74b63689caed0d435f4101 Mon Sep 17 00:00:00 2001 From: Aleksey Dobrynin Date: Thu, 27 Nov 2025 14:50:43 +0100 Subject: [PATCH] [test, diff] IDEA-382647 Use ReadAction to ensure consistent access to PSI elements GitOrigin-RevId: dd2f99d8028e9103fa7264719e91ac58a42fe1b2 --- .../execution/testframework/actions/TestDiffContent.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/platform/testRunner/src/com/intellij/execution/testframework/actions/TestDiffContent.kt b/platform/testRunner/src/com/intellij/execution/testframework/actions/TestDiffContent.kt index c55c7e6a429b..cd940a2081f1 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/actions/TestDiffContent.kt +++ b/platform/testRunner/src/com/intellij/execution/testframework/actions/TestDiffContent.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.execution.testframework.actions import com.intellij.diff.DiffContentFactory @@ -7,6 +7,7 @@ import com.intellij.diff.contents.DiffContentBase import com.intellij.diff.contents.DocumentContent import com.intellij.diff.util.DiffUserDataKeysEx import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.ReadAction import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.command.undo.UndoManager import com.intellij.openapi.diff.DiffBundle @@ -114,8 +115,9 @@ class TestDiffContent( return TestDiffContent(project, diffContent, text, elemPtr).apply { val originalLineConvertor = original.getUserData(DiffUserDataKeysEx.LINE_NUMBER_CONVERTOR) putUserData(DiffUserDataKeysEx.LINE_NUMBER_CONVERTOR, IntUnaryOperator { value -> - if (!element.isValid) return@IntUnaryOperator -1 - val line = value + original.document.getLineNumber(element.startOffset) + val valid = ReadAction.compute { element.isValid } + if (!valid) return@IntUnaryOperator -1 + val line = ReadAction.compute { value + original.document.getLineNumber(element.startOffset) } originalLineConvertor?.applyAsInt(line) ?: line }) }