protected SingleRootFileViewProvider(
     @NotNull PsiManager manager,
     @NotNull VirtualFile virtualFile,
     final boolean physical,
     @NotNull Language language) {
   myManager = manager;
   myVirtualFile = virtualFile;
   myEventSystemEnabled = physical;
   myBaseLanguage = language;
   setContent(new VirtualFileContent());
   myPhysical =
       isEventSystemEnabled()
           && !(virtualFile instanceof LightVirtualFile)
           && !(virtualFile.getFileSystem() instanceof NonPhysicalFileSystem);
   myExclusionManager = ProjectFileExclusionManager.SERVICE.getInstance(manager.getProject());
 }
  private PsiFile createFile() {
    try {
      final VirtualFile vFile = getVirtualFile();
      if (vFile.isDirectory()) return null;
      if (isIgnored()) return null;

      final Project project = myManager.getProject();
      if (isPhysical()) { // check directories consistency
        final VirtualFile parent = vFile.getParent();
        if (parent == null) return null;
        final PsiDirectory psiDir = getManager().findDirectory(parent);
        if (psiDir == null) return null;
      }

      FileType fileType = vFile.getFileType();
      PsiFile file = null;
      if (fileType.isBinary() || vFile.isSpecialFile()) {
        // TODO check why ClsFileImpl doesn't created automatically with create method
        file = new ClsFileImpl((PsiManagerImpl) getManager(), this);
        // file = new PsiBinaryFileImpl((PsiManagerImpl) getManager(), this);
      } else {
        if (!isTooLarge(vFile)) {
          final PsiFile psiFile = createFile(getBaseLanguage());
          if (psiFile != null) file = psiFile;
        } else {
          file = new PsiPlainTextFileImpl(this);
        }
      }
      return file;
    } catch (ProcessCanceledException e) {
      e.printStackTrace();
      throw e;

    } catch (Throwable e) {
      e.printStackTrace();
      LOG.error(e);
      return null;
    }
  }
 public SingleRootFileViewProvider(
     @NotNull PsiManager manager, @NotNull VirtualFile virtualFile, final boolean physical) {
   this(manager, virtualFile, physical, calcBaseLanguage(virtualFile, manager.getProject()));
 }