summaryrefslogtreecommitdiff
path: root/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/handlers/StatementHandler.java
diff options
context:
space:
mode:
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.java32
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);
+ }
+}