IJPL-172041 Use ClearableClassValue InspectionVisitorOptimizer.SELF_AND_SUPERS to avoid memory leaks on unloaded classes

GitOrigin-RevId: af221a57257bd2dc8d08365b36185304dfe76cdb
This commit is contained in:
Artem.Bukhonov
2024-11-20 22:44:54 +01:00
committed by intellij-monorepo-bot
parent b3226a47c2
commit 1e3b46d241
2 changed files with 10 additions and 2 deletions

View File

@@ -24,6 +24,7 @@ import com.intellij.psi.impl.source.tree.CompositePsiElement;
import com.intellij.psi.impl.source.tree.LeafElement;
import com.intellij.psi.impl.source.tree.TreeElement;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ClearableClassValue;
import com.intellij.util.containers.CollectionFactory;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -132,9 +133,14 @@ public final class InspectionVisitorOptimizer {
return accepts;
}
private static final ClassValue<Class<?>[]> SELF_AND_SUPERS = new ClassValue<>() {
@ApiStatus.Internal
public static void clearCache() {
SELF_AND_SUPERS.clear();
}
private static final ClearableClassValue<Class<?>[]> SELF_AND_SUPERS = new ClearableClassValue<Class<?>[]>() {
@Override
protected Class<?> @NotNull [] computeValue(@NotNull Class<?> type) {
public Class<?> @NotNull [] computeValueImpl(@NotNull Class<?> type) {
return getAllSupers(type);
}

View File

@@ -3,6 +3,7 @@ package com.intellij.ide.plugins
import com.fasterxml.jackson.databind.type.TypeFactory
import com.intellij.DynamicBundle.LanguageBundleEP
import com.intellij.codeInsight.daemon.impl.InspectionVisitorOptimizer
import com.intellij.configurationStore.jdomSerializer
import com.intellij.configurationStore.runInAutoSaveDisabledMode
import com.intellij.configurationStore.saveProjectsAndApp
@@ -550,6 +551,7 @@ object DynamicPlugins {
jdomSerializer.clearSerializationCaches()
clearPropertyCollectorCache()
InspectionVisitorOptimizer.clearCache()
TypeFactory.defaultInstance().clearCache()
TopHitCache.getInstance().clear()
ActionToolbarImpl.resetAllToolbars()