public ClassDeclarationSyntax Build(string typeName, Type origin, params Type[] ctorArguments) { var originType = origin.GetSymbols(_compilation); var arguments = ctorArguments.Select(x => x.GetSymbols(_compilation)).Where(x => x != null).ToArray(); var typeBuilder = new TypeBuilder(); var ctorResult = _ctorBuilder.Create(typeName, originType, arguments); var methodsresult = _methodsBuildere.CreateMethods(originType, ctorResult); var declaration = typeBuilder.CreateClassDeclaration ( typeName: typeName, baseTypes: new[] { originType }, ctor: ctorResult.Ctor, fields: ctorResult.Fields, methods: methodsresult.Methods ); return(declaration); }