blob: c6361e2ad4e7c936e6034aae56c7ad9c17b1a1b6 [file] [log] [blame]
package com.intellij.structuralsearch.impl.matcher.handlers;
import com.intellij.psi.*;
import com.intellij.structuralsearch.impl.matcher.MatchContext;
/**
* Handler for statement search
*/
public class StatementHandler extends MatchingHandler {
public boolean match(PsiElement patternNode, PsiElement matchedNode, MatchContext context) {
// filtering is done on SubstituionHandler level
if (patternNode==null) return false;
patternNode = ((PsiExpressionStatement)patternNode).getExpression();
/*if (matchedNode instanceof PsiExpressionStatement) {
//matchedNode = ((PsiExpressionStatement)matchedNode).getExpression();
} else*/ if (( !(matchedNode instanceof PsiStatement) &&
!(matchedNode instanceof PsiComment) // comments to be matched as statements
) ||
( matchedNode instanceof PsiBlockStatement &&
!(matchedNode.getParent() instanceof PsiBlockStatement) &&
!(matchedNode.getParent().getParent() instanceof PsiSwitchStatement)
)) {
// typed statement does not match this things
// (BlockStatement could be nontop level in if, etc)
return false;
}
return context.getMatcher().match(patternNode,matchedNode);
}
}