# Global Metrics

path: .metrics.nexits.average
old: 1.3333333333333333
new: 1.5357142857142858
path: .metrics.nexits.sum
old: 8.0
new: 43.0
path: .metrics.halstead.vocabulary
old: 70.0
new: 220.0
path: .metrics.halstead.bugs
old: 0.34659891884461647
new: 1.6190615427968595
path: .metrics.halstead.volume
old: 1538.4500372531866
new: 10380.333857841895
path: .metrics.halstead.N1
old: 134.0
new: 747.0
path: .metrics.halstead.length
old: 251.0
new: 1334.0
path: .metrics.halstead.n1
old: 19.0
new: 22.0
path: .metrics.halstead.level
old: 0.04588394062078273
new: 0.03066439522998296
path: .metrics.halstead.time
old: 1862.7311725565544
new: 18806.34560047282
path: .metrics.halstead.difficulty
old: 21.794117647058822
new: 32.611111111111114
path: .metrics.halstead.n2
old: 51.0
new: 198.0
path: .metrics.halstead.N2
old: 117.0
new: 587.0
path: .metrics.halstead.effort
old: 33529.16110601798
new: 338514.2208085108
path: .metrics.halstead.estimated_program_length
old: 370.0043151959744
new: 1608.7201063857833
path: .metrics.halstead.purity_ratio
old: 1.4741207776732046
new: 1.2059371112337207
path: .metrics.nom.total
old: 6.0
new: 28.0
path: .metrics.nom.functions
old: 6.0
new: 28.0
path: .metrics.cyclomatic.sum
old: 18.0
new: 63.0
path: .metrics.cyclomatic.average
old: 2.5714285714285716
new: 1.96875
path: .metrics.loc.lloc
old: 13.0
new: 138.0
path: .metrics.loc.ploc
old: 54.0
new: 309.0
path: .metrics.loc.blank
old: 17.0
new: 71.0
path: .metrics.loc.sloc
old: 98.0
new: 408.0
path: .metrics.loc.cloc
old: 27.0
new: 28.0
path: .metrics.cognitive.sum
old: 1.0
new: 30.0
path: .metrics.cognitive.average
old: 0.16666666666666666
new: 1.0714285714285714
path: .metrics.mi.mi_original
old: 54.4231671053784
new: 11.039596511842204
path: .metrics.mi.mi_visual_studio
old: 31.826413511917192
new: 6.4559043928901785
path: .metrics.mi.mi_sei
old: 40.97095803676447
new: -33.619908979383816
path: .metrics.nargs.sum
old: 13.0
new: 33.0
path: .metrics.nargs.average
old: 2.1666666666666665
new: 1.1785714285714286

# Spaces Data

## Minimal test - lines (68, 98)

path: .spaces[1].metrics.mi.mi_sei
old: 108.97210631365388
new: 66.22084056220561
path: .spaces[1].metrics.mi.mi_original
old: 127.79381192982352
new: 81.9563444829102
path: .spaces[1].metrics.mi.mi_visual_studio
old: 74.733223350774
new: 47.92768683211122
path: .spaces[1].metrics.nexits.average
old: 1.0
new: 0.5
path: .spaces[1].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[1].metrics.loc.lloc
old: 1.0
new: 6.0
path: .spaces[1].metrics.loc.sloc
old: 3.0
new: 31.0
path: .spaces[1].metrics.loc.cloc
old: 0.0
new: 3.0
path: .spaces[1].metrics.loc.ploc
old: 3.0
new: 24.0
path: .spaces[1].metrics.nargs.sum
old: 3.0
new: 2.0
path: .spaces[1].metrics.nargs.average
old: 3.0
new: 1.0
path: .spaces[1].metrics.nom.functions
old: 1.0
new: 2.0
path: .spaces[1].metrics.nom.total
old: 1.0
new: 2.0
path: .spaces[1].metrics.cyclomatic.sum
old: 3.0
new: 5.0
path: .spaces[1].metrics.cyclomatic.average
old: 3.0
new: 1.6666666666666667
path: .spaces[1].metrics.cognitive.sum
old: 0.0
new: 2.0
path: .spaces[1].metrics.cognitive.average
old: 0.0
new: 1.0
path: .spaces[1].metrics.halstead.level
old: 0.0923076923076923
new: 0.08333333333333333
path: .spaces[1].metrics.halstead.vocabulary
old: 16.0
new: 40.0
path: .spaces[1].metrics.halstead.purity_ratio
old: 1.680312274248295
new: 1.878492082564472
path: .spaces[1].metrics.halstead.effort
old: 1256.6666666666667
new: 5939.271753894297
path: .spaces[1].metrics.halstead.bugs
old: 0.03881731354607276
new: 0.10932031556314412
path: .spaces[1].metrics.halstead.N1
old: 16.0
new: 53.0
path: .spaces[1].metrics.halstead.estimated_program_length
old: 48.72905595320056
new: 174.6997636784959
path: .spaces[1].metrics.halstead.N2
old: 13.0
new: 40.0
path: .spaces[1].metrics.halstead.length
old: 29.0
new: 93.0
path: .spaces[1].metrics.halstead.volume
old: 116.0
new: 494.93931282452473
path: .spaces[1].metrics.halstead.time
old: 69.81481481481482
new: 329.9595418830165
path: .spaces[1].metrics.halstead.difficulty
old: 10.833333333333334
new: 12.0
path: .spaces[1].metrics.halstead.n1
old: 10.0
new: 15.0
path: .spaces[1].metrics.halstead.n2
old: 6.0
new: 25.0

### Code

    class nsBaseFilePicker::AsyncShowFilePicker : public mozilla::Runnable {
     public:
      AsyncShowFilePicker(nsBaseFilePicker* aFilePicker,
                          nsIFilePickerShownCallback* aCallback)
          : mozilla::Runnable("AsyncShowFilePicker"),
            mFilePicker(aFilePicker),
            mCallback(aCallback) {}

      NS_IMETHOD Run() override {
        NS_ASSERTION(NS_IsMainThread(),
                     "AsyncShowFilePicker should be on the main thread!");

        // It's possible that some widget implementations require GUI operations
        // to be on the main thread, so that's why we're not dispatching to another
        // thread and calling back to the main after it's done.
        int16_t result = nsIFilePicker::returnCancel;
        nsresult rv = mFilePicker->Show(&result);
        if (NS_FAILED(rv)) {
          NS_ERROR("FilePicker's Show() implementation failed!");
        }

        if (mCallback) {
          mCallback->Done(result);
        }
        return NS_OK;
      }

     private:
      RefPtr mFilePicker;
      RefPtr mCallback;
    };

## Minimal test - lines (149, 164)

path: .spaces[4].metrics.halstead.difficulty
old: 8.076923076923077
new: 8.0
path: .spaces[4].metrics.halstead.estimated_program_length
old: 81.32499728470782
new: 135.25821588700785
path: .spaces[4].metrics.halstead.time
old: 117.72859962558636
new: 132.27522357428833
path: .spaces[4].metrics.halstead.N2
old: 21.0
new: 28.0
path: .spaces[4].metrics.halstead.purity_ratio
old: 1.4021551255984106
new: 2.292512133678099
path: .spaces[4].metrics.halstead.vocabulary
old: 23.0
new: 33.0
path: .spaces[4].metrics.halstead.effort
old: 2119.1147932605545
new: 2380.95402433719
path: .spaces[4].metrics.halstead.n1
old: 10.0
new: 12.0
path: .spaces[4].metrics.halstead.length
old: 58.0
new: 59.0
path: .spaces[4].metrics.halstead.N1
old: 37.0
new: 31.0
path: .spaces[4].metrics.halstead.level
old: 0.1238095238095238
new: 0.125
path: .spaces[4].metrics.halstead.n2
old: 13.0
new: 21.0
path: .spaces[4].metrics.halstead.volume
old: 262.36659345130676
new: 297.6192530421487
path: .spaces[4].metrics.halstead.bugs
old: 0.05499396937047243
new: 0.0594355224857608
path: .spaces[4].metrics.cognitive.average
old: 1.0
new: 0.0
path: .spaces[4].metrics.cognitive.sum
old: 1.0
new: 0.0
path: .spaces[4].metrics.loc.lloc
old: 8.0
new: 6.0
path: .spaces[4].metrics.loc.sloc
old: 8.0
new: 16.0
path: .spaces[4].metrics.loc.ploc
old: 8.0
new: 12.0
path: .spaces[4].metrics.loc.blank
old: 0.0
new: 4.0
path: .spaces[4].metrics.nexits.average
old: 3.0
new: 1.0
path: .spaces[4].metrics.nexits.sum
old: 3.0
new: 1.0
path: .spaces[4].metrics.mi.mi_original
old: 107.43038479018784
new: 96.23582472452786
path: .spaces[4].metrics.mi.mi_sei
old: 79.6957108232022
new: 63.23991495332753
path: .spaces[4].metrics.mi.mi_visual_studio
old: 62.82478642701043
new: 56.278260072823315
path: .spaces[4].metrics.cyclomatic.average
old: 4.0
new: 1.0
path: .spaces[4].metrics.cyclomatic.sum
old: 4.0
new: 1.0
path: .spaces[4].metrics.nargs.average
old: 2.0
new: 3.0
path: .spaces[4].metrics.nargs.sum
old: 2.0
new: 3.0

### Code

    NS_IMETHODIMP nsBaseFilePicker::Init(mozIDOMWindowProxy* aParent,
                                         const nsAString& aTitle, int16_t aMode) {
      MOZ_ASSERT(aParent,
                 "Null parent passed to filepicker, no file "
                 "picker for you!");

      mParent = nsPIDOMWindowOuter::From(aParent);

      nsCOMPtr widget = WidgetUtils::DOMWindowToWidget(mParent);
      NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE);

      mMode = aMode;
      InitNative(widget, aTitle);

      return NS_OK;
    }

## Minimal test - lines (167, 171)

path: .spaces[5].metrics.mi.mi_original
old: 129.81280273574149
new: 120.6497835562188
path: .spaces[5].metrics.mi.mi_sei
old: 111.6812546181432
new: 98.46181228827535
path: .spaces[5].metrics.mi.mi_visual_studio
old: 75.91391972850379
new: 70.55542898024491
path: .spaces[5].metrics.loc.ploc
old: 3.0
new: 5.0
path: .spaces[5].metrics.loc.sloc
old: 3.0
new: 5.0
path: .spaces[5].metrics.halstead.effort
old: 827.2840836201038
new: 700.9080397181915
path: .spaces[5].metrics.halstead.vocabulary
old: 15.0
new: 19.0
path: .spaces[5].metrics.halstead.volume
old: 85.95159310338741
new: 101.95026032264605
path: .spaces[5].metrics.halstead.difficulty
old: 9.625
new: 6.875
path: .spaces[5].metrics.halstead.n2
old: 4.0
new: 8.0
path: .spaces[5].metrics.halstead.length
old: 22.0
new: 24.0
path: .spaces[5].metrics.halstead.estimated_program_length
old: 46.05374780501027
new: 62.05374780501027
path: .spaces[5].metrics.halstead.level
old: 0.1038961038961039
new: 0.14545454545454545
path: .spaces[5].metrics.halstead.bugs
old: 0.029375269377163855
new: 0.026301838473294693
path: .spaces[5].metrics.halstead.time
old: 45.96022686778355
new: 38.93933553989953
path: .spaces[5].metrics.halstead.N1
old: 15.0
new: 14.0
path: .spaces[5].metrics.halstead.N2
old: 7.0
new: 10.0
path: .spaces[5].metrics.halstead.purity_ratio
old: 2.093352172955012
new: 2.5855728252087613

### Code

    nsBaseFilePicker::Open(nsIFilePickerShownCallback* aCallback) {
      nsCOMPtr filePickerEvent =
          new AsyncShowFilePicker(this, aCallback);
      return NS_DispatchToMainThread(filePickerEvent);
    }

## Minimal test - lines (32, 62)

path: .spaces[0].metrics.halstead.difficulty
old: 8.25
new: 14.72
path: .spaces[0].metrics.halstead.length
old: 24.0
new: 107.0
path: .spaces[0].metrics.halstead.purity_ratio
old: 1.834962500721156
new: 1.6831439695735335
path: .spaces[0].metrics.halstead.time
old: 42.975796551693705
new: 468.7977060752037
path: .spaces[0].metrics.halstead.n2
old: 6.0
new: 25.0
path: .spaces[0].metrics.halstead.N1
old: 13.0
new: 61.0
path: .spaces[0].metrics.halstead.volume
old: 93.76537429460444
new: 573.2580644941349
path: .spaces[0].metrics.halstead.estimated_program_length
old: 44.039100017307746
new: 180.0964047443681
path: .spaces[0].metrics.halstead.N2
old: 11.0
new: 46.0
path: .spaces[0].metrics.halstead.n1
old: 9.0
new: 16.0
path: .spaces[0].metrics.halstead.bugs
old: 0.028089437260899033
new: 0.1381605544098278
path: .spaces[0].metrics.halstead.effort
old: 773.5643379304867
new: 8438.358709353666
path: .spaces[0].metrics.halstead.level
old: 0.12121212121212122
new: 0.06793478260869565
path: .spaces[0].metrics.halstead.vocabulary
old: 15.0
new: 41.0
path: .spaces[0].metrics.cyclomatic.average
old: 3.0
new: 2.0
path: .spaces[0].metrics.cyclomatic.sum
old: 3.0
new: 4.0
path: .spaces[0].metrics.cognitive.average
old: 0.0
new: 2.0
path: .spaces[0].metrics.cognitive.sum
old: 0.0
new: 2.0
path: .spaces[0].metrics.loc.blank
old: 0.0
new: 7.0
path: .spaces[0].metrics.loc.sloc
old: 3.0
new: 31.0
path: .spaces[0].metrics.loc.lloc
old: 1.0
new: 11.0
path: .spaces[0].metrics.loc.ploc
old: 3.0
new: 24.0
path: .spaces[0].metrics.nexits.average
old: 1.0
new: 3.0
path: .spaces[0].metrics.nexits.sum
old: 1.0
new: 3.0
path: .spaces[0].metrics.mi.mi_sei
old: 110.56849403130713
new: 42.17420690814701
path: .spaces[0].metrics.mi.mi_visual_studio
old: 75.38031788034819
new: 47.6154737667242
path: .spaces[0].metrics.mi.mi_original
old: 128.9003435753954
new: 81.42246014109838
path: .spaces[0].metrics.nargs.sum
old: 1.0
new: 4.0
path: .spaces[0].metrics.nargs.average
old: 1.0
new: 4.0

### Code

    namespace {

    nsresult LocalFileToDirectoryOrBlob(nsPIDOMWindowInner* aWindow,
                                        bool aIsDirectory, nsIFile* aFile,
                                        nsISupports** aResult) {
      MOZ_ASSERT(aWindow);

      if (aIsDirectory) {
    #ifdef DEBUG
        bool isDir;
        aFile->IsDirectory(&isDir);
        MOZ_ASSERT(isDir);
    #endif

        RefPtr directory = Directory::Create(aWindow->AsGlobal(), aFile);
        MOZ_ASSERT(directory);

        directory.forget(aResult);
        return NS_OK;
      }

      RefPtr file = File::CreateFromFile(aWindow->AsGlobal(), aFile);
      if (NS_WARN_IF(!file)) {
        return NS_ERROR_FAILURE;
      }

      file.forget(aResult);
      return NS_OK;
    }

    }  // anonymous namespace

## Minimal test - lines (144, 145)

path: .spaces[3].metrics.nargs.average
old: 3.0
new: 0.0
path: .spaces[3].metrics.nargs.sum
old: 3.0
new: 0.0
path: .spaces[3].metrics.cyclomatic.sum
old: 3.0
new: 1.0
path: .spaces[3].metrics.cyclomatic.average
old: 3.0
new: 1.0
path: .spaces[3].metrics.halstead.difficulty
old: 10.833333333333334
new: 2.5
path: .spaces[3].metrics.halstead.length
old: 29.0
new: 13.0
path: .spaces[3].metrics.halstead.N2
old: 13.0
new: 5.0
path: .spaces[3].metrics.halstead.purity_ratio
old: 1.680312274248295
new: 1.78609853452874
path: .spaces[3].metrics.halstead.n2
old: 6.0
new: 5.0
path: .spaces[3].metrics.halstead.vocabulary
old: 16.0
new: 10.0
path: .spaces[3].metrics.halstead.N1
old: 16.0
new: 8.0
path: .spaces[3].metrics.halstead.level
old: 0.0923076923076923
new: 0.4
path: .spaces[3].metrics.halstead.bugs
old: 0.03881731354607276
new: 0.007557783918721112
path: .spaces[3].metrics.halstead.n1
old: 10.0
new: 5.0
path: .spaces[3].metrics.halstead.time
old: 69.81481481481482
new: 5.997925726879959
path: .spaces[3].metrics.halstead.estimated_program_length
old: 48.72905595320056
new: 23.21928094887362
path: .spaces[3].metrics.halstead.volume
old: 116.0
new: 43.18506523353571
path: .spaces[3].metrics.halstead.effort
old: 1256.6666666666667
new: 107.96266308383927
path: .spaces[3].metrics.mi.mi_original
old: 127.79381192982352
new: 139.96044311381488
path: .spaces[3].metrics.mi.mi_visual_studio
old: 74.733223350774
new: 81.84821234726016
path: .spaces[3].metrics.mi.mi_sei
old: 108.97210631365388
new: 126.32120506831431
path: .spaces[3].metrics.loc.lloc
old: 1.0
new: 0.0
path: .spaces[3].metrics.loc.ploc
old: 3.0
new: 2.0
path: .spaces[3].metrics.loc.sloc
old: 3.0
new: 2.0
path: .spaces[3].metrics.nexits.sum
old: 1.0
new: 0.0
path: .spaces[3].metrics.nexits.average
old: 1.0
new: 0.0

### Code

    nsBaseFilePicker::nsBaseFilePicker()
        : mAddToRecentDocs(true), mMode(nsIFilePicker::modeOpen) {}

## Minimal test - lines (100, 142)

path: .spaces[2].metrics.cognitive.sum
old: 0.0
new: 3.0
path: .spaces[2].metrics.cognitive.average
old: 0.0
new: 0.75
path: .spaces[2].metrics.mi.mi_original
old: 127.79381192982352
new: 73.10542813931909
path: .spaces[2].metrics.mi.mi_visual_studio
old: 74.733223350774
new: 42.7517123621749
path: .spaces[2].metrics.mi.mi_sei
old: 108.97210631365388
new: 30.582545521883063
path: .spaces[2].metrics.nom.total
old: 1.0
new: 4.0
path: .spaces[2].metrics.nom.functions
old: 1.0
new: 4.0
path: .spaces[2].metrics.nargs.sum
old: 3.0
new: 5.0
path: .spaces[2].metrics.nargs.average
old: 3.0
new: 1.25
path: .spaces[2].metrics.nexits.sum
old: 1.0
new: 6.0
path: .spaces[2].metrics.nexits.average
old: 1.0
new: 1.5
path: .spaces[2].metrics.cyclomatic.sum
old: 3.0
new: 8.0
path: .spaces[2].metrics.cyclomatic.average
old: 3.0
new: 1.6
path: .spaces[2].metrics.halstead.N1
old: 16.0
new: 87.0
path: .spaces[2].metrics.halstead.N2
old: 13.0
new: 65.0
path: .spaces[2].metrics.halstead.vocabulary
old: 16.0
new: 50.0
path: .spaces[2].metrics.halstead.n1
old: 10.0
new: 17.0
path: .spaces[2].metrics.halstead.estimated_program_length
old: 48.72905595320056
new: 235.95187424008475
path: .spaces[2].metrics.halstead.n2
old: 6.0
new: 33.0
path: .spaces[2].metrics.halstead.bugs
old: 0.03881731354607276
new: 0.19695665428011488
path: .spaces[2].metrics.halstead.difficulty
old: 10.833333333333334
new: 16.742424242424242
path: .spaces[2].metrics.halstead.effort
old: 1256.6666666666667
new: 14362.75887325095
path: .spaces[2].metrics.halstead.length
old: 29.0
new: 152.0
path: .spaces[2].metrics.halstead.purity_ratio
old: 1.680312274248295
new: 1.5523149621058208
path: .spaces[2].metrics.halstead.volume
old: 116.0
new: 857.8661408457581
path: .spaces[2].metrics.halstead.time
old: 69.81481481481482
new: 797.9310485139417
path: .spaces[2].metrics.halstead.level
old: 0.0923076923076923
new: 0.05972850678733032
path: .spaces[2].metrics.loc.ploc
old: 3.0
new: 35.0
path: .spaces[2].metrics.loc.sloc
old: 3.0
new: 43.0
path: .spaces[2].metrics.loc.blank
old: 0.0
new: 8.0
path: .spaces[2].metrics.loc.lloc
old: 1.0
new: 10.0

### Code

    class nsBaseFilePickerEnumerator : public nsSimpleEnumerator {
     public:
      nsBaseFilePickerEnumerator(nsPIDOMWindowOuter* aParent,
                                 nsISimpleEnumerator* iterator, int16_t aMode)
          : mIterator(iterator),
            mParent(aParent->GetCurrentInnerWindow()),
            mMode(aMode) {}

      const nsID& DefaultInterface() override { return NS_GET_IID(nsIFile); }

      NS_IMETHOD
      GetNext(nsISupports** aResult) override {
        nsCOMPtr tmp;
        nsresult rv = mIterator->GetNext(getter_AddRefs(tmp));
        NS_ENSURE_SUCCESS(rv, rv);

        if (!tmp) {
          return NS_OK;
        }

        nsCOMPtr localFile = do_QueryInterface(tmp);
        if (!localFile) {
          return NS_ERROR_FAILURE;
        }

        if (!mParent) {
          return NS_ERROR_FAILURE;
        }

        return LocalFileToDirectoryOrBlob(
            mParent, mMode == nsIFilePicker::modeGetFolder, localFile, aResult);
      }

      NS_IMETHOD
      HasMoreElements(bool* aResult) override {
        return mIterator->HasMoreElements(aResult);
      }

     private:
      nsCOMPtr mIterator;
      nsCOMPtr mParent;
      int16_t mMode;
    };