# Global Metrics

path: .metrics.nexits.average
old: 3.4
new: 0.75
path: .metrics.nexits.sum
old: 17.0
new: 3.0
path: .metrics.halstead.n2
old: 73.0
new: 29.0
path: .metrics.halstead.length
old: 638.0
new: 132.0
path: .metrics.halstead.volume
old: 4210.744393315387
new: 720.6449736601232
path: .metrics.halstead.n1
old: 24.0
new: 15.0
path: .metrics.halstead.N2
old: 261.0
new: 56.0
path: .metrics.halstead.difficulty
old: 42.9041095890411
new: 14.482758620689657
path: .metrics.halstead.bugs
old: 1.0652476713311445
new: 0.15919417826297502
path: .metrics.halstead.estimated_program_length
old: 561.896292815549
new: 199.48480779282735
path: .metrics.halstead.effort
old: 180658.23890224376
new: 10436.92720473282
path: .metrics.halstead.N1
old: 377.0
new: 76.0
path: .metrics.halstead.level
old: 0.023307790549169857
new: 0.06904761904761905
path: .metrics.halstead.purity_ratio
old: 0.8807151925008605
new: 1.5112485438850558
path: .metrics.halstead.time
old: 10036.56882790243
new: 579.8292891518233
path: .metrics.halstead.vocabulary
old: 97.0
new: 44.0
path: .metrics.loc.cloc
old: 10.0
new: 12.0
path: .metrics.loc.blank
old: 20.0
new: 8.0
path: .metrics.loc.sloc
old: 148.0
new: 57.0
path: .metrics.loc.ploc
old: 118.0
new: 37.0
path: .metrics.loc.lloc
old: 50.0
new: 6.0
path: .metrics.mi.mi_sei
old: 4.524481976836142
new: 56.77554779714938
path: .metrics.mi.mi_original
old: 39.97910858690544
new: 68.29580710065643
path: .metrics.mi.mi_visual_studio
old: 23.379595664856986
new: 39.93906847991604
path: .metrics.nom.total
old: 5.0
new: 4.0
path: .metrics.nom.functions
old: 5.0
new: 4.0
path: .metrics.nargs.sum
old: 14.0
new: 3.0
path: .metrics.nargs.average
old: 2.8
new: 0.75
path: .metrics.cognitive.sum
old: 25.0
new: 2.0
path: .metrics.cognitive.average
old: 5.0
new: 0.5
path: .metrics.cyclomatic.average
old: 4.142857142857143
new: 1.625
path: .metrics.cyclomatic.sum
old: 29.0
new: 13.0

# Spaces Data

## Minimal test - lines (14, 54)

path: .spaces[0].spaces[0].metrics.loc.lloc
old: 3.0
new: 6.0
path: .spaces[0].spaces[0].metrics.loc.ploc
old: 6.0
new: 30.0
path: .spaces[0].spaces[0].metrics.loc.sloc
old: 6.0
new: 41.0
path: .spaces[0].spaces[0].metrics.loc.blank
old: 0.0
new: 7.0
path: .spaces[0].spaces[0].metrics.loc.cloc
old: 0.0
new: 4.0
path: .spaces[0].spaces[0].metrics.mi.mi_original
old: 117.36266392297036
new: 74.46792116320904
path: .spaces[0].spaces[0].metrics.mi.mi_sei
old: 93.8213209539836
new: 56.114825272991695
path: .spaces[0].spaces[0].metrics.mi.mi_visual_studio
old: 68.6331367970587
new: 43.54849190830938
path: .spaces[0].spaces[0].metrics.nargs.average
old: 2.0
new: 0.75
path: .spaces[0].spaces[0].metrics.nargs.sum
old: 2.0
new: 3.0
path: .spaces[0].spaces[0].metrics.nexits.sum
old: 2.0
new: 3.0
path: .spaces[0].spaces[0].metrics.nexits.average
old: 2.0
new: 0.75
path: .spaces[0].spaces[0].metrics.halstead.volume
old: 104.0
new: 670.5629399558077
path: .spaces[0].spaces[0].metrics.halstead.level
old: 0.15
new: 0.06535947712418301
path: .spaces[0].spaces[0].metrics.halstead.n1
old: 10.0
new: 15.0
path: .spaces[0].spaces[0].metrics.halstead.estimated_program_length
old: 48.72905595320056
new: 174.6997636784959
path: .spaces[0].spaces[0].metrics.halstead.effort
old: 693.3333333333334
new: 10259.61298132386
path: .spaces[0].spaces[0].metrics.halstead.n2
old: 6.0
new: 25.0
path: .spaces[0].spaces[0].metrics.halstead.vocabulary
old: 16.0
new: 40.0
path: .spaces[0].spaces[0].metrics.halstead.N1
old: 18.0
new: 75.0
path: .spaces[0].spaces[0].metrics.halstead.purity_ratio
old: 1.874194459738483
new: 1.3865060609404438
path: .spaces[0].spaces[0].metrics.halstead.time
old: 38.51851851851852
new: 569.9784989624366
path: .spaces[0].spaces[0].metrics.halstead.bugs
old: 0.026111999701497093
new: 0.15738598781776394
path: .spaces[0].spaces[0].metrics.halstead.length
old: 26.0
new: 126.0
path: .spaces[0].spaces[0].metrics.halstead.difficulty
old: 6.666666666666667
new: 15.3
path: .spaces[0].spaces[0].metrics.halstead.N2
old: 8.0
new: 51.0
path: .spaces[0].spaces[0].metrics.cyclomatic.average
old: 2.0
new: 1.8333333333333333
path: .spaces[0].spaces[0].metrics.cyclomatic.sum
old: 2.0
new: 11.0
path: .spaces[0].spaces[0].metrics.nom.total
old: 1.0
new: 4.0
path: .spaces[0].spaces[0].metrics.nom.functions
old: 1.0
new: 4.0
path: .spaces[0].spaces[0].metrics.cognitive.average
old: 1.0
new: 0.5
path: .spaces[0].spaces[0].metrics.cognitive.sum
old: 1.0
new: 2.0

### Code

    namespace widget {

    // An Event subclass that guards against stale events.
    // (See the implmentation of mozilla::jni::detail::ProxyNativeCall for info
    //  about the default template parameters for this class)
    template
    class WindowEvent : public Runnable {
      bool IsStaleCall() {
        if (IsStatic) {
          // Static calls are never stale.
          return false;
        }

        return jni::NativePtrTraits::IsStale(mInstance);
      }

      Lambda mLambda;
      const InstanceType mInstance;

     public:
      WindowEvent(Lambda&& aLambda, InstanceType&& aInstance)
          : Runnable("mozilla::widget::WindowEvent"),
            mLambda(std::move(aLambda)),
            mInstance(std::forward(aInstance)) {}

      explicit WindowEvent(Lambda&& aLambda)
          : Runnable("mozilla::widget::WindowEvent"),
            mLambda(std::move(aLambda)),
            mInstance(mLambda.GetThisArg()) {}

      NS_IMETHOD Run() override {
        if (!IsStaleCall()) {
          mLambda();
        }
        return NS_OK;
      }
    };

    }  // namespace widget

## Minimal test - lines (13, 55)

path: .spaces[0].metrics.cognitive.average
old: 5.0
new: 0.5
path: .spaces[0].metrics.cognitive.sum
old: 25.0
new: 2.0
path: .spaces[0].metrics.mi.mi_sei
old: -0.08306956680545952
new: 56.54434638340356
path: .spaces[0].metrics.mi.mi_visual_studio
old: 24.212152202205427
new: 42.89459856511224
path: .spaces[0].metrics.mi.mi_original
old: 41.40278026577128
new: 73.34976354634193
path: .spaces[0].metrics.nom.functions
old: 5.0
new: 4.0
path: .spaces[0].metrics.nom.total
old: 5.0
new: 4.0
path: .spaces[0].metrics.nargs.average
old: 2.8
new: 0.75
path: .spaces[0].metrics.nargs.sum
old: 14.0
new: 3.0
path: .spaces[0].metrics.halstead.effort
old: 184086.5642692024
new: 10286.49984886672
path: .spaces[0].metrics.halstead.estimated_program_length
old: 539.0889112034554
new: 180.8147916057962
path: .spaces[0].metrics.halstead.length
old: 635.0
new: 128.0
path: .spaces[0].metrics.halstead.volume
old: 4162.1639208153
new: 685.7666565911147
path: .spaces[0].metrics.halstead.time
old: 10227.031348289023
new: 571.472213825929
path: .spaces[0].metrics.halstead.difficulty
old: 44.22857142857143
new: 15.0
path: .spaces[0].metrics.halstead.bugs
old: 1.0786821037035677
new: 0.15766083704776007
path: .spaces[0].metrics.halstead.purity_ratio
old: 0.8489589152810321
new: 1.4126155594202827
path: .spaces[0].metrics.halstead.N1
old: 377.0
new: 76.0
path: .spaces[0].metrics.halstead.level
old: 0.02260981912144703
new: 0.06666666666666667
path: .spaces[0].metrics.halstead.vocabulary
old: 94.0
new: 41.0
path: .spaces[0].metrics.halstead.N2
old: 258.0
new: 52.0
path: .spaces[0].metrics.halstead.n1
old: 24.0
new: 15.0
path: .spaces[0].metrics.halstead.n2
old: 70.0
new: 26.0
path: .spaces[0].metrics.nexits.average
old: 3.4
new: 0.75
path: .spaces[0].metrics.nexits.sum
old: 17.0
new: 3.0
path: .spaces[0].metrics.loc.lloc
old: 50.0
new: 6.0
path: .spaces[0].metrics.loc.blank
old: 19.0
new: 6.0
path: .spaces[0].metrics.loc.cloc
old: 4.0
new: 5.0
path: .spaces[0].metrics.loc.sloc
old: 138.0
new: 43.0
path: .spaces[0].metrics.loc.ploc
old: 115.0
new: 32.0
path: .spaces[0].metrics.cyclomatic.average
old: 4.666666666666667
new: 1.7142857142857142
path: .spaces[0].metrics.cyclomatic.sum
old: 28.0
new: 12.0

### Code

    namespace mozilla {
    namespace widget {

    // An Event subclass that guards against stale events.
    // (See the implmentation of mozilla::jni::detail::ProxyNativeCall for info
    //  about the default template parameters for this class)
    template
    class WindowEvent : public Runnable {
      bool IsStaleCall() {
        if (IsStatic) {
          // Static calls are never stale.
          return false;
        }

        return jni::NativePtrTraits::IsStale(mInstance);
      }

      Lambda mLambda;
      const InstanceType mInstance;

     public:
      WindowEvent(Lambda&& aLambda, InstanceType&& aInstance)
          : Runnable("mozilla::widget::WindowEvent"),
            mLambda(std::move(aLambda)),
            mInstance(std::forward(aInstance)) {}

      explicit WindowEvent(Lambda&& aLambda)
          : Runnable("mozilla::widget::WindowEvent"),
            mLambda(std::move(aLambda)),
            mInstance(mLambda.GetThisArg()) {}

      NS_IMETHOD Run() override {
        if (!IsStaleCall()) {
          mLambda();
        }
        return NS_OK;
      }
    };

    }  // namespace widget
    }  // namespace mozilla