static bool TryInvoke(string methodName, object instance, IEnumerable <MethodInfo> methodInfos, Type [] genericTypes, object [] args, out Expose result) { bool isGeneric = genericTypes != null && 0 < genericTypes.Length; foreach (MethodInfo methodInfo in methodInfos) { MethodInfo mi = methodInfo; if (mi.Name != methodName || isGeneric && !mi.IsGenericMethod) { continue; } try { if (isGeneric) { mi = mi.GetGenericMethodDefinition().MakeGenericMethod(genericTypes); } if (IsInvokable(mi, args)) { result = Expose.FromObject(mi.Invoke(instance, args)); return(true); } } catch { } } result = null; return(false); }
void UpdatePackageInfoVersions(Expose exPackage, IEnumerable <string> versions) { Expose vers = Expose.FromObject(versions .Where(x => Settings.showAllVersions || regVersionValid.IsMatch(x) || x.Contains("upm")) .Select(x => regVersionValid.IsMatch(x) ? x : "0.0.0-" + x) .Distinct() .OrderBy(x => x) .ToArray()); var exInfo = exPackage["VersionToDisplay"]["Info"]; var exVersions = exInfo["m_Versions"]; exVersions["m_All"] = vers; exVersions["m_Compatible"] = vers; try { Expose exPackageInfoList = Expose.FromType(tUpmBaseOperation).Call("FromUpmPackageInfo", exInfo, true); // Convert to PackageInfos foreach (Expose x in exPackageInfoList) { x["Origin"] = Expose.FromObject(99); #if UNITY_2019_2_OR_NEWER x["IsDiscoverable"] = Expose.FromObject(true); #endif } exPackage["source"] = exPackageInfoList; } catch (Exception e) { Debug.LogException(e); } }
static Expose Addition(Expose left, object right) { try { if (IsNumber(left) && IsNumber(right)) { var d = ToDecimal(left) + ToDecimal(right); return(Expose.FromObject(ToDecimal(left) + ToDecimal(right))); } return(Expose.FromType(left.Type).Call("op_Addition", left.Value, right)); } catch { } object lv = ReferenceEquals(left, null) ? null : left.Value; if (lv is string || right is string) { string ls = ReferenceEquals(lv, null) ? "" : lv.ToString(); string rs = ReferenceEquals(right, null) ? "" : right.ToString(); return(Expose.FromObject(ls + rs)); } try { return(Expose.FromObject(ToDecimal(left) + ToDecimal(right))); } catch { } return(null); }
public Expose Get(string memberName) { var pi = Type.GetProperty(memberName, Flag | BindingFlags.GetProperty); if (pi != null) { return(Expose.FromObject(pi.GetValue(Value))); } var fi = Type.GetField(memberName, Flag | BindingFlags.GetField); if (fi != null) { return(Expose.FromObject(fi.GetValue(Value))); } // Get with indexer try { return(Get(new [] { memberName })); } catch { throw new MissingMemberException(Type.Name, memberName); } }
static Expose GetExposedPackageWindow() { if (!_packageWindow) { _packageWindow = Resources.FindObjectsOfTypeAll(tPackageWindow).FirstOrDefault() as EditorWindow; } return(Expose.FromObject(_packageWindow)); }
public IEnumerator GetEnumerator() { if (Value is IEnumerable) { foreach (object o in Value as IEnumerable) { yield return(Expose.FromObject(o)); } } yield break; }
public Expose Get(object [] index) { var pi = Type.GetProperty(Type.GetCustomAttribute <DefaultMemberAttribute> ().MemberName, index.Select(x => x.GetType()).ToArray()); if (pi != null) { return(Expose.FromObject(pi.GetValue(Value, index))); } throw new MissingMemberException(Type.Name, "Indexer"); }
static bool TryInvoke(string methodName, object instance, IEnumerable <MethodInfo> methodInfos, object [] args, out Expose result) { var methodInfo = methodInfos.FirstOrDefault(x => x.Name == methodName && IsInvokable(x, args)); if (methodInfo != null) { result = Expose.FromObject(methodInfo.Invoke(instance, args)); return(true); } result = null; return(false); }
public Expose Call(string methodName, params object [] args) { args = args.Select(x => x is Expose ? ((Expose)x).Value : x).ToArray(); // Find method if (TryInvoke(methodName, Value, Type.GetMethods(Flag | BindingFlags.InvokeMethod), args, out Expose result)) { return(result); } // Find event var fi = Type.GetField(methodName, Flag | BindingFlags.SetField); if (fi != null) { var del = fi.GetValue(Value) as MulticastDelegate; if (del != null && IsInvokable(del.Method, args)) { object lastResult = null; foreach (var h in del.GetInvocationList()) { lastResult = h.Method.Invoke(h.Target, args); } return(Expose.FromObject(lastResult)); } } // Find operator method args = new [] { Value }.Concat(args).ToArray(); if (TryInvoke(methodName, null, Type.GetMethods(Flag | BindingFlags.InvokeMethod), args, out result)) { return(result); } // Find extension method if (Value != null && TryInvoke(methodName, null, s_extensionMethods.Where(x => Is(Type, x.Key)).SelectMany(x => x.Value), null, args, out result)) { if ( TryInvoke(methodName, null, s_extensionMethods.Where(x => Is(Type, x.Key)).SelectMany(x => x.Value), null, args, out result) || TryInvoke(methodName, null, s_extensionMethods.Where(x => Is(Type, x.Key)).SelectMany(x => x.Value), new [] { Type }, args, out result) ) { return(result); } } throw new MissingMemberException(Type.Name, methodName); }
void PlaySpinner(bool playing) { var statusBar = root.Q("packageStatusBar"); if (statusBar == null) { return; } var spinner = statusBar.Q("packageSpinner"); if (spinner == null) { return; } Expose.FromObject(spinner).Call(playing ? "Start" : "Stop"); }
static Expose Subtraction(Expose left, object right) { try { return(Expose.FromType(left.Type).Call("op_Subtraction", left.Value, right)); } catch { } try { return(Expose.FromObject(ToDecimal(left) - ToDecimal(right))); } catch { } return(null); }
/// <summary> /// Initializes UI. /// </summary> void InitializeUI() { if (phase != Phase.Initialize) { return; } if (!DocumentActions.IsResourceReady() || !InstallPackageWindow.IsResourceReady() || !GitButton.IsResourceReady()) { return; } root = UIUtils.GetRoot(this).Q("container"); // Document actions. documentActions = new DocumentActions(root.Q("detailActions")); // Install package window. var installPackageWindow = new InstallPackageWindow(); root.Add(installPackageWindow); // Add button to open InstallPackageWindow var addButton = root.Q("toolbarAddButton") ?? root.Q("moreAddOptionsButton"); var gitButton = new GitButton(installPackageWindow.Open); addButton.parent.Insert(addButton.parent.IndexOf(addButton) + 1, gitButton); #if UNITY_2018 var space = new VisualElement(); space.style.flexGrow = 1; addButton.parent.Insert(addButton.parent.IndexOf(addButton), space); #endif // Update git packages on load packages var packageList = Expose.FromObject(root.Q("packageList")); Action onLoad = packageList["OnLoaded"].As <Action>(); onLoad += OnPackageListLoaded; packageList["OnLoaded"] = Expose.FromObject(onLoad); #if UNITY_2019_1_OR_NEWER var updateButton = root.Q("packageToolBar").Q <Button>("update"); #else OnPackageListLoaded(); var updateButton = root.Q("updateCombo").Q <Button>("update"); #endif var detailView = Expose.FromObject(root.Q("detailsGroup")); // Override click action. Action actionUpdate = () => { #if UNITY_2019_1_OR_NEWER var exTargetPackage = detailView["TargetVersion"]; #else var exTargetPackage = detailView["SelectedPackage"]; #endif if (exTargetPackage["Origin"].As <int>() == 99) { var packageId = exTargetPackage["Info"]["m_PackageId"].As <string>(); string packageIdPrefix = regInstallVersion.Replace(packageId, ""); string refName = exTargetPackage["Version"].ToString().Replace("0.0.0-", ""); packageId = packageIdPrefix + "#" + refName; var m = Regex.Match(packageId, "([^@]+)@(.*)"); if (m.Success) { var l = string.Format("\"{0}\": \"{1}\",", m.Groups [1].Value, m.Groups [2].Value); Debug.Log(l); var manifest = MiniJSON.Json.Deserialize(System.IO.File.ReadAllText("Packages/manifest.json")) as Dictionary <string, object>; var dependencies = manifest ["dependencies"] as Dictionary <string, object>; dependencies.Remove(m.Groups [1].Value); dependencies.Add(m.Groups [1].Value, m.Groups [2].Value); System.IO.File.WriteAllText("Packages/manifest.json", MiniJSON.Json.Serialize(manifest)); UnityEditor.AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); } } else { detailView.Call("UpdateClick"); } }; Expose.FromObject(updateButton.clickable)["clicked"] = Expose.FromObject(actionUpdate); Settings.onChangedShowAllVersions = ReloadPackageCollection; phase = Phase.Idle; }
public static Expose operator -(object left, Expose right) { return(Subtraction(Expose.FromObject(left), right.Value)); }
public static Expose operator +(object left, Expose right) { return(Addition(Expose.FromObject(left), right.Value)); }
static Expose DoOperation(Expose left, object right, Operation op) { try { return(Expose.FromType(left.Type).Call(op.ToString(), left.Value, right)); } catch { } try { switch (op) { case Operation.op_Addition: return(Expose.FromObject(ToDecimal(left) + ToDecimal(right))); case Operation.op_Subtraction: return(Expose.FromObject(ToDecimal(left) - ToDecimal(right))); case Operation.op_Equality: return(Expose.FromObject(ToDecimal(left) == ToDecimal(right))); case Operation.op_Inequality: return(Expose.FromObject(ToDecimal(left) != ToDecimal(right))); case Operation.op_GreaterThan: return(Expose.FromObject(ToDecimal(left) > ToDecimal(right))); case Operation.op_LessThan: return(Expose.FromObject(ToDecimal(left) < ToDecimal(right))); case Operation.op_GreaterThanOrEqual: return(Expose.FromObject(ToDecimal(left) <= ToDecimal(right))); case Operation.op_LessThanOrEqual: return(Expose.FromObject(ToDecimal(left) >= ToDecimal(right))); case Operation.op_BitwiseAnd: return(Expose.FromObject(ToInt(left) & ToInt(right))); case Operation.op_BitwiseOr: return(Expose.FromObject(ToInt(left) | ToInt(right))); case Operation.op_Division: return(Expose.FromObject(ToDecimal(left) / ToDecimal(right))); case Operation.op_Modulus: return(Expose.FromObject(ToDecimal(left) % ToDecimal(right))); case Operation.op_Multiply: return(Expose.FromObject(ToDecimal(left) * ToDecimal(right))); case Operation.op_LeftShift: return(Expose.FromObject(ToInt(left) << ToInt(right))); case Operation.op_RightShift: return(Expose.FromObject(ToInt(left) >> ToInt(right))); case Operation.op_ExclusiveOr: return(Expose.FromObject(ToInt(left) ^ ToInt(right))); case Operation.op_UnaryNegation: break; case Operation.op_UnaryPlus: break; case Operation.op_LogicalNot: break; case Operation.op_OnesComplement: break; case Operation.op_False: break; case Operation.op_True: break; case Operation.op_Increment: break; case Operation.op_Decrement: break; } } catch { } return(null); }
/// <summary> /// Initializes UI. /// </summary> void InitializeUI() { if (phase != Phase.Initialize) { return; } if (!DocumentActions.IsResourceReady() || !InstallPackageWindow.IsResourceReady() || !GitButton.IsResourceReady()) { return; } root = UIUtils.GetRoot(this).Q("container"); // Document actions. documentActions = new DocumentActions(root.Q("detailActions")); // Install package window. var installPackageWindow = new InstallPackageWindow(); root.Add(installPackageWindow); // Add button to open InstallPackageWindow var addButton = root.Q("toolbarAddButton") ?? root.Q("moreAddOptionsButton"); var gitButton = new GitButton(installPackageWindow.Open); addButton.parent.Insert(addButton.parent.IndexOf(addButton) + 1, gitButton); #if UNITY_2018 var space = new VisualElement(); space.style.flexGrow = 1; addButton.parent.Insert(addButton.parent.IndexOf(addButton), space); #endif // Update git packages on load packages var packageList = Expose.FromObject(root.Q("packageList")); Action onLoad = packageList["OnLoaded"].As <Action>(); onLoad += OnPackageListLoaded; packageList["OnLoaded"] = Expose.FromObject(onLoad); #if UNITY_2019_1_OR_NEWER var updateButton = root.Q("packageToolBar").Q <Button>("update"); #else OnPackageListLoaded(); var updateButton = root.Q("updateCombo").Q <Button>("update"); #endif var detailView = Expose.FromObject(root.Q("detailsGroup")); // Override click action. Action actionUpdate = () => { #if UNITY_2019_1_OR_NEWER var exTargetPackage = detailView["TargetVersion"]; #else var exTargetPackage = detailView["SelectedPackage"]; #endif if (exTargetPackage["Origin"].As <int>() == 99) { var packageId = exTargetPackage["Info"]["m_PackageId"].As <string>(); string packageIdPrefix = regInstallVersion.Replace(packageId, ""); string refName = exTargetPackage["Version"].ToString().Replace("0.0.0-", ""); exTargetPackage["_PackageId"] = Expose.FromObject(packageIdPrefix + "#" + refName); } detailView.Call("UpdateClick"); }; Expose.FromObject(updateButton.clickable)["clicked"] = Expose.FromObject(actionUpdate); phase = Phase.Idle; }