summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/WithinPredicate.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/WithinPredicate.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/WithinPredicate.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/WithinPredicate.java b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/WithinPredicate.java
new file mode 100644
index 000000000000..3904eb397bce
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/impl/matcher/predicates/WithinPredicate.java
@@ -0,0 +1,38 @@
+package com.intellij.structuralsearch.impl.matcher.predicates;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.PsiElement;
+import com.intellij.structuralsearch.MatchOptions;
+import com.intellij.structuralsearch.MatchResult;
+import com.intellij.structuralsearch.Matcher;
+import com.intellij.structuralsearch.impl.matcher.MatchContext;
+import com.intellij.structuralsearch.impl.matcher.compiler.PatternCompiler;
+
+/**
+ * @author Maxim.Mossienko
+ */
+public class WithinPredicate extends AbstractStringBasedPredicate {
+ private final MatchOptions myMatchOptions;
+ private Matcher matcher;
+
+ public WithinPredicate(String name, String within, Project project) {
+ super(name, within);
+ myMatchOptions = new MatchOptions();
+
+ myMatchOptions.setLooseMatching(true);
+ final String unquoted = StringUtil.stripQuotesAroundValue(within);
+ if (!unquoted.equals(within)) {
+ myMatchOptions.setSearchPattern(unquoted);
+ PatternCompiler.transformOldPattern(myMatchOptions);
+ matcher = new Matcher(project, myMatchOptions);
+ } else {
+ assert false;
+ }
+ }
+
+ public boolean match(PsiElement node, PsiElement match, int start, int end, MatchContext context) {
+ final MatchResult result = matcher.isMatchedByDownUp(match, myMatchOptions);
+ return result != null;
+ }
+} \ No newline at end of file