@Override
  protected FullValueEvaluatorProvider getFullValueEvaluatorProvider() {
    return (evaluationContext, valueDescriptor) -> {
      try {
        ObjectReference value = (ObjectReference)valueDescriptor.getValue();
        Field surfaceField = ((ClassType)value.type()).fieldByName("surfaceData");
        if (surfaceField == null) return null;
        ObjectReference surfaceDataValue = (ObjectReference)value.getValue(surfaceField);
        if (surfaceDataValue == null) return null;

        Field imgField = ((ReferenceType)surfaceDataValue.type()).fieldByName("bufImg"); // BufImgSurfaceData
        if (imgField == null) {
          imgField = ((ReferenceType)surfaceDataValue.type()).fieldByName("offscreenImage"); // CGLSurfaceData
        }
        if (imgField == null) return null;

        final Value bufImgValue = surfaceDataValue.getValue(imgField);
        Type type = bufImgValue.type();
        if (!(type instanceof ReferenceType) || !DebuggerUtils.instanceOf(type, "java.awt.Image")) {
          return null;
        }
        return new ImageObjectRenderer.IconPopupEvaluator(JavaDebuggerBundle.message("message.node.show.image"), evaluationContext) {
          @Override
          protected Icon getData() {
            return ImageObjectRenderer.getIcon(getEvaluationContext(), bufImgValue, "imageToBytes");
          }
        };
      }
      catch (Exception ignored) {
      }
      return null;
    };
  }
@Override
  protected FullValueEvaluatorProvider getFullValueEvaluatorProvider()