diff --git a/ClosedXML/Excel/CalcEngine/CalcEngine.cs b/ClosedXML/Excel/CalcEngine/CalcEngine.cs index 9ba60b2..a392dc1 100644 --- a/ClosedXML/Excel/CalcEngine/CalcEngine.cs +++ b/ClosedXML/Excel/CalcEngine/CalcEngine.cs @@ -11,7 +11,7 @@ namespace ClosedXML.Excel.CalcEngine { /// - /// CalcEngine parses strings and returns Expression objects that can + /// CalcEngine parses strings and returns Expression objects that can /// be evaluated. /// /// @@ -171,7 +171,7 @@ /// /// This method is useful when the engine needs to create objects dynamically. /// For example, a spreadsheet calc engine would use this method to dynamically create cell - /// range objects based on identifiers that cannot be enumerated at design time + /// range objects based on identifiers that cannot be enumerated at design time /// (such as "AB12", "A1:AB12", etc.) /// public virtual object GetExternalObject(string identifier) { @@ -375,15 +375,6 @@ break; } - // look for bindings - if (DataContext != null) { - var list = new List(); - for (var t = _token; t != null; t = GetMember()) { - list.Add(new BindingInfo((string)t.Value, GetParameters())); - } - x = new BindingExpression(this, list, _ci); - break; - } Throw("Unexpected identifier"); break; @@ -423,7 +414,7 @@ #region ** parser void GetToken() { - // eat white space + // eat white space while (_ptr < _len && _expr[_ptr] <= ' ') { _ptr++; } @@ -613,7 +604,7 @@ } List GetParameters() // e.g. myfun(a, b, c+2) { - // check whether next token is a (, + // check whether next token is a (, // restore state and bail if it's not var pos = _ptr; var tk = _token; @@ -650,7 +641,7 @@ return parms; } Token GetMember() { - // check whether next token is a MEMBER token ('.'), + // check whether next token is a MEMBER token ('.'), // restore state and bail if it's not var pos = _ptr; var tk = _token; diff --git a/ClosedXML/Excel/CalcEngine/Expression.cs b/ClosedXML/Excel/CalcEngine/Expression.cs index 1b97924..286bedd 100644 --- a/ClosedXML/Excel/CalcEngine/Expression.cs +++ b/ClosedXML/Excel/CalcEngine/Expression.cs @@ -1,12 +1,8 @@ using System; -using System.Text; using System.Threading; using System.Collections; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; -using System.Reflection; -using ClosedXML.Excel.CalcEngine; namespace ClosedXML.Excel.CalcEngine { @@ -373,106 +369,6 @@ } } /// - /// Expression based on an object's properties. - /// - class BindingExpression : Expression - { - CalcEngine _ce; - CultureInfo _ci; - List _bindingPath; - - // ** ctor - internal BindingExpression(CalcEngine engine, List bindingPath, CultureInfo ci) - { - _ce = engine; - _bindingPath = bindingPath; - _ci = ci; - } - - // ** object model - override public object Evaluate() - { - return GetValue(_ce.DataContext); - } - - // ** implementation - object GetValue(object obj) - { - const BindingFlags bf = - BindingFlags.IgnoreCase | - BindingFlags.Instance | - BindingFlags.Public | - BindingFlags.Static; - - if (obj != null) - { - foreach (var bi in _bindingPath) - { - // get property - if (bi.PropertyInfo == null) - { - bi.PropertyInfo = obj.GetType().GetProperty(bi.Name, bf); - } - - // get object - try - { - obj = bi.PropertyInfo.GetValue(obj, null); - } - catch - { - // REVIEW: is this needed? - System.Diagnostics.Debug.Assert(false, "shouldn't happen!"); - bi.PropertyInfo = obj.GetType().GetProperty(bi.Name, bf); - bi.PropertyInfoItem = null; - obj = bi.PropertyInfo.GetValue(obj, null); - } - - // handle indexers (lists and dictionaries) - if (bi.Parms != null && bi.Parms.Count > 0) - { - // get indexer property (always called "Item") - if (bi.PropertyInfoItem == null) - { - bi.PropertyInfoItem = obj.GetType().GetProperty("Item", bf); - } - - // get indexer parameters - var pip = bi.PropertyInfoItem.GetIndexParameters(); - var list = new List(); - for (int i = 0; i < pip.Length; i++) - { - var pv = bi.Parms[i].Evaluate(); - pv = Convert.ChangeType(pv, pip[i].ParameterType, _ci); - list.Add(pv); - } - - // get value - obj = bi.PropertyInfoItem.GetValue(obj, list.ToArray()); - } - } - } - - // all done - return obj; - } - } - /// - /// Helper used for building BindingExpression objects. - /// - class BindingInfo - { - public BindingInfo(string member, List parms) - { - Name = member; - Parms = parms; - } - public string Name { get; set; } - public PropertyInfo PropertyInfo { get; set; } - public PropertyInfo PropertyInfoItem { get; set; } - public List Parms { get; set; } - } - /// /// Expression that represents an external object. /// class XObjectExpression :