diff options
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.java | 38 |
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 |