@Override
      public void nodeStateChanged(@NotNull CheckedTreeNode node) {
        if (myProcessingNodes) return;

        myProcessingNodes = true;
        try {
          if (!node.isChecked()) {
            String groupAndArtifact = getGroupAndArtifactId(node);
            /*
              exclusion works by groupId and artifactId, so if there are other nodes with same groupId and artifactId, we need to uncheck
              them to avoid confusion
            */
            TreeUtil.treeNodeTraverser(myRootNode).filter(CheckedTreeNode.class).forEach((treeNode) -> {
              if (getGroupAndArtifactId(treeNode).equals(groupAndArtifact)) {
                myDependenciesTree.setNodeState(treeNode, false);
              }
            });
          }
        }
        finally {
          myProcessingNodes = false;
        }
      }
@Override
      public void nodeStateChanged(@NotNull CheckedTreeNode node)