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
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }
Example #6
0
        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);
        }