Example #1
0
        static IEnumerable <ValidMethodMap> CalculateMethodMap(Object target, Type[] t, bool allowSubclasses)
        {
            var validMethods = new List <ValidMethodMap>();

            if (target == null || t == null)
            {
                return(validMethods);
            }

            Type componentType    = target.GetType();
            var  componentMethods = componentType.GetMethods().Where(x => !x.IsSpecialName).ToList();

            var wantedProperties = componentType.GetProperties().AsEnumerable();

            wantedProperties = wantedProperties.Where(x => x.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length == 0 && x.GetSetMethod() != null);
            componentMethods.AddRange(wantedProperties.Select(x => x.GetSetMethod()));

            foreach (var componentMethod in componentMethods)
            {
                var componentParamaters = componentMethod.GetParameters();
                if (componentParamaters.Length != t.Length)
                {
                    continue;
                }

                if (componentMethod.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length > 0)
                {
                    continue;
                }

                if (componentMethod.ReturnType != typeof(void))
                {
                    continue;
                }

                bool paramatersMatch = true;
                for (int i = 0; i < t.Length; i++)
                {
                    if (!componentParamaters[i].ParameterType.IsAssignableFrom(t[i]))
                    {
                        paramatersMatch = false;
                    }

                    if (allowSubclasses && t[i].IsAssignableFrom(componentParamaters[i].ParameterType))
                    {
                        paramatersMatch = true;
                    }
                }

                if (paramatersMatch)
                {
                    var vmm = new ValidMethodMap();
                    vmm.target     = target;
                    vmm.methodInfo = componentMethod;
                    validMethods.Add(vmm);
                }
            }
            return(validMethods);
        }
Example #2
0
        private static void AddFunctionsForScript(
            GenericMenu menu,
            SerializedProperty listener,
            ValidMethodMap method,
            string targetName)
        {
            PersistentListenerMode mode1            = method.mode;
            var    objectReferenceValue             = listener.FindPropertyRelative("_vmName").stringValue;
            string stringValue                      = listener.FindPropertyRelative("_methodName").stringValue;
            PersistentListenerMode mode2            = GetMode(listener.FindPropertyRelative("_mode"));
            SerializedProperty     propertyRelative = listener.FindPropertyRelative("_arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
            StringBuilder          stringBuilder    = new StringBuilder();
            int length = method.methodInfo.GetParameters().Length;

            for (int index = 0; index < length; ++index)
            {
                System.Reflection.ParameterInfo parameter = method.methodInfo.GetParameters()[index];
                stringBuilder.Append(string.Format("{0}", (object)GetTypeName(parameter.ParameterType)));
                if (index < length - 1)
                {
                    stringBuilder.Append(", ");
                }
            }
            bool flag = objectReferenceValue == method.target && stringValue == method.methodInfo.Name && mode1 == mode2;

            if (flag && mode1 == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
            {
                flag &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == propertyRelative.stringValue;
            }
            string      formattedMethodName = GetFormattedMethodName(targetName, method.fieldName, stringBuilder.ToString(), mode1 == PersistentListenerMode.EventDefined);
            GenericMenu genericMenu         = menu;
            GUIContent  content             = new GUIContent(formattedMethodName);
            int         num = flag ? 1 : 0;

            // ISSUE: reference to a compiler-generated field
            if (_menuCallBack1 == null)
            {
                // ISSUE: reference to a compiler-generated field
                _menuCallBack1 = new GenericMenu.MenuFunction2(SetEventFunction);
            }
            // ISSUE: reference to a compiler-generated field
            GenericMenu.MenuFunction2 fMgCache1 = _menuCallBack1;
            // ISSUE: variable of a boxed type
            var local = (ValueType) new UnityEventFunction(listener, method.target, method.methodInfo, mode1, method.fieldName);

            genericMenu.AddItem(content, num != 0, fMgCache1, (object)local);
        }
Example #3
0
    static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, ValidMethodMap method, string targetName)
    {
        PersistentListenerMode mode = method.mode;

        // find the current event target...
        var listenerTarget = listener.FindPropertyRelative(kInstancePath).objectReferenceValue;
        var methodName     = listener.FindPropertyRelative(kMethodNamePath).stringValue;
        var setMode        = GetMode(listener.FindPropertyRelative(kModePath));
        var typeName       = listener.FindPropertyRelative(kArgumentsPath).FindPropertyRelative(kObjectArgumentAssemblyTypeName);

        var args  = new StringBuilder();
        var count = method.methodInfo.GetParameters().Length;

        for (int index = 0; index < count; index++)
        {
            var methodArg = method.methodInfo.GetParameters()[index];
            args.Append(string.Format("{0}", GetTypeName(methodArg.ParameterType)));

            if (index < count - 1)
            {
                args.Append(", ");
            }
        }

        var isCurrentlySet = listenerTarget == method.target &&
                             methodName == method.methodInfo.Name &&
                             mode == setMode;

        if (isCurrentlySet && mode == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
        {
            isCurrentlySet &= (method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == typeName.stringValue);
        }

        string path = GetFormattedMethodName(targetName, method.methodInfo.Name, args.ToString(), mode == PersistentListenerMode.EventDefined);

        menu.AddItem(new GUIContent(path),
                     isCurrentlySet,
                     SetEventFunction,
                     new UnityEventFunction(listener, method.target, method.methodInfo, mode));
    }
        static IEnumerable <ValidMethodMap> CalculateMethodMap(Object target, Type[] t, bool allowSubclasses)
        {
            var validMethods = new List <ValidMethodMap>();

            if (target == null || t == null)
            {
                return(validMethods);
            }

            // find the methods on the behaviour that match the signature
            Type componentType    = target.GetType();
            var  componentMethods = componentType.GetMethods().Where(x => !x.IsSpecialName).ToList();

            var wantedProperties = componentType.GetProperties().AsEnumerable();

            wantedProperties = wantedProperties.Where(x => x.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length == 0 && x.GetSetMethod() != null);
            componentMethods.AddRange(wantedProperties.Select(x => x.GetSetMethod()));

            foreach (var componentMethod in componentMethods)
            {
                //Debug.Log ("Method: " + componentMethod);
                // if the argument length is not the same, no match
                var componentParamaters = componentMethod.GetParameters();
                if (componentParamaters.Length != t.Length)
                {
                    continue;
                }

                // Don't show obsolete methods.
                if (componentMethod.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length > 0)
                {
                    continue;
                }

                if (componentMethod.ReturnType != typeof(void))
                {
                    continue;
                }

                // if the argument types do not match, no match
                bool paramatersMatch = true;
                for (int i = 0; i < t.Length; i++)
                {
                    if (!componentParamaters[i].ParameterType.IsAssignableFrom(t[i]))
                    {
                        paramatersMatch = false;
                    }

                    if (allowSubclasses && t[i].IsAssignableFrom(componentParamaters[i].ParameterType))
                    {
                        paramatersMatch = true;
                    }
                }

                // valid method
                if (paramatersMatch)
                {
                    var vmm = new ValidMethodMap
                    {
                        target     = target,
                        methodInfo = componentMethod
                    };
                    validMethods.Add(vmm);
                }
            }
            return(validMethods);
        }
Example #5
0
    private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, ValidMethodMap method, string targetName)
    {
        var mode1 = method.mode;
        var objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
        var stringValue          = listener.FindPropertyRelative("m_MethodName").stringValue;
        var mode2            = GetMode(listener.FindPropertyRelative("m_Mode"));
        var propertyRelative = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
        var stringBuilder    = new StringBuilder();
        int length           = method.methodInfo.GetParameters().Length;

        for (int index = 0; index < length; ++index)
        {
            var parameter = method.methodInfo.GetParameters()[index];
            stringBuilder.Append(string.Format("{0}", GetTypeName(parameter.ParameterType)));
            if (index < length - 1)
            {
                stringBuilder.Append(", ");
            }
        }
        var on = objectReferenceValue == method.target && stringValue == method.methodInfo.Name && mode1 == mode2;

        if (on && mode1 == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
        {
            on &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == propertyRelative.stringValue;
        }
        var formattedMethodName = GetFormattedMethodName(targetName, method.methodInfo.Name, stringBuilder.ToString(), mode1 == PersistentListenerMode.EventDefined);

        menu.AddItem(new GUIContent(formattedMethodName), on, new GenericMenu.MenuFunction2(SetEventFunction), new UnityEventFunction(listener, method.target, method.methodInfo, mode1));
    }
Example #6
0
 private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, ValidMethodMap method, string targetName)
 {
     PersistentListenerMode mode = method.mode;
     UnityEngine.Object objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
     string stringValue = listener.FindPropertyRelative("m_MethodName").stringValue;
     PersistentListenerMode mode2 = GetMode(listener.FindPropertyRelative("m_Mode"));
     SerializedProperty property = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
     StringBuilder builder = new StringBuilder();
     int length = method.methodInfo.GetParameters().Length;
     for (int i = 0; i < length; i++)
     {
         System.Reflection.ParameterInfo info = method.methodInfo.GetParameters()[i];
         builder.Append(string.Format("{0}", GetTypeName(info.ParameterType)));
         if (i < (length - 1))
         {
             builder.Append(", ");
         }
     }
     bool on = ((objectReferenceValue == method.target) && (stringValue == method.methodInfo.Name)) && (mode == mode2);
     if ((on && (mode == PersistentListenerMode.Object)) && (method.methodInfo.GetParameters().Length == 1))
     {
         on &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == property.stringValue;
     }
     string text = GetFormattedMethodName(targetName, method.methodInfo.Name, builder.ToString(), mode == PersistentListenerMode.EventDefined);
     menu.AddItem(new GUIContent(text), on, new GenericMenu.MenuFunction2(UnityEventDrawer.SetEventFunction), new UnityEventFunction(listener, method.target, method.methodInfo, mode));
 }
Example #7
0
        private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, ValidMethodMap method, string targetName)
        {
            PersistentListenerMode mode = method.mode;

            UnityEngine.Object     objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
            string                 stringValue          = listener.FindPropertyRelative("m_MethodName").stringValue;
            PersistentListenerMode mode2    = GetMode(listener.FindPropertyRelative("m_Mode"));
            SerializedProperty     property = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
            StringBuilder          builder  = new StringBuilder();
            int length = method.methodInfo.GetParameters().Length;

            for (int i = 0; i < length; i++)
            {
                System.Reflection.ParameterInfo info = method.methodInfo.GetParameters()[i];
                builder.Append($"{GetTypeName(info.ParameterType)}");
                if (i < (length - 1))
                {
                    builder.Append(", ");
                }
            }
            bool on = ((objectReferenceValue == method.target) && (stringValue == method.methodInfo.Name)) && (mode == mode2);

            if ((on && (mode == PersistentListenerMode.Object)) && (method.methodInfo.GetParameters().Length == 1))
            {
                on &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == property.stringValue;
            }
            string text = GetFormattedMethodName(targetName, method.methodInfo.Name, builder.ToString(), mode == PersistentListenerMode.EventDefined);

            if (< > f__mg$cache1 == null)
            {
Example #8
0
        private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, ValidMethodMap method, string targetName)
        {
            PersistentListenerMode mode     = method.mode;
            Object objectReferenceValue     = listener.FindPropertyRelative("m_Target").objectReferenceValue;
            string stringValue              = listener.FindPropertyRelative("m_MethodName").stringValue;
            PersistentListenerMode mode2    = GetMode(listener.FindPropertyRelative("m_Mode"));
            SerializedProperty     property = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
            StringBuilder          builder  = new StringBuilder();
            int length = method.methodInfo.GetParameters().Length;

            for (int i = 0; i < length; i++)
            {
                ParameterInfo info = method.methodInfo.GetParameters()[i];
                builder.Append(string.Format("{0}", GetTypeName(info.ParameterType)));
                if (i < (length - 1))
                {
                    builder.Append(", ");
                }
            }
            bool on = ((objectReferenceValue == method.target) && (stringValue == method.methodInfo.Name)) && (mode == mode2);

            if ((on && (mode == PersistentListenerMode.Object)) && (method.methodInfo.GetParameters().Length == 1))
            {
                on &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == property.stringValue;
            }
            string text = GetFormattedMethodName(targetName, method.methodInfo.Name, builder.ToString(), mode == PersistentListenerMode.EventDefined);

            menu.AddItem(new GUIContent(text), on, new GenericMenu.MenuFunction2(UnityEventDrawer.SetEventFunction), new UnityEventFunction(listener, method.target, method.methodInfo, mode));
        }
Example #9
0
        static void AddFunctionsForScript(GenericMenu menu, SerializedProperty propCall, ValidMethodMap method, string targetName)
        {
            PersistentListenerMode mode = method.mode;

            var propTarget     = propCall.FindPropertyRelative(targetPath).objectReferenceValue;
            var propMethodName = propCall.FindPropertyRelative(methodNamePath).stringValue;
            var propMode       = GetMode(propCall.FindPropertyRelative(modePath));

            var args  = new StringBuilder();
            var count = method.methodInfo.GetParameters().Length;

            for (int index = 0; index < count; index++)
            {
                var methodArg = method.methodInfo.GetParameters()[index];
                args.Append(string.Format("{0}", GetTypeName(methodArg.ParameterType)));

                if (index < count - 1)
                {
                    args.Append(", ");
                }
            }

            var isCurrentlySet = propTarget == method.target &&
                                 propMethodName == method.methodInfo.Name &&
                                 mode == propMode;

            string path = GetFormattedMethodName(targetName, method.methodInfo.Name, args.ToString(), mode == PersistentListenerMode.EventDefined);

            menu.AddItem(new GUIContent(path),
                         isCurrentlySet,
                         SetEventFunction,
                         new UnityEventFunction(propCall, method.target, method.methodInfo, mode));
        }
Example #10
0
        static void AddFunctionsForScript(GenericMenu menu, SerializedProperty propCall, ValidMethodMap method, string targetName, bool multiple)
        {
            var propTarget     = propCall.FindPropertyRelative(targetPath).objectReferenceValue;
            var propMethodName = propCall.FindPropertyRelative(methodNamePath).stringValue;
            var propModes      = propCall.FindPropertyRelative(modesPath);

            var isCurrentlySet = propTarget == method.target &&
                                 propMethodName == method.methodInfo.Name &&
                                 propModes.arraySize == method.modes.Length;

            if (isCurrentlySet)
            {
                for (var i = 0; i < propModes.arraySize; ++i)
                {
                    if ((PersistentListenerMode)propModes.GetArrayElementAtIndex(i).enumValueIndex != method.modes[i])
                    {
                        isCurrentlySet = false;
                        break;
                    }
                }
            }

            string path = GetFormattedMethodName(targetName, method.methodInfo.Name, GetMethodParameters(method.methodInfo), false, multiple);

            menu.AddItem(new GUIContent(path),
                         isCurrentlySet,
                         SetEventFunction,
                         new UnityEventFunction(propCall, method.target, method.methodInfo));
        }
Example #11
0
        private static void GeneratePopUpForType(GenericMenu menu, Object target, bool useFullTargetName, SerializedProperty propCall)
        {
            var    methods    = new List <ValidMethodMap>();
            string targetName = useFullTargetName ? target.GetType().FullName : target.GetType().Name;

            Type[] t = new[] { typeof(float), typeof(int), typeof(string), typeof(bool), typeof(Color), typeof(Object) };
            PersistentListenerMode[] modeList = new[] { PersistentListenerMode.Float, PersistentListenerMode.Int, PersistentListenerMode.String, PersistentListenerMode.Bool, PersistentListenerMode.String, PersistentListenerMode.Object };
            if (target == null || t == null)
            {
                return;
            }

            Type componentType    = target.GetType();
            var  componentMethods = componentType.GetMethods().Where(x => !x.IsSpecialName).ToList();

            var wantedProperties = componentType.GetProperties().AsEnumerable();

            wantedProperties = wantedProperties.Where(x => x.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length == 0 && x.GetSetMethod() != null);
            componentMethods.AddRange(wantedProperties.Select(x => x.GetSetMethod()));

            foreach (var componentMethod in componentMethods)
            {
                var componentParamaters = componentMethod.GetParameters();
                if (componentParamaters.Length < 1)
                {
                    continue;
                }

                if (componentMethod.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length > 0)
                {
                    continue;
                }

                if (componentMethod.ReturnType != typeof(void))
                {
                    continue;
                }

                var modes = new PersistentListenerMode[componentParamaters.Length];

                bool paramatersMatch = true;
                for (int i = 0; i < componentParamaters.Length; i++)
                {
                    bool paramaterMatch = false;
                    for (int j = 0; j < t.Length; j++)
                    {
                        if (t[j].IsAssignableFrom(componentParamaters[i].ParameterType))
                        {
                            modes[i]       = modeList[j];
                            paramaterMatch = true;
                            break;
                        }
                    }
                    if (!paramaterMatch)
                    {
                        paramatersMatch = false;
                        break;
                    }
                }

                if (paramatersMatch)
                {
                    var vmm = new ValidMethodMap();
                    vmm.target     = target;
                    vmm.methodInfo = componentMethod;
                    vmm.modes      = modes;
                    methods.Add(vmm);
                }
            }

            if (methods.Count > 0)
            {
                var orderedFields  = methods.FindAll(e => e.methodInfo.Name.StartsWith("set_")).OrderBy(e => e.methodInfo.Name);
                var orderedMethods = methods.FindAll(e => !e.methodInfo.Name.StartsWith("set_")).OrderBy(e => e.methodInfo.Name).ThenBy(e => e.methodInfo.GetParameters().Length);
                Dictionary <string, int> methodsCount = new Dictionary <string, int>();
                foreach (var validMethod in orderedMethods)
                {
                    if (methodsCount.ContainsKey(validMethod.methodInfo.Name))
                    {
                        methodsCount[validMethod.methodInfo.Name]++;
                    }
                    else
                    {
                        methodsCount.Add(validMethod.methodInfo.Name, 1);
                    }
                }
                foreach (var validMethod in orderedFields)
                {
                    AddFunctionsForScript(menu, propCall, validMethod, targetName, false);
                }

                menu.AddSeparator(targetName + "/");
                foreach (var validMethod in orderedMethods)
                {
                    AddFunctionsForScript(menu, propCall, validMethod, targetName, methodsCount[validMethod.methodInfo.Name] > 1);
                }
            }
        }
Example #12
0
        private static void GeneratePopUpForType(GenericMenu menu, Object target, bool useFullTargetName, SerializedProperty propCall)
        {
            var    methods    = new List <ValidMethodMap>();
            string targetName = useFullTargetName ? target.GetType().FullName : target.GetType().Name;

            Type[] t = new[] { typeof(float), typeof(int), typeof(string), typeof(bool), typeof(Color), typeof(Object) };
            PersistentListenerMode[] modeList = new[] { PersistentListenerMode.Float, PersistentListenerMode.Int, PersistentListenerMode.String, PersistentListenerMode.Bool, PersistentListenerMode.String, PersistentListenerMode.Object };
            if (target == null || t == null)
            {
                return;
            }

            Type componentType = target.GetType();

            var wantedProperties = componentType.GetProperties().AsEnumerable();

            wantedProperties = wantedProperties.Where(x => x.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length == 0 && x.GetSetMethod() != null);
            var componentMethods = wantedProperties.Select(x => x.GetSetMethod());

            foreach (var componentMethod in componentMethods)
            {
                var componentParamaters = componentMethod.GetParameters();
                if (componentParamaters.Length != 1)
                {
                    continue;
                }

                if (componentMethod.GetCustomAttributes(typeof(ObsoleteAttribute), true).Length > 0)
                {
                    continue;
                }

                if (componentMethod.ReturnType != typeof(void))
                {
                    continue;
                }

                var modes = new PersistentListenerMode[componentParamaters.Length];

                bool paramatersMatch = true;
                for (int i = 0; i < componentParamaters.Length; i++)
                {
                    bool paramaterMatch = false;
                    for (int j = 0; j < t.Length; j++)
                    {
                        if (t[j].IsAssignableFrom(componentParamaters[i].ParameterType))
                        {
                            modes[i]       = modeList[j];
                            paramaterMatch = true;
                            break;
                        }
                    }
                    if (!paramaterMatch)
                    {
                        paramatersMatch = false;
                        break;
                    }
                }

                if (paramatersMatch)
                {
                    var vmm = new ValidMethodMap();
                    vmm.target     = target;
                    vmm.methodInfo = componentMethod;
                    vmm.modes      = modes;
                    methods.Add(vmm);
                }
            }

            menu.AddItem(new GUIContent(targetName + "/Self"),
                         string.IsNullOrEmpty(propCall.FindPropertyRelative(methodNamePath).stringValue) && propCall.FindPropertyRelative(targetPath).objectReferenceValue == target,
                         SetTargetFunction,
                         new object[] { propCall, target });

            menu.AddSeparator(targetName + "/");

            if (methods.Count > 0)
            {
                var orderedFields = methods.OrderBy(e => e.methodInfo.Name);
                foreach (var validMethod in orderedFields)
                {
                    AddFunctionsForScript(menu, propCall, validMethod, targetName, false);
                }
            }
        }