void (Language forcedLanguage) { StringBuilder decodedChars = new StringBuilder(); Place place = new Place(); for (PlaceInfo info : placeInfos) { ShredImpl shred = createShred(info, decodedChars, myHostPsiFile); place.add(shred); info.newInjectionHostRange = shred.getSmartPointer().getRange(); } DocumentWindowImpl documentWindow = new DocumentWindowImpl(myHostDocument, place); String fileName = PathUtil.makeFileName(myHostVirtualFile.getName(), fileExtension); ASTNode[] parsedNodes = parseFile(myLanguage, forcedLanguage, documentWindow, myHostVirtualFile, myHostDocument, myHostPsiFile, myProject, documentWindow.getText(), placeInfos, decodedChars, fileName, myDocumentManagerBase); for (ASTNode node : parsedNodes) { PsiFile psiFile = (PsiFile)node.getPsi(); InjectedFileViewProvider viewProvider = (InjectedFileViewProvider)psiFile.getViewProvider(); synchronized (InjectedLanguageManagerImpl.ourInjectionPsiLock) { if (psiFile.getLanguage() == viewProvider.getBaseLanguage()) { psiFile = createOrMergeInjectedFile(myHostPsiFile, myDocumentManagerBase, place, documentWindow, psiFile, viewProvider); addFileToResults(psiFile); } else { cacheEverything(place, documentWindow, viewProvider, psiFile); InjectedLanguageUtilBase.setHighlightTokens(psiFile, InjectedLanguageUtilBase.getHighlightTokens(psiFile)); } DocumentWindowImpl retrieved = (DocumentWindowImpl)myDocumentManagerBase.getDocument(psiFile); assertEverythingIsAllright(myDocumentManagerBase, retrieved, psiFile); } } }