Match/Case IsDefault - NullReferenceException

The Match/Case ‘function’ crashes (NullReferenceException), when I’m using the IsDefault-Case (see ‘page4’ in the example, it’s just the sample project with an extra testpage). Without the IsDefault-Case (just one case, or some different other cases) everything is working fine.

Fuse v. 0.9.2

<App Theme="Basic" Background="#eeeeeeff">
    <DockPanel>
        <iOS.StatusBarConfig ux:Name="statusBarConfig" Style="Light" IsVisible="true"/>
        <Panel>
            <Style>
                <Text TextAlignment="Center" FontSize="16" TextWrapping="Wrap" Y="100" TextColor="#fff"/>
                <Image StretchMode="UniformToFill"/>
                <Page>
                    <EnteringAnimation>
                        <Move X="-1" RelativeTo="ParentSize"/>
                    </EnteringAnimation>
                    <ExitingAnimation>
                        <Move X="1" RelativeTo="ParentSize"/>
                    </ExitingAnimation>
                </Page>
            </Style>
            <PageIndicator Navigation="navigation" Alignment="BottomCenter" Margin="30">
                <Circle ux:Generate="Factory" ux:Binding="DotFactory" Width="10" Height="10" Margin="6">
                    <SolidColor ux:Name="color" Color="#999"/>
                    <ActivatingAnimation>
                        <Change color.Color="#fff" />
                    </ActivatingAnimation>
                </Circle>
            </PageIndicator>
            <Panel>
                <LinearNavigation ux:Name="navigation" Easing="CircularOut"/>
                <WhileTrue ux:Name="canSwipe" Value="true">
                    <SwipeNavigate ux:Name="swipeNavigate" SwipeDirection="Left" SwipeEnds="Closed"/>
                </WhileTrue>
                <Page>
                    <Text Width="60%">This button triggers the phone's vibrate function</Text>
                        <Button Text="Vibrate" Height="45" Alignment="Bottom" Margin="20,80">
                            <Clicked>
                                <Fuse.Vibration.Vibrate Duration="0.2"/>
                            </Clicked>
                        </Button>
                    <Image File="Assets/background1.png"/>
                </Page>
                <Page ux:Name="page2">
                    <Text Width="70%">This toggle switch disables your ability to swipe between pages</Text>
                    <Switch Alignment="BottomCenter" Margin="0,80">
                        <WhileTrue>
                            <Change canSwipe.Value="false"/>
                        </WhileTrue>
                    </Switch>
                    <Image File="Assets/background2.png"/>
                    <WhileActive Threshold="0.5">
                        <Change statusBarConfig.Style="Dark"/>
                    </WhileActive>
                </Page>
                <Page ux:Name="page3">
                    <Text Width="70%">This slider blurs the background image</Text>
                    <Slider Width="50%" Alignment="Bottom" Margin="0,80">
                        <ProgressAnimation>
                            <Change blur.Radius="5"/>
                        </ProgressAnimation>
                    </Slider>
                    <GraphicsView>
                        <Image File="Assets/background3.png" Margin="-10">
                            <Blur ux:Name="blur" Radius="0"/>
                        </Image>
                    </GraphicsView>
                </Page>


                <Page ux:Name="page4">
                <JavaScript>
                    var Observable = require("FuseJS/Observable");
                    var variable = Observable("option1");

                    module.exports = {
                        variable:variable
                    };
                </JavaScript>

                <Panel Background="#E6E6E6">
                    <Match Value="{variable}">
                        <Case String="option1">
                            <StackPanel>
                                <Text Value="some text"/>
                                <Image File="Assets/Hamburger_active.png" Alignment="Center" />
                            </StackPanel>
                        </Case>
                        <Case IsDefault="true">
                            <StackPanel>
                                <Text Value="some text2"/>
                                <Image File="Assets/Hamburger.png" Alignment="Center" />
                            </StackPanel>
                        </Case>
                    </Match>
                </Panel>
                </Page>
            </Panel>
        </Panel>
        <BottomBarBackground Dock="Bottom" />
    </DockPanel>
</App>


ERROR: Object reference not set to an instance of an object.
    System.NullReferenceException occured.
       at Fuse.Reactive.Match.SelectCase() in C:\ProgramData\Uno\Packages\Fuse.Reactive\0.15.3\$.uno:line 1743
       at Fuse.Reactive.Match.Invalidate() in C:\ProgramData\Uno\Packages\Fuse.Reactive\0.15.3\$.uno:line 1729
       at Fuse.Reactive.Match.OnRooted(Node n) in C:\ProgramData\Uno\Packages\Fuse.Reactive\0.15.3\$.uno:line 1712
       at Fuse.Behavior.Rooted(Node e) in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 229
       at Fuse.Node.RootBehaviors() in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 2091
       at Fuse.Node.MarkRooted() in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 4072
       at Fuse.Node.MarkRooted() in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 4076
       at Fuse.Node.MarkRooted() in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 4076
       at Fuse.Node.MarkRooted() in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 4076
       at Fuse.Node.MarkRooted() in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 4076
       at Fuse.Node.OnAdded(Node parent) in C:\ProgramData\Uno\Packages\FuseCore\0.15.3\$.uno:line 3947
       at Fuse.Controls.Panel.ListChildAdded(Node item) in C:\ProgramData\Uno\Packages\Fuse.Controls\0.15.3\$.uno:line 1823
       at Uno.Collections.ObservableList`1.Add(T item) in C:\ProgramData\Uno\Packages\Uno.Collections\0.16.2\$.uno:line 50
       at Outracks.Simulator.FakeApp.set_RootNode(Node value) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\$.uno:line 224
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at Outracks.Simulator.Runtime.TryInvokeExtension.Try(Func`1 func)
       at Outracks.Simulator.Runtime.TryInvokeExtension.TryInvoke(MethodInfo mi, Object obj, Object[] value)
       at Outracks.Simulator.Runtime.CompiledTypeReflection.SetPropertyValue(Object obj, TypeMemberName propertyName, Object value)
       at Outracks.Fuse.Preview.RuntimeObjectPoker.<HookUpReflectionInterface>b__10(Object a, String b, Object c)
       at Outracks.Simulator.Reflection.DelegateReflection.Outracks.Simulator.Runtime.IReflection.SetPropertyValue(Object instance, TypeMemberName propertyName, Object value) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Reflection.Uno\0.1.0\$.uno:line 73
       at Outracks.Simulator.Runtime.ScopeClosure.Evaluate(WriteProperty p) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 186
       at Outracks.Simulator.Bytecode.Expression.Match[T](Func`2 a1, Func`2 a2, Func`2 a3, Func`2 a4, Func`2 a5, Func`2 a6, Func`2 a7, Func`2 a8, Func`2 a9, Func`2 a10, Func`2 a11, Func`2 a12, Func`2 a13, Func`2 a15, Func`2 a16) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Protocol.Uno\0.1.0\Bytecode\$.uno:line 110
       at Outracks.Simulator.Runtime.ScopeClosure.Evaluate(Expression expression) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 129
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(IEnumerable`1 statements) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 115
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(Lambda lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 105
       at Outracks.Simulator.Runtime.LambdaClosure.Func(Object a1) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 339
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(Object lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 219
       at Outracks.Simulator.Runtime.ScopeClosure.Evaluate(CallLambda i) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 161
       at Outracks.Simulator.Bytecode.Expression.Match[T](Func`2 a1, Func`2 a2, Func`2 a3, Func`2 a4, Func`2 a5, Func`2 a6, Func`2 a7, Func`2 a8, Func`2 a9, Func`2 a10, Func`2 a11, Func`2 a12, Func`2 a13, Func`2 a15, Func`2 a16) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Protocol.Uno\0.1.0\Bytecode\$.uno:line 105
       at Outracks.Simulator.Runtime.ScopeClosure.Evaluate(Expression expression) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 129
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(IEnumerable`1 statements) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 115
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(Lambda lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 105
       at Outracks.Simulator.Runtime.LambdaClosure.Func(Object a1) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 339
       at Outracks.Simulator.Runtime.LambdaClosure.Action(Object a1) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 319
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(Object lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 229
       at Outracks.Simulator.Runtime.ScopeClosure.Evaluate(CallLambda i) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 161
       at Outracks.Simulator.Bytecode.Expression.Match[T](Func`2 a1, Func`2 a2, Func`2 a3, Func`2 a4, Func`2 a5, Func`2 a6, Func`2 a7, Func`2 a8, Func`2 a9, Func`2 a10, Func`2 a11, Func`2 a12, Func`2 a13, Func`2 a15, Func`2 a16) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Protocol.Uno\0.1.0\Bytecode\$.uno:line 105
       at Outracks.Simulator.Runtime.ScopeClosure.Evaluate(Expression expression) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 129
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(IEnumerable`1 statements) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 115
       at Outracks.Simulator.Runtime.ScopeClosure.Execute(Lambda lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 105
       at Outracks.Simulator.Runtime.VirtualMachine.Execute(IReflection reflection, Lambda lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 76
       at Outracks.Simulator.Runtime.VirtualMachine.Execute(Lambda lambda, Object[] arguments) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\Runtime\$.uno:line 71
       at Outracks.Simulator.Reifying.OnEnterState() in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\$.uno:line 711
       at Outracks.Simulator.Application.SetState(State nextState) in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\$.uno:line 393
       at Outracks.Simulator.Application.OnUpdate() in C:\ProgramData\Uno\Packages\Outracks.Simulator.Client.Uno\0.1.0\$.uno:line 383
       at Fuse.App.Update() in C:\ProgramData\Uno\Packages\Fuse.Desktop\0.15.3\$.uno:line 48

Hi

Thanks - but please upload the project as a Zip including assets, this makes it much easier to debug.

The project is here on slack: https://files.slack.com/files-pri/T08325737-F0G654B17/download/version9.zip but including .build and .cache so it’s 154 Mb. If you run uno clean first it will not include that.

It looks to be a bug in <Case> (or maybe intentional feature) giving System.NullReferenceException if you don’t add any value, but you add IsDefault. You can work around this issue with the following code, adding String, Number or Bool to the IsDefault:

            <Case String="option1">
              <StackPanel>
                <Text Value="some text"/>
                <Image File="Assets/Hamburger_active.png" Alignment="Center" />
              </StackPanel>
            </Case>
            <Case IsDefault="true" String="default_option">
              <StackPanel>
                <Text Value="some text2"/>
                <Image File="Assets/Hamburger.png" Alignment="Center" />
              </StackPanel>
            </Case>