docs: public void put(
      Conjunction selector,
      MatchTarget object,
      InternTable subExpr)
      throws MatchingException
    {
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        tc.entry(this,cclass, "put", new Object[] { selector, object, subExpr });
  
      // The subscription should go into Matcher if there are no SimpleTests in the
      // Conjunction whose ordinal positions are greater in magnitude (lower in the tree)
      // than that of this DifficultMatcher.
  
      if (selector == null || noEligibleTests(selector))
      {
        Selector expr = (selector == null) ? null : selector.getResidual();
        MatchTargetTypeList mttl;
  
        if (expr == null)
        {
          mttl = alwaysMatch;
        }
        else
        {
          expr = expr.intern(subExpr);
          totalDifficultEntries = subExpr.size();
  
          int pos = roots.indexOf(expr);
  
          // If this expression hasn't been put in the tree previously,
          // then add it in.
          if (pos == -1)
          {
            MatchTargetTypeList tlist = new MatchTargetTypeList();
            mttl = tlist;
            //Add new type list with corresponding expression.
            objs.add(tlist);
            roots.add(expr);
          }
          else
          {
            // Type list for this expression.
            mttl = (MatchTargetTypeList) objs.get(pos);
          }
        }
  
        // Add element
        mttl.addTarget(object);
      }
      else
        // Continue through this DifficultMatcher onto the rest of the tree.
        super.put(selector, object, subExpr);
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        tc.exit(this,cclass, "put");
  
    }