private void showFilters() {
    if (myConstraint == null) {
      return;
    }
    if (!isValid()) {
      myConstraint = null;
      return;
    }
    final String varName = myConstraint.getName();
    final List<PsiElement> nodes = myCompiledPattern.getVariableNodes(varName); // replacement variable has no nodes
    final boolean completePattern = Configuration.CONTEXT_VAR_NAME.equals(varName);
    final boolean target = myConstraint instanceof MatchVariableConstraint &&
                           ((MatchVariableConstraint)myConstraint).isPartOfSearchResults();
    myTableModel.setItems(new SmartList<>());
    ReadAction.run(() -> {
      for (FilterAction filter : myFilters) {
        initFilter(filter, nodes, completePattern, target);
      }
    });

    final String message;
    if (myConstraint instanceof MatchVariableConstraint) {
      message = Configuration.CONTEXT_VAR_NAME.equals(varName)
                ? SSRBundle.message("no.filters.whole.template.label")
                : SSRBundle.message("no.filters.for.0.label", varName);
    }
    else {
      message = SSRBundle.message("no.script.for.0.label", varName);
    }
    final StatusText statusText = myFilterTable.getTable().getEmptyText();
    statusText.clear();
    Arrays.stream(message.split("\n")).forEach((@NlsSafe var line) -> statusText.appendLine(line));
    if (isValid()) {
      statusText.appendLine(myConstraint instanceof MatchVariableConstraint
                                     ? SSRBundle.message("add.filter.label")
                                     : SSRBundle.message("add.script.label"),
                                     SimpleTextAttributes.LINK_PLAIN_ATTRIBUTES,
                                     e -> showAddFilterPopup(myFilterTable.getTable(),
                                                             new RelativePoint(MouseInfo.getPointerInfo().getLocation())));
    }
  }
private void showFilters()