@Override
  boolean match(Value value, EvaluationContextImpl context) throws EvaluateException {
    if (value instanceof ObjectReference objRef && myComponentEvaluators.size() == myRecordComponentNames.size()) {
      assert myTypeEvaluator != null;
      String typeName = myTypeEvaluator.evaluate(context).name();
      if (typeName == null) return false;
      ReferenceType refType = objRef.referenceType();
      boolean res = DebuggerUtils.instanceOf(refType, typeName);
      for (int i = 0; i < myComponentEvaluators.size() && res; i++) {
        PatternEvaluator componentEvaluator = myComponentEvaluators.get(i);
        Field field = refType.fieldByName(myRecordComponentNames.get(i));
        res = componentEvaluator.match(objRef.getValue(field), context);
      }
      if (res && myVariableEvaluator != null) {
        AssignmentEvaluator.assign(myVariableEvaluator.getModifier(), value, context);
      }
      return res;
    }
    return false;
  }
@Override
  boolean match(Value value, EvaluationContextImpl context)