protected override void Visit(GenericInstanceType genericInstanceType, Unity.Cecil.Visitor.Context context) { GenericInstanceType inflatedType = Inflater.InflateType(this._genericContext, genericInstanceType); this.ProcessGenericType(inflatedType); base.Visit(genericInstanceType, context); }
protected override void Visit(FieldDefinition fieldDefinition, Unity.Cecil.Visitor.Context context) { if (!GenericsUtilities.CheckForMaximumRecursion(this._genericContext.Type)) { base.Visit(fieldDefinition, context); } }
protected override void Visit(TypeDefinition type, Unity.Cecil.Visitor.Context context) { if (type.IsComOrWindowsRuntimeType() && !type.IsInterface) { InjectBaseTypeIfNeeded(type); InjectFinalizer(type); } base.Visit(type, context); }
protected override void Visit(MethodDefinition methodDefinition, Unity.Cecil.Visitor.Context context) { if ((!methodDefinition.HasGenericParameters || ((this._genericContext.Method != null) && (this._genericContext.Method.Resolve() == methodDefinition))) && !GenericsUtilities.CheckForMaximumRecursion(this._genericContext.Type)) { base.VisitTypeReference(methodDefinition.ReturnType, context.ReturnType(methodDefinition)); foreach (ParameterDefinition definition in methodDefinition.Parameters) { this.Visit(definition, context.Parameter(methodDefinition)); } } }
protected override void Visit(GenericInstanceType genericInstanceType, Unity.Cecil.Visitor.Context context) { if (genericInstanceType.IsEnum()) { ModuleDefinition module = genericInstanceType.Module; for (int i = 0; i < genericInstanceType.GenericArguments.Count; i++) { GenericParameter parameter = genericInstanceType.GenericArguments[i] as GenericParameter; if ((parameter != null) && (parameter.Owner == null)) { genericInstanceType.GenericArguments[i] = module.ImportReference(module.TypeSystem.Object); } } } base.Visit(genericInstanceType, context); }
protected override void Visit(TypeReference typeReference, Unity.Cecil.Visitor.Context context) { if (typeReference.Module == this._module) { AssemblyNameReference scope = typeReference.Scope as AssemblyNameReference; if (scope != null) { TypeDefinition definition = typeReference.Resolve(); if (definition == null) { throw new InvalidProgramException($"Failed to resolve [{scope.Name}]{typeReference.FullName}."); } this._resolvedAssemblies.Add(definition.Module.Assembly); } base.Visit(typeReference, context); } }
protected override void Visit(TypeDefinition typeDefinition, Unity.Cecil.Visitor.Context context) { if (context.Role != Role.NestedType) { if (typeDefinition.BaseType != null) { base.VisitTypeReference(typeDefinition.BaseType, context.BaseType(typeDefinition)); } foreach (FieldDefinition definition in typeDefinition.Fields) { this.Visit(definition, context.Member(typeDefinition)); } if (this._mode != CollectionMode.Types) { foreach (MethodDefinition definition2 in typeDefinition.Methods) { this.Visit(definition2, context.Member(typeDefinition)); } } } }
protected override void Visit(ArrayType arrayType, Unity.Cecil.Visitor.Context context) { this.ProcessArray(arrayType.ElementType, arrayType.Rank); base.Visit(arrayType, context); }