mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cache itemscope tag
#WEB-19192 fixed
This commit is contained in:
@@ -24,6 +24,8 @@ import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.XmlRecursiveElementVisitor;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.DependentNSReference;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.URLReference;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.psi.xml.XmlAttributeValue;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
@@ -66,27 +68,33 @@ public class MicrodataUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Map<String, XmlTag> findScopesWithItemRef(@Nullable PsiFile file) {
|
||||
private static Map<String, XmlTag> findScopesWithItemRef(@Nullable final PsiFile file) {
|
||||
if (!(file instanceof XmlFile)) return Collections.emptyMap();
|
||||
final Map<String, XmlTag> result = new THashMap<String, XmlTag>();
|
||||
file.accept(new XmlRecursiveElementVisitor() {
|
||||
return CachedValuesManager.getCachedValue(file, new CachedValueProvider<Map<String, XmlTag>>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public void visitXmlTag(final XmlTag tag) {
|
||||
super.visitXmlTag(tag);
|
||||
XmlAttribute refAttr = tag.getAttribute(ITEM_REF);
|
||||
if (refAttr != null && tag.getAttribute(ITEM_SCOPE) != null) {
|
||||
getReferencesForAttributeValue(refAttr.getValueElement(), new PairFunction<String, Integer, PsiReference>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiReference fun(String t, Integer v) {
|
||||
result.put(t, tag);
|
||||
return null;
|
||||
public Result<Map<String, XmlTag>> compute() {
|
||||
final Map<String, XmlTag> result = new THashMap<String, XmlTag>();
|
||||
file.accept(new XmlRecursiveElementVisitor() {
|
||||
@Override
|
||||
public void visitXmlTag(final XmlTag tag) {
|
||||
super.visitXmlTag(tag);
|
||||
XmlAttribute refAttr = tag.getAttribute(ITEM_REF);
|
||||
if (refAttr != null && tag.getAttribute(ITEM_SCOPE) != null) {
|
||||
getReferencesForAttributeValue(refAttr.getValueElement(), new PairFunction<String, Integer, PsiReference>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiReference fun(String t, Integer v) {
|
||||
result.put(t, tag);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
return Result.create(result, file);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<String> extractProperties(PsiFile file, String type) {
|
||||
|
||||
Reference in New Issue
Block a user