anchor.diff:    Function action;
   
     final Icon icon;
  -  @override
  -  Icon get uiIcon => icon;
   
     /// List of rendered suffixes for this menu item.
     final ObservableList<MenuItemAffix> itemSuffixes;
  
positive.code: /// Example code for creating a menu item with tooltip
  ///     new MenuItem(label, tooltip: tooltip,
  ///                  action:action, icon:icon, subMenu:subMenu);
  class MenuItem<T> implements HasUIDisplayName, HasIcon {
    final String label;
    final String secondaryLabel;
    final String tooltip;
  
negative.code:       }.toString();
  }
  
  /// Required members to use [MenuItemMixin].
  abstract class _MenuItemBase {
    Function get action;
    Icon get icon;
    String get label;
    String get secondaryLabel;
    String get tooltip;
    MenuModel get subMenu;
  }
  
  /// Mixin to implement trivial getters on [MenuItem].
  abstract class MenuItemMixin implements _MenuItemBase {
    void _noop() {}
    Function get nullAwareActionHandler => action != null ? action : _noop;
  
    bool get hasIcon => icon != null;
  
    String get uiDisplayName => label;
  
    Icon get uiIcon => icon;
  
    bool get hasSubMenu => subMenu != null;
  
    bool get hasSecondaryLabel => secondaryLabel != null;
  
    bool get showTooltip => isNotEmpty(tooltip);
  }
  
  /// Type that can be specified to mark that there can be no subMenus for
  /// a given [MenuItem].
  abstract class NullMenuItem extends MenuItem<NullMenuItem> {
  