diff options
Diffstat (limited to 'java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java')
-rw-r--r-- | java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java new file mode 100644 index 000000000000..c6361e2ad4e7 --- /dev/null +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java @@ -0,0 +1,32 @@ +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); + } +} |