1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package com.intellij.psi.stubs;
import com.intellij.diagnostic.LogMessageEx;
import com.intellij.openapi.diagnostic.Attachment;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiCompiledElement;
import com.intellij.psi.impl.source.PsiFileWithStubSupport;
import com.intellij.util.indexing.FileBasedIndex;
import java.util.List;
/**
* Author: dmitrylomov
*/
public class StubProcessingHelper extends StubProcessingHelperBase {
private final FileBasedIndex myFileBasedIndex;
public StubProcessingHelper(FileBasedIndex fileBasedIndex) {
myFileBasedIndex = fileBasedIndex;
}
@Override
protected void onInternalError(final VirtualFile file) {
// requestReindex() may want to acquire write lock (for indices not requiring content loading)
// thus, because here we are under read lock, need to use invoke later
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
myFileBasedIndex.requestReindex(file);
}
}, ModalityState.NON_MODAL);
}
@Override
protected Object stubTreeAndIndexDoNotMatch(StubTree stubTree,
PsiFileWithStubSupport psiFile,
List<StubElement<?>> plained,
VirtualFile virtualFile,
StubTree stubTreeFromIndex) {
String details = "Please report the problem to JetBrains with the file attached";
details += "\npsiFile" + psiFile;
details += "\npsiFile.class" + psiFile.getClass();
details += "\npsiFile.lang" + psiFile.getLanguage();
String fileText = psiFile instanceof PsiCompiledElement ? "compiled" : psiFile.getText();
return LogMessageEx.createEvent("PSI and index do not match",
details,
new Attachment(virtualFile != null ? virtualFile.getPath() + "_file.txt" : "vFile.txt", fileText),
new Attachment("stubTree.txt", ((PsiFileStubImpl)stubTree.getRoot()).printTree()),
new Attachment("stubTreeFromIndex.txt", stubTreeFromIndex == null
? "null"
: ((PsiFileStubImpl)stubTreeFromIndex.getRoot()).printTree()));
}
}
|