diff --git a/java/execution/impl/src/com/intellij/execution/AlternativeSdkRootsProvider.kt b/java/execution/impl/src/com/intellij/execution/AlternativeSdkRootsProvider.kt index 97e3c661029c..aa2164618758 100644 --- a/java/execution/impl/src/com/intellij/execution/AlternativeSdkRootsProvider.kt +++ b/java/execution/impl/src/com/intellij/execution/AlternativeSdkRootsProvider.kt @@ -12,6 +12,7 @@ import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.SyntheticLibrary import com.intellij.openapi.roots.ex.ProjectRootManagerEx import com.intellij.openapi.util.EmptyRunnable +import com.intellij.openapi.util.Key import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.vfs.VirtualFile import com.intellij.ui.AppUIUtil @@ -40,16 +41,21 @@ class AlternativeSdkRootsProvider : AdditionalLibraryRootsProvider() { } companion object { - private val storedLibs = mutableListOf() + private val ALTERNATIVE_SDK_LIBS_KEY = Key.create>("ALTERNATIVE_SDK_LIBS_KEY") @JvmStatic fun reindexIfNeeded(project: Project) { if (!Registry.`is`("index.run.configuration.jre")) return - val provider = AdditionalLibraryRootsProvider.EP_NAME.findExtension(AlternativeSdkRootsProvider::class.java)!! + val provider = EP_NAME.findExtension(AlternativeSdkRootsProvider::class.java)!! val additionalProjectLibraries = provider.getAdditionalProjectLibraries(project) - if (additionalProjectLibraries != storedLibs) { - storedLibs.clear() - storedLibs.addAll(additionalProjectLibraries) + val update = synchronized(ALTERNATIVE_SDK_LIBS_KEY) { + val res = additionalProjectLibraries != project.getUserData(ALTERNATIVE_SDK_LIBS_KEY) + if (res) { + project.putUserData(ALTERNATIVE_SDK_LIBS_KEY, additionalProjectLibraries) + } + res + } + if (update) { AppUIUtil.invokeOnEdt { WriteAction.run { ProjectRootManagerEx.getInstanceEx(project).makeRootsChange(EmptyRunnable.getInstance(), false, true)