public boolean matches(@NotNull Tools tools, final InspectionConfigTreeNode node) {
    if (myShowOnlyCleanupInspections && !tools.getTool().isCleanupTool()) {
      return false;
    }

    if (mySuitableInspectionsStates != null && mySuitableInspectionsStates != tools.isEnabled()) {
      return false;
    }

    if (myAvailableOnlyForAnalyze && !isAvailableOnlyForAnalyze(tools)) {
      return false;
    }

    if (!mySuitableSeverities.isEmpty()) {
      boolean suitable = false;
      for (final ScopeToolState state : tools.getTools()) {
        if (mySuitableInspectionsStates != null && mySuitableInspectionsStates != state.isEnabled()) {
          continue;
        }
        if (mySuitableSeverities.contains(tools.getDefaultState().getLevel().getSeverity())) {
          suitable = true;
          break;
        }
      }
      if (!suitable) {
        return false;
      }
    }

    if (!mySuitableLanguages.isEmpty()) {
      String languageId = tools.getDefaultState().getTool().getLanguage();
      if (languageId != null) {
        Language language = Language.findLanguageByID(languageId);
        if (language instanceof MetaLanguage) {
          if (!ContainerUtil.exists(((MetaLanguage)language).getMatchingLanguages(), mySuitableLanguages::contains)) return false;
        }
        else {
          if (!mySuitableLanguages.contains(language)) return false;
        }
      }
      else if (!mySuitableLanguages.contains(null)) {
        return false;
      }
    }
    return !myShowOnlyModifiedInspections || node.isProperSetting();
  }
public boolean matches(@NotNull Tools tools, final InspectionConfigTreeNode node)