cache XmlExtension per file

This commit is contained in:
peter
2015-05-26 19:42:48 +02:00
parent d118a4a610
commit 7a531d8973
@@ -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<XmlExtension>() {
@Nullable
@Override
public Result<XmlExtension> 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;