mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-90935 Deadlock during git unstash
This commit is contained in:
@@ -40,7 +40,6 @@ 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;
|
||||
@@ -67,7 +66,7 @@ public class DomServiceImpl extends DomService {
|
||||
@NotNull
|
||||
private static XmlFileHeader calcXmlFileHeader(final XmlFile file) {
|
||||
|
||||
if (!DomStubBuilder.isStubBuilding(file) && file.getFileType() == XmlFileType.INSTANCE) {
|
||||
if (!XmlUtil.isStubBuilding(file) && file.getFileType() == XmlFileType.INSTANCE) {
|
||||
VirtualFile virtualFile = file.getVirtualFile();
|
||||
if (virtualFile instanceof VirtualFileWithId) {
|
||||
ObjectStubTree tree = StubTreeLoader.getInstance().readFromVFile(file.getProject(), virtualFile);
|
||||
|
||||
@@ -30,7 +30,7 @@ import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.xml.*;
|
||||
import com.intellij.util.xml.events.DomEvent;
|
||||
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;
|
||||
|
||||
@@ -116,7 +116,7 @@ class FileDescriptionCachedValueProvider<T extends DomElement> implements SemEle
|
||||
FileStub stub = null;
|
||||
if (description.hasStubs() && file instanceof VirtualFileWithId) {
|
||||
ApplicationManager.getApplication().assertReadAccessAllowed();
|
||||
if (!DomStubBuilder.isStubBuilding(myXmlFile)) {
|
||||
if (!XmlUtil.isStubBuilding(myXmlFile)) {
|
||||
ObjectStubTree stubTree = StubTreeLoader.getInstance().readOrBuild(myXmlFile.getProject(), file, myXmlFile);
|
||||
if (stubTree != null) {
|
||||
stub = (FileStub)stubTree.getRoot();
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.intellij.ide.highlighter.XmlFileType;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
@@ -28,6 +27,7 @@ import com.intellij.psi.stubs.Stub;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.util.xml.*;
|
||||
import com.intellij.util.xml.stubs.FileStub;
|
||||
import com.intellij.xml.util.XmlUtil;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
@@ -35,11 +35,6 @@ import com.intellij.util.xml.stubs.FileStub;
|
||||
*/
|
||||
public class DomStubBuilder implements BinaryFileStubBuilder {
|
||||
|
||||
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
|
||||
@@ -56,7 +51,7 @@ public class DomStubBuilder implements BinaryFileStubBuilder {
|
||||
XmlFile xmlFile = (XmlFile)psiFile;
|
||||
DomManager manager = DomManager.getDomManager(project);
|
||||
try {
|
||||
xmlFile.putUserData(BUILDING_DOM_STUBS, Boolean.TRUE);
|
||||
xmlFile.putUserData(XmlUtil.BUILDING_DOM_STUBS, Boolean.TRUE);
|
||||
DomFileElement<? extends DomElement> fileElement = manager.getFileElement(xmlFile);
|
||||
if (fileElement == null || !fileElement.getFileDescription().hasStubs()) return null;
|
||||
|
||||
@@ -70,7 +65,7 @@ public class DomStubBuilder implements BinaryFileStubBuilder {
|
||||
return fileStub;
|
||||
}
|
||||
finally {
|
||||
xmlFile.putUserData(BUILDING_DOM_STUBS, null);
|
||||
xmlFile.putUserData(XmlUtil.BUILDING_DOM_STUBS, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,10 +29,14 @@ import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.indexing.ID;
|
||||
import com.intellij.util.io.DataExternalizer;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import com.intellij.xml.util.XmlUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.DataInput;
|
||||
import java.io.DataOutput;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
@@ -164,7 +168,7 @@ public class XmlNamespaceIndex extends XmlIndex<XsdNamespaceBuilder> {
|
||||
@Nullable final String version,
|
||||
@NotNull PsiFile file) {
|
||||
|
||||
if (DumbService.isDumb(file.getProject())) return null;
|
||||
if (DumbService.isDumb(file.getProject()) || XmlUtil.isStubBuilding(file)) return null;
|
||||
|
||||
IndexedRelevantResource<String,XsdNamespaceBuilder> resource =
|
||||
guessSchema(namespace, tagName, version, ModuleUtilCore.findModuleForPsiElement(file));
|
||||
@@ -176,7 +180,9 @@ public class XmlNamespaceIndex extends XmlIndex<XsdNamespaceBuilder> {
|
||||
@Nullable
|
||||
public static XmlFile guessDtd(String dtdUri, @NotNull PsiFile baseFile) {
|
||||
|
||||
if (!dtdUri.endsWith(".dtd") || DumbService.isDumb(baseFile.getProject())) return null;
|
||||
if (!dtdUri.endsWith(".dtd") ||
|
||||
DumbService.isDumb(baseFile.getProject()) ||
|
||||
XmlUtil.isStubBuilding(baseFile)) return null;
|
||||
|
||||
String dtdFileName = new File(dtdUri).getName();
|
||||
List<IndexedRelevantResource<String, XsdNamespaceBuilder>>
|
||||
|
||||
@@ -149,6 +149,7 @@ public class XmlUtil {
|
||||
public static final Key<PsiAnchor> ORIGINAL_ELEMENT = Key.create("ORIGINAL_ELEMENT");
|
||||
|
||||
public static final String XHTML4_SCHEMA_LOCATION;
|
||||
public final static Key<Boolean> BUILDING_DOM_STUBS = Key.create("building dom stubs...");
|
||||
|
||||
private XmlUtil() {
|
||||
}
|
||||
@@ -604,6 +605,10 @@ public class XmlUtil {
|
||||
return tagName.subSequence(pos + 1, tagName.length());
|
||||
}
|
||||
|
||||
public static boolean isStubBuilding(PsiFile file) {
|
||||
return Boolean.TRUE.equals(file.getUserData(BUILDING_DOM_STUBS));
|
||||
}
|
||||
|
||||
private static class XmlElementProcessor {
|
||||
private final PsiElementProcessor processor;
|
||||
private final PsiFile targetFile;
|
||||
|
||||
Reference in New Issue
Block a user