fix project leak via parsable

This commit is contained in:
Dennis Ushakov
2015-11-06 11:32:46 +03:00
parent 98968ef32f
commit e1046a95e8
@@ -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;
}