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; } }