mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't load content for DOM files
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user