diff options
Diffstat (limited to 'java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/predicates/ReadPredicate.java')
-rw-r--r-- | java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/predicates/ReadPredicate.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/predicates/ReadPredicate.java b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/predicates/ReadPredicate.java new file mode 100644 index 000000000000..ce25b998ba9b --- /dev/null +++ b/java/structuralsearch-java/src/com/intellij/structuralsearch/impl/matcher/predicates/ReadPredicate.java @@ -0,0 +1,28 @@ +package com.intellij.structuralsearch.impl.matcher.predicates; + +import com.intellij.psi.*; +import com.intellij.structuralsearch.impl.matcher.handlers.MatchPredicate; +import com.intellij.structuralsearch.impl.matcher.MatchContext; +import com.intellij.structuralsearch.impl.matcher.MatchUtils; + +/** + * Handler for value read + */ +public final class ReadPredicate extends MatchPredicate { + public boolean match(PsiElement patternNode, PsiElement matchedNode, MatchContext context) { + if (matchedNode instanceof PsiIdentifier) { + matchedNode = matchedNode.getParent(); + } + if (matchedNode instanceof PsiReferenceExpression && + ( !(matchedNode.getParent() instanceof PsiMethodCallExpression) && + ( !(matchedNode.getParent() instanceof PsiAssignmentExpression) || + ((PsiAssignmentExpression)matchedNode.getParent()).getLExpression() != matchedNode + ) + ) && + MatchUtils.getReferencedElement(matchedNode) instanceof PsiVariable + ) { + return true; + } + return false; + } +} |