don't load content for DOM files

This commit is contained in:
Dmitry Avdeev
2012-08-24 15:17:44 +04:00
parent cd2681ed1d
commit 2ce4363b8e
5 changed files with 50 additions and 24 deletions
@@ -16,6 +16,7 @@
package com.intellij.util.xml.impl;
import com.intellij.ide.highlighter.XmlFileType;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
@@ -23,10 +24,13 @@ import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.UserDataCache;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileWithId;
import com.intellij.psi.PsiErrorElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.stubs.ObjectStubTree;
import com.intellij.psi.stubs.StubTreeLoader;
import com.intellij.psi.util.CachedValue;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
@@ -35,6 +39,8 @@ import com.intellij.util.Function;
import com.intellij.util.indexing.FileBasedIndex;
import com.intellij.util.xml.*;
import com.intellij.util.xml.structure.DomStructureViewBuilder;
import com.intellij.util.xml.stubs.FileStub;
import com.intellij.util.xml.stubs.builder.DomStubBuilder;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -61,15 +67,16 @@ public class DomServiceImpl extends DomService {
@NotNull
private static XmlFileHeader calcXmlFileHeader(final PsiFile file) {
//if (file.getFileType() == XmlFileType.INSTANCE) {
// VirtualFile virtualFile = file.getVirtualFile();
// if (virtualFile instanceof VirtualFileWithId) {
// ObjectStubTree tree = StubTreeLoader.getInstance().readFromVFile(file.getProject(), virtualFile);
// if (tree != null) {
// return ((FileStub)tree.getRoot()).getHeader();
// }
// }
//}
if (!DomStubBuilder.isStubBuilding(file) && file.getFileType() == XmlFileType.INSTANCE) {
VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile instanceof VirtualFileWithId) {
ObjectStubTree tree = StubTreeLoader.getInstance().readFromVFile(file.getProject(), virtualFile);
if (tree != null) {
return ((FileStub)tree.getRoot()).getHeader();
}
}
}
if (file instanceof XmlFile && file.getNode().isParsed()) {
final XmlDocument document = ((XmlFile)file).getDocument();
if (document != null) {
@@ -116,7 +116,7 @@ class FileDescriptionCachedValueProvider<T extends DomElement> implements SemEle
FileStub stub = null;
if (file instanceof VirtualFileWithId) {
ApplicationManager.getApplication().assertReadAccessAllowed();
if (!Boolean.TRUE.equals(myXmlFile.getUserData(DomStubBuilder.BUILDING_DOM_STUBS))) {
if (!DomStubBuilder.isStubBuilding(myXmlFile)) {
ObjectStubTree stubTree = StubTreeLoader.getInstance().readOrBuild(myXmlFile.getProject(), file, myXmlFile);
if (stubTree != null) {
stub = (FileStub)stubTree.getRoot();
@@ -37,7 +37,11 @@ import java.io.ByteArrayInputStream;
*/
public class DomStubBuilder implements BinaryFileStubBuilder {
public final static Key<Boolean> BUILDING_DOM_STUBS = Key.create("building dom stubs...");
public static boolean isStubBuilding(PsiFile file) {
return Boolean.TRUE.equals(file.getUserData(BUILDING_DOM_STUBS));
}
private final static Key<Boolean> BUILDING_DOM_STUBS = Key.create("building dom stubs...");
private final static Logger LOG = Logger.getInstance(DomStubBuilder.class);
@Override
@@ -73,19 +73,25 @@ public abstract class DomStubTest extends LightCodeInsightFixtureTestCase {
}
protected <T extends DomElement> DomFileElement<T> prepare(String path, Class<T> domClass) {
PsiFile file = myFixture.configureByFile(path);
XmlFile file = prepareFile(path);
DomFileElement<T> fileElement = DomManager.getDomManager(getProject()).getFileElement(file, domClass);
assertNotNull(fileElement);
return fileElement;
}
protected XmlFile prepareFile(String path) {
XmlFile file = (XmlFile)myFixture.configureByFile(path);
assertFalse(file.getNode().isParsed());
VirtualFile virtualFile = file.getVirtualFile();
assertNotNull(virtualFile);
ObjectStubTree tree = StubTreeLoader.getInstance().readOrBuild(getProject(), virtualFile, file);
assertNotNull(tree);
((PsiManagerImpl)getPsiManager()).cleanupForNextTest();
file = getPsiManager().findFile(virtualFile);
assertFalse(file.getNode().isParsed());
DomFileElement<T> fileElement = DomManager.getDomManager(getProject()).getFileElement((XmlFile)file, domClass);
assertNotNull(fileElement);
return fileElement;
file = (XmlFile)getPsiManager().findFile(virtualFile);
assertNotNull(file);
return file;
}
}
@@ -15,14 +15,14 @@
*/
package com.intellij.util.xml.stubs;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomFileElement;
import com.intellij.util.xml.DomUtil;
import com.intellij.util.xml.GenericAttributeValue;
import com.intellij.util.xml.*;
import com.intellij.util.xml.stubs.model.Bar;
import com.intellij.util.xml.stubs.model.Foo;
import com.intellij.util.xml.stubs.model.NotStubbed;
@@ -99,8 +99,6 @@ public class DomStubUsingTest extends DomStubTest {
DomElement parent = notStubbed.getParent();
assertEquals(bar, parent);
// SemService.getSemService(getProject()).clearCache();
NotStubbed child = bar.getNotStubbeds().get(0);
parent = child.getParent();
assertEquals(bar, parent);
@@ -113,4 +111,15 @@ public class DomStubUsingTest extends DomStubTest {
List<Bar> bars = DomUtil.getChildrenOf(foo, Bar.class);
assertEquals(2, bars.size());
}
public void testFileLoading() throws Exception {
XmlFile file = prepareFile("foo.xml");
((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.ALL);
try {
DomManager.getDomManager(getProject()).getFileElement(file, Foo.class);
}
finally {
((PsiManagerImpl)getPsiManager()).setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
}
}
}