diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/context/XsltContextProviderBase.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/context/XsltContextProviderBase.java index 210903fe39e8..aca5e7fbd600 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/context/XsltContextProviderBase.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/context/XsltContextProviderBase.java @@ -87,10 +87,20 @@ public abstract class XsltContextProviderBase extends ContextProvider { protected XsltContextProviderBase(XmlElement element) { final Project project = element.getProject(); myFileAssociationsManager = FileAssociationsManager.getInstance(project); - myContextElement = SmartPointerManager.getInstance(project).createLazyPointer(element); + myContextElement = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(element); attachTo(element); } + @Override + protected boolean isValid() { + return super.isValid() && matchContextType(); + } + + private boolean matchContextType() { + final PsiFile file = myContextElement.getContainingFile(); + return file != null && XsltSupport.getXsltLanguageLevel(file).getXPathVersion() == getContextType().getVersion(); + } + private static void fillFromSchema(PsiFile file, ElementNames names) { if (!(file instanceof XmlFile)) return; final XmlFile f = (XmlFile)file; diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChecker.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChecker.java index 82c41d31648a..39b5d9bf3c43 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChecker.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChecker.java @@ -16,12 +16,23 @@ package org.intellij.lang.xpath.xslt.impl; +import org.intellij.lang.xpath.context.XPathVersion; import org.intellij.lang.xpath.xslt.XsltSupport; import com.intellij.util.xml.NanoXmlUtil; public class XsltChecker extends NanoXmlUtil.IXMLBuilderAdapter { - public enum LanguageLevel { NONE, V1, V2 } + public enum LanguageLevel { NONE(null), V1(XPathVersion.V1), V2(XPathVersion.V2); + private final XPathVersion myVersion; + + LanguageLevel(XPathVersion version) { + myVersion = version; + } + + public XPathVersion getXPathVersion() { + return myVersion; + } + } enum State { YES, SIMPLIFIED, NO, POSSIBLY, POSSIBLY_SIMPLIFIED_SYNTAX, VERSION2