mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cache XmlExtension per file
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user