@Override
      public void visitField(@NotNull PsiField field) {
        if (!compareVisibilities(field, getFieldVisibility())) return;
        if (HighlightUtil.isSerializationImplicitlyUsedField(field)) return;
        if (field.hasModifierProperty(PsiModifier.PRIVATE)) {
          if (!info.isReferenced(field) && !UnusedSymbolUtil.isImplicitUsage(project, field)) {
            List<IntentionAction> fixes = new ArrayList<>(suggestionsToMakeFieldUsed(field));
            if (!field.hasInitializer() && !field.hasModifierProperty(PsiModifier.FINAL)) {
              fixes.add(fixFactory.createCreateConstructorParameterFromFieldFix(field));
            }
            registerProblem(field, JavaErrorBundle.message("private.field.is.not.used", field.getName()), fixes);
            return;
          }

          boolean readReferenced = info.isReferencedForRead(field);
          if (!readReferenced && !UnusedSymbolUtil.isImplicitRead(project, field)) {
            registerProblem(field, getNotUsedForReadingMessage(field), suggestionsToMakeFieldUsed(field));
            return;
          }

          if (field.hasInitializer()) {
            return;
          }
          boolean writeReferenced = info.isReferencedForWrite(field);
          if (!writeReferenced && !UnusedSymbolUtil.isImplicitWrite(project, field)) {
            List<IntentionAction> fixes = new ArrayList<>();
            fixes.add(fixFactory.createCreateGetterOrSetterFix(false, true, field));
            if (!field.hasModifierProperty(PsiModifier.FINAL)) {
              fixes.add(fixFactory.createCreateConstructorParameterFromFieldFix(field));
            }
            SpecialAnnotationsUtilBase.processUnknownAnnotations(field, annoName ->
              fixes.add(fixFactory.createAddToImplicitlyWrittenFieldsFix(project, annoName)));
            registerProblem(field, JavaErrorBundle.message("private.field.is.not.assigned", field.getName()), fixes);
          }
        }
        else if (!UnusedSymbolUtil.isFieldUsed(project, file, field, helper)) {
          if (UnusedSymbolUtil.isImplicitWrite(project, field)) {
            registerProblem(field, getNotUsedForReadingMessage(field), List.of(fixFactory.createSafeDeleteFix(field)));
          }
          else if (!UnusedSymbolUtil.isImplicitUsage(project, field)) {
            formatUnusedSymbolHighlightInfo("field.is.not.used", field);
          }
        }
      }
@Override
      public void visitField(@NotNull PsiField field)