mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix javadoc incremental reparse; add diagnostics for stub-ast mismatches caused by such events
This commit is contained in:
@@ -25,6 +25,7 @@ import com.intellij.lang.java.parser.JavadocParser;
|
||||
import com.intellij.lexer.Lexer;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.impl.source.javadoc.*;
|
||||
import com.intellij.psi.tree.*;
|
||||
@@ -122,6 +123,8 @@ public interface JavaDocElementType {
|
||||
|
||||
@Override
|
||||
public boolean isParsable(final CharSequence buffer, Language fileLanguage, final Project project) {
|
||||
if (!StringUtil.startsWith(buffer, "/**") || !StringUtil.endsWith(buffer, "*/")) return false;
|
||||
|
||||
Lexer lexer = JavaParserDefinition.createLexer(LanguageLevelProjectExtension.getInstance(project).getLanguageLevel());
|
||||
lexer.start(buffer);
|
||||
if (lexer.getTokenType() == DOC_COMMENT) {
|
||||
|
||||
@@ -20,9 +20,8 @@ import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.FileViewProvider;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.DebugUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -54,6 +53,20 @@ public abstract class StubTreeLoader {
|
||||
msg += ", file.class=" + psiFile.getClass();
|
||||
msg += ", file.lang=" + psiFile.getLanguage();
|
||||
msg += ", modStamp=" + psiFile.getModificationStamp();
|
||||
|
||||
if (!(psiFile instanceof PsiCompiledElement)) {
|
||||
String text = psiFile.getText();
|
||||
PsiFile fromText = PsiFileFactory.getInstance(psiFile.getProject()).createFileFromText(psiFile.getName(), psiFile.getFileType(), text);
|
||||
if (fromText.getLanguage().equals(psiFile.getLanguage())) {
|
||||
boolean consistent = DebugUtil.psiToString(psiFile, true).equals(DebugUtil.psiToString(fromText, true));
|
||||
if (consistent) {
|
||||
msg += "\n tree consistent";
|
||||
} else {
|
||||
msg += "\n AST INCONSISTENT, perhaps after incremental reparse; " + fromText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
msg += "\n stub debugInfo=" + stubTree.getDebugInfo();
|
||||
msg += "\n document before=" + prevCachedDocument;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user