@Nullable
  public static Pair<ObjectReference, BooleanValue> getCollectionModificationInfo(DebugProcessImpl debugProcess,
                                                                                  EvaluationContext evaluationContext,
                                                                                  ObjectReference collectionInstance) {
    DebuggerManagerThreadImpl.assertIsManagerThread();
    ClassType cls = getClass(debugProcess, evaluationContext, COLLECTION_MODIFICATION_INFO_CLASS_NAME);
    if (cls != null) {
      Method getElementMethod = DebuggerUtils.findMethod(cls, GET_ELEMENT_METHOD_NAME, GET_ELEMENT_METHOD_DESC);
      Method isAdditionMethod = DebuggerUtils.findMethod(cls, IS_ADDITION_METHOD_NAME, IS_ADDITION_METHOD_DESC);
      if (getElementMethod == null || isAdditionMethod == null) {
        return null;
      }
      try {
        Value element =
          debugProcess.invokeInstanceMethod(evaluationContext, collectionInstance, getElementMethod, Collections.emptyList(), 0);
        Value isAddition =
          debugProcess.invokeInstanceMethod(evaluationContext, collectionInstance, isAdditionMethod, Collections.emptyList(), 0);
        if (element instanceof ObjectReference && isAddition instanceof BooleanValue) {
          return new Pair<>((ObjectReference)element, (BooleanValue)isAddition);
        }
      }
      catch (EvaluateException e) {
        DebuggerUtilsImpl.logError(e);
      }
    }
    return null;
  }
@Nullable
  public static Pair<ObjectReference, BooleanValue> getCollectionModificationInfo(DebugProcessImpl debugProcess,
                                                                                  EvaluationContext evaluationContext,
                                                                                  ObjectReference collectionInstance)