From 7a531d89735f67fe413067b58e2512bba99be4e6 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 26 May 2015 19:37:13 +0200 Subject: [PATCH] cache XmlExtension per file --- .../src/com/intellij/xml/XmlExtension.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/xml/xml-psi-impl/src/com/intellij/xml/XmlExtension.java b/xml/xml-psi-impl/src/com/intellij/xml/XmlExtension.java index f76f9b113982..5a70693e97a9 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/XmlExtension.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/XmlExtension.java @@ -25,6 +25,9 @@ import com.intellij.psi.impl.source.xml.SchemaPrefix; import com.intellij.psi.impl.source.xml.TagNameReference; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; +import com.intellij.psi.util.CachedValueProvider; +import com.intellij.psi.util.CachedValuesManager; +import com.intellij.psi.util.PsiModificationTracker; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlDocument; import com.intellij.psi.xml.XmlFile; @@ -43,7 +46,17 @@ public abstract class XmlExtension { public static final XmlExtension DEFAULT_EXTENSION = new DefaultXmlExtension(); - public static XmlExtension getExtension(PsiFile file) { + public static XmlExtension getExtension(@NotNull final PsiFile file) { + return CachedValuesManager.getCachedValue(file, new CachedValueProvider() { + @Nullable + @Override + public Result compute() { + return Result.create(calcExtension(file), PsiModificationTracker.MODIFICATION_COUNT); + } + }); + } + + private static XmlExtension calcExtension(PsiFile file) { for (XmlExtension extension : Extensions.getExtensions(EP_NAME)) { if (extension.isAvailable(file)) { return extension;