fix javadoc incremental reparse; add diagnostics for stub-ast mismatches caused by such events

This commit is contained in:
peter
2015-07-29 20:27:13 +02:00
parent d1106ea870
commit 1bb9fe2d96
2 changed files with 19 additions and 3 deletions
@@ -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;