From 42bde555b41dbe44794bb76cc53d870dbdf49b02 Mon Sep 17 00:00:00 2001 From: Dmitry Kozhevnikov Date: Mon, 23 Apr 2018 20:14:04 +0300 Subject: [PATCH] CPP-8459: Move possibly lengthy isValid() computation out of the synchronized method Review: IDEA-CR-32023 --- platform/usageView/src/com/intellij/usages/impl/Node.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/usageView/src/com/intellij/usages/impl/Node.java b/platform/usageView/src/com/intellij/usages/impl/Node.java index 570c78ef6ebe..7ee5a1c5bfb5 100644 --- a/platform/usageView/src/com/intellij/usages/impl/Node.java +++ b/platform/usageView/src/com/intellij/usages/impl/Node.java @@ -92,13 +92,19 @@ public abstract class Node extends DefaultMutableTreeNode { return isFlagSet(EXCLUDED_MASK); } - final synchronized void update(@NotNull UsageView view, @NotNull Consumer edtNodeChangedQueue) { + final void update(@NotNull UsageView view, @NotNull Consumer edtNodeChangedQueue) { // performance: always update in background because smart pointer' isValid() can cause PSI chameleons expansion which is ridiculously expensive in cpp assert !ApplicationManager.getApplication().isDispatchThread(); boolean isDataValid = isDataValid(); boolean isReadOnly = isDataReadOnly(); String text = getText(view); + doUpdate(edtNodeChangedQueue, isDataValid, isReadOnly, text); + } + private synchronized void doUpdate(@NotNull Consumer edtNodeChangedQueue, + boolean isDataValid, + boolean isReadOnly, + String text) { boolean cachedValid = isValid(); boolean cachedReadOnly = isFlagSet(CACHED_READ_ONLY_MASK);