From 120461a0d0443e2c4b60faeda5b01e1fefaced2f Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 1 Mar 2019 19:24:25 +0100 Subject: [PATCH] unify thread-dependence xi:include processing policy (hopefully EA-137673 - assert: IdempotenceChecker.checkEquivalence) --- .../src/com/intellij/psi/impl/source/xml/XmlTagImpl.java | 8 ++++++-- .../src/com/intellij/xml/util/InclusionProvider.java | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java index f30263bb67dd..fb740b423535 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java @@ -666,14 +666,18 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag, HintedReferenc @Override @NotNull public XmlTag[] getSubTags() { - boolean processIncludes = FileBasedIndex.getInstance().getFileBeingCurrentlyIndexed() == null && - !XmlUtil.isStubBuilding(); // todo the first condition should be enough + boolean processIncludes = shouldProcessIncludesNow(); Key> key = processIncludes ? SUBTAGS_WITH_INCLUDES_KEY : SUBTAGS_WITHOUT_INCLUDES_KEY; XmlTag[] cached = CachedValuesManager.getCachedValue(this, key, () -> Result.create(calcSubTags(processIncludes), PsiModificationTracker.MODIFICATION_COUNT)); return cached.clone(); } + public static boolean shouldProcessIncludesNow() { + return FileBasedIndex.getInstance().getFileBeingCurrentlyIndexed() == null && + !XmlUtil.isStubBuilding(); // todo the first condition should be enough + } + @NotNull protected XmlTag[] calcSubTags(boolean processIncludes) { List result = new ArrayList<>(); diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/InclusionProvider.java b/xml/xml-psi-impl/src/com/intellij/xml/util/InclusionProvider.java index f248b7f9220f..bc7addf9513a 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/util/InclusionProvider.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/util/InclusionProvider.java @@ -18,6 +18,7 @@ package com.intellij.xml.util; import com.intellij.openapi.util.NullableComputable; import com.intellij.openapi.util.RecursionManager; import com.intellij.psi.PsiElement; +import com.intellij.psi.impl.source.xml.XmlTagImpl; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiModificationTracker; @@ -42,7 +43,7 @@ class InclusionProvider implements CachedValueProvider { @NotNull public static PsiElement[] getIncludedTags(XmlTag xincludeTag) { - if (XmlUtil.isStubBuilding()) return PsiElement.EMPTY_ARRAY; + if (!XmlTagImpl.shouldProcessIncludesNow()) return PsiElement.EMPTY_ARRAY; return CachedValuesManager.getCachedValue(xincludeTag, new InclusionProvider(xincludeTag)); }