public void FieldMistakenForVariable()
        {
            // Same thing happens with properties etc. Does not happen when using explicit this.
            CompleteInClass(@" 
                public string Str;

                public void M()
                {
                    Str.$
                }");


            //{
            //    "$type": "[SST:Statements.ExpressionStatement]",
            //    "Expression": {
            //        "$type": "[SST:Expressions.Assignable.CompletionExpression]",
            //        "VariableReference": {
            //            "$type": "[SST:References.VariableReference]",
            //            "Identifier": "Str"
            //        },
            //        "Token": ""
            //    }
            //}

            AssertBody(
                "M",
                VarDecl("$0", Fix.String),
                Assign("$0", RefExpr(FieldRef(Fix.Field(Fix.String, Type("C"), "Str"), VarRef("this")))),
                ExprStmt(Fix.CompletionOnVar(VarRef("$0"), "")));
        }
        public void AssigningArray()
        {
            CompleteInMethod(@"
                var array = new[] {1, 2, 3, 4, 5};
                array.$");

            // Analysis will assign UnknownExpression. Should probably be ConstantValueExpression instead.
            AssertBody(
                VarDecl("array", Names.ArrayType(1, Fix.Int)),
                Assign("array", new ConstantValueExpression()),
                ExprStmt(Fix.CompletionOnVar(VarRef("array"), "")));

            Assert.Fail();
        }
        public void UnnecessaryReassignmentOfThis()
        {
            CompleteInClass(@"
                public void M()
                {
                    this.GetH$
                }");

            //C $0;
            //$0 = this;
            //$0.GetH$;

            AssertBody(
                "M",
                ExprStmt(Fix.CompletionOnVar(VarRef("this"), "GetH")));
        }