mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix project leak via parsable
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user