/// <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); }
/// <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); }
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); } } }
/*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); }
/// <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)); }