From e1046a95e85f841e09a1cbaaad693cbc80851bee Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Fri, 6 Nov 2015 11:31:26 +0300 Subject: [PATCH] fix project leak via parsable --- .../plugins/relaxNG/validation/RngParser.java | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/validation/RngParser.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/validation/RngParser.java index b7a8492df582..38fd5ee0ecc1 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/validation/RngParser.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/validation/RngParser.java @@ -16,14 +16,13 @@ package org.intellij.plugins.relaxNG.validation; +import com.intellij.javaee.UriUtil; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; import com.intellij.openapi.util.AtomicNotNullLazyValue; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.NotNullLazyValue; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.util.CachedValue; @@ -31,7 +30,6 @@ import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.xml.XmlFile; import com.intellij.util.containers.ContainerUtil; -import com.intellij.xml.util.XmlUtil; import com.thaiopensource.datatype.xsd.DatatypeLibraryFactoryImpl; import com.thaiopensource.relaxng.impl.SchemaReaderImpl; import com.thaiopensource.util.PropertyMap; @@ -160,6 +158,7 @@ public class RngParser { private static Parseable createParsable(final PsiFile file, final ErrorHandler eh) { final InputSource source = makeInputSource(file); + final VirtualFile virtualFile = file.getVirtualFile(); if (file.getFileType() == RncFileType.getInstance()) { return new CompactParseable(source, eh) { @@ -167,7 +166,7 @@ public class RngParser { public ParsedPattern parseInclude(String uri, SchemaBuilder schemaBuilder, IncludedGrammar g, String inheritedNs) throws BuildException, IllegalSchemaException { - return super.parseInclude(resolveURI(file, uri), schemaBuilder, g, inheritedNs); + return super.parseInclude(resolveURI(virtualFile, uri), schemaBuilder, g, inheritedNs); } }; } else { @@ -176,27 +175,16 @@ public class RngParser { public ParsedPattern parseInclude(String uri, SchemaBuilder schemaBuilder, IncludedGrammar g, String inheritedNs) throws BuildException, IllegalSchemaException { - return super.parseInclude(resolveURI(file, uri), schemaBuilder, g, inheritedNs); + return super.parseInclude(resolveURI(virtualFile, uri), schemaBuilder, g, inheritedNs); } }; } } - public static String resolveURI(PsiFile descriptorFile, String s) { - final PsiFile file = XmlUtil.findXmlFile(descriptorFile, s); - + private static String resolveURI(VirtualFile descriptorFile, String s) { + final VirtualFile file = UriUtil.findRelativeFile(s, descriptorFile); if (file != null) { - final VirtualFile virtualFile = file.getVirtualFile(); - if (virtualFile != null) { - final PsiDocumentManager dm = PsiDocumentManager.getInstance(file.getProject()); - final Document d = dm.getCachedDocument(file); - if (d != null) { - // TODO: fix. write action + saving -> deadlock -// dm.commitDocument(d); -// FileDocumentManager.getInstance().saveDocument(d); - } - s = VfsUtilCore.fixIDEAUrl(virtualFile.getUrl()); - } + s = VfsUtilCore.fixIDEAUrl(file.getUrl()); } return s; }