From 2b5bcf3c519db85a496dfe8acb0522030690c5fb Mon Sep 17 00:00:00 2001 From: sweinreuter Date: Mon, 11 Apr 2011 09:51:54 +0200 Subject: [PATCH] IDEA-67498 XSLT: changing value of version does not change XPath highlighting and completion until project reopening --- .../xpath/xslt/context/XsltContextProviderBase.java | 12 +++++++++++- .../intellij/lang/xpath/xslt/impl/XsltChecker.java | 13 ++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) 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