From 95760201eef18c89b7d26667a71a5392ec79aea5 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 5 Feb 2016 10:34:59 +0100 Subject: [PATCH] LeakHunter: take read action when evaluating toString, some PSI elements require that --- .../src/com/intellij/util/DebugReflectionUtil.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platform/core-impl/src/com/intellij/util/DebugReflectionUtil.java b/platform/core-impl/src/com/intellij/util/DebugReflectionUtil.java index 3882f8c1e57c..3b0889d8340f 100644 --- a/platform/core-impl/src/com/intellij/util/DebugReflectionUtil.java +++ b/platform/core-impl/src/com/intellij/util/DebugReflectionUtil.java @@ -15,6 +15,8 @@ */ package com.intellij.util; +import com.intellij.openapi.application.AccessToken; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.concurrency.AtomicFieldUpdater; import com.intellij.util.containers.FList; @@ -156,6 +158,7 @@ public class DebugReflectionUtil { String result = ""; while (backLink != null) { String valueStr; + AccessToken token = ReadAction.start(); try { valueStr = backLink.value instanceof FList ? "FList (size="+((FList)backLink.value).size()+")" : @@ -166,6 +169,9 @@ public class DebugReflectionUtil { catch (Throwable e) { valueStr = "(" + e.getMessage() + " while computing .toString())"; } + finally { + token.finish(); + } Field field = backLink.field; String fieldName = field == null ? "?" : field.getDeclaringClass().getName()+"."+field.getName(); result += "via '" + fieldName + "'; Value: '" + valueStr + "' of " + backLink.value.getClass() + "\n";