From 5454ca89286b6c2454fc25859a5a09ebac71d614 Mon Sep 17 00:00:00 2001 From: "Vitaliy.Bibaev" Date: Thu, 7 May 2020 21:00:32 +0300 Subject: [PATCH] IDEA-240352 MLFeaturesUtil.classNameSafeCache leaks references to plugin classes after plugin unload GitOrigin-RevId: 25ccba01ad0139e645ec079fe85044cfce345b5a --- .../com/intellij/completion/ml/MLFeaturesUtil.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/plugins/stats-collector/src/com/intellij/completion/ml/MLFeaturesUtil.kt b/plugins/stats-collector/src/com/intellij/completion/ml/MLFeaturesUtil.kt index 5047e4c461ff..55dfc92b5956 100644 --- a/plugins/stats-collector/src/com/intellij/completion/ml/MLFeaturesUtil.kt +++ b/plugins/stats-collector/src/com/intellij/completion/ml/MLFeaturesUtil.kt @@ -1,11 +1,11 @@ // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.completion.ml +import com.google.common.cache.Cache +import com.google.common.cache.CacheBuilder import com.intellij.codeInsight.completion.CompletionLocation import com.intellij.codeInsight.completion.CompletionService import com.intellij.codeInsight.completion.CompletionSorter -import com.google.common.cache.CacheBuilder -import com.google.common.cache.CacheLoader import com.intellij.codeInsight.completion.ml.MLFeatureValue import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElementWeigher @@ -31,17 +31,14 @@ object MLFeaturesUtil { private val THIRD_PARTY_NAME = ClassNames("third.party", "third.party") - private val classNameSafeCache = CacheBuilder + private val CLASS_NAMES_CACHE: Cache = CacheBuilder .newBuilder() - .softValues() .maximumSize(100) - .build(object : CacheLoader, ClassNames>() { - override fun load(clazz: Class<*>) = if (getPluginInfo(clazz).isSafeToReport()) clazz.getNames() else THIRD_PARTY_NAME - }) + .build() private fun getClassNameSafe(feature: MLFeatureValue.ClassNameValue): String { val clazz = feature.value - val names = classNameSafeCache[clazz] + val names = CLASS_NAMES_CACHE.get(clazz.name) { if (getPluginInfo(clazz).isSafeToReport()) clazz.getNames() else THIRD_PARTY_NAME } return if (feature.useSimpleName) names.simpleName else names.fullName }