# Global Metrics

path: .metrics.mi.mi_sei
old: 43.11489230467268
new: -34.36465802953987
path: .metrics.mi.mi_original
old: 70.83453868010855
new: 35.34932859648443
path: .metrics.mi.mi_visual_studio
old: 41.42370683047284
new: 20.672121986248207
path: .metrics.nargs.sum
old: 6.0
new: 19.0
path: .metrics.nargs.average
old: 2.0
new: 0.5135135135135135
path: .metrics.cyclomatic.average
old: 1.0
new: 5.0
path: .metrics.cyclomatic.sum
old: 4.0
new: 140.0
path: .metrics.loc.cloc
old: 2.0
new: 127.0
path: .metrics.loc.blank
old: 6.0
new: 0.0
path: .metrics.loc.sloc
old: 44.0
new: 23.0
path: .metrics.loc.lloc
old: 11.0
new: 248.0
path: .metrics.loc.ploc
old: 36.0
new: 555.0
path: .metrics.cognitive.sum
old: 0.0
new: 115.0
path: .metrics.cognitive.average
old: 0.0
new: 3.108108108108108
path: .metrics.nom.functions
old: 3.0
new: 28.0
path: .metrics.nom.total
old: 3.0
new: 37.0
path: .metrics.nom.closures
old: 0.0
new: 9.0
path: .metrics.halstead.n1
old: 11.0
new: 34.0
path: .metrics.halstead.volume
old: 1475.0681502026314
new: 24986.46215448894
path: .metrics.halstead.level
old: 0.07053291536050157
new: 0.015850356879153333
path: .metrics.halstead.n2
old: 45.0
new: 322.0
path: .metrics.halstead.purity_ratio
old: 1.1227840044875812
new: 0.9686326225764648
path: .metrics.halstead.estimated_program_length
old: 285.1871371398456
new: 2855.5289713554184
path: .metrics.halstead.bugs
old: 0.25302236597178185
new: 4.514980659156873
path: .metrics.halstead.N1
old: 138.0
new: 1753.0
path: .metrics.halstead.difficulty
old: 14.177777777777775
new: 63.090062111801245
path: .metrics.halstead.N2
old: 116.0
new: 1195.0
path: .metrics.halstead.effort
old: 20913.18844065064
new: 1576397.4492808783
path: .metrics.halstead.length
old: 254.0
new: 2948.0
path: .metrics.halstead.time
old: 1161.843802258369
new: 87577.63607115991
path: .metrics.halstead.vocabulary
old: 56.0
new: 356.0
path: .metrics.nexits.average
old: 0.0
new: 1.027027027027027
path: .metrics.nexits.sum
old: 0.0
new: 38.0

# Spaces Data

## Minimal test - lines (167, 187)

path: .spaces[0].metrics.nargs.average
old: 2.0
new: 0.0
path: .spaces[0].metrics.nargs.sum
old: 2.0
new: 0.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.0781352324002231
new: 2.0405031085111425
path: .spaces[0].metrics.halstead.n1
old: 9.0
new: 10.0
path: .spaces[0].metrics.halstead.volume
old: 861.5205616745466
new: 208.9735285398626
path: .spaces[0].metrics.halstead.difficulty
old: 11.1
new: 6.333333333333333
path: .spaces[0].metrics.halstead.effort
old: 9562.878234587466
new: 1323.4990140857965
path: .spaces[0].metrics.halstead.bugs
old: 0.15017737050003163
new: 0.04018165557479973
path: .spaces[0].metrics.halstead.estimated_program_length
old: 175.7360428812364
new: 91.8226398830014
path: .spaces[0].metrics.halstead.time
old: 531.271013032637
new: 73.52772300476647
path: .spaces[0].metrics.halstead.length
old: 163.0
new: 45.0
path: .spaces[0].metrics.halstead.n2
old: 30.0
new: 15.0
path: .spaces[0].metrics.halstead.N1
old: 89.0
new: 26.0
path: .spaces[0].metrics.halstead.level
old: 0.0900900900900901
new: 0.15789473684210528
path: .spaces[0].metrics.halstead.N2
old: 74.0
new: 19.0
path: .spaces[0].metrics.halstead.vocabulary
old: 39.0
new: 25.0
path: .spaces[0].metrics.nom.total
old: 1.0
new: 2.0
path: .spaces[0].metrics.nom.closures
old: 0.0
new: 1.0
path: .spaces[0].metrics.loc.ploc
old: 22.0
new: 13.0
path: .spaces[0].metrics.loc.lloc
old: 8.0
new: 7.0
path: .spaces[0].metrics.loc.blank
old: 2.0
new: 5.0
path: .spaces[0].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[0].metrics.loc.sloc
old: 24.0
new: 21.0
path: .spaces[0].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[0].metrics.cyclomatic.average
old: 1.0
new: 2.0
path: .spaces[0].metrics.mi.mi_original
old: 84.14029354887742
new: 93.43925706043754
path: .spaces[0].metrics.mi.mi_sei
old: 45.789752109298774
new: 86.93961765233075
path: .spaces[0].metrics.mi.mi_visual_studio
old: 49.20485002858329
new: 54.64284038622078

### Code

    nsMenuX::~nsMenuX() {
      NS_OBJC_BEGIN_TRY_ABORT_BLOCK;

      RemoveAll();

      mNativeMenu.delegate = nil;
      [mNativeMenu release];
      [mMenuDelegate release];
      // autorelease the native menu item so that anything else happening to this
      // object happens before the native menu item actually dies
      [mNativeMenuItem autorelease];

      // alert the change notifier we don't care no more
      if (mContent) {
        mMenuGroupOwner->UnregisterForContentChanges(mContent);
      }

      MOZ_COUNT_DTOR(nsMenuX);

      NS_OBJC_END_TRY_ABORT_BLOCK;
    }

## Minimal test - lines (189, 219)

path: .spaces[1].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[1].metrics.nexits.average
old: 0.0
new: 1.0
path: .spaces[1].metrics.mi.mi_original
old: 114.30754370347049
new: 80.80275788698549
path: .spaces[1].metrics.mi.mi_sei
old: 126.14356188672652
new: 64.3529271822201
path: .spaces[1].metrics.mi.mi_visual_studio
old: 66.84651678565525
new: 47.253074787710815
path: .spaces[1].metrics.loc.ploc
old: 5.0
new: 19.0
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 9.0
path: .spaces[1].metrics.loc.sloc
old: 7.0
new: 31.0
path: .spaces[1].metrics.loc.lloc
old: 2.0
new: 12.0
path: .spaces[1].metrics.loc.cloc
old: 2.0
new: 3.0
path: .spaces[1].metrics.cognitive.average
old: 0.0
new: 1.0
path: .spaces[1].metrics.cognitive.sum
old: 0.0
new: 1.0
path: .spaces[1].metrics.halstead.difficulty
old: 4.333333333333333
new: 12.75
path: .spaces[1].metrics.halstead.estimated_program_length
old: 67.01955000865388
new: 242.46060490376732
path: .spaces[1].metrics.halstead.length
old: 28.0
new: 119.0
path: .spaces[1].metrics.halstead.N1
old: 15.0
new: 68.0
path: .spaces[1].metrics.halstead.n2
old: 12.0
new: 34.0
path: .spaces[1].metrics.halstead.effort
old: 524.3939421796666
new: 8606.48735010625
path: .spaces[1].metrics.halstead.purity_ratio
old: 2.393555357451924
new: 2.037484074821574
path: .spaces[1].metrics.halstead.time
old: 29.132996787759257
new: 478.1381861170139
path: .spaces[1].metrics.halstead.n1
old: 8.0
new: 17.0
path: .spaces[1].metrics.halstead.N2
old: 13.0
new: 51.0
path: .spaces[1].metrics.halstead.vocabulary
old: 20.0
new: 51.0
path: .spaces[1].metrics.halstead.volume
old: 121.01398665684616
new: 675.0186156946079
path: .spaces[1].metrics.halstead.bugs
old: 0.021676235263292952
new: 0.13998968461886627
path: .spaces[1].metrics.halstead.level
old: 0.2307692307692308
new: 0.0784313725490196
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 3.0
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 3.0
path: .spaces[1].metrics.nargs.average
old: 2.0
new: 1.0
path: .spaces[1].metrics.nargs.sum
old: 2.0
new: 1.0

### Code

    void nsMenuX::AddMenuItem(UniquePtr&& aMenuItem) {
      NS_OBJC_BEGIN_TRY_ABORT_BLOCK;

      nsMenuItemX* menuItem = aMenuItem.get();
      mMenuObjectsArray.AppendElement(std::move(aMenuItem));

      if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(menuItem->Content())) {
        return;
      }

      ++mVisibleItemsCount;

      NSMenuItem* newNativeMenuItem = (NSMenuItem*)menuItem->NativeData();

      // add the menu item to this menu
      [mNativeMenu addItem:newNativeMenuItem];

      // set up target/action
      newNativeMenuItem.target = nsMenuBarX::sNativeEventTarget;
      newNativeMenuItem.action = @selector(menuItemHit:);

      // set its command. we get the unique command id from the menubar
      newNativeMenuItem.tag = mMenuGroupOwner->RegisterForCommand(menuItem);
      MenuItemInfo* info = [[MenuItemInfo alloc] initWithMenuGroupOwner:mMenuGroupOwner];
      newNativeMenuItem.representedObject = info;
      [info release];

      menuItem->SetupIcon();

      NS_OBJC_END_TRY_ABORT_BLOCK;
    }

## Minimal test - lines (221, 245)

path: .spaces[2].metrics.nargs.average
old: 2.0
new: 1.0
path: .spaces[2].metrics.nargs.sum
old: 2.0
new: 1.0
path: .spaces[2].metrics.nexits.sum
old: 0.0
new: 1.0
path: .spaces[2].metrics.nexits.average
old: 0.0
new: 1.0
path: .spaces[2].metrics.cognitive.average
old: 0.0
new: 2.0
path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 2.0
path: .spaces[2].metrics.loc.sloc
old: 6.0
new: 25.0
path: .spaces[2].metrics.loc.ploc
old: 6.0
new: 16.0
path: .spaces[2].metrics.loc.lloc
old: 1.0
new: 10.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 6.0
path: .spaces[2].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[2].metrics.cyclomatic.sum
old: 1.0
new: 4.0
path: .spaces[2].metrics.cyclomatic.average
old: 1.0
new: 4.0
path: .spaces[2].metrics.halstead.vocabulary
old: 23.0
new: 40.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 1.363871565363121
new: 2.065818967744846
path: .spaces[2].metrics.halstead.length
old: 60.0
new: 84.0
path: .spaces[2].metrics.halstead.N1
old: 34.0
new: 51.0
path: .spaces[2].metrics.halstead.n1
old: 9.0
new: 17.0
path: .spaces[2].metrics.halstead.level
old: 0.11965811965811964
new: 0.08199643493761141
path: .spaces[2].metrics.halstead.estimated_program_length
old: 81.83229392178727
new: 173.52879329056708
path: .spaces[2].metrics.halstead.N2
old: 26.0
new: 33.0
path: .spaces[2].metrics.halstead.bugs
old: 0.05754467719832204
new: 0.10325576072998914
path: .spaces[2].metrics.halstead.volume
old: 271.4137173634208
new: 447.04195997053847
path: .spaces[2].metrics.halstead.n2
old: 14.0
new: 23.0
path: .spaces[2].metrics.halstead.difficulty
old: 8.357142857142858
new: 12.195652173913045
path: .spaces[2].metrics.halstead.effort
old: 2268.2432093943025
new: 5451.968250945045
path: .spaces[2].metrics.halstead.time
old: 126.0135116330168
new: 302.8871250525025
path: .spaces[2].metrics.mi.mi_visual_studio
old: 65.850611868534
new: 50.4096016626412
path: .spaces[2].metrics.mi.mi_original
old: 112.60454629519312
new: 86.20041884311645
path: .spaces[2].metrics.mi.mi_sei
old: 86.85498838901856
new: 74.6306049793481

### Code

    void nsMenuX::AddMenu(UniquePtr&& aMenu) {
      NS_OBJC_BEGIN_TRY_ABORT_BLOCK;

      // aMenu transfers ownership to mMenuObjectsArray and becomes nullptr, so
      // we need to keep a raw pointer to access it conveniently.
      nsMenuX* menu = aMenu.get();
      mMenuObjectsArray.AppendElement(std::move(aMenu));

      if (nsMenuUtilsX::NodeIsHiddenOrCollapsed(menu->Content())) {
        return;
      }

      ++mVisibleItemsCount;

      // We have to add a menu item and then associate the menu with it
      NSMenuItem* newNativeMenuItem = menu->NativeMenuItem();
      if (newNativeMenuItem) {
        [mNativeMenu addItem:newNativeMenuItem];
        newNativeMenuItem.submenu = (NSMenu*)menu->NativeData();
      }

      menu->SetupIcon();

      NS_OBJC_END_TRY_ABORT_BLOCK;
    }