private string GetMemberUdonName(TreeViewItem item, ExposureLookupType lookupType = ExposureLookupType.All) { TypeItemMetadata itemData = itemMetadatas[item]; MemberInfo member = itemData.member; if (member != null) { throw new NotImplementedException(); // if (lookupType == ExposureLookupType.Exposed && !itemData.exposed) // return ""; // else if (lookupType == ExposureLookupType.Unexposed && itemData.exposed) // return ""; // // if (member.MemberType == MemberTypes.Constructor || member.MemberType == MemberTypes.Method) // { // return resolver.GetUdonMethodName((MethodBase)member, false); // } // else if (member.MemberType == MemberTypes.Property) // { // string udonNames = ""; // // if (((PropertyInfo)member).GetGetMethod() != null) // udonNames = resolver.GetUdonMethodName(((PropertyInfo)member).GetGetMethod(), false); // if (((PropertyInfo)member).GetSetMethod() != null) // udonNames += "\n" + resolver.GetUdonMethodName(((PropertyInfo)member).GetSetMethod(), false); // // return udonNames; // } // else if (member.MemberType == MemberTypes.Field) // { // return resolver.GetUdonFieldAccessorName((FieldInfo)member, FieldAccessorType.Get, false) + "\n" + resolver.GetUdonFieldAccessorName((FieldInfo)member, FieldAccessorType.Set, false); // } } else { string childStringData = ""; if (item.children != null) { foreach (TreeViewItem childItem in item.children) { string childString = GetMemberUdonName(childItem, lookupType); if (childString.Length > 0) { childStringData += childString + '\n'; } } } return(childStringData); } #pragma warning disable 162 return(""); #pragma warning restore 162 }
protected override void RowGUI(RowGUIArgs args) { Rect labelRect = args.rowRect; labelRect.x += GetContentIndent(args.item); TypeItemMetadata itemMetadata = itemMetadatas[args.item]; if (itemMetadata.isNamespace) { EditorGUI.LabelField(labelRect, itemMetadata.rowName); } else { rowLabelStyle.normal.textColor = itemMetadata.rowColor; if (itemMetadata.isType) { EditorGUI.LabelField(labelRect, itemMetadata.rowName, rowLabelStyle); } else { EditorGUI.LabelField(labelRect, (searchString != null && searchString.Length > 0) ? itemMetadata.qualifiedRowName : itemMetadata.rowName, rowLabelStyle); } } Event current = Event.current; if (current.type == EventType.ContextClick && args.rowRect.Contains(current.mousePosition)) { current.Use(); //SelectionClick(args.item, false); SetSelection(new List <int>() { args.item.id }); GenericMenu menu = new GenericMenu(); if (itemMetadata.member != null) { menu.AddItem(new GUIContent("Copy Udon name"), false, OnClickCopyUdonName, args.item); } if (itemMetadata.isType || itemMetadata.isNamespace) { menu.AddItem(new GUIContent("Copy Exposed members"), false, OnClickCopyTypeItems, (args.item, ExposureLookupType.Exposed)); menu.AddItem(new GUIContent("Copy Unexposed members"), false, OnClickCopyTypeItems, (args.item, ExposureLookupType.Unexposed)); menu.AddItem(new GUIContent("Copy All members"), false, OnClickCopyTypeItems, (args.item, ExposureLookupType.All)); } if (menu.GetItemCount() > 0) { menu.ShowAsContext(); } Repaint(); } }
private TreeViewItem GetNamespaceParent(string path, TreeViewItem root, ref int currentID) { string[] splitNamespace; if (path == null || path.Length == 0) { splitNamespace = new string[] { "" } } ; else { splitNamespace = path.Split('.', '+'); } string currentPath = ""; TreeViewItem parentItem = root; for (int i = 0; i < splitNamespace.Length; ++i) { if (i != 0) { currentPath += '.'; } currentPath += splitNamespace[i]; TreeViewItem newParent; if (!hiearchyItems.TryGetValue(currentPath, out newParent)) { newParent = new TreeViewItem(currentID++, i, splitNamespace[i] + " <namespace>"); hiearchyItems.Add(currentPath, newParent); parentItem.AddChild(newParent); TypeItemMetadata namespaceMetadata = new TypeItemMetadata(); namespaceMetadata.isNamespace = true; itemMetadatas.Add(newParent, namespaceMetadata); } parentItem = newParent; } return(parentItem); }
private (int, int) BuildDrawInfo(TreeViewItem item) { (int, int)countTotal = (0, 0); TypeItemMetadata metadata = itemMetadatas[item]; if (!metadata.isNamespace && !metadata.isType && item.depth >= 0) { countTotal = (metadata.exposed ? 1 : 0, 1); } else { if (item.children != null) { foreach (TreeViewItem child in item.children) { (int, int)childCounts = BuildDrawInfo(child); countTotal.Item1 += childCounts.Item1; countTotal.Item2 += childCounts.Item2; } } } metadata.childExposure = countTotal.Item1 / (float)countTotal.Item2; if (metadata.isNamespace) { metadata.rowName = item.displayName; metadata.qualifiedRowName = item.displayName; } else { metadata.rowColor = Color.red; if (metadata.exposed) { metadata.rowColor = Color.green; if (!EditorGUIUtility.isProSkin) { metadata.rowColor = new Color(0.2f, 0.6f, 0.2f); } } if (metadata.isType) { Color labelColor = Color.Lerp(Color.red, Color.green, metadata.childExposure); float h, s, v; Color.RGBToHSV(labelColor, out h, out s, out v); s = 0.9f; v = 0.95f; if (!EditorGUIUtility.isProSkin) { v = Mathf.Lerp(0.62f, 0.55f, metadata.childExposure); } metadata.rowColor = Color.HSVToRGB(h, s, v); metadata.rowName = metadata.qualifiedRowName = $"({metadata.childExposure * 100f:0.##}%) {item.displayName}"; } else { metadata.rowName = metadata.qualifiedRowName = item.displayName; if (metadata.member != null && metadata.member.DeclaringType != null) { metadata.qualifiedRowName = metadata.member.DeclaringType.Name + "." + metadata.rowName; } } } return(countTotal); }
private void AddChildNode(TreeViewItem parentItem, MemberInfo memberInfo, ref int currentID) { var obsoleteAttribute = memberInfo.GetCustomAttribute <System.ObsoleteAttribute>(); if (obsoleteAttribute != null) { return; } if (memberInfo.MemberType == MemberTypes.Property && !((PropertyInfo)memberInfo).GetGetMethod().IsPublic) { return; } if (memberInfo.DeclaringType.IsEnum) { return; } if (ShouldHideMemberTopLevel(memberInfo)) { return; } string staticStr = ""; { if ((memberInfo is FieldInfo fieldInfo && fieldInfo.IsStatic) || (memberInfo is PropertyInfo propertyInfo && (propertyInfo.GetGetMethod()?.IsStatic ?? false)) || (memberInfo is MethodInfo methodInfo && methodInfo.IsStatic)) { staticStr = "<Static>"; } } TreeViewItem memberItem = new TreeViewItem(currentID++, parentItem.depth + 1, $"<{memberInfo.MemberType}>{staticStr} {memberInfo.ToString()}"); parentItem.AddChild(memberItem); TypeItemMetadata itemMetadata = new TypeItemMetadata(); itemMetadata.member = memberInfo; switch (memberInfo.MemberType) { case MemberTypes.Constructor: case MemberTypes.Method: itemMetadata.exposed = resolver.IsValidUdonMethod(resolver.GetUdonMethodName((MethodBase)memberInfo, false)); break; case MemberTypes.Field: string getAccessor = resolver.GetUdonFieldAccessorName((FieldInfo)memberInfo, FieldAccessorType.Get, false); string setAccessor = resolver.GetUdonFieldAccessorName((FieldInfo)memberInfo, FieldAccessorType.Set, false); exposedUdonExterns.Remove(getAccessor); exposedUdonExterns.Remove(setAccessor); itemMetadata.exposed = resolver.IsValidUdonMethod(getAccessor); break; case MemberTypes.Property: string getProperty = resolver.GetUdonMethodName(((PropertyInfo)memberInfo).GetGetMethod(), false); exposedUdonExterns.Remove(getProperty); if (((PropertyInfo)memberInfo).GetSetMethod() != null) { string setProperty = resolver.GetUdonMethodName(((PropertyInfo)memberInfo).GetSetMethod(), false); exposedUdonExterns.Remove(setProperty); } itemMetadata.exposed = resolver.IsValidUdonMethod(getProperty); break; } itemMetadatas.Add(memberItem, itemMetadata); exposedUdonExterns.Remove(GetMemberUdonName(memberItem)); }
private string GetMemberUdonName(TreeViewItem item, ExposureLookupType lookupType = ExposureLookupType.All) { TypeItemMetadata itemData = itemMetadatas[item]; MemberInfo member = itemData.member; if (member != null) { if (lookupType == ExposureLookupType.Exposed && !itemData.exposed) { return(""); } else if (lookupType == ExposureLookupType.Unexposed && itemData.exposed) { return(""); } if (member.MemberType == MemberTypes.Constructor || member.MemberType == MemberTypes.Method) { return(resolver.GetUdonMethodName((MethodBase)member, false)); } else if (member.MemberType == MemberTypes.Property) { string udonNames = ""; if (((PropertyInfo)member).GetGetMethod() != null) { udonNames = resolver.GetUdonMethodName(((PropertyInfo)member).GetGetMethod(), false); } if (((PropertyInfo)member).GetSetMethod() != null) { udonNames += "\n" + resolver.GetUdonMethodName(((PropertyInfo)member).GetSetMethod(), false); } return(udonNames); } else if (member.MemberType == MemberTypes.Field) { return(resolver.GetUdonFieldAccessorName((FieldInfo)member, FieldAccessorType.Get, false) + "\n" + resolver.GetUdonFieldAccessorName((FieldInfo)member, FieldAccessorType.Set, false)); } } else { string childStringData = ""; if (item.children != null) { foreach (TreeViewItem childItem in item.children) { string childString = GetMemberUdonName(childItem, lookupType); if (childString.Length > 0) { childStringData += childString + '\n'; } } } return(childStringData); } return(""); }
private void AddChildNode(TreeViewItem parentItem, MemberInfo memberInfo, ref int currentID) { var obsoleteAttribute = memberInfo.GetCustomAttribute <System.ObsoleteAttribute>(); if (obsoleteAttribute != null) { return; } if (memberInfo.MemberType == MemberTypes.Property && (!((PropertyInfo)memberInfo).GetGetMethod()?.IsPublic ?? false)) { return; } if (memberInfo.DeclaringType.IsEnum) { return; } string staticStr = ""; { if ((memberInfo is FieldInfo fieldInfo && fieldInfo.IsStatic) || (memberInfo is PropertyInfo propertyInfo && (propertyInfo.GetGetMethod()?.IsStatic ?? false)) || (memberInfo is MethodInfo methodInfo && methodInfo.IsStatic)) { staticStr = "<Static>"; } } TreeViewItem memberItem = new TreeViewItem(currentID++, parentItem.depth + 1, $"<{memberInfo.MemberType}>{staticStr} {memberInfo}"); TypeItemMetadata itemMetadata = new TypeItemMetadata(); itemMetadata.member = memberInfo; switch (memberInfo.MemberType) { case MemberTypes.Constructor: case MemberTypes.Method: itemMetadata.exposed = CompilerUdonInterface.IsExposedToUdon(CompilerUdonInterface.GetUdonMethodName((MethodBase)memberInfo)); break; case MemberTypes.Field: string getAccessor = CompilerUdonInterface.GetUdonAccessorName((FieldInfo)memberInfo, CompilerUdonInterface.FieldAccessorType.Get); // string setAccessor = resolver.GetUdonFieldAccessorName((FieldInfo)memberInfo, CompilerUdonInterface.FieldAccessorType.Set, false); itemMetadata.exposed = CompilerUdonInterface.IsExposedToUdon(getAccessor); break; case MemberTypes.Property: MethodInfo getMethod = ((PropertyInfo)memberInfo).GetGetMethod(); if (getMethod == null) { return; } string getProperty = CompilerUdonInterface.GetUdonMethodName(getMethod); // if (((PropertyInfo)memberInfo).GetSetMethod() != null) // { // string setProperty = resolver.GetUdonMethodName(((PropertyInfo)memberInfo).GetSetMethod(), false); // } itemMetadata.exposed = CompilerUdonInterface.IsExposedToUdon(getProperty); break; } parentItem.AddChild(memberItem); itemMetadatas.Add(memberItem, itemMetadata); }