@Override
    public void visitReferenceExpression(@NotNull PsiReferenceExpression expression) {
      super.visitReferenceExpression(expression);
      final PsiElement referenceNameElement = expression.getReferenceNameElement();
      if (referenceNameElement == null) {
        return;
      }
      final JavaResolveResult resolveResult = expression.advancedResolve(false);
      if (!resolveResult.isAccessible()) {
        return;
      }
      final PsiElement element = resolveResult.getElement();
      if (!(element instanceof PsiMethod || element instanceof PsiField)) {
        return;
      }
      final PsiMember member = (PsiMember)element;
      if (!member.hasModifierProperty(PsiModifier.PRIVATE)) {
        return;
      }
      final Object value = ExpressionUtils.computeConstantExpression(expression);
      if (value != null) {
        return; // no synthetic accessor created, compile time constant will be inlined by javac
      }
      final PsiClass memberClass = member.getContainingClass();
      if (!isInnerClassAccess(expression, memberClass)) {
        return;
      }
      registerError(referenceNameElement, memberClass, member);
    }
@Override
    public void visitReferenceExpression(@NotNull PsiReferenceExpression expression)