From 224cfa336ec5a8f6269a5e678fb67151e9ea6877 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Tue, 15 Aug 2023 23:59:59 +0200 Subject: [PATCH] json schema: do not acquire any locks in `JsonSchemaServiceImpl$MyState.reset` (IDEA-327761) GitOrigin-RevId: 4f0791f7728069caa76779666662087cc405cd87 --- .../impl/JsonSchemaServiceImpl.java | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java index 90e8ed02d91f..0c06d13c6e03 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java @@ -21,6 +21,7 @@ import com.intellij.openapi.vfs.impl.http.HttpVirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.util.SmartList; +import com.intellij.util.concurrency.SynchronizedClearableLazy; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBusConnection; import com.jetbrains.jsonSchema.*; @@ -33,7 +34,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; import java.util.function.Supplier; @@ -511,33 +511,12 @@ public class JsonSchemaServiceImpl implements JsonSchemaService, ModificationTra private static final class MyState { @NotNull private final Supplier> myFactory; @NotNull private final Project myProject; - @NotNull private final ClearableLazyValue>> myData; - private final AtomicBoolean myIsComputed = new AtomicBoolean(false); + @NotNull private final SynchronizedClearableLazy>> myData; private MyState(@NotNull final Supplier> factory, @NotNull Project project) { myFactory = factory; myProject = project; - myData = new ClearableLazyValue<>() { - @NotNull - @Override - public Map> compute() { - Map> map = createFileProviderMap(myFactory.get(), myProject); - myIsComputed.set(true); - return map; - } - - @NotNull - @Override - public synchronized Map> getValue() { - return super.getValue(); - } - - @Override - public synchronized void drop() { - myIsComputed.set(false); - super.drop(); - } - }; + myData = new SynchronizedClearableLazy<>(() -> createFileProviderMap(myFactory.get(), myProject)); } public void reset() { @@ -576,7 +555,7 @@ public class JsonSchemaServiceImpl implements JsonSchemaService, ModificationTra } public boolean isComputed() { - return myIsComputed.get(); + return myData.isInitialized(); } @NotNull