Add debug info to FileDocumentManagerListener in JavaLibraryModificationTracker which accesses WorkspaceFileIndex

GitOrigin-RevId: d0d23e7e505d73e7c7df1a6197a7cefc9708f500
This commit is contained in:
Liudmila Kornilova
2024-08-26 18:12:59 +02:00
committed by intellij-monorepo-bot
parent 3bd9369d37
commit 840e8558c5

View File

@@ -3,6 +3,8 @@ package com.intellij.java.library;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.Service;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.diagnostic.ThrottledLogger;
import com.intellij.openapi.fileEditor.FileDocumentManagerListener;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
@@ -18,6 +20,8 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.TestOnly;
import static java.util.concurrent.TimeUnit.SECONDS;
/**
* Use this modification tracker for {@link com.intellij.psi.util.CachedValue} which may contain {@link com.intellij.psi.PsiElement}
* instances from libraries only. If a cache value contains only simple non-PsiElement values, e.g. String, List of primitives,
@@ -30,6 +34,8 @@ public final class JavaLibraryModificationTracker implements ModificationTracker
private final ModificationTracker myDumbServiceModificationTracker;
private final ModificationTracker myForcefulReparseModificationTracker; // PsiClass from libraries may become invalid on reparse
private final SimpleModificationTracker myOnContentReloadModificationTracker = new SimpleModificationTracker();
private final static ThrottledLogger THROTTLED_LOG = new ThrottledLogger(Logger.getInstance(JavaLibraryModificationTracker.class), SECONDS.toMillis(30));
private final Throwable creationStack = new Throwable();
public JavaLibraryModificationTracker(Project project) {
myProjectRootManager = ProjectRootManager.getInstance(project);
@@ -42,6 +48,12 @@ public final class JavaLibraryModificationTracker implements ModificationTracker
@Override
public void fileWithNoDocumentChanged(@NotNull VirtualFile file) {
if (!project.isInitialized()) {
THROTTLED_LOG.warn("SearchScope.contains(file) would log an error because WorkspaceFileIndex is not yet initialized. " +
"Probably JavaLibraryModificationTracker was created too early. " +
"See JavaLibraryModificationTracker creation stacktrace: ", creationStack);
return;
}
if (projectLibraryScope.contains(file)) {
myOnContentReloadModificationTracker.incModificationCount();
}