package org.intellij.lang.xpath.context; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.extensions.ExtensionPointName; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.intellij.lang.xpath.XPathFile; public abstract class ContextProviderExtension { public static final ExtensionPointName<ContextProviderExtension> EXTENSION_POINT_NAME = ExtensionPointName.create("XPathView.xpath.contextProviderExtension"); protected abstract boolean accepts(XPathFile file); @NotNull protected abstract ContextProvider getContextProvider(XPathFile file); @Nullable public static ContextProvider getInstance(XPathFile file) { final ContextProviderExtension[] extensions = Extensions.getExtensions(EXTENSION_POINT_NAME); for (ContextProviderExtension extension : extensions) { if (extension.accepts(file)) { return extension.getContextProvider(file); } } return null; } }