# Global Metrics

path: .metrics.nom.functions
old: 14.0
new: 13.0
path: .metrics.nom.total
old: 14.0
new: 13.0
path: .metrics.nargs.average
old: 2.2857142857142856
new: 2.0
path: .metrics.nargs.sum
old: 32.0
new: 26.0
path: .metrics.loc.cloc
old: 106.0
new: 96.0
path: .metrics.loc.blank
old: 83.0
new: 89.0
path: .metrics.loc.lloc
old: 201.0
new: 204.0
path: .metrics.loc.ploc
old: 474.0
new: 404.0
path: .metrics.loc.sloc
old: 663.0
new: 589.0
path: .metrics.cognitive.sum
old: 120.0
new: 91.0
path: .metrics.cognitive.average
old: 8.571428571428571
new: 7.0
path: .metrics.cyclomatic.sum
old: 91.0
new: 83.0
path: .metrics.cyclomatic.average
old: 5.6875
new: 5.928571428571429
path: .metrics.halstead.volume
old: 22122.126001357676
new: 16240.753283379898
path: .metrics.halstead.difficulty
old: 58.44387755102041
new: 54.004672897196265
path: .metrics.halstead.effort
old: 1292902.8231915927
new: 877076.5686729976
path: .metrics.halstead.n2
old: 294.0
new: 214.0
path: .metrics.halstead.estimated_program_length
old: 2551.5851182405904
new: 1778.885367761514
path: .metrics.halstead.time
old: 71827.93462175515
new: 48726.476037388755
path: .metrics.halstead.vocabulary
old: 323.0
new: 240.0
path: .metrics.halstead.bugs
old: 3.955997433179009
new: 3.054244153376359
path: .metrics.halstead.level
old: 0.0171104321257093
new: 0.01851691615471143
path: .metrics.halstead.N2
old: 1185.0
new: 889.0
path: .metrics.halstead.n1
old: 29.0
new: 26.0
path: .metrics.halstead.length
old: 2654.0
new: 2054.0
path: .metrics.halstead.purity_ratio
old: 0.9614111221705316
new: 0.8660590884914868
path: .metrics.halstead.N1
old: 1469.0
new: 1165.0
path: .metrics.mi.mi_sei
old: -47.79395401425897
new: -40.62594521009537
path: .metrics.mi.mi_original
old: -7.200289369624457
new: -1.835954959995192
path: .metrics.nexits.average
old: 1.0
new: 3.3846153846153846
path: .metrics.nexits.sum
old: 14.0
new: 44.0

# Spaces Data

## Minimal test - lines (353, 422)

path: .spaces[9].metrics.nargs.average
old: 3.0
new: 2.0
path: .spaces[9].metrics.nargs.sum
old: 3.0
new: 2.0
path: .spaces[9].metrics.cognitive.sum
old: 0.0
new: 10.0
path: .spaces[9].metrics.cognitive.average
old: 0.0
new: 10.0
path: .spaces[9].metrics.loc.cloc
old: 0.0
new: 8.0
path: .spaces[9].metrics.loc.sloc
old: 4.0
new: 70.0
path: .spaces[9].metrics.loc.blank
old: 0.0
new: 14.0
path: .spaces[9].metrics.loc.lloc
old: 1.0
new: 28.0
path: .spaces[9].metrics.loc.ploc
old: 4.0
new: 48.0
path: .spaces[9].metrics.halstead.bugs
old: 0.02502537766060993
new: 0.3327796801546092
path: .spaces[9].metrics.halstead.N1
old: 14.0
new: 146.0
path: .spaces[9].metrics.halstead.n1
old: 9.0
new: 20.0
path: .spaces[9].metrics.halstead.n2
old: 9.0
new: 54.0
path: .spaces[9].metrics.halstead.effort
old: 650.5083002250007
new: 31544.023097395067
path: .spaces[9].metrics.halstead.purity_ratio
old: 2.194563462536985
new: 1.563789318955018
path: .spaces[9].metrics.halstead.difficulty
old: 6.0
new: 20.0
path: .spaces[9].metrics.halstead.estimated_program_length
old: 57.05865002596162
new: 397.20248701457456
path: .spaces[9].metrics.halstead.level
old: 0.16666666666666666
new: 0.05
path: .spaces[9].metrics.halstead.volume
old: 108.41805003750012
new: 1577.2011548697533
path: .spaces[9].metrics.halstead.N2
old: 12.0
new: 108.0
path: .spaces[9].metrics.halstead.vocabulary
old: 18.0
new: 74.0
path: .spaces[9].metrics.halstead.time
old: 36.13935001250004
new: 1752.4457276330593
path: .spaces[9].metrics.halstead.length
old: 26.0
new: 254.0
path: .spaces[9].metrics.cyclomatic.sum
old: 1.0
new: 10.0
path: .spaces[9].metrics.cyclomatic.average
old: 1.0
new: 10.0
path: .spaces[9].metrics.nexits.sum
old: 1.0
new: 5.0
path: .spaces[9].metrics.nexits.average
old: 1.0
new: 5.0
path: .spaces[9].metrics.mi.mi_visual_studio
old: 72.48237397084954
new: 36.01442104140288
path: .spaces[9].metrics.mi.mi_original
old: 123.94485949015272
new: 61.58465998079893
path: .spaces[9].metrics.mi.mi_sei
old: 103.2156019975144
new: 39.170606286076286

### Code

    already_AddRefed nsOSHelperAppService::GetByExtension(
        const nsString& aFileExt, const char* aTypeHint) {
      if (aFileExt.IsEmpty()) return nullptr;

      // Determine the mime type.
      nsAutoCString typeToUse;
      if (aTypeHint && *aTypeHint) {
        typeToUse.Assign(aTypeHint);
      } else if (!GetMIMETypeFromOSForExtension(NS_ConvertUTF16toUTF8(aFileExt),
                                                typeToUse)) {
        return nullptr;
      }

      RefPtr mimeInfo = new nsMIMEInfoWin(typeToUse);

      // windows registry assumes your file extension is going to include the '.',
      // but our APIs expect it to not be there, so make sure we normalize that bit.
      nsAutoString fileExtToUse;
      if (aFileExt.First() != char16_t('.')) fileExtToUse = char16_t('.');

      fileExtToUse.Append(aFileExt);

      // don't append the '.' for our APIs.
      nsAutoCString lowerFileExt =
          NS_ConvertUTF16toUTF8(Substring(fileExtToUse, 1));
      ToLowerCase(lowerFileExt);
      mimeInfo->AppendExtension(lowerFileExt);
      mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault);

      nsAutoString appInfo;
      bool found;

      // Retrieve the default application for this extension
      NS_ENSURE_TRUE(mAppAssoc, nullptr);
      nsString assocType(fileExtToUse);
      wchar_t* pResult = nullptr;
      HRESULT hr = mAppAssoc->QueryCurrentDefault(assocType.get(), AT_FILEEXTENSION,
                                                  AL_EFFECTIVE, &pResult);
      if (SUCCEEDED(hr)) {
        found = true;
        appInfo.Assign(pResult);
        CoTaskMemFree(pResult);
      } else {
        found = false;
      }

      // Bug 358297 - ignore the default handler, force the user to choose app
      if (appInfo.EqualsLiteral("XPSViewer.Document")) found = false;

      if (!found) {
        return nullptr;
      }

      // Get other nsIMIMEInfo fields from registry, if possible.
      nsAutoString defaultDescription;
      nsCOMPtr defaultApplication;

      if (NS_FAILED(GetDefaultAppInfo(appInfo, defaultDescription,
                                      getter_AddRefs(defaultApplication)))) {
        return nullptr;
      }

      mimeInfo->SetDefaultDescription(defaultDescription);
      mimeInfo->SetDefaultApplicationHandler(defaultApplication);

      // Grab the general description
      GetMIMEInfoFromRegistry(appInfo, mimeInfo);

      return mimeInfo.forget();
    }

## Minimal test - lines (71, 113)

path: .spaces[3].metrics.halstead.N2
old: 28.0
new: 62.0
path: .spaces[3].metrics.halstead.difficulty
old: 8.105263157894736
new: 14.243243243243244
path: .spaces[3].metrics.halstead.time
old: 148.03888060084412
new: 714.945400963218
path: .spaces[3].metrics.halstead.effort
old: 2664.699850815194
new: 12869.017217337923
path: .spaces[3].metrics.halstead.purity_ratio
old: 1.7726025456781849
new: 1.670297088086159
path: .spaces[3].metrics.halstead.estimated_program_length
old: 118.76437056043838
new: 262.23664282952694
path: .spaces[3].metrics.halstead.n2
old: 19.0
new: 37.0
path: .spaces[3].metrics.halstead.volume
old: 328.76166990577076
new: 903.5173378396644
path: .spaces[3].metrics.halstead.vocabulary
old: 30.0
new: 54.0
path: .spaces[3].metrics.halstead.level
old: 0.1233766233766234
new: 0.07020872865275142
path: .spaces[3].metrics.halstead.N1
old: 39.0
new: 95.0
path: .spaces[3].metrics.halstead.n1
old: 11.0
new: 17.0
path: .spaces[3].metrics.halstead.length
old: 67.0
new: 157.0
path: .spaces[3].metrics.halstead.bugs
old: 0.06406845881224356
new: 0.18305250085029412
path: .spaces[3].metrics.loc.cloc
old: 7.0
new: 4.0
path: .spaces[3].metrics.loc.ploc
old: 15.0
new: 35.0
path: .spaces[3].metrics.loc.lloc
old: 8.0
new: 16.0
path: .spaces[3].metrics.loc.sloc
old: 25.0
new: 43.0
path: .spaces[3].metrics.loc.blank
old: 3.0
new: 4.0
path: .spaces[3].metrics.cognitive.sum
old: 2.0
new: 16.0
path: .spaces[3].metrics.cognitive.average
old: 2.0
new: 16.0
path: .spaces[3].metrics.nexits.average
old: 1.0
new: 5.0
path: .spaces[3].metrics.nexits.sum
old: 1.0
new: 5.0
path: .spaces[3].metrics.nargs.average
old: 0.0
new: 2.0
path: .spaces[3].metrics.nargs.sum
old: 0.0
new: 2.0
path: .spaces[3].metrics.mi.mi_visual_studio
old: 51.47864305124529
new: 42.5940482856294
path: .spaces[3].metrics.mi.mi_sei
old: 88.15182797777285
new: 52.94925578378689
path: .spaces[3].metrics.mi.mi_original
old: 88.02847961762946
new: 72.83582256842627
path: .spaces[3].metrics.cyclomatic.sum
old: 3.0
new: 8.0
path: .spaces[3].metrics.cyclomatic.average
old: 3.0
new: 8.0

### Code

    nsresult nsOSHelperAppService::OSProtocolHandlerExists(
        const char* aProtocolScheme, bool* aHandlerExists) {
      // look up the protocol scheme in the windows registry....if we find a match
      // then we have a handler for it...
      *aHandlerExists = false;
      if (aProtocolScheme && *aProtocolScheme) {
        NS_ENSURE_TRUE(mAppAssoc, NS_ERROR_NOT_AVAILABLE);
        wchar_t* pResult = nullptr;
        NS_ConvertASCIItoUTF16 scheme(aProtocolScheme);
        // We are responsible for freeing returned strings.
        HRESULT hr = mAppAssoc->QueryCurrentDefault(scheme.get(), AT_URLPROTOCOL,
                                                    AL_EFFECTIVE, &pResult);
        if (SUCCEEDED(hr)) {
          CoTaskMemFree(pResult);
          nsCOMPtr regKey =
              do_CreateInstance("@mozilla.org/windows-registry-key;1");
          if (!regKey) {
            return NS_ERROR_NOT_AVAILABLE;
          }

          nsresult rv = regKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT,
                                     nsDependentString(scheme.get()),
                                     nsIWindowsRegKey::ACCESS_QUERY_VALUE);
          if (NS_FAILED(rv)) {
            // Open will fail if the registry key path doesn't exist.
            return NS_OK;
          }

          bool hasValue;
          rv = regKey->HasValue(u"URL Protocol"_ns, &hasValue);
          if (NS_FAILED(rv)) {
            return NS_ERROR_FAILURE;
          }
          if (!hasValue) {
            return NS_OK;
          }

          *aHandlerExists = true;
        }
      }

      return NS_OK;
    }

## Minimal test - lines (115, 148)

path: .spaces[4].metrics.nargs.average
old: 6.0
new: 2.0
path: .spaces[4].metrics.nargs.sum
old: 6.0
new: 2.0
path: .spaces[4].metrics.nexits.average
old: 1.0
new: 4.0
path: .spaces[4].metrics.nexits.sum
old: 1.0
new: 4.0
path: .spaces[4].metrics.halstead.purity_ratio
old: 1.1873369084411656
new: 1.8654612934877235
path: .spaces[4].metrics.halstead.n2
old: 35.0
new: 41.0
path: .spaces[4].metrics.halstead.level
old: 0.0368421052631579
new: 0.0730837789661319
path: .spaces[4].metrics.halstead.length
old: 224.0
new: 155.0
path: .spaces[4].metrics.halstead.N2
old: 95.0
new: 66.0
path: .spaces[4].metrics.halstead.estimated_program_length
old: 265.9634674908211
new: 289.1465004905972
path: .spaces[4].metrics.halstead.bugs
old: 0.3576853279557205
new: 0.1788070010828995
path: .spaces[4].metrics.halstead.n1
old: 20.0
new: 17.0
path: .spaces[4].metrics.halstead.volume
old: 1295.024575829524
new: 907.9870542447736
path: .spaces[4].metrics.halstead.effort
old: 35150.667058229934
new: 12423.920425154098
path: .spaces[4].metrics.halstead.difficulty
old: 27.142857142857142
new: 13.682926829268292
path: .spaces[4].metrics.halstead.vocabulary
old: 55.0
new: 58.0
path: .spaces[4].metrics.halstead.N1
old: 129.0
new: 89.0
path: .spaces[4].metrics.halstead.time
old: 1952.8148365683296
new: 690.2178013974499
path: .spaces[4].metrics.loc.lloc
old: 23.0
new: 12.0
path: .spaces[4].metrics.loc.blank
old: 3.0
new: 2.0
path: .spaces[4].metrics.loc.ploc
old: 48.0
new: 30.0
path: .spaces[4].metrics.loc.sloc
old: 67.0
new: 34.0
path: .spaces[4].metrics.loc.cloc
old: 16.0
new: 2.0
path: .spaces[4].metrics.cyclomatic.sum
old: 12.0
new: 6.0
path: .spaces[4].metrics.cyclomatic.average
old: 12.0
new: 6.0
path: .spaces[4].metrics.cognitive.average
old: 24.0
new: 7.0
path: .spaces[4].metrics.cognitive.sum
old: 24.0
new: 7.0
path: .spaces[4].metrics.mi.mi_visual_studio
old: 36.75982328563755
new: 45.072843784623565
path: .spaces[4].metrics.mi.mi_original
old: 62.85929781844021
new: 77.07456287170629
path: .spaces[4].metrics.mi.mi_sei
old: 50.54702382273719
new: 54.45295467390781

### Code

    NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription(
        const nsACString& aScheme, nsAString& _retval) {
      nsCOMPtr regKey =
          do_CreateInstance("@mozilla.org/windows-registry-key;1");
      if (!regKey) return NS_ERROR_NOT_AVAILABLE;

      NS_ConvertASCIItoUTF16 buf(aScheme);

      if (mozilla::IsWin8OrLater()) {
        wchar_t result[1024];
        DWORD resultSize = 1024;
        HRESULT hr = AssocQueryString(0x1000 /* ASSOCF_IS_PROTOCOL */,
                                      ASSOCSTR_FRIENDLYAPPNAME, buf.get(), NULL,
                                      result, &resultSize);
        if (SUCCEEDED(hr)) {
          _retval = result;
          return NS_OK;
        }
      }

      NS_ENSURE_TRUE(mAppAssoc, NS_ERROR_NOT_AVAILABLE);
      wchar_t* pResult = nullptr;
      // We are responsible for freeing returned strings.
      HRESULT hr = mAppAssoc->QueryCurrentDefault(buf.get(), AT_URLPROTOCOL,
                                                  AL_EFFECTIVE, &pResult);
      if (SUCCEEDED(hr)) {
        nsCOMPtr app;
        nsAutoString appInfo(pResult);
        CoTaskMemFree(pResult);
        if (NS_SUCCEEDED(GetDefaultAppInfo(appInfo, _retval, getter_AddRefs(app))))
          return NS_OK;
      }
      return NS_ERROR_NOT_AVAILABLE;
    }

## Minimal test - lines (532, 557)

path: .spaces[11].metrics.nexits.sum
old: 0.0
new: 3.0
path: .spaces[11].metrics.nexits.average
old: 0.0
new: 3.0
path: .spaces[11].metrics.nargs.average
old: 4.0
new: 3.0
path: .spaces[11].metrics.nargs.sum
old: 4.0
new: 3.0
path: .spaces[11].metrics.mi.mi_visual_studio
old: 54.74255727954002
new: 49.622054918054715
path: .spaces[11].metrics.mi.mi_sei
old: 59.55314293763702
new: 67.85113200640815
path: .spaces[11].metrics.mi.mi_original
old: 93.60977294801344
new: 84.85371390987356
path: .spaces[11].metrics.cyclomatic.sum
old: 2.0
new: 3.0
path: .spaces[11].metrics.cyclomatic.average
old: 1.0
new: 3.0
path: .spaces[11].metrics.halstead.N1
old: 34.0
new: 58.0
path: .spaces[11].metrics.halstead.vocabulary
old: 28.0
new: 41.0
path: .spaces[11].metrics.halstead.effort
old: 2222.9209159594357
new: 6490.880313287294
path: .spaces[11].metrics.halstead.bugs
old: 0.05677555915985361
new: 0.1159883791090294
path: .spaces[11].metrics.halstead.length
old: 68.0
new: 100.0
path: .spaces[11].metrics.halstead.volume
old: 326.90013469991703
new: 535.7552004618084
path: .spaces[11].metrics.halstead.level
old: 0.14705882352941177
new: 0.08253968253968254
path: .spaces[11].metrics.halstead.N2
old: 34.0
new: 42.0
path: .spaces[11].metrics.halstead.n1
old: 8.0
new: 15.0
path: .spaces[11].metrics.halstead.purity_ratio
old: 1.6240964984962831
new: 1.808147916057962
path: .spaces[11].metrics.halstead.difficulty
old: 6.8
new: 12.115384615384617
path: .spaces[11].metrics.halstead.time
old: 123.49560644219088
new: 360.60446184929407
path: .spaces[11].metrics.halstead.estimated_program_length
old: 110.43856189774723
new: 180.8147916057962
path: .spaces[11].metrics.halstead.n2
old: 20.0
new: 26.0
path: .spaces[11].metrics.cognitive.sum
old: 0.0
new: 2.0
path: .spaces[11].metrics.cognitive.average
old: 0.0
new: 2.0
path: .spaces[11].metrics.loc.sloc
old: 18.0
new: 26.0
path: .spaces[11].metrics.loc.ploc
old: 16.0
new: 19.0
path: .spaces[11].metrics.loc.cloc
old: 0.0
new: 2.0
path: .spaces[11].metrics.loc.blank
old: 2.0
new: 5.0
path: .spaces[11].metrics.loc.lloc
old: 1.0
new: 10.0

### Code

    nsOSHelperAppService::GetProtocolHandlerInfoFromOS(const nsACString& aScheme,
                                                       bool* found,
                                                       nsIHandlerInfo** _retval) {
      NS_ASSERTION(!aScheme.IsEmpty(), "No scheme was specified!");

      nsresult rv =
          OSProtocolHandlerExists(nsPromiseFlatCString(aScheme).get(), found);
      if (NS_FAILED(rv)) return rv;

      nsMIMEInfoWin* handlerInfo =
          new nsMIMEInfoWin(aScheme, nsMIMEInfoBase::eProtocolInfo);
      NS_ENSURE_TRUE(handlerInfo, NS_ERROR_OUT_OF_MEMORY);
      NS_ADDREF(*_retval = handlerInfo);

      if (!*found) {
        // Code that calls this requires an object regardless if the OS has
        // something for us, so we return the empty object.
        return NS_OK;
      }

      nsAutoString desc;
      GetApplicationDescription(aScheme, desc);
      handlerInfo->SetDefaultDescription(desc);

      return NS_OK;
    }

## Minimal test - lines (33, 39)

path: .spaces[0].metrics.halstead.estimated_program_length
old: 48.0
new: 57.05865002596162
path: .spaces[0].metrics.halstead.vocabulary
old: 16.0
new: 18.0
path: .spaces[0].metrics.halstead.n1
old: 8.0
new: 9.0
path: .spaces[0].metrics.halstead.length
old: 25.0
new: 32.0
path: .spaces[0].metrics.halstead.time
old: 30.555555555555557
new: 44.47920001538466
path: .spaces[0].metrics.halstead.volume
old: 100.0
new: 133.437600046154
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.92
new: 1.7830828133113006
path: .spaces[0].metrics.halstead.N1
old: 14.0
new: 20.0
path: .spaces[0].metrics.halstead.difficulty
old: 5.5
new: 6.0
path: .spaces[0].metrics.halstead.n2
old: 8.0
new: 9.0
path: .spaces[0].metrics.halstead.N2
old: 11.0
new: 12.0
path: .spaces[0].metrics.halstead.level
old: 0.18181818181818185
new: 0.16666666666666666
path: .spaces[0].metrics.halstead.bugs
old: 0.022376244815288552
new: 0.028740769637474364
path: .spaces[0].metrics.halstead.effort
old: 550.0
new: 800.6256002769239
path: .spaces[0].metrics.mi.mi_visual_studio
old: 72.72815577936825
new: 66.54933276535203
path: .spaces[0].metrics.mi.mi_original
old: 124.3651463827197
new: 113.79935902875198
path: .spaces[0].metrics.mi.mi_sei
old: 103.82194781317143
new: 88.57873879451489
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 2.0
path: .spaces[0].metrics.loc.ploc
old: 4.0
new: 7.0
path: .spaces[0].metrics.loc.sloc
old: 4.0
new: 7.0
path: .spaces[0].metrics.nexits.average
old: 1.0
new: 0.0
path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 0.0

### Code

    nsOSHelperAppService::nsOSHelperAppService()
        : nsExternalHelperAppService(), mAppAssoc(nullptr) {
      CoInitialize(nullptr);
      CoCreateInstance(CLSID_ApplicationAssociationRegistration, nullptr,
                       CLSCTX_INPROC, IID_IApplicationAssociationRegistration,
                       (void**)&mAppAssoc);
    }

## Minimal test - lines (150, 186)

path: .spaces[5].metrics.cognitive.average
old: 2.0
new: 3.0
path: .spaces[5].metrics.cognitive.sum
old: 2.0
new: 3.0
path: .spaces[5].metrics.loc.blank
old: 1.0
new: 4.0
path: .spaces[5].metrics.loc.lloc
old: 4.0
new: 13.0
path: .spaces[5].metrics.loc.ploc
old: 9.0
new: 29.0
path: .spaces[5].metrics.loc.sloc
old: 14.0
new: 37.0
path: .spaces[5].metrics.cyclomatic.average
old: 2.0
new: 4.0
path: .spaces[5].metrics.cyclomatic.sum
old: 2.0
new: 4.0
path: .spaces[5].metrics.halstead.estimated_program_length
old: 66.43856189774725
new: 251.35313346239897
path: .spaces[5].metrics.halstead.length
old: 44.0
new: 147.0
path: .spaces[5].metrics.halstead.time
old: 95.08241808752196
new: 613.3750169688979
path: .spaces[5].metrics.halstead.bugs
old: 0.04769365003766825
new: 0.16527651140705427
path: .spaces[5].metrics.halstead.level
old: 0.1111111111111111
new: 0.0758974358974359
path: .spaces[5].metrics.halstead.effort
old: 1711.4835255753956
new: 11040.750305440162
path: .spaces[5].metrics.halstead.volume
old: 190.16483617504392
new: 837.9646385667405
path: .spaces[5].metrics.halstead.vocabulary
old: 20.0
new: 52.0
path: .spaces[5].metrics.halstead.difficulty
old: 9.0
new: 13.175675675675675
path: .spaces[5].metrics.halstead.n1
old: 10.0
new: 15.0
path: .spaces[5].metrics.halstead.N2
old: 18.0
new: 65.0
path: .spaces[5].metrics.halstead.purity_ratio
old: 1.509967315857892
new: 1.7098852616489724
path: .spaces[5].metrics.halstead.N1
old: 26.0
new: 82.0
path: .spaces[5].metrics.halstead.n2
old: 10.0
new: 37.0
path: .spaces[5].metrics.mi.mi_sei
old: 106.3227630645121
new: 59.57241588374017
path: .spaces[5].metrics.mi.mi_original
old: 100.49823673493546
new: 76.58205512384131
path: .spaces[5].metrics.mi.mi_visual_studio
old: 58.77089867540085
new: 44.78482755780193
path: .spaces[5].metrics.nexits.sum
old: 0.0
new: 4.0
path: .spaces[5].metrics.nexits.average
old: 0.0
new: 4.0

### Code

    NS_IMETHODIMP nsOSHelperAppService::IsCurrentAppOSDefaultForProtocol(
        const nsACString& aScheme, bool* _retval) {
      *_retval = false;

      NS_ENSURE_TRUE(mAppAssoc, NS_ERROR_NOT_AVAILABLE);

      NS_ConvertASCIItoUTF16 buf(aScheme);

      // Find the progID
      wchar_t* pResult = nullptr;
      HRESULT hr = mAppAssoc->QueryCurrentDefault(buf.get(), AT_URLPROTOCOL,
                                                  AL_EFFECTIVE, &pResult);
      if (FAILED(hr)) {
        return NS_ERROR_FAILURE;
      }
      nsAutoString progID(pResult);
      // We are responsible for freeing returned strings.
      CoTaskMemFree(pResult);

      // Find the default executable.
      nsAutoString description;
      nsCOMPtr appFile;
      nsresult rv = GetDefaultAppInfo(progID, description, getter_AddRefs(appFile));
      if (NS_FAILED(rv)) {
        return rv;
      }
      // Determine if the default executable is our executable.
      nsCOMPtr ourBinary;
      XRE_GetBinaryPath(getter_AddRefs(ourBinary));
      bool isSame = false;
      rv = appFile->Equals(ourBinary, &isSame);
      if (NS_FAILED(rv)) {
        return rv;
      }
      *_retval = isSame;
      return NS_OK;
    }

## Minimal test - lines (50, 69)

path: .spaces[2].metrics.loc.lloc
old: 3.0
new: 7.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 5.0
path: .spaces[2].metrics.loc.sloc
old: 7.0
new: 20.0
path: .spaces[2].metrics.loc.ploc
old: 7.0
new: 15.0
path: .spaces[2].metrics.halstead.difficulty
old: 8.863636363636363
new: 9.692307692307692
path: .spaces[2].metrics.halstead.bugs
old: 0.04608404073955524
new: 0.08214548871116752
path: .spaces[2].metrics.halstead.N2
old: 15.0
new: 36.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 2.1539866035211115
new: 2.340192021072998
path: .spaces[2].metrics.halstead.estimated_program_length
old: 86.15946414084446
new: 175.51440158047484
path: .spaces[2].metrics.halstead.effort
old: 1625.577613892046
new: 3868.6323458988904
path: .spaces[2].metrics.halstead.N1
old: 25.0
new: 39.0
path: .spaces[2].metrics.halstead.length
old: 40.0
new: 75.0
path: .spaces[2].metrics.halstead.n2
old: 11.0
new: 26.0
path: .spaces[2].metrics.halstead.vocabulary
old: 24.0
new: 40.0
path: .spaces[2].metrics.halstead.n1
old: 13.0
new: 14.0
path: .spaces[2].metrics.halstead.volume
old: 183.39850002884623
new: 399.1446071165522
path: .spaces[2].metrics.halstead.level
old: 0.11282051282051282
new: 0.10317460317460318
path: .spaces[2].metrics.halstead.time
old: 90.309867438447
new: 214.92401921660505
path: .spaces[2].metrics.cognitive.average
old: 3.0
new: 2.0
path: .spaces[2].metrics.cognitive.sum
old: 3.0
new: 2.0
path: .spaces[2].metrics.cyclomatic.sum
old: 5.0
new: 3.0
path: .spaces[2].metrics.cyclomatic.average
old: 5.0
new: 3.0
path: .spaces[2].metrics.mi.mi_visual_studio
old: 65.04422011904839
new: 53.00272136725324
path: .spaces[2].metrics.mi.mi_sei
old: 85.27289251026212
new: 55.36277277816697
path: .spaces[2].metrics.mi.mi_original
old: 111.22561640357276
new: 90.63465353800304
path: .spaces[2].metrics.nargs.average
old: 1.0
new: 2.0
path: .spaces[2].metrics.nargs.sum
old: 1.0
new: 2.0

### Code

    static nsresult GetExtensionFromWindowsMimeDatabase(const nsACString& aMimeType,
                                                        nsString& aFileExtension) {
      nsAutoString mimeDatabaseKey;
      mimeDatabaseKey.AssignLiteral("MIME\\Database\\Content Type\\");

      AppendASCIItoUTF16(aMimeType, mimeDatabaseKey);

      nsCOMPtr regKey =
          do_CreateInstance("@mozilla.org/windows-registry-key;1");
      if (!regKey) return NS_ERROR_NOT_AVAILABLE;

      nsresult rv =
          regKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT, mimeDatabaseKey,
                       nsIWindowsRegKey::ACCESS_QUERY_VALUE);

      if (NS_SUCCEEDED(rv))
        regKey->ReadStringValue(u"Extension"_ns, aFileExtension);

      return NS_OK;
    }

## Minimal test - lines (41, 45)

path: .spaces[1].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[1].metrics.nexits.average
old: 1.0
new: 0.0
path: .spaces[1].metrics.loc.lloc
old: 1.0
new: 4.0
path: .spaces[1].metrics.loc.cloc
old: 1.0
new: 0.0
path: .spaces[1].metrics.loc.ploc
old: 3.0
new: 5.0
path: .spaces[1].metrics.loc.sloc
old: 4.0
new: 5.0
path: .spaces[1].metrics.halstead.time
old: 3.3333333333333335
new: 23.02495824621124
path: .spaces[1].metrics.halstead.n1
old: 5.0
new: 8.0
path: .spaces[1].metrics.halstead.N2
old: 3.0
new: 7.0
path: .spaces[1].metrics.halstead.bugs
old: 0.005108729549290353
new: 0.018529327165393225
path: .spaces[1].metrics.halstead.difficulty
old: 2.5
new: 5.6
path: .spaces[1].metrics.halstead.level
old: 0.4
new: 0.17857142857142858
path: .spaces[1].metrics.halstead.n2
old: 3.0
new: 5.0
path: .spaces[1].metrics.halstead.purity_ratio
old: 2.045565997075035
new: 1.7804820237218404
path: .spaces[1].metrics.halstead.effort
old: 60.0
new: 414.4492484318023
path: .spaces[1].metrics.halstead.vocabulary
old: 8.0
new: 13.0
path: .spaces[1].metrics.halstead.length
old: 8.0
new: 20.0
path: .spaces[1].metrics.halstead.volume
old: 24.0
new: 74.00879436282185
path: .spaces[1].metrics.halstead.N1
old: 5.0
new: 13.0
path: .spaces[1].metrics.halstead.estimated_program_length
old: 16.36452797660028
new: 35.60964047443681
path: .spaces[1].metrics.mi.mi_sei
old: 149.49958851942245
new: 100.63471585459688
path: .spaces[1].metrics.mi.mi_original
old: 131.78615143204846
new: 122.08534938837198
path: .spaces[1].metrics.mi.mi_visual_studio
old: 77.06792481406343
new: 71.39494116279063
path: .spaces[1].metrics.cyclomatic.sum
old: 1.0
new: 2.0
path: .spaces[1].metrics.cyclomatic.average
old: 1.0
new: 2.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

### Code

    nsOSHelperAppService::~nsOSHelperAppService() {
      if (mAppAssoc) mAppAssoc->Release();
      mAppAssoc = nullptr;
      CoUninitialize();
    }

## Minimal test - lines (226, 249)

path: .spaces[7].metrics.loc.blank
old: 0.0
new: 5.0
path: .spaces[7].metrics.loc.sloc
old: 4.0
new: 24.0
path: .spaces[7].metrics.loc.ploc
old: 4.0
new: 19.0
path: .spaces[7].metrics.loc.lloc
old: 1.0
new: 13.0
path: .spaces[7].metrics.cognitive.sum
old: 0.0
new: 5.0
path: .spaces[7].metrics.cognitive.average
old: 0.0
new: 5.0
path: .spaces[7].metrics.cyclomatic.sum
old: 1.0
new: 6.0
path: .spaces[7].metrics.cyclomatic.average
old: 1.0
new: 6.0
path: .spaces[7].metrics.nexits.sum
old: 1.0
new: 4.0
path: .spaces[7].metrics.nexits.average
old: 1.0
new: 4.0
path: .spaces[7].metrics.mi.mi_original
old: 124.68625431117268
new: 84.62235371944678
path: .spaces[7].metrics.mi.mi_sei
old: 104.2852086291407
new: 46.994317223811606
path: .spaces[7].metrics.mi.mi_visual_studio
old: 72.91593819366824
new: 49.48675656107999
path: .spaces[7].metrics.halstead.estimated_program_length
old: 52.529325012980806
new: 191.69830097292416
path: .spaces[7].metrics.halstead.time
old: 25.53402713176138
new: 537.3161565435996
path: .spaces[7].metrics.halstead.N1
old: 12.0
new: 69.0
path: .spaces[7].metrics.halstead.difficulty
old: 4.888888888888889
new: 15.365384615384617
path: .spaces[7].metrics.halstead.vocabulary
old: 17.0
new: 43.0
path: .spaces[7].metrics.halstead.length
old: 23.0
new: 116.0
path: .spaces[7].metrics.halstead.n2
old: 9.0
new: 26.0
path: .spaces[7].metrics.halstead.n1
old: 8.0
new: 17.0
path: .spaces[7].metrics.halstead.bugs
old: 0.019852107840031902
new: 0.1513144307602043
path: .spaces[7].metrics.halstead.volume
old: 94.0116453487578
new: 629.4467115454433
path: .spaces[7].metrics.halstead.effort
old: 459.6124883717048
new: 9671.690817784793
path: .spaces[7].metrics.halstead.level
old: 0.20454545454545453
new: 0.06508135168961202
path: .spaces[7].metrics.halstead.purity_ratio
old: 2.2838836962165567
new: 1.6525715601114153
path: .spaces[7].metrics.halstead.N2
old: 11.0
new: 47.0

### Code

    bool nsOSHelperAppService::typeFromExtEquals(const char16_t* aExt,
                                                 const char* aType) {
      if (!aType) return false;
      nsAutoString fileExtToUse;
      if (aExt[0] != char16_t('.')) fileExtToUse = char16_t('.');

      fileExtToUse.Append(aExt);

      bool eq = false;
      nsCOMPtr regKey =
          do_CreateInstance("@mozilla.org/windows-registry-key;1");
      if (!regKey) return eq;

      nsresult rv =
          regKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT, fileExtToUse,
                       nsIWindowsRegKey::ACCESS_QUERY_VALUE);
      if (NS_FAILED(rv)) return eq;

      nsAutoString type;
      rv = regKey->ReadStringValue(u"Content Type"_ns, type);
      if (NS_SUCCEEDED(rv)) eq = type.LowerCaseEqualsASCII(aType);

      return eq;
    }

## Minimal test - lines (425, 529)

path: .spaces[10].metrics.cognitive.sum
old: 83.0
new: 18.0
path: .spaces[10].metrics.cognitive.average
old: 83.0
new: 18.0
path: .spaces[10].metrics.mi.mi_original
old: 12.170225571999111
new: 51.26615981725078
path: .spaces[10].metrics.mi.mi_sei
old: -23.801983951970424
new: 33.150596617382675
path: .spaces[10].metrics.mi.mi_visual_studio
old: 7.117090977777258
new: 29.9802104194449
path: .spaces[10].metrics.nexits.sum
old: 2.0
new: 4.0
path: .spaces[10].metrics.nexits.average
old: 2.0
new: 4.0
path: .spaces[10].metrics.halstead.N2
old: 800.0
new: 161.0
path: .spaces[10].metrics.halstead.n2
old: 167.0
new: 47.0
path: .spaces[10].metrics.halstead.n1
old: 26.0
new: 21.0
path: .spaces[10].metrics.halstead.N1
old: 979.0
new: 230.0
path: .spaces[10].metrics.halstead.bugs
old: 2.970267191293152
new: 0.6474889241081817
path: .spaces[10].metrics.halstead.estimated_program_length
old: 1355.2900495148351
new: 353.3043419072029
path: .spaces[10].metrics.halstead.difficulty
old: 62.2754491017964
new: 35.96808510638298
path: .spaces[10].metrics.halstead.time
old: 46730.73956111747
new: 4756.175732689451
path: .spaces[10].metrics.halstead.vocabulary
old: 193.0
new: 68.0
path: .spaces[10].metrics.halstead.effort
old: 841153.3121001145
new: 85611.16318841012
path: .spaces[10].metrics.halstead.purity_ratio
old: 0.7618268968605032
new: 0.9035916672818488
path: .spaces[10].metrics.halstead.volume
old: 13506.981069299916
new: 2380.1979709288826
path: .spaces[10].metrics.halstead.length
old: 1779.0
new: 391.0
path: .spaces[10].metrics.halstead.level
old: 0.016057692307692308
new: 0.027802425317953267
path: .spaces[10].metrics.cyclomatic.average
old: 53.0
new: 17.0
path: .spaces[10].metrics.cyclomatic.sum
old: 53.0
new: 17.0
path: .spaces[10].metrics.loc.blank
old: 46.0
new: 10.0
path: .spaces[10].metrics.loc.lloc
old: 136.0
new: 38.0
path: .spaces[10].metrics.loc.ploc
old: 293.0
new: 72.0
path: .spaces[10].metrics.loc.sloc
old: 403.0
new: 105.0
path: .spaces[10].metrics.loc.cloc
old: 64.0
new: 23.0

### Code

    nsOSHelperAppService::GetMIMEInfoFromOS(const nsACString& aMIMEType,
                                            const nsACString& aFileExt,
                                            bool* aFound, nsIMIMEInfo** aMIMEInfo) {
      *aFound = false;

      const nsCString& flatType = PromiseFlatCString(aMIMEType);
      nsAutoString fileExtension;
      CopyUTF8toUTF16(aFileExt, fileExtension);

      /* XXX The octet-stream check is a gross hack to wallpaper over the most
       * common Win32 extension issues caused by the fix for bug 116938.  See bug
       * 120327, comment 271 for why this is needed.  Not even sure we
       * want to remove this once we have fixed all this stuff to work
       * right; any info we get from the OS on this type is pretty much
       * useless....
       */
      bool haveMeaningfulMimeType =
          !aMIMEType.IsEmpty() &&
          !aMIMEType.LowerCaseEqualsLiteral(APPLICATION_OCTET_STREAM);
      LOG(("Extension lookup on '%s' with mimetype '%s'%s\n", fileExtension.get(),
           flatType.get(),
           haveMeaningfulMimeType ? " (treated as meaningful)" : ""));

      RefPtr mi;

      // We should have *something* to go on here.
      nsAutoString extensionFromMimeType;
      if (haveMeaningfulMimeType) {
        GetExtensionFromWindowsMimeDatabase(aMIMEType, extensionFromMimeType);
      }
      if (fileExtension.IsEmpty() && extensionFromMimeType.IsEmpty()) {
        // Without an extension from the mimetype or the file, we can't
        // do anything here.
        mi = new nsMIMEInfoWin(flatType.get());
        mi.forget(aMIMEInfo);
        return NS_OK;
      }

      // Either fileExtension or extensionFromMimeType must now be non-empty.

      *aFound = true;

      // On Windows, we prefer the file extension for lookups over the mimetype,
      // because that's how windows does things.
      // If we have no file extension or it doesn't match the mimetype, use the
      // mime type's default file extension instead.
      bool usedMimeTypeExtensionForLookup = false;
      if (fileExtension.IsEmpty() ||
          (!extensionFromMimeType.IsEmpty() &&
           !typeFromExtEquals(fileExtension.get(), flatType.get()))) {
        usedMimeTypeExtensionForLookup = true;
        fileExtension = extensionFromMimeType;
        LOG(("Now using '%s' mimetype's default file extension '%s' for lookup\n",
             flatType.get(), fileExtension.get()));
      }

      // If we have an extension, use it for lookup:
      mi = GetByExtension(fileExtension, flatType.get());
      LOG(("Extension lookup on '%s' found: 0x%p\n", fileExtension.get(),
           mi.get()));

      if (mi) {
        bool hasDefault = false;
        mi->GetHasDefaultHandler(&hasDefault);
        // If we don't find a default handler description, see if we can find one
        // using the mimetype.
        if (!hasDefault && !usedMimeTypeExtensionForLookup) {
          RefPtr miFromMimeType =
              GetByExtension(extensionFromMimeType, flatType.get());
          LOG(("Mime-based ext. lookup for '%s' found 0x%p\n",
               extensionFromMimeType.get(), miFromMimeType.get()));
          if (miFromMimeType) {
            nsAutoString desc;
            miFromMimeType->GetDefaultDescription(desc);
            mi->SetDefaultDescription(desc);
          }
        }
        mi.forget(aMIMEInfo);
        return NS_OK;
      }

      // The extension didn't work. Try the extension from the mimetype if
      // different:
      if (!extensionFromMimeType.IsEmpty() && !usedMimeTypeExtensionForLookup) {
        mi = GetByExtension(extensionFromMimeType, flatType.get());
        LOG(("Mime-based ext. lookup for '%s' found 0x%p\n",
             extensionFromMimeType.get(), mi.get()));
      }
      if (mi) {
        mi.forget(aMIMEInfo);
        return NS_OK;
      }
      // This didn't work either, so just return an empty dummy mimeinfo.
      *aFound = false;
      mi = new nsMIMEInfoWin(flatType.get());
      // If we didn't resort to the mime type's extension, we must have had a
      // valid extension, so stick its lowercase version on the mime info.
      if (!usedMimeTypeExtensionForLookup) {
        nsAutoCString lowerFileExt;
        ToLowerCase(aFileExt, lowerFileExt);
        mi->AppendExtension(lowerFileExt);
      }
      mi.forget(aMIMEInfo);
      return NS_OK;
    }

## Minimal test - lines (559, 589)

path: .spaces[12].metrics.loc.blank
old: 3.0
new: 5.0
path: .spaces[12].metrics.loc.lloc
old: 10.0
new: 14.0
path: .spaces[12].metrics.loc.ploc
old: 24.0
new: 22.0
path: .spaces[12].metrics.loc.sloc
old: 29.0
new: 31.0
path: .spaces[12].metrics.loc.cloc
old: 2.0
new: 4.0
path: .spaces[12].metrics.nexits.average
old: 0.0
new: 5.0
path: .spaces[12].metrics.nexits.sum
old: 0.0
new: 5.0
path: .spaces[12].metrics.cognitive.average
old: 2.0
new: 6.0
path: .spaces[12].metrics.cognitive.sum
old: 2.0
new: 6.0
path: .spaces[12].metrics.halstead.effort
old: 20384.915451104112
new: 10003.018139743335
path: .spaces[12].metrics.halstead.purity_ratio
old: 1.6438369355142703
new: 1.7007733843239057
path: .spaces[12].metrics.halstead.bugs
old: 0.24874327896216705
new: 0.15475075725185247
path: .spaces[12].metrics.halstead.N1
old: 109.0
new: 70.0
path: .spaces[12].metrics.halstead.level
old: 0.0574712643678161
new: 0.06588235294117648
path: .spaces[12].metrics.halstead.n1
old: 18.0
new: 17.0
path: .spaces[12].metrics.halstead.n2
old: 45.0
new: 28.0
path: .spaces[12].metrics.halstead.volume
old: 1171.5468650059836
new: 659.022371559561
path: .spaces[12].metrics.halstead.vocabulary
old: 63.0
new: 45.0
path: .spaces[12].metrics.halstead.N2
old: 87.0
new: 50.0
path: .spaces[12].metrics.halstead.estimated_program_length
old: 322.19203936079697
new: 204.09280611886868
path: .spaces[12].metrics.halstead.time
old: 1132.4953028391174
new: 555.7232299857409
path: .spaces[12].metrics.halstead.difficulty
old: 17.4
new: 15.178571428571429
path: .spaces[12].metrics.halstead.length
old: 196.0
new: 120.0
path: .spaces[12].metrics.cyclomatic.average
old: 2.0
new: 7.0
path: .spaces[12].metrics.cyclomatic.sum
old: 2.0
new: 7.0
path: .spaces[12].metrics.mi.mi_sei
old: 58.61624822586581
new: 66.84857704733507
path: .spaces[12].metrics.mi.mi_visual_studio
old: 46.34280128352675
new: 46.787993206248274
path: .spaces[12].metrics.mi.mi_original
old: 79.24619019483075
new: 80.00746838268455

### Code

    bool nsOSHelperAppService::GetMIMETypeFromOSForExtension(
        const nsACString& aExtension, nsACString& aMIMEType) {
      if (aExtension.IsEmpty()) return false;

      // windows registry assumes your file extension is going to include the '.'.
      // so make sure it's there...
      nsAutoString fileExtToUse;
      if (aExtension.First() != '.') fileExtToUse = char16_t('.');

      AppendUTF8toUTF16(aExtension, fileExtToUse);

      // Try to get an entry from the windows registry.
      nsCOMPtr regKey =
          do_CreateInstance("@mozilla.org/windows-registry-key;1");
      if (!regKey) return false;

      nsresult rv =
          regKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT, fileExtToUse,
                       nsIWindowsRegKey::ACCESS_QUERY_VALUE);
      if (NS_FAILED(rv)) return false;

      nsAutoString mimeType;
      if (NS_FAILED(regKey->ReadStringValue(u"Content Type"_ns, mimeType)) ||
          mimeType.IsEmpty()) {
        return false;
      }
      // Content-Type is always in ASCII
      aMIMEType.Truncate();
      LossyAppendUTF16toASCII(mimeType, aMIMEType);
      return true;
    }

## Minimal test - lines (255, 351)

path: .spaces[8].metrics.nargs.sum
old: 1.0
new: 3.0
path: .spaces[8].metrics.nargs.average
old: 1.0
new: 3.0
path: .spaces[8].metrics.mi.mi_sei
old: 87.75489591736567
new: 33.55726683603002
path: .spaces[8].metrics.mi.mi_original
old: 113.1577385127604
new: 54.02145364747271
path: .spaces[8].metrics.mi.mi_visual_studio
old: 66.17411608933357
new: 31.59149336109515
path: .spaces[8].metrics.halstead.N2
old: 15.0
new: 170.0
path: .spaces[8].metrics.halstead.N1
old: 19.0
new: 201.0
path: .spaces[8].metrics.halstead.volume
old: 144.4295354570819
new: 2338.7026575737054
path: .spaces[8].metrics.halstead.difficulty
old: 10.3125
new: 30.775862068965516
path: .spaces[8].metrics.halstead.n1
old: 11.0
new: 21.0
path: .spaces[8].metrics.halstead.length
old: 34.0
new: 371.0
path: .spaces[8].metrics.halstead.effort
old: 1489.4295844011572
new: 71975.59040981146
path: .spaces[8].metrics.halstead.n2
old: 8.0
new: 58.0
path: .spaces[8].metrics.halstead.time
old: 82.74608802228651
new: 3998.643911656192
path: .spaces[8].metrics.halstead.purity_ratio
old: 1.8251102295591255
new: 1.164424699719011
path: .spaces[8].metrics.halstead.estimated_program_length
old: 62.05374780501027
new: 432.0015635957531
path: .spaces[8].metrics.halstead.level
old: 0.09696969696969696
new: 0.032492997198879554
path: .spaces[8].metrics.halstead.bugs
old: 0.043473579057860645
new: 0.5767694328990486
path: .spaces[8].metrics.halstead.vocabulary
old: 19.0
new: 79.0
path: .spaces[8].metrics.loc.lloc
old: 4.0
new: 37.0
path: .spaces[8].metrics.loc.cloc
old: 0.0
new: 17.0
path: .spaces[8].metrics.loc.ploc
old: 6.0
new: 67.0
path: .spaces[8].metrics.loc.blank
old: 1.0
new: 13.0
path: .spaces[8].metrics.loc.sloc
old: 7.0
new: 97.0
path: .spaces[8].metrics.cyclomatic.average
old: 2.0
new: 11.0
path: .spaces[8].metrics.cyclomatic.sum
old: 2.0
new: 11.0
path: .spaces[8].metrics.nexits.sum
old: 2.0
new: 5.0
path: .spaces[8].metrics.nexits.average
old: 2.0
new: 5.0
path: .spaces[8].metrics.cognitive.average
old: 1.0
new: 18.0
path: .spaces[8].metrics.cognitive.sum
old: 1.0
new: 18.0

### Code

    nsresult nsOSHelperAppService::GetDefaultAppInfo(
        const nsAString& aAppInfo, nsAString& aDefaultDescription,
        nsIFile** aDefaultApplication) {
      nsAutoString handlerCommand;

      // If all else fails, use the file type key name, which will be
      // something like "pngfile" for .pngs, "WMVFile" for .wmvs, etc.
      aDefaultDescription = aAppInfo;
      *aDefaultApplication = nullptr;

      if (aAppInfo.IsEmpty()) return NS_ERROR_FAILURE;

      // aAppInfo may be a file, file path, program id, or
      // Applications reference -
      // c:\dir\app.exe
      // Applications\appfile.exe/dll (shell\open...)
      // ProgID.progid (shell\open...)

      nsAutoString handlerKeyName(aAppInfo);

      nsCOMPtr chkKey =
          do_CreateInstance("@mozilla.org/windows-registry-key;1");
      if (!chkKey) return NS_ERROR_FAILURE;

      nsresult rv =
          chkKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT, handlerKeyName,
                       nsIWindowsRegKey::ACCESS_QUERY_VALUE);
      if (NS_FAILED(rv)) {
        // It's a file system path to a handler
        handlerCommand.Assign(aAppInfo);
      } else {
        handlerKeyName.AppendLiteral("\\shell\\open\\command");
        nsCOMPtr regKey =
            do_CreateInstance("@mozilla.org/windows-registry-key;1");
        if (!regKey) return NS_ERROR_FAILURE;

        nsresult rv =
            regKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT, handlerKeyName,
                         nsIWindowsRegKey::ACCESS_QUERY_VALUE);
        if (NS_FAILED(rv)) return NS_ERROR_FAILURE;

        // OK, the default value here is the description of the type.
        rv = regKey->ReadStringValue(u""_ns, handlerCommand);
        if (NS_FAILED(rv)) {
          // Check if there is a DelegateExecute string
          nsAutoString delegateExecute;
          rv = regKey->ReadStringValue(u"DelegateExecute"_ns, delegateExecute);
          NS_ENSURE_SUCCESS(rv, rv);

          // Look for InProcServer32
          nsAutoString delegateExecuteRegPath;
          delegateExecuteRegPath.AssignLiteral("CLSID\\");
          delegateExecuteRegPath.Append(delegateExecute);
          delegateExecuteRegPath.AppendLiteral("\\InProcServer32");
          rv = chkKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT,
                            delegateExecuteRegPath,
                            nsIWindowsRegKey::ACCESS_QUERY_VALUE);
          if (NS_SUCCEEDED(rv)) {
            rv = chkKey->ReadStringValue(u""_ns, handlerCommand);
          }

          if (NS_FAILED(rv)) {
            // Look for LocalServer32
            delegateExecuteRegPath.AssignLiteral("CLSID\\");
            delegateExecuteRegPath.Append(delegateExecute);
            delegateExecuteRegPath.AppendLiteral("\\LocalServer32");
            rv = chkKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT,
                              delegateExecuteRegPath,
                              nsIWindowsRegKey::ACCESS_QUERY_VALUE);
            NS_ENSURE_SUCCESS(rv, rv);
            rv = chkKey->ReadStringValue(u""_ns, handlerCommand);
            NS_ENSURE_SUCCESS(rv, rv);
          }
        }
      }

      // XXX FIXME: If this fails, the UI will display the full command
      // string.
      // There are some rare cases this can happen - ["url.dll" -foo]
      // for example won't resolve correctly to the system dir. The
      // subsequent launch of the helper app will work though.
      nsCOMPtr lf = new nsLocalFile();
      rv = lf->InitWithCommandLine(handlerCommand);
      NS_ENSURE_SUCCESS(rv, rv);
      lf.forget(aDefaultApplication);

      wchar_t friendlyName[1024];
      DWORD friendlyNameSize = 1024;
      HRESULT hr = AssocQueryString(ASSOCF_NONE, ASSOCSTR_FRIENDLYAPPNAME,
                                    PromiseFlatString(aAppInfo).get(), NULL,
                                    friendlyName, &friendlyNameSize);
      if (SUCCEEDED(hr) && friendlyNameSize > 1) {
        aDefaultDescription.Assign(friendlyName, friendlyNameSize - 1);
      }

      return NS_OK;
    }

## Minimal test - lines (198, 217)

path: .spaces[6].metrics.halstead.bugs
old: 0.03662962161471501
new: 0.0976165703925941
path: .spaces[6].metrics.halstead.difficulty
old: 8.125
new: 10.62962962962963
path: .spaces[6].metrics.halstead.length
old: 34.0
new: 88.0
path: .spaces[6].metrics.halstead.N1
old: 21.0
new: 47.0
path: .spaces[6].metrics.halstead.effort
old: 1151.9417816484386
new: 5011.49383069016
path: .spaces[6].metrics.halstead.time
old: 63.99676564713547
new: 278.41632392723113
path: .spaces[6].metrics.halstead.estimated_program_length
old: 57.219280948873624
new: 181.6849314672201
path: .spaces[6].metrics.halstead.n2
old: 8.0
new: 27.0
path: .spaces[6].metrics.halstead.n1
old: 10.0
new: 14.0
path: .spaces[6].metrics.halstead.N2
old: 13.0
new: 41.0
path: .spaces[6].metrics.halstead.purity_ratio
old: 1.6829200279080478
new: 2.064601493945683
path: .spaces[6].metrics.halstead.vocabulary
old: 18.0
new: 41.0
path: .spaces[6].metrics.halstead.volume
old: 141.7774500490386
new: 471.46457640639136
path: .spaces[6].metrics.halstead.level
old: 0.12307692307692308
new: 0.0940766550522648
path: .spaces[6].metrics.cognitive.sum
old: 1.0
new: 3.0
path: .spaces[6].metrics.cognitive.average
old: 1.0
new: 3.0
path: .spaces[6].metrics.cyclomatic.sum
old: 2.0
new: 4.0
path: .spaces[6].metrics.cyclomatic.average
old: 2.0
new: 4.0
path: .spaces[6].metrics.mi.mi_original
old: 109.18281725715585
new: 89.53874852609833
path: .spaces[6].metrics.mi.mi_sei
old: 82.02029673398083
new: 70.85970635818194
path: .spaces[6].metrics.mi.mi_visual_studio
old: 63.84960073517885
new: 52.36184124333236
path: .spaces[6].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[6].metrics.loc.ploc
old: 9.0
new: 15.0
path: .spaces[6].metrics.loc.lloc
old: 3.0
new: 10.0
path: .spaces[6].metrics.loc.sloc
old: 9.0
new: 20.0
path: .spaces[6].metrics.loc.cloc
old: 0.0
new: 1.0
path: .spaces[6].metrics.nargs.sum
old: 3.0
new: 2.0
path: .spaces[6].metrics.nargs.average
old: 3.0
new: 2.0
path: .spaces[6].metrics.nexits.average
old: 1.0
new: 3.0
path: .spaces[6].metrics.nexits.sum
old: 1.0
new: 3.0

### Code

    nsresult nsOSHelperAppService::GetMIMEInfoFromRegistry(const nsString& fileType,
                                                           nsIMIMEInfo* pInfo) {
      nsresult rv = NS_OK;

      NS_ENSURE_ARG(pInfo);
      nsCOMPtr regKey =
          do_CreateInstance("@mozilla.org/windows-registry-key;1");
      if (!regKey) return NS_ERROR_NOT_AVAILABLE;

      rv = regKey->Open(nsIWindowsRegKey::ROOT_KEY_CLASSES_ROOT, fileType,
                        nsIWindowsRegKey::ACCESS_QUERY_VALUE);
      if (NS_FAILED(rv)) return NS_ERROR_FAILURE;

      // OK, the default value here is the description of the type.
      nsAutoString description;
      rv = regKey->ReadStringValue(u""_ns, description);
      if (NS_SUCCEEDED(rv)) pInfo->SetDescription(description);

      return NS_OK;
    }