docs: @Override
     public void match(Object userContext, Object eventType, Object instance) {
        if (instance == null) {
           throw new IllegalArgumentException("instance cannot be null");
        }
  
        read.lock();
        try {
           MatcherEvalContext<TypeMetadata, AttributeMetadata, AttributeId> ctx = startMultiTypeContext(false, userContext, eventType, instance);
           if (ctx != null) {
              // try to match
              ctx.process(ctx.getRootNode());
  
              // notify
              ctx.notifySubscribers();
           }
        } finally {
           read.unlock();
        }
     }