mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
use same caching for looking up via qName and a tag
This commit is contained in:
+7
-26
@@ -19,7 +19,6 @@ package org.intellij.plugins.relaxNG.model.descriptors;
|
||||
import com.intellij.codeInsight.daemon.Validator;
|
||||
import com.intellij.javaee.ExternalResourceManager;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
@@ -27,7 +26,10 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.search.PsiElementProcessor;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.XmlDocument;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
@@ -55,8 +57,6 @@ public class RngNsDescriptor implements XmlNSDescriptorEx, Validator {
|
||||
private final Map<QName, CachedValue<XmlElementDescriptor>> myDescriptorsMap =
|
||||
Collections.synchronizedMap(new HashMap<QName, CachedValue<XmlElementDescriptor>>());
|
||||
|
||||
private static final Key<ParameterizedCachedValue<XmlElementDescriptor, RngNsDescriptor>> ROOT_KEY = Key.create("ROOT_DESCRIPTOR");
|
||||
|
||||
private XmlFile myFile;
|
||||
private PsiElement myElement;
|
||||
private String myUrl;
|
||||
@@ -100,31 +100,12 @@ public class RngNsDescriptor implements XmlNSDescriptorEx, Validator {
|
||||
}
|
||||
|
||||
private XmlElementDescriptor findRootDescriptor(final XmlTag tag) {
|
||||
return CachedValuesManager.getManager(tag.getProject())
|
||||
.getParameterizedCachedValue(tag, ROOT_KEY, new ParameterizedCachedValueProvider<XmlElementDescriptor, RngNsDescriptor>() {
|
||||
@Override
|
||||
public CachedValueProvider.Result<XmlElementDescriptor> compute(RngNsDescriptor o) {
|
||||
final XmlElementDescriptor descr = o.findRootDescriptorInner(tag);
|
||||
if (descr != null) {
|
||||
return CachedValueProvider.Result.create(descr, descr.getDependences(), o.getDependences());
|
||||
}
|
||||
else {
|
||||
return CachedValueProvider.Result.create(null, o.getDependences());
|
||||
}
|
||||
}
|
||||
}, false, this);
|
||||
}
|
||||
|
||||
private XmlElementDescriptor findRootDescriptorInner(XmlTag tag) {
|
||||
final List<DElementPattern> allNamedPatterns =
|
||||
ContainerUtil.findAll(ChildElementFinder.find(-1, myPattern), NamedPatternFilter.INSTANCE);
|
||||
XmlElementDescriptor descriptor = findDescriptor(tag, allNamedPatterns);
|
||||
return descriptor != null ? descriptor : findDescriptor(tag, ChildElementFinder.find(myPattern));
|
||||
return getElementDescriptor(tag.getLocalName(), tag.getNamespace());
|
||||
}
|
||||
|
||||
private XmlElementDescriptor findRootDescriptorInner(QName qName) {
|
||||
return findDescriptor(qName, ContainerUtil.findAll(
|
||||
ChildElementFinder.find(-1, myPattern), NamedPatternFilter.INSTANCE));
|
||||
XmlElementDescriptor descriptor = findDescriptor(qName, ContainerUtil.findAll(ChildElementFinder.find(-1, myPattern), NamedPatternFilter.INSTANCE));
|
||||
return descriptor != null ? descriptor : findDescriptor(qName, ChildElementFinder.find(myPattern));
|
||||
}
|
||||
|
||||
public XmlElementDescriptor findDescriptor(XmlTag tag, List<DElementPattern> list) {
|
||||
|
||||
Reference in New Issue
Block a user