summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/CompositeFilter.java27
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/DefaultFilter.java16
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/LexicalNodesFilter.java51
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/TagValueFilter.java43
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/filters/XmlLexicalNodesFilter.java19
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);
+ }
+}