private void renewFile() { if (myFile == null || !myFile.isValid()) { myFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myDocument); myCompiled = myFile instanceof PsiCompiledFile; if (myCompiled) { myFile = ((PsiCompiledFile)myFile).getDecompiledPsiFile(); } if (myFile != null && !myFile.isValid()) { myFile = null; } } if (myFile != null) { myFile.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, Boolean.TRUE); } }
@NotNull private static XmlFileHeader calcXmlFileHeader(final XmlFile file) { if (file instanceof PsiFileEx && ((PsiFileEx)file).isContentsLoaded() && file.getNode().isParsed()) { return computeHeaderByPsi(file); } if (!XmlUtil.isStubBuilding() && file.getFileType() == XmlFileType.INSTANCE) { VirtualFile virtualFile = file.getVirtualFile(); if (virtualFile instanceof VirtualFileWithId) { ObjectStubTree tree = StubTreeLoader.getInstance().readFromVFile(file.getProject(), virtualFile); if (tree != null) { Stub root = tree.getRoot(); if (root instanceof FileStub) { return ((FileStub)root).getHeader(); } } } } if (!file.isValid()) return XmlFileHeader.EMPTY; return NanoXmlUtil.parseHeader(file); }
public static void requeueIfPossible(InferenceCapable element) { final Boolean userData = ObjectUtils.notNull(element.getContainingFile().getUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING), false); if (!userData && !PsiTreeUtil.hasErrorElements(element)) { final Project project = element.getProject(); if (project != null) LuaPsiManager.getInstance(project).queueInferences(element); } }
public static void analyzeFileDependencies(@NotNull PsiFile file, @NotNull DependencyProcessor processor, @NotNull DependencyVisitorFactory.VisitorOptions options) { file.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, Boolean.TRUE); file.accept(DependencyVisitorFactory.createVisitor(file, processor, options)); file.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, null); }
public CachedValueProvider.Result<XsltChecker.LanguageLevel> compute(PsiFile psiFile) { if (!(psiFile instanceof XmlFile)) { return CachedValueProvider.Result.create(XsltChecker.LanguageLevel.NONE, PsiModificationTracker.MODIFICATION_COUNT); } final XmlFile xmlFile = (XmlFile)psiFile; if (psiFile instanceof PsiFileEx) { if (((PsiFileEx)psiFile).isContentsLoaded()) { final XmlDocument doc = xmlFile.getDocument(); if (doc != null) { final XmlTag rootTag = doc.getRootTag(); if (rootTag != null) { XmlAttribute v; XsltChecker.LanguageLevel level; if (isXsltRootTag(rootTag)) { v = rootTag.getAttribute("version"); level = v != null ? XsltChecker.getLanguageLevel(v.getValue()) : XsltChecker.LanguageLevel.NONE; } else { v = rootTag.getAttribute("version", XSLT_NS); level = v != null ? XsltChecker.getLanguageLevel(v.getValue()) : XsltChecker.LanguageLevel.NONE; } return CachedValueProvider.Result.create(level, rootTag); } } } } final XsltChecker xsltChecker = new XsltChecker(); NanoXmlUtil.parseFile(psiFile, xsltChecker); return CachedValueProvider.Result.create(xsltChecker.getLanguageLevel(), psiFile); }
private void configure() throws Throwable { final String fileName = getTestFileName(); String path = fileName.replaceAll("_.*$", "") + ".xsl"; final VirtualFile file = myFixture.copyFileToProject(path); myFixture.openFileInEditor(file); if (fileName.endsWith("_Loaded")) { ((XmlFile)myFixture.getFile()).getDocument(); assertTrue(((PsiFileEx)myFixture.getFile()).isContentsLoaded()); } else { assertFalse(((PsiFileEx)myFixture.getFile()).isContentsLoaded()); } }
public static PsiFile createFileCopy(FileContent content, PsiFile psiFile) { VirtualFile vFile = psiFile.getVirtualFile(); if (vFile == null) return psiFile; // It's already a copy created via PsiManager.getFile(FileContent). Usually happens on initial startup. if (psiFile instanceof PsiFileEx) { return ((PsiFileEx)psiFile).cacheCopy(content); } return psiFile; }
@NotNull private static XmlFileHeader calcXmlFileHeader(final XmlFile file) { if (file instanceof PsiFileEx && ((PsiFileEx)file).isContentsLoaded() && file.getNode().isParsed()) { return computeHeaderByPsi(file); } if (!XmlUtil.isStubBuilding() && file.getFileType() == XmlFileType.INSTANCE) { VirtualFile virtualFile = file.getVirtualFile(); if (virtualFile instanceof VirtualFileWithId) { ObjectStubTree tree = StubTreeLoader.getInstance().readFromVFile(file.getProject(), virtualFile); if (tree != null) { Stub root = tree.getRoot(); if (root instanceof FileStub) { return ((FileStub)root).getHeader(); } } } } if (!file.isValid()) return XmlFileHeader.EMPTY; if (XmlUtil.isStubBuilding() && file.getFileType() == XmlFileType.INSTANCE) { FileContent fileContent = file.getUserData(DomStubBuilder.CONTENT_FOR_DOM_STUBS); if (fileContent != null) { //noinspection IOResourceOpenedButNotSafelyClosed return NanoXmlUtil.parseHeader(new CharSequenceReader(fileContent.getContentAsText())); } } return NanoXmlUtil.parseHeader(file); }
public CachedValueProvider.Result<XsltChecker.LanguageLevel> compute(PsiFile psiFile) { if (!(psiFile instanceof XmlFile)) { return CachedValueProvider.Result.create(XsltChecker.LanguageLevel.NONE); } final XmlFile xmlFile = (XmlFile)psiFile; if (psiFile instanceof PsiFileEx) { if (((PsiFileEx)psiFile).isContentsLoaded()) { final XmlDocument doc = xmlFile.getDocument(); if (doc != null) { final XmlTag rootTag = doc.getRootTag(); if (rootTag != null) { XmlAttribute v; XsltChecker.LanguageLevel level; if (isXsltRootTag(rootTag)) { v = rootTag.getAttribute("version"); level = v != null ? XsltChecker.getLanguageLevel(v.getValue()) : XsltChecker.LanguageLevel.NONE; } else { v = rootTag.getAttribute("version", XSLT_NS); level = v != null ? XsltChecker.getLanguageLevel(v.getValue()) : XsltChecker.LanguageLevel.NONE; } return CachedValueProvider.Result.create(level, rootTag); } } } } final XsltChecker xsltChecker = new XsltChecker(); NanoXmlUtil.parseFile(psiFile, xsltChecker); return CachedValueProvider.Result.create(xsltChecker.getLanguageLevel(), psiFile); }
private void configure() throws Throwable { final String fileName = getTestFileName(); myFixture.configureByFile(fileName.replaceAll("_.*$", "") + ".xsl"); if (fileName.endsWith("_Loaded")) { ((XmlFile)myFixture.getFile()).getDocument(); assertTrue(((PsiFileEx)myFixture.getFile()).isContentsLoaded()); } else { assertFalse(((PsiFileEx)myFixture.getFile()).isContentsLoaded()); } }
@Override @Nullable protected PsiFile getPsiInner(@Nonnull Language target) { if (target != getBaseLanguage()) { return null; } PsiFile psiFile = myPsiFile.get(); if (psiFile == null) { psiFile = createFile(); if (psiFile == null) { psiFile = PsiUtilCore.NULL_PSI_FILE; } boolean set = myPsiFile.compareAndSet(null, psiFile); if (!set && psiFile != PsiUtilCore.NULL_PSI_FILE) { PsiFile alreadyCreated = myPsiFile.get(); if (alreadyCreated == psiFile) { LOG.error(this + ".createFile() must create new file instance but got the same: " + psiFile); } if (psiFile instanceof PsiFileEx) { PsiFile finalPsiFile = psiFile; DebugUtil.performPsiModification("invalidating throw-away copy", () -> ((PsiFileEx)finalPsiFile).markInvalidated() ); } psiFile = alreadyCreated; } } return psiFile == PsiUtilCore.NULL_PSI_FILE ? null : psiFile; }
public final void forceCachedPsi(@Nonnull PsiFile psiFile) { PsiFile prev = myPsiFile.getAndSet(psiFile); if (prev != null && prev != psiFile && prev instanceof PsiFileEx) { ((PsiFileEx)prev).markInvalidated(); } getManager().getFileManager().setViewProvider(getVirtualFile(), this); }
@Override public final void markInvalidated() { PsiFile psiFile = getCachedPsi(getBaseLanguage()); if (psiFile instanceof PsiFileEx) { ((PsiFileEx)psiFile).markInvalidated(); } super.markInvalidated(); }
private void renewFile() { if (myFile == null || !myFile.isValid()) { myFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myDocument); if (myFile != null && !myFile.isValid()) { myFile = null; } } if (myFile != null) { myFile.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, Boolean.TRUE); } }
private boolean isFileParsed() { return myXmlFile instanceof PsiFileEx && ((PsiFileEx)myXmlFile).isContentsLoaded(); }
public static void analyzeFileDependencies(PsiFile file, DependencyProcessor processor) { file.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, Boolean.TRUE); file.accept(DependenciesVisitorFactory.getInstance().createVisitor(processor)); file.putUserData(PsiFileEx.BATCH_REFERENCE_PROCESSING, null); }
private boolean isFileParsed() { return myXmlFile instanceof PsiFileEx && ((PsiFileEx) myXmlFile).isContentsLoaded(); }