private static boolean visitAnnotatedElementInner( PsiElement element, AnnotatedElementVisitor visitor) { final PsiElement parent = element.getParent(); if (element instanceof PsiReferenceExpression) { if (!visitor.visitReference((PsiReferenceExpression) element)) return false; } else if (element instanceof PsiNameValuePair && parent != null && parent.getParent() instanceof PsiAnnotation) { return visitor.visitAnnotationParameter( (PsiNameValuePair) element, (PsiAnnotation) parent.getParent()); } if (parent instanceof PsiAssignmentExpression) { final PsiAssignmentExpression p = (PsiAssignmentExpression) parent; if (p.getRExpression() == element || p.getOperationTokenType() == JavaTokenType.PLUSEQ) { final PsiExpression left = p.getLExpression(); if (left instanceof PsiReferenceExpression) { if (!visitor.visitReference((PsiReferenceExpression) left)) return false; } } } else if (parent instanceof PsiConditionalExpression && ((PsiConditionalExpression) parent).getCondition() == element) { return false; } else if (parent instanceof PsiReturnStatement) { final PsiMethod m = PsiTreeUtil.getParentOfType(parent, PsiMethod.class); if (m != null) { if (!visitor.visitMethodReturnStatement((PsiReturnStatement) parent, m)) return false; } } else if (parent instanceof PsiVariable) { return visitor.visitVariable((PsiVariable) parent); } else if (parent instanceof PsiModifierListOwner) { return false; // PsiClass/PsiClassInitializer/PsiCodeBlock } else if (parent instanceof PsiArrayInitializerMemberValue || parent instanceof PsiNameValuePair) { return true; } else if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCallExpression) { return visitor.visitMethodParameter( (PsiExpression) element, (PsiCallExpression) parent.getParent()); } return true; }