Skip to content

Commit b349357

Browse files
authored
Merge pull request #2283 from digma-ai/navigation-discovery-blackout
Navigation discovery blackout Closes #1969
2 parents 121d8a2 + a18618a commit b349357

35 files changed

+569
-897
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.digma.intellij.plugin.document;
2+
3+
import org.digma.intellij.plugin.process.ProcessContext;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
public class BuildDocumentInfoProcessContext extends ProcessContext {
7+
8+
public BuildDocumentInfoProcessContext(@NotNull String processName) {
9+
super(processName);
10+
}
11+
12+
}

ide-common/src/main/java/org/digma/intellij/plugin/editor/DocumentChangeListener.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
import com.intellij.util.*;
1313
import com.intellij.util.Alarm.ThreadToUse;
1414
import org.digma.intellij.plugin.common.*;
15-
import org.digma.intellij.plugin.document.DocumentInfoService;
15+
import org.digma.intellij.plugin.document.*;
1616
import org.digma.intellij.plugin.errorreporting.ErrorReporter;
1717
import org.digma.intellij.plugin.log.Log;
1818
import org.digma.intellij.plugin.model.discovery.DocumentInfo;
19+
import org.digma.intellij.plugin.process.ProcessManager;
1920
import org.digma.intellij.plugin.psi.*;
2021
import org.jetbrains.annotations.*;
2122

@@ -73,7 +74,7 @@ private void addDocumentListener(@NotNull Editor editor, @NotNull VirtualFile vi
7374

7475
document.addDocumentListener(new DocumentListener() {
7576

76-
private final Alarm documentChangeAlarm = AlarmFactory.getInstance().create(ThreadToUse.POOLED_THREAD,parentDisposable);
77+
private final Alarm documentChangeAlarm = AlarmFactory.getInstance().create(ThreadToUse.POOLED_THREAD, parentDisposable);
7778

7879
@Override
7980
public void documentChanged(@NotNull DocumentEvent event) {
@@ -142,13 +143,17 @@ private void processDocumentChanged(@NotNull PsiFileCachedValueWithUri psiFileCa
142143

143144
LanguageService languageService = LanguageServiceLocator.getInstance(project).locate(psiFileCachedValue.getValue().getLanguage());
144145

145-
BuildDocumentInfoProcessContext.buildDocumentInfoUnderProcess(project, psiFileCachedValue.getValue().getName(), progressIndicator -> {
146-
var context = new BuildDocumentInfoProcessContext(progressIndicator);
146+
var processName = "DocumentChangeListener.buildDocumentInfo";
147+
var context = new BuildDocumentInfoProcessContext(processName);
148+
Runnable runnable = () -> {
147149
DocumentInfo documentInfo = languageService.buildDocumentInfo(psiFileCachedValue, fileEditor, context);
148150
Log.log(LOGGER::debug, "got DocumentInfo for {}", psiFileCachedValue.getValue().getVirtualFile());
149151
documentInfoService.addCodeObjects(psiFileCachedValue.getValue(), documentInfo);
150152
Log.log(LOGGER::debug, "documentInfoService updated with DocumentInfo for {}", psiFileCachedValue.getValue().getVirtualFile());
151-
});
153+
};
154+
var processResult = project.getService(ProcessManager.class).runTaskUnderProcess(runnable, context, true, 2, false);
155+
Log.log(LOGGER::trace, "buildDocumentInfo completed {}", processResult);
156+
context.logErrors(LOGGER, project);
152157
}
153158

154159

ide-common/src/main/java/org/digma/intellij/plugin/editor/EditorEventsHandler.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
import com.intellij.psi.*;
99
import com.intellij.util.*;
1010
import org.digma.intellij.plugin.common.*;
11-
import org.digma.intellij.plugin.document.DocumentInfoService;
11+
import org.digma.intellij.plugin.document.*;
1212
import org.digma.intellij.plugin.errorreporting.ErrorReporter;
1313
import org.digma.intellij.plugin.log.Log;
1414
import org.digma.intellij.plugin.model.discovery.*;
15+
import org.digma.intellij.plugin.process.ProcessManager;
1516
import org.digma.intellij.plugin.psi.*;
1617
import org.jetbrains.annotations.NotNull;
1718

@@ -130,7 +131,7 @@ when editor with class A is opened and clicking another class ,say B, a caretPos
130131

131132
Log.log(LOGGER::trace, "handling new open file:{}", newFile);
132133

133-
//some language services need the selected editor , for exampl e CSharpLanguageService need to take
134+
//some language services need the selected editor , for example e CSharpLanguageService need to take
134135
// getProjectModelId from the selected editor. it may be null
135136
var newEditor = editorManagerEvent.getNewEditor();
136137

@@ -175,8 +176,9 @@ when editor with class A is opened and clicking another class ,say B, a caretPos
175176
Log.log(LOGGER::trace, "Found language service {} for :{}", languageService, newFile);
176177

177178

178-
BuildDocumentInfoProcessContext.buildDocumentInfoUnderProcess(project, psiFile.getName(), progressIndicator -> {
179-
var context = new BuildDocumentInfoProcessContext(progressIndicator);
179+
var processName = "EditorEventsHandler.buildDocumentInfo";
180+
var context = new BuildDocumentInfoProcessContext(processName);
181+
Runnable runnable = () -> {
180182
DocumentInfo documentInfo = languageService.buildDocumentInfo(psiFileCachedValue, newEditor, context);
181183
Log.log(LOGGER::trace, "got DocumentInfo for :{}", newFile);
182184
//get the value again, maybe it was invalidated
@@ -185,7 +187,12 @@ when editor with class A is opened and clicking another class ,say B, a caretPos
185187
documentInfoService.addCodeObjects(upToDatePsiFile, documentInfo);
186188
Log.log(LOGGER::trace, "documentInfoService updated with DocumentInfo for :{}", newFile);
187189
}
188-
});
190+
};
191+
192+
var processResult = project.getService(ProcessManager.class).runTaskUnderProcess(runnable, context, true, 2, false);
193+
Log.log(LOGGER::trace, "buildDocumentInfo completed {}", processResult);
194+
context.logErrors(LOGGER, project);
195+
189196
}
190197
} else {
191198
Log.log(LOGGER::trace, "documentInfoService already contains :{}", newFile);

ide-common/src/main/java/org/digma/intellij/plugin/psi/BuildDocumentInfoProcessContext.java

Lines changed: 0 additions & 122 deletions
This file was deleted.

ide-common/src/main/java/org/digma/intellij/plugin/psi/LanguageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.intellij.psi.*;
1111
import kotlin.Pair;
1212
import org.digma.intellij.plugin.common.*;
13-
import org.digma.intellij.plugin.document.DocumentInfoService;
13+
import org.digma.intellij.plugin.document.*;
1414
import org.digma.intellij.plugin.instrumentation.*;
1515
import org.digma.intellij.plugin.log.Log;
1616
import org.digma.intellij.plugin.model.discovery.*;

ide-common/src/main/java/org/digma/intellij/plugin/psi/NoOpLanguageService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.intellij.openapi.vfs.VirtualFile;
88
import com.intellij.psi.*;
99
import kotlin.Pair;
10+
import org.digma.intellij.plugin.document.BuildDocumentInfoProcessContext;
1011
import org.digma.intellij.plugin.instrumentation.*;
1112
import org.digma.intellij.plugin.model.discovery.*;
1213
import org.jetbrains.annotations.*;

ide-common/src/main/kotlin/org/digma/intellij/plugin/bulklistener/AbstractBulkFileChangeListener.kt

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,11 @@ package org.digma.intellij.plugin.bulklistener
33
import com.intellij.ide.impl.ProjectUtil
44
import com.intellij.openapi.diagnostic.Logger
55
import com.intellij.openapi.project.Project
6-
import com.intellij.openapi.roots.ProjectFileIndex
7-
import com.intellij.openapi.vfs.VirtualFile
86
import com.intellij.openapi.vfs.newvfs.BulkFileListener
97
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
108
import org.digma.intellij.plugin.common.Backgroundable
11-
import org.digma.intellij.plugin.common.ReadActions
129
import org.digma.intellij.plugin.common.isProjectValid
13-
import org.digma.intellij.plugin.common.isValidVirtualFile
1410
import org.digma.intellij.plugin.log.Log
15-
import java.util.function.Supplier
1611

1712
abstract class AbstractBulkFileChangeListener : BulkFileListener {
1813

@@ -34,27 +29,4 @@ abstract class AbstractBulkFileChangeListener : BulkFileListener {
3429

3530
abstract fun processEvents(project: Project, events: List<VFileEvent>)
3631

37-
38-
protected fun isRelevantFile(project: Project, file: VirtualFile?): Boolean {
39-
return isProjectValid(project) &&
40-
file != null &&
41-
!file.isDirectory
42-
43-
44-
}
45-
46-
protected fun isValidRelevantFile(project: Project, file: VirtualFile?): Boolean {
47-
return isRelevantFile(project, file) &&
48-
isValidVirtualFile(file) &&
49-
file != null &&
50-
isInContent(project, file)
51-
52-
}
53-
54-
55-
protected fun isInContent(project: Project, file: VirtualFile): Boolean {
56-
return ReadActions.ensureReadAction(Supplier {
57-
ProjectFileIndex.getInstance(project).isInContent(file)
58-
})
59-
}
6032
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.digma.intellij.plugin.process
2+
3+
import com.intellij.openapi.diagnostic.Logger
4+
import com.intellij.openapi.progress.EmptyProgressIndicator
5+
import com.intellij.openapi.progress.ProgressIndicator
6+
import com.intellij.openapi.project.Project
7+
import org.digma.intellij.plugin.errorreporting.ErrorReporter
8+
import org.digma.intellij.plugin.errorreporting.SEVERITY_MEDIUM_TRY_FIX
9+
import org.digma.intellij.plugin.errorreporting.SEVERITY_PROP_NAME
10+
import org.digma.intellij.plugin.log.Log
11+
12+
13+
open class ProcessContext(val processName: String) {
14+
15+
/**
16+
* indicator needs to be a new one every time a process starts.
17+
* maybe the indicator instance created here on initialization will not be used
18+
* because the process manager will replace it with a new one for every retry.
19+
* it is initialized mainly for avoiding a nullable var for comfort in code.
20+
*/
21+
var indicator: ProgressIndicator = EmptyProgressIndicator()
22+
23+
24+
//key is error hint to send to org.digma.intellij.plugin.errorreporting.ErrorReporter
25+
private val errors = mutableMapOf<String, MutableList<Throwable>>()
26+
27+
28+
fun addError(hint: String, e: Throwable) {
29+
errors.computeIfAbsent(hint) { mutableListOf() }.add(e)
30+
}
31+
32+
fun clearErrors(hint: String) {
33+
errors.computeIfAbsent(hint) { mutableListOf() }.clear()
34+
}
35+
36+
fun hasErrors(): Boolean {
37+
return errors.filter { entry -> entry.value.isNotEmpty() }.isNotEmpty()
38+
}
39+
40+
//returns read only map
41+
fun errorsList(): Map<String, List<Throwable>> {
42+
return errors.toMap().mapValues { entry -> entry.value.toList() }
43+
}
44+
45+
46+
fun logErrors(logger: Logger, project: Project) {
47+
if (hasErrors()) {
48+
errorsList().forEach { entry ->
49+
val hint = entry.key
50+
val errors = entry.value
51+
errors.forEach { err ->
52+
Log.warnWithException(logger, err, "Exception in $processName")
53+
ErrorReporter.getInstance().reportError(
54+
project, "$processName.$hint", err, mapOf(
55+
SEVERITY_PROP_NAME to SEVERITY_MEDIUM_TRY_FIX
56+
)
57+
)
58+
}
59+
}
60+
}
61+
}
62+
63+
}

0 commit comments

Comments
 (0)