diff options
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters')
5 files changed, 156 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/CompositeFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/CompositeFilter.java new file mode 100644 index 000000000000..db962ed8edf1 --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/CompositeFilter.java @@ -0,0 +1,27 @@ +package com.intellij.structuralsearch.impl.matcher.filters; + +import com.intellij.dupLocator.util.NodeFilter; +import com.intellij.psi.PsiElement; + +/** + * Created by IntelliJ IDEA. + * User: maxim + * Date: 28.12.2003 + * Time: 0:13:19 + * To change this template use Options | File Templates. + */ +public class CompositeFilter implements NodeFilter { + private final NodeFilter first; + private final NodeFilter second; + protected boolean result; + + public boolean accepts(PsiElement element) { + return first.accepts(element) || + second.accepts(element); + } + + public CompositeFilter(NodeFilter _first, NodeFilter _second) { + first = _first; + second = _second; + } +} diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/DefaultFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/DefaultFilter.java new file mode 100644 index 000000000000..267f37699945 --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/DefaultFilter.java @@ -0,0 +1,16 @@ +package com.intellij.structuralsearch.impl.matcher.filters; + +import com.intellij.psi.PsiElement; +import com.intellij.psi.impl.source.tree.LeafElement; + +/** + * Default searching filter + */ +public class DefaultFilter { + public static boolean accepts(PsiElement element, PsiElement element2) { + if (element instanceof LeafElement && element2 instanceof LeafElement) { + return ((LeafElement)element).getElementType() == ((LeafElement)element2).getElementType(); + } + return element.getClass()==element2.getClass(); + } +} diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/LexicalNodesFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/LexicalNodesFilter.java new file mode 100644 index 000000000000..3cef402b09d3 --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/LexicalNodesFilter.java @@ -0,0 +1,51 @@ +package com.intellij.structuralsearch.impl.matcher.filters; + +import com.intellij.dupLocator.util.NodeFilter; +import com.intellij.psi.PsiElement; +import com.intellij.structuralsearch.StructuralSearchProfile; +import com.intellij.structuralsearch.StructuralSearchUtil; + +/** + * Filter for lexical nodes + */ +public final class LexicalNodesFilter implements NodeFilter { + private boolean careKeyWords; + private boolean result; + + private LexicalNodesFilter() {} + + public static NodeFilter getInstance() { + return NodeFilterHolder.instance; + } + + public boolean getResult() { + return result; + } + + public void setResult(boolean result) { + this.result = result; + } + + private static class NodeFilterHolder { + private static final NodeFilter instance = new LexicalNodesFilter(); + } + + public boolean isCareKeyWords() { + return careKeyWords; + } + + public void setCareKeyWords(boolean careKeyWords) { + this.careKeyWords = careKeyWords; + } + + public boolean accepts(PsiElement element) { + result = false; + if (element!=null) { + final StructuralSearchProfile profile = StructuralSearchUtil.getProfileByPsiElement(element); + if (profile != null) { + element.accept(profile.getLexicalNodesFilter(this)); + } + } + return result; + } +} diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/TagValueFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/TagValueFilter.java new file mode 100644 index 000000000000..97ed9627e3fc --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/TagValueFilter.java @@ -0,0 +1,43 @@ +package com.intellij.structuralsearch.impl.matcher.filters; + +import com.intellij.dupLocator.util.NodeFilter; +import com.intellij.psi.PsiElement; +import com.intellij.psi.XmlElementVisitor; +import com.intellij.psi.xml.XmlTag; +import com.intellij.psi.xml.XmlText; + +/** + * Created by IntelliJ IDEA. + * User: maxim.mossienko + * Date: Oct 12, 2005 + * Time: 4:44:19 PM + * To change this template use File | Settings | File Templates. + */ +public class TagValueFilter extends XmlElementVisitor implements NodeFilter { + private boolean result; + + @Override public void visitXmlText(XmlText text) { + result = true; + } + + @Override public void visitXmlTag(XmlTag tag) { + result = true; + } + + private static class NodeFilterHolder { + private static final NodeFilter instance = new TagValueFilter(); + } + + public static NodeFilter getInstance() { + return NodeFilterHolder.instance; + } + + private TagValueFilter() { + } + + public boolean accepts(PsiElement element) { + result = false; + if (element!=null) element.accept(this); + return result; + } +} diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/XmlLexicalNodesFilter.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/XmlLexicalNodesFilter.java new file mode 100644 index 000000000000..89c295ce1d80 --- /dev/null +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/XmlLexicalNodesFilter.java @@ -0,0 +1,19 @@ +package com.intellij.structuralsearch.impl.matcher.filters; + +import com.intellij.psi.XmlElementVisitor; +import com.intellij.psi.xml.XmlText; + +/** +* @author Eugene.Kudelevsky +*/ +public class XmlLexicalNodesFilter extends XmlElementVisitor { + private final LexicalNodesFilter myLexicalNodesFilter; + + public XmlLexicalNodesFilter(LexicalNodesFilter lexicalNodesFilter) { + this.myLexicalNodesFilter = lexicalNodesFilter; + } + + @Override public void visitXmlText(XmlText text) { + myLexicalNodesFilter.setResult(true); + } +} |