code: public ContentMatcher remove(
      Conjunction selector,
      MatchTarget object,
      InternTable subExpr,
      OrdinalPosition parentId)
      throws MatchingException
    {
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        tc.entry(
            this,cclass,
          "remove",
          "selector: " + selector + ", object: " + object);
  
      if (objs == null)
        throw new IllegalStateException();
  
      // type removed as it is never used
      //int type = object.type();
  
      if (selector == null || noEligibleTests(selector))
      {
        int len = objs.size();
  
        boolean removed = false;
        // Check the list of MatchTargets for each subscription.
        for (int i = 0; !removed && i < len; i++)
        {
          MatchTargetTypeList tlist = (MatchTargetTypeList) objs.get(i);
  
          removed = tlist.deleteTarget(object);
  
          if (removed)
          {
            Selector node = (Selector) roots.get(i);
  
            if (node == null)
              throw new IllegalStateException();
  
            // Remove the node subscription from the subExpr table
            node.unintern(subExpr);
  
            if (tlist.size() == 0)
            {
              objs.remove(i);
              roots.remove(i);
            }
          }
        }
  
        if (!removed)
        {
          // If the subscription wasn't found anywhere else, remove it
          // from the alwaysMatch list.  If its not there, we have an error.
          removed = alwaysMatch.deleteTarget(object);
          if (!removed)
            throw new IllegalStateException();
        }
      }
      else
        // Case where subscription was not entered in this node, but simply passed through
        // to nodes lower on the tree.
        super.remove(selector, object, subExpr, ordinalPosition);
  
      // Tell our parent that this node should be deleted
      // if there are no subscriptions left in it.
      ContentMatcher result = this;
      if (roots.size() == 0 && alwaysMatch.size() == 0)
        result = vacantChild;
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        tc.exit(this,cclass, "remove", "result: " + result);
  
      return result;
    }
docs: ---------------------------------------------------------------------------