@Override
      public void visitClass(@NotNull PsiClass aClass) {
        String acceptedVisibility = aClass.getContainingClass() == null ? getClassVisibility()
                                                                        : getInnerClassVisibility();
        if (!compareVisibilities(aClass, acceptedVisibility)) return;
        if (UnusedSymbolUtil.isClassUsed(project, file, aClass, helper)) return;

        String pattern;
        if (aClass.getContainingClass() != null && aClass.hasModifierProperty(PsiModifier.PRIVATE)) {
          pattern = aClass.isInterface()
                    ? "private.inner.interface.is.not.used"
                    : "private.inner.class.is.not.used";
        }
        else if (aClass.getParent() instanceof PsiDeclarationStatement) { // local class
          pattern = "local.class.is.not.used";
        }
        else if (aClass instanceof PsiTypeParameter) {
          pattern = "type.parameter.is.not.used";
        }
        else if (aClass.isAnnotationType()) {
          pattern = "annotation.interface.is.not.used";
        }
        else if (aClass.isInterface()) {
          pattern = "interface.is.not.used";
        }
        else if (aClass.isEnum()) {
          pattern = "enum.is.not.used";
        }
        else if (aClass.isRecord()) {
          pattern = "record.is.not.used";
        }
        else {
          pattern = "class.is.not.used";
        }
        formatUnusedSymbolHighlightInfo(pattern, aClass);
      }
@Override
      public void visitClass(@NotNull PsiClass aClass)