PsiFileImpl (@NotNull PsiFileImpl originalFile, @NotNull FileViewProvider providerCopy) { FileViewProvider viewProvider = originalFile.getViewProvider(); Language language = originalFile.getLanguage(); PsiFile file = providerCopy.getPsi(language); if (file != null && !(file instanceof PsiFileImpl)) { throw new RuntimeException("View provider " + viewProvider + " refused to provide PsiFileImpl for " + language + details(providerCopy, viewProvider) +" and returned this strange thing instead of PsiFileImpl: "+file +" ("+file.getClass()+")"); } PsiFileImpl newFile = (PsiFileImpl)file; if (newFile == null && language == PlainTextLanguage.INSTANCE && originalFile == viewProvider.getPsi(viewProvider.getBaseLanguage())) { newFile = (PsiFileImpl)providerCopy.getPsi(providerCopy.getBaseLanguage()); } if (newFile == null) { throw new RuntimeException("View provider " + viewProvider + " refused to parse text with " + language + details(providerCopy, viewProvider)); } return newFile; }