public void BuildAll() { _targetUnit = new CodeCompileUnit(); CodeNamespace theGlobalNamespace = new CodeNamespace(); _targetUnit.Namespaces.Add(theGlobalNamespace); string topNamespace = _typeToExtend.ContainingNamespace.GetFullNamespaceName(); CodeNamespace currentNamespace = new CodeNamespace(topNamespace); _targetUnit.Namespaces.Add(currentNamespace); CodeTypeDeclaration theClass = new CodeTypeDeclaration(_typeToExtend.Name); theClass.IsClass = true; theClass.IsPartial = true; theClass.TypeAttributes = TypeAttributes.Public; currentNamespace.Types.Add(theClass); List<string> imports = new List<string>(); IEnumerable<OneWayEventWrapsView> oneWayEventWrapsAttrs = _typeToExtend.GetOneWayEventWrapsAttrsDistinctByWrapperName(); List<CodeTypeMember> oneWayEventWrappedMembers = new List<CodeTypeMember>(); if (oneWayEventWrapsAttrs != null) { foreach (OneWayEventWrapsView oneWayEventWrapsView in oneWayEventWrapsAttrs) { INamedTypeSymbol wrappedType = oneWayEventWrapsView.TheWrappedType; oneWayEventWrappedMembers.Add(wrappedType.CreateEventDefinition(oneWayEventWrapsView, imports)); } } IEnumerable<OneWayEventWrapsByWrappedType> oneWayEventsByWrappedTypes = _typeToExtend.GetOneWayEventWrapsByWrappedTypes(); IEnumerable<INamedTypeSymbol> wrapTypes = _typeToExtend.GetWrappedTypes().Union(oneWayEventsByWrappedTypes.Select((item) => item.TheWrappedType)).Distinct(); List<CodeTypeMember> wrappedMembers = new List<CodeTypeMember>(); foreach (INamedTypeSymbol wrappedType in wrapTypes) { OneWayEventWrapsByWrappedType oneWayEventWrapsByWrappedType = null; if (oneWayEventsByWrappedTypes != null) { oneWayEventWrapsByWrappedType = oneWayEventsByWrappedTypes.Where((item) => item.TheWrappedType == wrappedType).FirstOrDefault(); } wrappedMembers.AddRange(wrappedType.GetWrapperTypePropertyMembers(imports, oneWayEventWrapsByWrappedType)); wrappedMembers.Add(wrappedType.CreateImplicitConversionOperator(theClass.Name)); } foreach (var oneWayEventsByWrappedType in oneWayEventsByWrappedTypes) { wrappedMembers.AddRange(oneWayEventsByWrappedType.CreateHandlerMethods(imports)); } IEnumerable<WrapsAttrView> wrapperAttrs = _typeToExtend.GetWrapsAttrs(); foreach (WrapsAttrView wrapsAttr in wrapperAttrs) { WrappedItemsKind wrappedItemsKind = wrapsAttr.TheWrappedItemsKind; INamedTypeSymbol wrappedType = wrapsAttr.TheWrappedType; if (wrappedItemsKind == WrappedItemsKind.Property) { foreach (WrapsAttrNameChangeView wrappedPropName in wrapsAttr.NameChangeViews) { wrappedMembers.Add(wrappedType.CreatePropertyWrapper(wrappedPropName, imports)); } } else if (wrappedItemsKind == WrappedItemsKind.Method) { foreach (WrapsAttrNameChangeView wrappedMethodName in wrapsAttr.NameChangeViews) { wrappedMembers.AddRange(wrappedType.CreateMethodsWrapper(wrappedMethodName, imports)); } } else if (wrappedItemsKind == WrappedItemsKind.Event) { foreach (WrapsAttrNameChangeView wrappedEventName in wrapsAttr.NameChangeViews) { wrappedMembers.Add(wrappedType.CreateEventWrapper(wrappedEventName, imports)); } } } theGlobalNamespace.AddNamespaces(imports); theClass.AddMembers(wrappedMembers); theClass.AddMembers(oneWayEventWrappedMembers); }