ICSharpCode.NRefactory.MonoCSharp.TypeDefinition.CreateTypeBuilder C# (CSharp) Method

CreateTypeBuilder() private method

private CreateTypeBuilder ( ) : bool
return bool
		bool CreateTypeBuilder ()
		{
			//
			// Sets .size to 1 for structs with no instance fields
			//
			int type_size = Kind == MemberKind.Struct && first_nonstatic_field == null && !(this is StateMachine) ? 1 : 0;

			var parent_def = Parent as TypeDefinition;
			if (parent_def == null) {
				var sb = new StringBuilder ();
				CreateMetadataName (sb);
				TypeBuilder = Module.CreateBuilder (sb.ToString (), TypeAttr, type_size);
			} else {
				TypeBuilder = parent_def.TypeBuilder.DefineNestedType (FilterNestedName (MemberName.Basename), TypeAttr, null, type_size);
			}

			if (DeclaringAssembly.Importer != null)
				DeclaringAssembly.Importer.AddCompiledType (TypeBuilder, spec);

			spec.SetMetaInfo (TypeBuilder);
			spec.MemberCache = new MemberCache (this);

			TypeParameters parentAllTypeParameters = null;
			if (parent_def != null) {
				spec.DeclaringType = Parent.CurrentType;
				parent_def.MemberCache.AddMember (spec);
				parentAllTypeParameters = parent_def.all_type_parameters;
			}

			if (MemberName.TypeParameters != null || parentAllTypeParameters != null) {
				var tparam_names = CreateTypeParameters (parentAllTypeParameters);

				all_tp_builders = TypeBuilder.DefineGenericParameters (tparam_names);

				if (CurrentTypeParameters != null) {
					CurrentTypeParameters.Create (spec, CurrentTypeParametersStartIndex, this);
					CurrentTypeParameters.Define (all_tp_builders);
				}
			}

			return true;
		}