Commit 10e392a0 authored by Vinicius Jarina's avatar Vinicius Jarina
Browse files

* Fixed GetTableDict

* better performance with GetExtensionMethod.
parent 8e868c0c
...@@ -90,7 +90,7 @@ namespace NLua.Extensions ...@@ -90,7 +90,7 @@ namespace NLua.Extensions
return t.GetMethods(flags).Where(m => m.Name == name).ToArray(); return t.GetMethods(flags).Where(m => m.Name == name).ToArray();
} }
public static MethodInfo[] GetExtensionMethods(this Type type, IEnumerable<Assembly> assemblies = null) public static MethodInfo[] GetExtensionMethods(this Type type, string name, IEnumerable<Assembly> assemblies = null)
{ {
var types = new List<Type>(); var types = new List<Type>();
...@@ -102,14 +102,12 @@ namespace NLua.Extensions ...@@ -102,14 +102,12 @@ namespace NLua.Extensions
{ {
if (item == type.Assembly) if (item == type.Assembly)
continue; continue;
types.AddRange(item.GetTypes().Where(t => t.IsPublic)); types.AddRange(item.GetTypes().Where(t => t.IsPublic && t.IsClass && t.IsSealed && t.IsAbstract && !t.IsNested));
} }
} }
var query = types var query = types
.Where(extensionType => .SelectMany(extensionType => extensionType.GetMethods(name, BindingFlags.Static | BindingFlags.Public),
extensionType.IsSealed && !extensionType.IsGenericType && !extensionType.IsNested)
.SelectMany(extensionType => extensionType.GetMethods(BindingFlags.Static | BindingFlags.Public),
(extensionType, method) => new {extensionType, method}) (extensionType, method) => new {extensionType, method})
.Where(t => t.method.IsDefined(typeof(ExtensionAttribute), false)) .Where(t => t.method.IsDefined(typeof(ExtensionAttribute), false))
.Where(t => .Where(t =>
...@@ -130,7 +128,7 @@ namespace NLua.Extensions ...@@ -130,7 +128,7 @@ namespace NLua.Extensions
/// <returns></returns> /// <returns></returns>
public static MethodInfo GetExtensionMethod(this Type t, string name, IEnumerable<Assembly> assemblies = null) public static MethodInfo GetExtensionMethod(this Type t, string name, IEnumerable<Assembly> assemblies = null)
{ {
var mi = t.GetExtensionMethods(assemblies).Where(method => method.Name == name).ToArray(); var mi = t.GetExtensionMethods(name, assemblies).ToArray();
if (mi.Length == 0) if (mi.Length == 0)
return null; return null;
return mi[0]; return mi[0];
......
...@@ -901,6 +901,9 @@ namespace NLua ...@@ -901,6 +901,9 @@ namespace NLua
public Dictionary<object, object> GetTableDict(LuaTable table) public Dictionary<object, object> GetTableDict(LuaTable table)
{ {
if (table == null)
throw new ArgumentNullException(nameof(table));
var dict = new Dictionary<object, object>(); var dict = new Dictionary<object, object>();
int oldTop = _luaState.GetTop(); int oldTop = _luaState.GetTop();
_translator.Push(_luaState, table); _translator.Push(_luaState, table);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment