diff --git a/xml/dom-openapi/src/com/intellij/patterns/DomFilePattern.java b/xml/dom-openapi/src/com/intellij/patterns/DomFilePattern.java new file mode 100644 index 000000000000..63d59bd43028 --- /dev/null +++ b/xml/dom-openapi/src/com/intellij/patterns/DomFilePattern.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.patterns; + +import com.intellij.psi.xml.XmlFile; +import com.intellij.util.ProcessingContext; +import com.intellij.util.xml.DomElement; +import com.intellij.util.xml.DomManager; +import org.jetbrains.annotations.Nullable; + +/** + * @author Dmitry Avdeev + */ +public class DomFilePattern> extends XmlFilePattern { + public DomFilePattern(final Class aClass) { + super(new InitialPatternCondition(XmlFile.class) { + @Override + public boolean accepts(@Nullable Object o, ProcessingContext context) { + return o instanceof XmlFile && DomManager.getDomManager(((XmlFile)o).getProject()).getFileElement((XmlFile)o, aClass) != null; + } + }); + } + + public static class Capture extends DomFilePattern { + public Capture(Class aClass) { + super(aClass); + } + } +} diff --git a/xml/dom-openapi/src/com/intellij/patterns/DomPatterns.java b/xml/dom-openapi/src/com/intellij/patterns/DomPatterns.java index a5f2b3f8c1a1..025b42c5326c 100644 --- a/xml/dom-openapi/src/com/intellij/patterns/DomPatterns.java +++ b/xml/dom-openapi/src/com/intellij/patterns/DomPatterns.java @@ -62,6 +62,10 @@ public class DomPatterns { }); } + public static DomFilePattern.Capture inDomFile(Class rootElementClass) { + return new DomFilePattern.Capture(rootElementClass); + } + public static XmlTagPattern.Capture tagWithDom(String tagName, Class aClass) { return tagWithDom(tagName, domElement(aClass)); }