コード例 #1
0
  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;
  }