private void AddGenericTypes(ClassDefinition cd)
		{
			var collector = new GenericTypeCollector(this.CodeBuilder);
			collector.Process(cd);
			
			var counter = cd.GenericParameters.Count;
			var innerCollector = new DetectInnerGenerics();
			cd.Accept(innerCollector);
			foreach (Node node in innerCollector.Values)
			{
				var param = (IGenericParameter)node.Entity;
				var gp = cd.GenericParameters.FirstOrDefault(gpd => gpd.Name.Equals(param.Name));
				if (gp == null)
				{
					gp = CodeBuilder.CreateGenericParameterDeclaration(counter, param.Name);
					cd.GenericParameters.Add(gp);
					++counter;
				}
				node.Entity = new InternalGenericParameter(this.TypeSystemServices, gp);
				gp["InternalGenericParent"] = (param as InternalGenericParameter).Node;
			}
		}