コード例 #1
0
        /// <summary>
        /// Resolve this reference to it's definition.
        /// </summary>
        public virtual bool TryResolve(out XMethodDefinition method)
        {
            if (resolvedMethod != null)
            {
                method = resolvedMethod;
                return(true);
            }
            method = null;
            XTypeDefinition declaringType;

            if (!DeclaringType.GetElementType().TryResolve(out declaringType))
            {
                return(false);
            }
            if (!declaringType.TryGet(this, out method))
            {
                return(false);
            }
            // Cache for later
            resolvedMethod = method;
            declaringType.AddFlushAction(() => resolvedMethod = null);
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Resolve this reference to it's definition.
        /// </summary>
        public virtual bool TryResolve(out XFieldDefinition field)
        {
            if (resolvedField != null)
            {
                field = resolvedField;
                return(true);
            }
            field = null;
            XTypeDefinition declaringType;

            if (!DeclaringType.GetElementType().TryResolve(out declaringType))
            {
                return(false);
            }
            if (!declaringType.TryGet(this, out field))
            {
                return(false);
            }
            // Cache for later
            resolvedField = field;
            declaringType.AddFlushAction(() => resolvedField = null);
            return(true);
        }
コード例 #3
0
        public override void InitializeGUI()
        {
            title.text = GetName().SplitCamelCase();

            value = GetValue <ICollection>();

            if (value != null)
            {
                // much boxing
                array = value.Cast <object>().ToArray();

                if (array.Length < 1 || array.Length > 32)
                {
                    return;
                }

                if (DeclaringType == null || DeclaringType.GetElementType() == null)
                {
                    return;
                }

                System.Type elementType = DeclaringType.GetElementType();

                string typeName = elementType.ToString().Substring(elementType.ToString().LastIndexOf('.') + 1);

                for (int i = 0; i < array.Length; i++)
                {
                    pb_TypeInspector inspector = pb_InspectorResolver.GetInspector(elementType);
                    inspector.SetIndexInCollection(i);
                    inspector.Initialize(typeName,
                                         (int index) => { return(array[index]); },
                                         SetValueAtIndex);
                    inspector.transform.SetParent(collection);
                }
            }
        }
コード例 #4
0
        /*Telerik Authorship*/
        private TypeReference GetFixedReturnType(TypeReference type)
        {
            if (type == null)
            {
                return(null);
            }

            if (type.IsOptionalModifier)
            {
                OptionalModifierType omt          = (OptionalModifierType)type;
                TypeReference        fixedElement = GetFixedReturnType(omt.ElementType);
                return(new OptionalModifierType(omt.ModifierType, fixedElement));
            }

            if (type.IsRequiredModifier)
            {
                RequiredModifierType rmt          = (RequiredModifierType)type;
                TypeReference        fixedElement = GetFixedReturnType(rmt.ElementType);
                return(new RequiredModifierType(rmt.ModifierType, fixedElement));
            }

            if (type.IsGenericParameter)
            {
                return(GetActualType(type));
            }
            if (type.IsArray)
            {
                ArrayType     at               = (ArrayType)type;
                int           rank             = at.Rank;
                TypeReference arrayElementType = at.ElementType;
                arrayElementType = GetFixedReturnType(arrayElementType);
                return(new ArrayType(arrayElementType, rank));
            }

            if (type.IsPointer)
            {
                TypeReference fixedElement = GetFixedReturnType(((PointerType)type).ElementType);
                return(new PointerType(fixedElement));
            }

            if (type.IsByReference)
            {
                TypeReference fixedElement = GetFixedReturnType(((ByReferenceType)type).ElementType);
                return(new ByReferenceType(fixedElement));
            }


            if (type.IsGenericInstance && DeclaringType.IsGenericInstance)
            {
                GenericInstanceType result = type as GenericInstanceType;
                GenericInstanceType declaringTypeGenericInstance = DeclaringType as GenericInstanceType;
                TypeReference       declaringElementType         = DeclaringType.GetElementType();
                for (int i = 0; i < result.GenericArguments.Count; i++)
                {
                    GenericParameter currentParam = result.GenericArguments[i] as GenericParameter;
                    if (currentParam != null && currentParam.Owner == declaringElementType)
                    {
                        if (declaringTypeGenericInstance.PostionToArgument.ContainsKey(currentParam.Position))
                        {
                            result.ReplaceGenericArgumentAt(i, declaringTypeGenericInstance.PostionToArgument[currentParam.position]);
                        }
                    }
                }
                return(result);
            }

            return(type);
        }
コード例 #5
0
            /// <summary>
            /// Resolve this reference to it's definition.
            /// </summary>
            public override bool TryResolve(out XMethodDefinition method)
            {
                method = null;
                var             declaringTypeRef = DeclaringType.IsArray ? Module.TypeSystem.Object : DeclaringType.GetElementType();
                XTypeDefinition declaringType;

                if (!declaringTypeRef.TryResolve(out declaringType))
                {
                    return(false);
                }
                return(declaringType.TryGet(this, out method));
            }