"no PSI for file" logging for DBE-1210

This commit is contained in:
Gregory.Shrago
2015-06-17 23:41:37 +03:00
parent 910433e916
commit 0a8b82988d
2 changed files with 41 additions and 12 deletions
@@ -20,7 +20,10 @@ import com.intellij.lang.FileASTNode;
import com.intellij.lang.Language;
import com.intellij.navigation.ItemPresentation;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Attachment;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
@@ -45,6 +48,7 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Collection;
import java.util.List;
/**
* @author yole
@@ -486,6 +490,41 @@ public class PsiUtilCore {
}
}
/**
* Tries to find PSI file for a virtual file and throws assertion error with debug info if it is null.
*/
@NotNull
public static PsiFile getPsiFile(@NotNull Project project, @NotNull VirtualFile file) {
PsiManager psiManager = PsiManager.getInstance(project);
PsiFile psi = psiManager.findFile(file);
if (psi != null) return psi;
FileType fileType = file.getFileType();
FileViewProvider viewProvider = psiManager.findViewProvider(file);
Document document = FileDocumentManager.getInstance().getDocument(file);
StringBuilder sb = new StringBuilder();
sb.append("valid=").append(file.isValid()).
append(" isDirectory=").append(file.isDirectory()).
append(" hasDocument=").append(document != null).
append(" length=").append(file.getLength());
sb.append("\nproject=").append(project.getName()).
append(" default=").append(project.isDefault()).
append(" open=").append(project.isOpen());;
sb.append("\nfileType=").append(fileType.getName()).append("/").append(fileType.getClass().getName());
sb.append("\nviewProvider=").append(viewProvider == null ? "null" : viewProvider.getClass().getName());
if (viewProvider != null) {
List<PsiFile> files = viewProvider.getAllFiles();
sb.append(" language=").append(viewProvider.getBaseLanguage().getID());
sb.append(" physical=").append(viewProvider.isPhysical());
sb.append(" rootCount=").append(files.size());
for (PsiFile o : files) {
sb.append("\n root=").append(o.getLanguage().getID()).append("/").append(o.getClass().getName());
}
}
LOG.error("no PSI for file '" + file.getName() + "'", new Attachment(file.getPresentableUrl(), sb.toString()));
throw new AssertionError();
}
/**
* @deprecated use CompletionUtil#getOriginalElement where appropriate instead
*/
@@ -47,10 +47,9 @@ import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.SingleRootFileViewProvider;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.testFramework.LightVirtualFile;
import com.intellij.ui.components.JBScrollBar;
import com.intellij.util.DocumentUtil;
@@ -559,16 +558,7 @@ public class LanguageConsoleImpl extends ConsoleViewImpl implements LanguageCons
@NotNull
protected PsiFile createFile(@NotNull Project project, @NotNull VirtualFile virtualFile) {
PsiFile file = PsiManager.getInstance(project).findFile(virtualFile);
if (file == null) {
Language language = new SingleRootFileViewProvider(PsiManager.getInstance(project), virtualFile).getBaseLanguage();
throw new AssertionError(String.format("no PSI for '%s'\nfile valid=%s, fileType=%s, language=%s",
virtualFile.getName(),
virtualFile.isValid(),
virtualFile.getFileType(),
language));
}
return file;
return PsiUtilCore.getPsiFile(project, virtualFile);
}
boolean isHistoryViewerForceAdditionalColumnsUsage() {