public static PropertyDescriptor Create(global::Jint.Engine engine, DomConverter converter, string propertyName, MethodInfo[] methods, JsValue owner) { var func = new ClrMethodInfoFunc(converter, engine, methods, owner); //todo: check if this necessary func.FastAddProperty("toString", new JsValue(new ClrFunctionInstance(engine, (value, values) => new JsValue("function " + propertyName + "() { [native code] }"))), false, false, false); return(new PropertyDescriptor(func, false, true, false)); }
public void DefineProperties(ObjectInstance jsObject, Type type) { var bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly; //register properties foreach (var property in type.GetProperties(bindingFlags) .Where(p => p.GetCustomAttribute <JsHiddenAttribute>() == null)) { var name = property.GetName(); var jsProperty = new ClrProperty(jsObject.Engine, this, property); jsObject.DefineOwnProperty(name, jsProperty, false); } //register methods foreach (var methods in type .GetMethods(bindingFlags) .Where(p => p.GetCustomAttribute <JsHiddenAttribute>() == null) .GroupBy(p => p.GetName())) { var methodsArray = methods.ToArray(); var name = methods.Key; if (name == "toString") { continue; } var jsProperty = ClrMethodInfoFunc.Create(jsObject.Engine, this, name, methodsArray, jsObject); jsObject.DefineOwnProperty(name, jsProperty, false); } //register events foreach (var evt in type.GetEvents(bindingFlags) .Where(p => p.GetCustomAttribute <JsHiddenAttribute>() == null)) { var name = evt.GetName().ToLowerInvariant(); var jsProperty = new ClrEvent(jsObject.Engine, this, evt); jsObject.DefineOwnProperty(name, jsProperty, false); } DefineStatic(jsObject, type); }