boolean (PsiElement element, AnnotatedElementVisitor visitor) { final PsiElement parent = element.getParent(); if (element instanceof GrReferenceExpression) { if (!visitor.visitReference((GrReferenceExpression)element)) return false; } else if (element instanceof GrAnnotationNameValuePair && parent != null && parent.getParent() instanceof PsiAnnotation) { return visitor.visitAnnotationParameter((GrAnnotationNameValuePair)element, (PsiAnnotation)parent.getParent()); } if (parent instanceof GrAssignmentExpression p) { if (p.getRValue() == element || p.getOperationTokenType() == GroovyTokenTypes.mPLUS_ASSIGN) { final GrExpression left = p.getLValue(); if (left instanceof GrReferenceExpression) { if (!visitor.visitReference((GrReferenceExpression)left)) return false; } } } else if (parent instanceof GrConditionalExpression && ((GrConditionalExpression)parent).getCondition() == element) { return false; } else if (parent instanceof GrReturnStatement) { final PsiElement m = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, GrClosableBlock.class, GroovyFile.class); if (m instanceof PsiMethod) { if (!visitor.visitMethodReturnStatement((GrReturnStatement)parent, (PsiMethod)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 GrAnnotationArrayInitializer || parent instanceof GrAnnotationNameValuePair) { return true; } else if (parent instanceof GrArgumentList && parent.getParent() instanceof GrCall && element instanceof GrExpression) { return visitor.visitMethodParameter((GrExpression)element, (GrCall)parent.getParent()); } return true; }