Version bump

Version bump

--- src/ConDep.Console/Properties/AssemblyInfo.cs
+++ src/ConDep.Console/Properties/AssemblyInfo.cs
@@ -9,8 +9,8 @@
 [assembly: AssemblyCompanyAttribute("ConDep")]
 [assembly: AssemblyProductAttribute("")]
 [assembly: AssemblyCopyrightAttribute("Copyright © ConDep 2014")]
-[assembly: AssemblyVersionAttribute("3.0.8.0")]
-[assembly: AssemblyFileVersionAttribute("3.0.8.0")]
+[assembly: AssemblyVersionAttribute("3.0.9.0")]
+[assembly: AssemblyFileVersionAttribute("3.0.9.0")]
 [assembly: CLSCompliant(true)]

 // The following GUID is for the ID of the typelib if this project is exposed to COM


First work towards tunnel mode.

First work towards tunnel mode.

Signed-off-by: V10lator <fd1911a80a45064cec08d87c592168c9000a1489@myway.de>

--- PlayerController.cs
+++ PlayerController.cs
@@ -19,7 +19,7 @@
 			gravity = UltimateMain.Instance.config.Gravity;

 			controller = GetComponent<CharacterController>();
-			controller.detectCollisions = true;
+			controller.detectCollisions = false;
 		}

 		// Update is called once per frame
@@ -30,8 +30,40 @@
 			else if(Input.GetKey(UltimateMain.Instance.config.GetKey(UltimateSettings.ROTATE_RIGHT_KEY_SETTING)))
 				Camera.main.gameObject.GetComponent<UltimateMouse>().yaw += speed * 50.0f * Time.deltaTime;

+			// Detect tunnels
+			bool grounded = false;
+			if (controller.isGrounded)
+			{
+				Block block = GameController.Instance.park.blockData.getBlock(transform.position);
+				if (block != null && block is Path)
+				{
+					Path path = (Path)block;
+					if (path.isUnderground())
+					{
+						float top = block.getTopSideY(transform.position) + UltimateMain.Instance.config.Height;
+						UltimateMain.Instance.Log("V10DBG1: " + top + " vs. " + transform.position.y, UltimateMain.LogLevel.INFO);
+						// Tunnel down
+						if (top < transform.position.y)
+						{
+							UltimateMain.Instance.Log("V10DBG: " + top, UltimateMain.LogLevel.INFO);
+							transform.position = new Vector3(transform.position.x, top, transform.position.z);
+							grounded = true;
+						}
+						// We somehow fall into the ground - fix...
+						else if (transform.position.y - top < 0.05f)
+						{
+							transform.position = new Vector3(transform.position.x, top, transform.position.z);
+							grounded = true;
+						}
+					}
+					else grounded = true;
+				}
+				else
+					grounded = true;
+			}
+
 			bool falling;
-			if (controller.isGrounded || UltimateMain.Instance.config.Jetpack)
+			if (grounded || UltimateMain.Instance.config.Jetpack)
 			{
 				moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));
 				moveDirection = transform.TransformDirection(moveDirection);


Add xml comments to field checkers.

Add xml comments to field checkers.

--- src/Dictator/Dictator/DictionaryExtensions.cs
+++ src/Dictator/Dictator/DictionaryExtensions.cs
@@ -455,6 +455,9 @@

         #region Field checkers

+        /// <summary>
+        /// Checks if specified field is present within given path.
+        /// </summary>
         public static bool Has(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -472,7 +475,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has null value.
+        /// </summary>
         public static bool IsNull(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -493,7 +498,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has not null value.
+        /// </summary>
         public static bool IsNotNull(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -514,7 +521,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has bool type value.
+        /// </summary>
         public static bool IsBool(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -535,7 +544,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has byte type value.
+        /// </summary>
         public static bool IsByte(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -556,7 +567,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has short type value.
+        /// </summary>
         public static bool IsShort(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -577,7 +590,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has int type value.
+        /// </summary>
         public static bool IsInt(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -598,7 +613,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has long type value.
+        /// </summary>
         public static bool IsLong(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -619,7 +636,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has float type value.
+        /// </summary>
         public static bool IsFloat(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -640,7 +659,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has double type value.
+        /// </summary>
         public static bool IsDouble(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -661,7 +682,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has decimal type value.
+        /// </summary>
         public static bool IsDecimal(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -682,12 +705,16 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has DateTime type value.
+        /// </summary>
         public static bool IsDateTime(this Dictionary<string, object> dictionary, string fieldPath)
         {
             return IsDateTime(dictionary, fieldPath, Dictator.Settings.DateTimeFormat);
         }
-
+        /// <summary>
+        /// Checks if specified field has value which can be converted to DateTime object in given format.
+        /// </summary>
         public static bool IsDateTime(this Dictionary<string, object> dictionary, string fieldPath, DateTimeFormat dateTimeFormat)
         {
             var isValid = false;
@@ -729,7 +756,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has string type value.
+        /// </summary>
         public static bool IsString(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -750,7 +779,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has object type value.
+        /// </summary>
         public static bool IsObject(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -771,7 +802,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has Dictionary<string, object> type value.
+        /// </summary>
         public static bool IsDocument(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -792,7 +825,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has enum type value.
+        /// </summary>
         public static bool IsEnum(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -813,7 +848,10 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has given enum type value. Apart from native enum object also int and string values
+        /// can be converted to given enum type.
+        /// </summary>
         public static bool IsEnum<T>(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -847,7 +885,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has List type value.
+        /// </summary>
         public static bool IsList(this Dictionary<string, object> dictionary, string fieldPath)
         {
             var isValid = false;
@@ -868,7 +908,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field has given type value.
+        /// </summary>
         public static bool IsType(this Dictionary<string, object> dictionary, string fieldPath, Type type)
         {
             var isValid = false;
@@ -894,7 +936,9 @@

             return isValid;
         }
-
+        /// <summary>
+        /// Checks if specified field equals to given value. Object's Equals method is used for value comparison.
+        /// </summary>
         public static bool IsEqual(this Dictionary<string, object> dictionary, string fieldPath, object compareValue)
         {
             var isValid = false;
@@ -925,6 +969,11 @@

         #endregion

+        /// <summary>
+        /// Retrieves value from specified field path.
+        /// </summary>
+        /// <exception cref="NonExistingFieldException">Field does not exist in specified path.</exception>
+        /// <exception cref="InvalidFieldException">Field path contains field which is not traversable.</exception>
         static object GetFieldValue(Dictionary<string, object> dictionary, string fieldPath)
         {
             object fieldValue = null;
@@ -969,7 +1018,9 @@

             return fieldValue;
         }
-
+        /// <summary>
+        /// Stores given value to specified field path.
+        /// </summary>
         static void SetFieldValue(Dictionary<string, object> dictionary, string fieldPath, object fieldValue)
         {
             var fieldNames = new [] { fieldPath };


Compare also types when performing IsEqual operation.

--- src/Dictator/Dictator/DictionaryExtensions.cs
+++ src/Dictator/Dictator/DictionaryExtensions.cs
@@ -996,7 +996,7 @@

                 if (fieldValue != null)
                 {
-                    if (fieldValue.Equals(compareValue))
+                    if ((fieldValue.GetType() == compareValue.GetType()) && fieldValue.Equals(compareValue))
                     {
                         isValid = true;
                     }


Add try/catch for sifen border csv parsing error

--- src/DiscordBot/Modules/Border/BorderModule.cs
+++ src/DiscordBot/Modules/Border/BorderModule.cs
@@ -130,8 +130,15 @@
             }
             b = splitCsv[i - 2].Split(',');
             a = splitCsv[i - 1].Split(',');
-            elapsed = DateTime.Parse(a[1]) - DateTime.Parse(b[1]);
-            args = new object[] { a[1], a[4], a[5], a[6], a[7], a[9], a[10], a[11], a[12], elapsed.TotalMinutes, tm.GetTimer("sifen", "event") };
+            try
+            {
+                elapsed = DateTime.Parse(a[1]) - DateTime.Parse(b[1]);
+                args = new object[] { a[1], a[4], a[5], a[6], a[7], a[9], a[10], a[11], a[12], elapsed.TotalMinutes, tm.GetTimer("sifen", "event") };
+            }
+            catch (Exception ex)
+            {
+                args = new object[] { a[1], a[4], a[5], a[6], a[7], a[9], a[10], a[11], a[12], "null", tm.GetTimer("sifen", "event") };
+            }

             result = String.Format("Remaining: {10}\nLast Updated: {0} UTC (+{9} min)\nT1: {1} (+{5})\nT2: {2} (+{6})\nT3: {3} (+{7})\nT4: {4} (+{8})", args);
             await e.Channel.SendMessage($"{result}");


작업이 끝나지 않는 문제 해결

작업이 끝나지 않는 문제 해결


tweak retention cleanup

tweak retention cleanup

--- src/Exceptionless.Core/Jobs/CleanupDataJob.cs
+++ src/Exceptionless.Core/Jobs/CleanupDataJob.cs
@@ -191,6 +191,9 @@
             if (_appOptions.MaximumRetentionDays > 0 && retentionDays > _appOptions.MaximumRetentionDays)
                 retentionDays = _appOptions.MaximumRetentionDays;

+            if (retentionDays < 1)
+                return;
+
             var cutoff = SystemClock.UtcNow.Date.SubtractDays(retentionDays);
             _logger.LogInformation("Enforcing event count limits older than {RetentionPeriod:g} for organization {OrganizationName} ({OrganizationId}).", cutoff, organization.Name, organization.Id);


Parsing tests slightly refactored - redundant invocations removed.

--- src/ExpressiveAnnotations.Tests/ParserTest.cs
+++ src/ExpressiveAnnotations.Tests/ParserTest.cs
@@ -588,10 +588,10 @@
         {
             var parser = new Parser();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1"));
             Assert.Equal("Parse fatal error.", e.Message);

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<bool>(typeof (object), "1").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<bool>(typeof (object), "1"));
             Assert.Equal("Parse fatal error.", e.Message);
         }

@@ -600,10 +600,10 @@
         {
             var parser = new Parser();

-            var e = Assert.Throws<ArgumentNullException>(() => parser.Parse<object, bool>(null).Invoke(null));
+            var e = Assert.Throws<ArgumentNullException>(() => parser.Parse<object, bool>(null));
             Assert.Equal("Expression not provided.\r\nParameter name: expression", e.Message);

-            e = Assert.Throws<ArgumentNullException>(() => parser.Parse<bool>(typeof (object), null).Invoke(null));
+            e = Assert.Throws<ArgumentNullException>(() => parser.Parse<bool>(typeof (object), null));
             Assert.Equal("Expression not provided.\r\nParameter name: expression", e.Message);
         }

@@ -683,11 +683,11 @@
             funcManager.AddFunction<string, string, string>("Glue", (s1, s2) => string.Concat(s1, s2));
             funcManager.AddFunction<int, int, string>("Glue", (i1, i2) => string.Concat(i1, i2));

-            var e = Assert.Throws<ParseErrorException>(() => Assert.True(parser.Parse<object, bool>("Whoami(0) == 'utility method 0'").Invoke(null)));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Whoami(0) == 'utility method 0'"));
             Assert.Equal("Function 'Whoami' accepting 1 argument is ambiguous.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Glue('a', 'b') == 'ab'").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Glue('a', 'b') == 'ab'"));
             Assert.Equal("Function 'Glue' accepting 2 arguments is ambiguous.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());
         }
@@ -697,9 +697,8 @@
         {
             // not only built-in, but also context extracted methods are subjected to the same rules
             var parser = new Parser();
-            var model = new ModelWithAmbiguousMethods();
-
-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<ModelWithAmbiguousMethods, bool>("Whoami(0) == 'model method 0'").Invoke(model));
+
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<ModelWithAmbiguousMethods, bool>("Whoami(0) == 'model method 0'"));
             Assert.Equal("Function 'Whoami' accepting 1 argument is ambiguous.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());
         }
@@ -717,11 +716,11 @@
             Assert.True(parser.Parse<object, bool>("Whoami('0') == 'utility method 0'").Invoke(null)); // successful conversion from String to Object
             Assert.True(parser.Parse<object, bool>("Whoami(1, '2') == 'utility method 1 - 2'").Invoke(null)); // types matched, no conversion needed

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Whoami('1', '2') == 'utility method 1 - 2'").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Whoami('1', '2') == 'utility method 1 - 2'"));
             Assert.Equal("Function 'Whoami' 1st argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
             Assert.Equal(new Location(1, 8), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Whoami(1, 2) == 'utility method 1 - 2'").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Whoami(1, 2) == 'utility method 1 - 2'"));
             Assert.Equal("Function 'Whoami' 2nd argument implicit conversion from 'System.Int32' to expected 'System.String' failed.", e.Error);
             Assert.Equal(new Location(1, 11), e.Location, new LocationComparer());
         }
@@ -730,21 +729,20 @@
         public void function_arguments_order_identification_is_formatted_correctly()
         {
             var parser = new Parser();
-            var model = new Model();
-
-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long('', 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)").Invoke(model));
+
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long('', 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)"));
             Assert.Equal("Function 'Long' 1st argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, '', 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)").Invoke(model));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, '', 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)"));
             Assert.Equal("Function 'Long' 2nd argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, '', 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)").Invoke(model));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, '', 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)"));
             Assert.Equal("Function 'Long' 3rd argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, '', 5, 6, 7, 8, 9, 10, 11, 12, 13)").Invoke(model));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, '', 5, 6, 7, 8, 9, 10, 11, 12, 13)"));
             Assert.Equal("Function 'Long' 4th argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '', 12, 13)").Invoke(model));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, '', 12, 13)"));
             Assert.Equal("Function 'Long' 11th argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, '', 13)").Invoke(model));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, '', 13)"));
             Assert.Equal("Function 'Long' 12th argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, '')").Invoke(model));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, '')"));
             Assert.Equal("Function 'Long' 13th argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
         }

@@ -757,7 +755,7 @@

             funcManager.AddFunction<object, bool>("CastToBool", obj => (bool) obj);

-            Assert.Throws<NullReferenceException>(() => parser.Parse<object, bool>("CastToBool(null)").Invoke(null));
+            Assert.Throws<NullReferenceException>(() => parser.Parse<object, bool>("CastToBool(null)").Invoke(null)); // runtime error

             // below, the exception should not be thrown as above
             // reason? - first argument is suffient to determine the value of the expression so the second one is not going to be evaluated
@@ -772,7 +770,7 @@

             // ensure that this doesn't consider Dog and HotDog enums to be ambiguous
             Assert.True(parser.Parse<object, bool>("Dog.Collie == 0").Invoke(null));
-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Stability.High == 0").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Stability.High == 0"));
             Assert.Equal(
                 @"Enum 'Stability' is ambiguous, found following:
 'ExpressiveAnnotations.Tests.Stability',
@@ -788,7 +786,7 @@

             // ensure that this doesn't consider Dogs.Const and HotDogs.Const constants to be ambiguous
             Assert.True(parser.Parse<object, bool>("Dogs.Const == 0").Invoke(null));
-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Utility.Const == 'outside1'").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Utility.Const == 'outside1'"));
             Assert.Equal(
                 @"Constant 'Utility.Const' is ambiguous, found following:
 'ExpressiveAnnotations.Tests.Utility.Const',
@@ -803,7 +801,7 @@
             var parser = new Parser();
             var model = new Model();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("NotMe == 0").Invoke(model));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("NotMe == 0"));
             Assert.Equal("Only public properties, constants and enums are accepted. Identifier 'NotMe' not known.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());
         }
@@ -846,8 +844,8 @@
             Assert.True(parser.Parse<bool>(dateModel.GetType(), "ToDate('2016-04-27') == Date").Invoke(dateModel));

             Assert.True(parser.Parse<object, bool>("TimeSpan(1, 0, 0, 0) > TimeSpan(0, 1, 0, 0)").Invoke(null));
-            //Assert.True(parser.Parse<object, bool>("(TimeSpan(0, 0, 0, 0)).TotalMilliseconds == 0").Invoke(null)); // foo().Prop - to be supported?
-            //Assert.True(parser.Parse<object, bool>("(TimeSpan(1, 2, 3, 4)).TotalMilliseconds == 4 * 1000 + 3 * 60 * 1000 + 2 * 60 * 60 * 1000 + 1 * 24 * 60 * 60 * 1000").Invoke(null));
+            Assert.True(parser.Parse<object, bool>("TimeSpan(0, 0, 0, 0).TotalMilliseconds == 0").Invoke(null));
+            Assert.True(parser.Parse<object, bool>("TimeSpan(1, 2, 3, 4).TotalMilliseconds == 4 * 1000 + 3 * 60 * 1000 + 2 * 60 * 60 * 1000 + 1 * 24 * 60 * 60 * 1000").Invoke(null));

             Assert.True(parser.Parse<object, bool>("Length('0123') == 4").Invoke(null));
             Assert.True(parser.Parse<object, bool>("Length('    ') == 4").Invoke(null));
@@ -1036,27 +1034,27 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"true {oper} null").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"true {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Boolean' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"true {oper} 1").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"true {oper} 1"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Boolean' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Now() {oper} Today()").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Now() {oper} Today()"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.DateTime'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"YesNo.Yes {oper} YesNo.No").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"YesNo.Yes {oper} YesNo.No"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'ExpressiveAnnotations.Tests.ParserTest+YesNo' and 'ExpressiveAnnotations.Tests.ParserTest+YesNo'.", e.Error);
             Assert.Equal(new Location(1, 11), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"1.1 {oper} 1").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"1.1 {oper} 1"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Double' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 5), e.Location, new LocationComparer());
         }
@@ -1067,11 +1065,11 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("true >> false").Invoke(new Model()));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("true >> false"));
             Assert.Equal("Operator '>>' cannot be applied to operands of type 'System.Boolean' and 'System.Boolean'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("true << false").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("true << false"));
             Assert.Equal("Operator '<<' cannot be applied to operands of type 'System.Boolean' and 'System.Boolean'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());
         }
@@ -1088,23 +1086,23 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"true {oper} null").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"true {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Boolean' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Now() {oper} Today()").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Now() {oper} Today()"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.DateTime'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"1 {oper} 2").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"1 {oper} 2"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"YesNo.Yes {oper} YesNo.No").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"YesNo.Yes {oper} YesNo.No"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'ExpressiveAnnotations.Tests.ParserTest+YesNo' and 'ExpressiveAnnotations.Tests.ParserTest+YesNo'.", e.Error);
             Assert.Equal(new Location(1, 11), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());
         }
@@ -1121,39 +1119,39 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0 {oper} '0'").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0 {oper} '0'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0.1 {oper} '0'").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0.1 {oper} '0'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Double' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 5), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 'asd'").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 'asd'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} 'asd'").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} 'asd'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Nullable`1[System.DateTime]' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Bag, bool>($"Lexer {oper} Parser").Invoke(new Bag {Lexer = new Lexer(), Parser = new Parser()}));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Bag, bool>($"Lexer {oper} Parser"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'ExpressiveAnnotations.Analysis.Lexer' and 'ExpressiveAnnotations.Analysis.Parser'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Cash {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Cash {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Decimal' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Utility.Stability.High {oper} YesNo.Yes").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Utility.Stability.High {oper} YesNo.Yes"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'ExpressiveAnnotations.Tests.Utility+Stability' and 'ExpressiveAnnotations.Tests.ParserTest+YesNo'.", e.Error);
             Assert.Equal(new Location(1, 24), e.Location, new LocationComparer());
         }
@@ -1170,59 +1168,59 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"'a' {oper} 'b'").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"'a' {oper} 'b'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.String' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 5), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"'asd' {oper} null").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"'asd' {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.String' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Nullable`1[System.DateTime]' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Nullable`1[System.DateTime]' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"SubModelObject {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"SubModelObject {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Object' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 16), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"0 {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"0 {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Span {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Span {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.TimeSpan' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Utility.Stability.High {oper} YesNo.Yes").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"Utility.Stability.High {oper} YesNo.Yes"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'ExpressiveAnnotations.Tests.Utility+Stability' and 'ExpressiveAnnotations.Tests.ParserTest+YesNo'.", e.Error);
             Assert.Equal(new Location(1, 24), e.Location, new LocationComparer());
         }
@@ -1239,43 +1237,43 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0 {oper} null").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0 {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NDate {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Nullable`1[System.DateTime]' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Span {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Span {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.TimeSpan' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NSpan {oper} 0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"NSpan {oper} 0"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Nullable`1[System.TimeSpan]' and 'System.Int32'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"0 {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"0 {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Date {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.DateTime' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Span {oper} SubModelObject").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"Span {oper} SubModelObject"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.TimeSpan' and 'System.Object'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"{oper} true").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"{oper} true"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operand of type 'System.Boolean'.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());
         }
@@ -1292,22 +1290,22 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0 {oper} null").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"0 {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"'abc' {oper} 'abc'").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"'abc' {oper} 'abc'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.String' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

             e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>(
                 $@"1 - 2
     - (6 / ((2{oper}'1.5' - 1) + 1)) * -2
-    + 1/2/1 == 3.50").Invoke(null));
+    + 1/2/1 == 3.50"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'System.Int32' and 'System.String'.", e.Error);
             Assert.Equal(new Location(2, 15), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>($"null {oper} null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operands of type 'null' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());
         }
@@ -1318,15 +1316,15 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Date + Date").Invoke(new Model()));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Date + Date"));
             Assert.Equal("Operator '+' cannot be applied to operands of type 'System.DateTime' and 'System.DateTime'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("NDate + NDate").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("NDate + NDate"));
             Assert.Equal("Operator '+' cannot be applied to operands of type 'System.Nullable`1[System.DateTime]' and 'System.Nullable`1[System.DateTime]'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Date + NDate").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Date + NDate"));
             Assert.Equal("Operator '+' cannot be applied to operands of type 'System.DateTime' and 'System.Nullable`1[System.DateTime]'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());
         }
@@ -1337,15 +1335,15 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("'abc' - 'abc'").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("'abc' - 'abc'"));
             Assert.Equal("Operator '-' cannot be applied to operands of type 'System.String' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1 + 2 + 'abc' - 'abc' > 0").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1 + 2 + 'abc' - 'abc' > 0"));
             Assert.Equal("Operator '-' cannot be applied to operands of type 'System.String' and 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 15), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("'asd' - null").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("'asd' - null"));
             Assert.Equal("Operator '-' cannot be applied to operands of type 'System.String' and 'null'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());
         }
@@ -1362,15 +1360,15 @@
             var parser = new Parser();
             parser.RegisterToolchain();

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"{oper}null").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"{oper}null"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operand of type 'null'.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"{oper}'a'").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"{oper}'a'"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operand of type 'System.String'.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"{oper}Today()").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>($"{oper}Today()"));
             Assert.Equal($"Operator '{oper}' cannot be applied to operand of type 'System.DateTime'.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());
         }
@@ -1385,11 +1383,11 @@
             funcManager.AddFunction<int, int, int>("Max", (x, y) => Math.Max(x, y));
             funcManager.AddFunction<object>("GetObject", () => new object());

-            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1++ +1==2").Invoke(null));
+            var e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1++ +1==2"));
             Assert.Equal("Unexpected token: '++'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("true # false").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("true # false"));
             Assert.Equal("Invalid token.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

@@ -1397,149 +1395,149 @@
                 @"1 - 2

     - 6
-    + 1/x[0]/1 == 3.50").Invoke(null));
+    + 1/x[0]/1 == 3.50"));
             Assert.Equal("Only public properties, constants and enums are accepted. Identifier 'x' not known.", e.Error);
             Assert.Equal(new Location(4, 9), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("WriteLine('hello')").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("WriteLine('hello')"));
             Assert.Equal("Function 'WriteLine' not known.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1 2").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1 2"));
             Assert.Equal("Unexpected token: '2'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("(").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("("));
             Assert.Equal("Expected \"null\", bool, int, float, bin, hex, string, array or id. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("(1+1").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("(1+1"));
             Assert.Equal("Expected closing parenthesis. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 5), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("()").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("()"));
             Assert.Equal("Expected \"null\", bool, int, float, bin, hex, string, array or id. Unexpected token: ')'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max("));
             Assert.Equal("Expected \"null\", bool, int, float, bin, hex, string, array or id. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 5), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(1 2").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(1 2"));
             Assert.Equal("Expected comma or closing parenthesis. Unexpected token: '2'.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(1.1)").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(1.1)"));
             Assert.Equal("Function 'Max' accepting 1 argument not found.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(1.1, 1.2, 'a')").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("Max(1.1, 1.2, 'a')"));
             Assert.Equal("Function 'Max' accepting 3 arguments not found.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

             e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>(
                 @"Max(1,
-      Max(1, 'a')) == 1.1").Invoke(null));
+      Max(1, 'a')) == 1.1"));
             Assert.Equal("Function 'Max' 2nd argument implicit conversion from 'System.String' to expected 'System.Int32' failed.", e.Error);
             Assert.Equal(new Location(2, 14), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1)").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Long(1)"));
             Assert.Equal("Function 'Long' accepting 1 argument not found.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>(@"Max(1").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>(@"Max(1"));
             Assert.Equal("Expected comma or closing parenthesis. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1.1.1").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("1.1.1"));
             Assert.Equal("Unexpected token: '.1'.", e.Error); // "unexpected" is not "invalid" - token is valid, but used in wrong context
             Assert.Equal(new Location(1, 4), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0z").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0z"));
             Assert.Equal("Unexpected token: 'z'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0b").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0b"));
             Assert.Equal("Unexpected token: 'b'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0x").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0x"));
             Assert.Equal("Unexpected token: 'x'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0b2").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0b2"));
             Assert.Equal("Unexpected token: 'b2'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0xG").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0xG"));
             Assert.Equal("Unexpected token: 'xG'.", e.Error);
             Assert.Equal(new Location(1, 2), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0xffffffffffff").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("0xffffffffffff"));
             Assert.Equal("Integral constant is too large.", e.Error);
             Assert.Equal(new Location(1, 1), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("true ? true ").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("true ? true "));
             Assert.Equal("Expected colon of ternary operator. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 13), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("true ? true . false").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("true ? true . false"));
             Assert.Equal("Expected colon of ternary operator. Unexpected token: '.'.", e.Error);
             Assert.Equal(new Location(1, 13), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[0]").Invoke(new Model {Items = new List<Model> {new Model()}}));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[0]"));
             Assert.Equal("Indexing operation not supported. Subscript operator can be applied to either an array or a type declaring indexer.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[1.0]").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[1.0]"));
             Assert.Equal("Expected index of 'System.Int32' type. Type 'System.Double' cannot be implicitly converted.", e.Error);
             Assert.Equal(new Location(1, 7), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[0").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[0"));
             Assert.Equal("Expected closing bracket. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 8), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[0+").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Items[0+"));
             Assert.Equal("Expected \"null\", bool, int, float, bin, hex, string, array or id. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 9), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Prop.+").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Prop.+"));
             Assert.Equal("Expected subproperty identifier. Unexpected token: '+'.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Prop.").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Prop."));
             Assert.Equal("Expected subproperty identifier. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 6), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("[0][1 > 0 ? 0*2.0 : 0^2] == 1").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<object, bool>("[0][1 > 0 ? 0*2.0 : 0^2] == 1"));
             Assert.Equal("Argument types must match.", e.Error);
             Assert.Equal(new Location(1, 11), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Collection[true ? 0 : 1].Collection[true ? [0][0] : 1].Unknown == -2").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("Collection[true ? 0 : 1].Collection[true ? [0][0] : 1].Unknown == -2"));
             Assert.Equal("Only public properties, constants and enums are accepted. Identifier 'Unknown' not known.", e.Error);
             Assert.Equal(new Location(1, 56), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("GetObject()[0]").Invoke(null));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("GetObject()[0]"));
             Assert.Equal("Indexing operation not supported. Subscript operator can be applied to either an array or a type declaring indexer.", e.Error);
             Assert.Equal(new Location(1, 12), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("SubModel.Unknown1.Unknown2 == 1").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("SubModel.Unknown1.Unknown2 == 1"));
             Assert.Equal("Only public properties, constants and enums are accepted. Identifier 'Unknown1' not known.", e.Error);
             Assert.Equal(new Location(1, 10), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("GetObject().Unknown1.Unknown2 == 1").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("GetObject().Unknown1.Unknown2 == 1"));
             Assert.Equal("Only public properties, constants and enums are accepted. Identifier 'Unknown1' not known.", e.Error);
             Assert.Equal(new Location(1, 13), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("[SubModel][0].Unknown1.Unknown2 == 1").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("[SubModel][0].Unknown1.Unknown2 == 1"));
             Assert.Equal("Only public properties, constants and enums are accepted. Identifier 'Unknown1' not known.", e.Error);
             Assert.Equal(new Location(1, 15), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("[1").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("[1"));
             Assert.Equal("Expected comma or closing bracket. Unexpected end of expression.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());

-            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("[1)").Invoke(new Model()));
+            e = Assert.Throws<ParseErrorException>(() => parser.Parse<Model, bool>("[1)"));
             Assert.Equal("Expected comma or closing bracket. Unexpected token: ')'.", e.Error);
             Assert.Equal(new Location(1, 3), e.Location, new LocationComparer());
         }


symbol highlight on mouseover

symbol highlight on mouseover

--- rgatCore/Widgets/HighlightDialog.cs
+++ rgatCore/Widgets/HighlightDialog.cs
@@ -19,6 +19,7 @@
             public List<uint> threadNodes;
             public ulong address;
             public bool selected;
+            public bool hovered;
             public int moduleID;
         };

@@ -96,13 +97,32 @@
             {
                 ActiveGraph.AddHighlightedNodes(syminfo.threadNodes, eHighlightType.eExternals);
                 settings.SelectedSymbols.Add(syminfo);
+
             }
             else
             {
                 ActiveGraph.RemoveHighlightedNodes(syminfo.threadNodes, eHighlightType.eExternals);
                 settings.SelectedSymbols = settings.SelectedSymbols.Where(s => s.address != syminfo.address).ToList();
-            }
-        }
+
+            }
+        }
+
+
+        private void HandleMouseoverSym(moduleEntry module_modentry, symbolInfo syminfo)
+        {
+            module_modentry.symbols[syminfo.address] = syminfo;
+            if (syminfo.hovered)
+            {
+                ActiveGraph.AddHighlightedNodes(syminfo.threadNodes, eHighlightType.eExternals);
+            }
+            else
+            {
+                ActiveGraph.RemoveHighlightedNodes(syminfo.threadNodes, eHighlightType.eExternals);
+            }
+
+        }
+
+

         private void DrawModSymTreeNodes()
         {
@@ -138,6 +158,7 @@
                 {
                     if (ImGui.TreeNode($"{module_modentry.path}"))
                     {
+                        float cursX = ImGui.GetCursorPosX() + 75;
                         foreach (ulong symaddr in keyslist)
                         {
                             symbolInfo syminfo = module_modentry.symbols[symaddr];
@@ -146,9 +167,12 @@
                                 !moduleMatchesFilter &&
                                 !syminfo.name.ToLower().Contains(settings.SymFilterText.ToLower())
                                 )
+                            {
                                 continue;
-
-                            ImGui.SetCursorPosX(ImGui.GetCursorPosX() + 75);
+                            }
+
+                            ImGui.SetCursorPosX(cursX);
+                            ImGui.BeginGroup();
                             if (ImGui.Selectable($"{syminfo.name}", syminfo.selected))
                             {
                                 HandleSelectedSym(module_modentry, syminfo);
@@ -157,10 +181,31 @@
                             ImGui.Text($"0x{syminfo.address:X}");
                             ImGui.SameLine(450);
                             ImGui.Text($"{syminfo.threadNodes.Count}");
-
+                            ImGui.EndGroup();
+
+                            if (!syminfo.selected)
+                            {
+                                if (ImGui.IsItemHovered(ImGuiHoveredFlags.None))
+                                {
+                                    Console.WriteLine($"hoverred {syminfo.name}");
+                                    if (syminfo.hovered == false)
+                                    {
+                                        syminfo.hovered = true;
+                                        HandleMouseoverSym(module_modentry, syminfo);
+                                    }
+                                }
+                                else
+                                {
+                                    if (syminfo.hovered == true)
+                                    {
+                                        syminfo.hovered = false;
+                                        HandleMouseoverSym(module_modentry, syminfo);
+                                    }
+                                }
+                            }
+
+                            ImGui.TreePop();
                         }
-
-                        ImGui.TreePop();
                     }
                 }
             }
@@ -200,7 +245,7 @@
             ImGui.PopStyleColor();

             ImGui.PushStyleColor(ImGuiCol.ChildBg, 0xffffffff);
-            if (ImGui.BeginChild("htSymsFrame", new Vector2(ImGui.GetContentRegionAvail().X,  height - 80)))
+            if (ImGui.BeginChild("htSymsFrame", new Vector2(ImGui.GetContentRegionAvail().X, height - 80)))
             {
                 DrawModSymTreeNodes();
                 ImGui.EndChild();
@@ -214,7 +259,7 @@
         {
             if (settings.selectedHighlightTab == 0)
             {
-                if (ImGui.BeginChild(ImGui.GetID("highlightSymsControls"), new Vector2(ImGui.GetContentRegionAvail().X, height-10)))
+                if (ImGui.BeginChild(ImGui.GetID("highlightSymsControls"), new Vector2(ImGui.GetContentRegionAvail().X, height - 10)))
                 {
                     ImGui.AlignTextToFramePadding();
                     ImGui.Text($"{settings.SelectedSymbols.Count} highlighted symbols ({ActiveGraph.HighlightedSymbolNodes.Count} nodes)");
@@ -253,7 +298,7 @@
         static int selitem = 0;
         public void DrawAddressSelectBox(float height)
         {
-            ImGui.ListBox("##AddrListbox", ref selitem,
+            ImGui.ListBox("##AddrListbox", ref selitem,
                 settings.SelectedAddresses.Select(ad => $"0x{ad:X}").ToArray(),
                 settings.SelectedAddresses.Count);

@@ -346,7 +391,7 @@
             Vector2 Size = ImGui.GetContentRegionAvail();
             if (Size.X < InitialSize.X) Size.X = InitialSize.X;
             if (Size.Y < InitialSize.Y) Size.Y = InitialSize.Y;
-
+
             if (ImGui.BeginChildFrame(ImGui.GetID("highlightControls"), Size, ImGuiWindowFlags.AlwaysAutoResize))
             {
                 ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags.AutoSelectNewTabs;


Fixed an issue when the same assembly was loaded multiple times.

--- src/Kephas.Core/Application/AppRuntimeBase.cs
+++ src/Kephas.Core/Application/AppRuntimeBase.cs
@@ -81,8 +81,12 @@
             var loadedAssemblies = this.GetLoadedAssemblies();
             assemblyFilter = assemblyFilter ?? this.AssemblyFilter;

+            // when computing the assemblies, use the Name and not the FullName
+            // because for some obscure reasons it is possible to have the same
+            // assembly with different versions loaded.
+            // TODO log when such cases occur.
             var assemblies = loadedAssemblies.Where(a => assemblyFilter(a.GetName())).ToList();
-            var loadedAssemblyRefs = new HashSet<string>(loadedAssemblies.Select(a => a.GetName().FullName));
+            var loadedAssemblyRefs = new HashSet<string>(loadedAssemblies.Select(a => a.GetName().Name));
             var assembliesToCheck = new List<Assembly>(assemblies);

             while (assembliesToCheck.Count > 0)
@@ -90,11 +94,14 @@
                 var assemblyRefsToLoad = new HashSet<AssemblyName>();
                 foreach (var assembly in assembliesToCheck)
                 {
-                    var referencesToLoad = this.GetReferencedAssemblies(assembly).Where(a => !loadedAssemblyRefs.Contains(a.FullName) && assemblyFilter(a));
+                    var referencesToLoad =
+                        this.GetReferencedAssemblies(assembly)
+                            .Where(a => !loadedAssemblyRefs.Contains(a.Name) && assemblyFilter(a))
+                            .ToList();
+                    loadedAssemblyRefs.AddRange(referencesToLoad.Select(an => an.Name));
                     assemblyRefsToLoad.AddRange(referencesToLoad);
                 }

-                loadedAssemblyRefs.AddRange(assemblyRefsToLoad.Select(an => an.FullName));
                 assembliesToCheck = assemblyRefsToLoad.Select(this.AssemblyLoader.LoadAssembly).ToList();
                 assemblies.AddRange(assembliesToCheck);
             }


Lucene.Net.Core.Index.CoalescedUpdates: removed TODOs about whether logic in TermsIterable() and QueriesIterable are correct

--- src/Lucene.Net.Core/Index/CoalescedUpdates.cs
+++ src/Lucene.Net.Core/Index/CoalescedUpdates.cs
@@ -66,17 +66,9 @@
             }
         }

-        //LUCENE TO-DO Is this right???
         public virtual IEnumerable<Term> TermsIterable()
         {
             return new IterableAnonymousInnerClassHelper(this);
-            /*foreach (IEnumerable<Term> iterable in Iterables)
-            {
-                foreach (Term t in iterable)
-                {
-                    yield return t;
-                }
-            }*/
         }

         private class IterableAnonymousInnerClassHelper : IEnumerable<Term>
@@ -104,13 +96,8 @@
             }
         }

-        //LUCENE TO-DO Is this right???
         public virtual IEnumerable<QueryAndLimit> QueriesIterable()
         {
-            /*foreach (KeyValuePair<Query, int> entry in Queries)
-            {
-                yield return new QueryAndLimit(entry.Key, entry.Value);
-            }*/
             return new IterableAnonymousInnerClassHelper2(this);
         }


Indeterminate progress will not show percentage

--- src/MaterialForms/Tasks/ProgressController.cs
+++ src/MaterialForms/Tasks/ProgressController.cs
@@ -13,7 +13,8 @@
             {
                 Progress = options.Progress,
                 Maximum = options.Maximum,
-                IsIndeterminate = options.IsIndeterminate
+                IsIndeterminate = options.IsIndeterminate,
+                ShowPercentage = !options.IsIndeterminate
             };

             Dialog = new MaterialDialog


Reformat

Reformat

--- src/MiningCore/Configuration/ClusterConfig.cs
+++ src/MiningCore/Configuration/ClusterConfig.cs
@@ -108,7 +108,7 @@
         public string Name { get; set; }
         public double Difficulty { get; set; }
         public VarDiffConfig VarDiff { get; set; }
-	}
+    }

     public partial class VarDiffConfig
     {
@@ -282,11 +282,11 @@
         public int JobRebroadcastTimeout { get; set; }
         public int BlockRefreshInterval { get; set; }

-		public bool ExternalStratum { get; set; }
-	    public string ExternalStratumZmqSocket { get; set; }
-	    public string ExternalStratumZmqTopic { get; set; }
-
-		[JsonExtensionData]
+        public bool ExternalStratum { get; set; }
+        public string ExternalStratumZmqSocket { get; set; }
+        public string ExternalStratumZmqTopic { get; set; }
+
+        [JsonExtensionData]
         public IDictionary<string, object> Extra { get; set; }
     }


Deactivated level function in calc command, improved design of calcops command

--- src/NadekoBot/Modules/Utility/CalcCommands.cs
+++ src/NadekoBot/Modules/Utility/CalcCommands.cs
@@ -53,6 +53,8 @@
             private void Expr_EvaluateFunction(string name, FunctionArgs args)
             {
                 name = name.ToLowerInvariant();
+                // All methods have to in CustomNCalcEvaluations and be like:
+                // public static object calcfunctionname(ICommandContext context, DbService db, FunctionArgs args){ ... }
                 var functions = from m in typeof(CustomNCalcEvaluations).GetTypeInfo().GetMethods()
                     where m.IsStatic && m.IsPublic && m.ReturnType == typeof(object) &&
                           m.GetParameters().Length == 3 &&
@@ -86,17 +88,20 @@
                           m.GetParameters()[1].ParameterType == typeof(DbService) &&
                           m.GetParameters()[2].ParameterType == typeof(FunctionArgs)
                     select m.Name;
-                await Context.Channel.SendConfirmAsync(GetText("calcops", Prefix), string.Join(", ", selection) + "\n" + string.Join(", ", functions));
+                await Context.Channel.EmbedAsync(new EmbedBuilder().WithOkColor()
+                    .WithTitle(GetText("calcops", Prefix))
+                    .AddField("Math", string.Join(", ", selection))
+                    .AddField("Custom", string.Join(", ", functions)));
             }
         }

         private class CustomNCalcEvaluations
         {
-            public static object Level(ICommandContext context, DbService db, FunctionArgs args)
+            private static object Level(ICommandContext context, DbService db, FunctionArgs args)
             {
-                if(args.Parameters.Length > 0) context.Channel
-                    .SendMessageAsync($"args: {args.Parameters.Aggregate("", (s, p) => $"{s}{p.ParsedExpression.ToString()}, ", s => s.Substring(0, s.Length - 2))}")
-                    .GetAwaiter().GetResult();
+                if (args.Parameters.Length > 0) context.Channel
+                     .SendMessageAsync($"args: {args.Parameters.Aggregate("", (s, p) => $"{s}{p.ParsedExpression.ToString()}, ", s => s.Substring(0, s.Length - 2))}")
+                     .GetAwaiter().GetResult();
                 if (args.Parameters.Length > 1) return null;
                 var user = context.User as IGuildUser;
                 if (args.Parameters.Length == 1)
@@ -110,7 +115,7 @@
                         user = context.Guild.GetUserAsync(id).GetAwaiter().GetResult();
                     }
                     else {
-                        context.Channel.SendMessageAsync($"usernames: {context.Guild.GetUsersAsync().GetAwaiter().GetResult().Aggregate("", (s,u) => $"{s}{u.Username}+{u.Mention.Substring(1)}+{u.Nickname} | ", s => s.Substring(0, s.Length - 3))}").GetAwaiter().GetResult();
+                        context.Channel.SendMessageAsync($"usernames: {context.Guild.GetUsersAsync().GetAwaiter().GetResult().Aggregate("", (s, u) => $"{s}{u.Username}+{u.Mention.Substring(1)}+{u.Nickname} | ", s => s.Substring(0, s.Length - 3))}").GetAwaiter().GetResult();
                         user = context.Guild.GetUsersAsync().GetAwaiter().GetResult()
                             .FirstOrDefault(u => u.Username == expr || u.Mention == expr);
                     }


Added methods for overriding route description provider

--- src/Nancy.Testing/ConfigurableBootstrapper.cs
+++ src/Nancy.Testing/ConfigurableBootstrapper.cs
@@ -1136,6 +1136,32 @@
             }

             /// <summary>
+            /// Configures the bootstrapper to create an <see cref="IRouteDescriptionProvider"/> instance of the specified type.
+            /// </summary>
+            /// <typeparam name="T">The type of the <see cref="IRouteDescriptionProvider"/> that the bootstrapper should use.</typeparam>
+            /// <returns>A reference to the current <see cref="ConfigurableBoostrapperConfigurator"/>.</returns>
+            public ConfigurableBoostrapperConfigurator RouteDescriptionProvider<T>() where T : IRouteDescriptionProvider
+            {
+                this.bootstrapper.registeredTypes.Add(
+                    new TypeRegistration(typeof(IRouteDescriptionProvider), typeof(T)));
+
+                return this;
+            }
+
+            /// <summary>
+            /// Configures the bootstrapper to use the provided instance of <see cref="IRouteDescriptionProvider"/>.
+            /// </summary>
+            /// <param name="routeDescriptionProvider">The <see cref="IRouteDescriptionProvider"/> instance that should be used by the bootstrapper.</param>
+            /// <returns>A reference to the current <see cref="ConfigurableBoostrapperConfigurator"/>.</returns>
+            public ConfigurableBoostrapperConfigurator RouteDescriptionProvider(IRouteDescriptionProvider routeDescriptionProvider)
+            {
+                this.bootstrapper.registeredInstances.Add(
+                    new InstanceRegistration(typeof(IRouteDescriptionProvider), routeDescriptionProvider));
+
+                return this;
+            }
+
+            /// <summary>
             /// Configures the bootstrapper to create an <see cref="IRouteSegmentExtractor"/> instance of the specified type.
             /// </summary>
             /// <typeparam name="T">The type of the <see cref="IRouteSegmentExtractor"/> that the bootstrapper should use.</typeparam>


ordered list

ordered list

--- src/NuGetGallery/Views/Packages/Delete.cshtml
+++ src/NuGetGallery/Views/Packages/Delete.cshtml
@@ -46,7 +46,7 @@
     Unlisting the package will keep people from finding it by searching the site. The package is still available for download as a dependency for
     three main reasons.

-

+

         Other packages may depend on that package. Those packages might not necessarily be in this gallery.

@@ -57,7 +57,7 @@

         Helps ensure that important community owned packages are not mass deleted.

-

+

     If you need the package permanently removed, click on the Contact Support link and we'll take care
     of it for you. PLEASE ONLY DO THIS IF THERE IS AN URGENT PROBLEM WITH THE PACKAGE.


Allow switching stats table grouping if the milestone name contains a slash. Closes #1260.

git-svn-id: 0d96b0c1a6983ccc08b3732614f4d6bfcf9cbb42@1323 af82e41b-90c4-0310-8c96-b1721e28e2e2

--- templates/milestone.cs
+++ templates/milestone.cs
@@ -147,7 +147,10 @@
    /with ?>
   </div>
   <form id="stats" method="get">
-   <fieldset>
+   <fieldset><?cs
+    if:milestone.id_param ?>
+     <input type="hidden" name="id" value="<?cs var:milestone.name ?>" /><?cs
+    /if ?>
     <legend>
      <label for="by">Ticket status by</label>
      <select id="by" name="by" onchange="this.form.submit()"><?cs


switch ugly/test to depend on basic.  add comment about intention to deprecate _needy.

--- gen_build.cs
+++ gen_build.cs
@@ -2373,8 +2373,8 @@
 		f.WriteEndElement(); // file
 	}

-	private const string NUSPEC_VERSION = "0.6.1";
-	private const string NUSPEC_RELEASE_NOTES = "Fix GC problem with delegates registered with sqlite as callbacks.  Thanks to zgramana.";
+	private const string NUSPEC_VERSION = "0.6.2";
+	private const string NUSPEC_RELEASE_NOTES = "Switch ugly and tests pkg back to reference _basic instead of _needy.  If everything works out okay in the next release, _needy will be deprecated.";

 	private static void gen_nuspec_needy(string top)
 	{
@@ -2399,7 +2399,7 @@
 			f.WriteElementString("id", id);
 			f.WriteElementString("version", NUSPEC_VERSION);
 			f.WriteElementString("title", "SQLitePCL.raw - without SQLite itself");
-			f.WriteElementString("description", "This NuGet package for SQLitePCL.raw is 'needy' in the sense that it does not contain the SQLite library itself.  To use this package, you need the actual SQLite library to be provided in some other way.");
+			f.WriteElementString("description", "(NOTE: I plan to deprecate this package.  Use the SQLitePCL.raw_basic package instead.)  This NuGet package for SQLitePCL.raw is 'needy' in the sense that it does not contain the SQLite library itself.  To use this package, you need the actual SQLite library to be provided in some other way.");
 			f.WriteElementString("authors", "Eric Sink, et al");
 			f.WriteElementString("owners", "Eric Sink");
 			f.WriteElementString("copyright", "Copyright 2014 Zumero, LLC");
@@ -2647,7 +2647,7 @@

 			f.WriteStartElement("dependencies");
 			f.WriteStartElement("dependency");
-			f.WriteAttributeString("id", "SQLitePCL.raw_needy"); // TODO
+			f.WriteAttributeString("id", "SQLitePCL.raw_basic"); // TODO
 			f.WriteEndElement(); // dependency
 			f.WriteEndElement(); // dependencies


Improve list API tokens view

Improve list API tokens view

--- BTCPayServer/Views/Stores/ListTokens.cshtml
+++ BTCPayServer/Views/Stores/ListTokens.cshtml
@@ -7,9 +7,10 @@
 <partial name="_StatusMessage" />
 @if (Model.StoreNotConfigured)
 {
-

+

         <button type="button" class="close" data-dismiss="alert" aria-label="Close">×</button>
-        Warning: No wallet has been linked to your BTCPay Store. See this link for more information on how to connect your store and wallet.
+        Warning: No wallet has been linked to your BTCPay Store.

+        See this link for more information on how to connect your store and wallet.

 }

Access token

@@ -21,14 +22,17 @@

          Create a new token
-

-

+
+        @if (Model.Tokens.Any())
+        {
+

+

                     Label
                     Actions

-

-

+

+

                 @foreach (var token in Model.Tokens)
                 {

@@ -38,11 +42,12 @@

                 }
-

-

+

+

+        }

-
+

Legacy API Keys


Fixing missing tests after I missed up GameTestDiscoverer

--- src/OpenSage.Game.Tests/GameTestDiscoverer.cs
+++ src/OpenSage.Game.Tests/GameTestDiscoverer.cs
@@ -19,8 +19,11 @@

         public IEnumerable<IXunitTestCase> Discover(ITestFrameworkDiscoveryOptions discoveryOptions, ITestMethod testMethod, IAttributeInfo factAttribute)
         {
-            var arguments = factAttribute.GetConstructorArguments();
-            var games = (SageGame[]) arguments.Single();
+            var arguments = factAttribute.GetConstructorArguments().ToList();
+            var game = (SageGame) arguments[0];
+            var otherGames = (SageGame[]) arguments[1];
+
+            var games = new[] { game }.Union(otherGames).ToArray();

             if (!InstalledGames.Any(x => games.Contains(x)))
             {


fix unit  tests

fix unit  tests

--- test/DotNetCore.CAP.MySql.Test/DatabaseTestHost.cs
+++ test/DotNetCore.CAP.MySql.Test/DatabaseTestHost.cs
@@ -34,7 +34,7 @@
                 var storage = GetService<IStorageInitializer>();
                 var token = new CancellationTokenSource().Token;
                 CreateDatabase();
-                storage.InitializeAsync(token).GetAwaiter().GetResult();
+                storage.InitializeAsync(token);
                 _sqlObjectInstalled = true;
             }
         }


Added tests for the output element

Added tests for the output element

--- AngleSharp.Core.Tests/Library/DOMActions.cs
+++ AngleSharp.Core.Tests/Library/DOMActions.cs
@@ -390,5 +390,70 @@
             Assert.AreEqual(1, second.Rows.Length);
             Assert.AreEqual(0, (second.Rows[0] as IHtmlTableRowElement).Cells.Length);
         }
+
+        [Test]
+        public void PlainOutputElement()
+        {
+            var document = DocumentBuilder.Html("");
+            var output = document.CreateElement<IHtmlOutputElement>();
+            Assert.AreEqual("output", output.Type);
+            Assert.AreEqual("", output.TextContent);
+            Assert.AreEqual("", output.Value);
+            Assert.AreEqual("", output.DefaultValue);
+        }
+
+        [Test]
+        public void OutputElementWithTextContent()
+        {
+            var document = DocumentBuilder.Html("");
+            var output = document.CreateElement<IHtmlOutputElement>();
+            output.TextContent = "5";
+            Assert.AreEqual("output", output.Type);
+            Assert.AreEqual("5", output.TextContent);
+            Assert.AreEqual("5", output.Value);
+            Assert.AreEqual("5", output.DefaultValue);
+        }
+
+        [Test]
+        public void OutputElementWithDefaultValueOverridesTextContent()
+        {
+            var document = DocumentBuilder.Html("");
+            var output = document.CreateElement<IHtmlOutputElement>();
+            output.TextContent = "5";
+            output.DefaultValue = "10";
+            Assert.AreEqual("output", output.Type);
+            Assert.AreEqual("10", output.TextContent);
+            Assert.AreEqual("10", output.Value);
+            Assert.AreEqual("10", output.DefaultValue);
+        }
+
+        [Test]
+        public void OutputElementWithCustomValueOverridesDefaultValue()
+        {
+            var document = DocumentBuilder.Html("");
+            var output = document.CreateElement<IHtmlOutputElement>();
+            output.TextContent = "5";
+            output.DefaultValue = "10";
+            output.Value = "20";
+            Assert.AreEqual("output", output.Type);
+            Assert.AreEqual("20", output.TextContent);
+            Assert.AreEqual("20", output.Value);
+            Assert.AreEqual("10", output.DefaultValue);
+        }
+
+        [Test]
+        public void OutputElementWithCustomValueAndDefaultValue()
+        {
+            var document = DocumentBuilder.Html("");
+            var output = document.CreateElement<IHtmlOutputElement>();
+            output.TextContent = "5";
+            output.DefaultValue = "10";
+            output.Value = "20";
+            output.DefaultValue = "15";
+            Assert.AreEqual("output", output.Type);
+            Assert.AreEqual("20", output.TextContent);
+            Assert.AreEqual("20", output.Value);
+            Assert.AreEqual("15", output.DefaultValue);
+        }
     }
 }


CCMBridge Create() was failing when node count was > 4, but needed to check for > 6 when not using MYTEST

--- CCMBridge/CCMBridge.cs
+++ CCMBridge/CCMBridge.cs
@@ -78,7 +78,7 @@
         public static CCMBridge Create(string name, int nbNodes, bool useAlreadyExisting= false)
         {
 #if !MYTEST
-            if (!useAlreadyExisting && (nbNodes > 4))
+            if (!useAlreadyExisting && (nbNodes > 6))
                 throw new InvalidOperationException();
 #endif

@@ -90,7 +90,7 @@
         public static CCMBridge Create(string name, int nbNodesDC1, int nbNodesDC2, bool useAlreadyExisting =false)
         {
 #if !MYTEST
-            if (!useAlreadyExisting && (nbNodesDC1 + nbNodesDC2 > 4))
+            if (!useAlreadyExisting && (nbNodesDC1 + nbNodesDC2 > 6))
                 throw new InvalidOperationException();
 #endif

@@ -472,7 +472,7 @@
             public static CCMCluster Create(int nbNodes, Builder builder)
             {
 #if !MYTEST
-                if (nbNodes > 4)
+                if (nbNodes > 6)
                     throw new InvalidOperationException();
 #endif
                 if (nbNodes == 0)
@@ -484,7 +484,7 @@
             public static CCMCluster Create(int nbNodesDC1, int nbNodesDC2, Builder builder)
             {
 #if !MYTEST
-                if (nbNodesDC1 + nbNodesDC2 > 4)
+                if (nbNodesDC1 + nbNodesDC2 > 6)
                     throw new InvalidOperationException();
 #endif
                 if (nbNodesDC1 == 0)


updated POST method to create a stump

updated POST method to create a stump

--- src/main/dot-net/Stumps.Engine/Web/ApiModules/StumpsModule.cs
+++ src/main/dot-net/Stumps.Engine/Web/ApiModules/StumpsModule.cs
@@ -55,6 +55,8 @@

                 var model = this.Bind<StumpModel>();
                 var contract = CreateContractFromRecord(model, environment);
+
+                environment.Stumps.CreateStump(contract);

                 return HttpStatusCode.OK;


change solving methods

change solving methods

--- CSharp/lab1/Program.cs
+++ CSharp/lab1/Program.cs
@@ -14,15 +14,15 @@

 		public static void Main(string[] args)
 		{
-			var gaus = new Gaus("input.txt");
+			var gaus = new SquaresMethod("input.txt");
 		}

-		 public class Gaus
+		 public class SquaresMethod
 		 {
 			 public double[,] Matrix { get; private set; }
 			 public string Path { get; private set; }

-			 public Gaus(int size, double fillValue = 1.0)
+			 public SquaresMethod(int size, double fillValue = 1.0)
 			 {
 				 Matrix = new double[size, size];
 				 for (var i = 0; i < size; i++)
@@ -30,7 +30,7 @@
 						 Matrix[i, j] = fillValue;
 			 }

-			 public Gaus(string path)
+			 public SquaresMethod(string path)
 			 {
 				 try
 				 {
@@ -51,11 +51,6 @@
 					 MessageBox.Show(ex.Message, "File not found", MessageBoxButtons.OK, MessageBoxIcon.Error);
 				 }
 			 }
-
-			 public void SolveGaus()
-			 {
-
-			 }
 		 }
 	}


Trying to prevent ocassional chrome crashes

Error: The process started from chrome location /usr/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.

--- BTCPayServer.Tests/SeleniumTester.cs
+++ BTCPayServer.Tests/SeleniumTester.cs
@@ -42,18 +42,19 @@
         {
             await Server.StartAsync();
             ChromeOptions options = new ChromeOptions();
+            if (Server.PayTester.InContainer)
+            {
+                // this must be first option https://stackoverflow.com/questions/53073411/selenium-webdriverexceptionchrome-failed-to-start-crashed-as-google-chrome-is#comment102570662_53073789
+                options.AddArgument("no-sandbox");
+            }
+
             var isDebug = !Server.PayTester.InContainer;
-
             if (!isDebug)
             {
                 options.AddArguments("headless"); // Comment to view browser
                 options.AddArguments("window-size=1200x1000"); // Comment to view browser
             }
             options.AddArgument("shm-size=2g");
-            if (Server.PayTester.InContainer)
-            {
-                options.AddArgument("no-sandbox");
-            }
             Driver = new ChromeDriver(Server.PayTester.InContainer ? "/usr/bin" : Directory.GetCurrentDirectory(), options);
             if (isDebug)
             {


If fields are null, create an empty list - no longer throw exception

--- BankFileParsers/Helpers/ListToCsv.cs
+++ BankFileParsers/Helpers/ListToCsv.cs
@@ -22,7 +22,7 @@

         public static string ExportToCsv<T>(this List<T> list, List<string> dictionaryKeys, List<string> fields)
         {
-            if (fields == null) throw new NotImplementedException("fields cannot be null, worse case, pass in an empty list");
+            if (fields == null) fields = new List<string>();
             var ret = "";
             var dict = new Dictionary<string, PropertyInfo>();
             var type = typeof (T);


Remove IQueryable interface and implementation from LuceneStoreDecorator  #103

--- Biggy.Lucene/LuceneStoreDecorator.cs
+++ Biggy.Lucene/LuceneStoreDecorator.cs
@@ -16,16 +16,16 @@
     ///     Decorator class that adds lucene full text functionality to any store
     /// </summary>
     /// <typeparam name="T"></typeparam>
-    public class LuceneStoreDecorator<T> : IQueryableBiggyStore<T>, IDisposable where T : new()
+    public class LuceneStoreDecorator<T> : IBiggyStore<T>, IDisposable where T : new()
     {
         private readonly IBiggyStore<T> _biggyStore;
         private readonly LuceneIndexer<T> _luceneIndexer;
-        private readonly IQueryableBiggyStore<T> _queryableStore;
+        //private readonly IQueryableBiggyStore<T> _queryableStore;

         public LuceneStoreDecorator(IBiggyStore<T> biggyStore, bool useRamDirectory = false)
         {
             _biggyStore = biggyStore;
-            _queryableStore = _biggyStore as IQueryableBiggyStore<T>;
+            //_queryableStore = _biggyStore as IQueryableBiggyStore<T>;
             _luceneIndexer = new LuceneIndexer<T>(useRamDirectory);
         }

@@ -74,10 +74,10 @@
             _luceneIndexer.Dispose();
         }

-        public IQueryable<T> AsQueryable()
-        {
-            return _queryableStore.AsQueryable();
-        }
+        //public IQueryable<T> AsQueryable()
+        //{
+        //    return _queryableStore.AsQueryable();
+        //}

         public virtual T Update(T item)
         {