Exemplo n.º 1
0
        private void WriteClassDtoInterfaceTransfomMethods(SourceWriter writer, DtoInterfaceTransformLookup interfaceTransformLookup)
        {
            foreach (var(dtoInterfaceSymbol, dtoInterfaceMetadata) in interfaceTransformLookup)
            {
                writer.WriteLine();

                writer.Write($"private static {dtoInterfaceMetadata.TransformMethodName}(dto: {dtoInterfaceSymbol.Name}): {dtoInterfaceMetadata.ClassSymbol.Name} ");

                using (writer.Block())
                {
                    var interfaceParameters = GetConstructorParameters(GetAllDistinctProperties(dtoInterfaceMetadata.ClassSymbol))
                                              .Select(x => new { x.property, requiresDtoTransform = x.property.Type.RequiresDtoTransform(), x.parameterName })
                                              .Apply();

                    if (interfaceParameters.Any(p => p.requiresDtoTransform))
                    {
                        foreach (var parameter in interfaceParameters.Where(p => p.requiresDtoTransform))
                        {
                            TsDtoTypeSymbolHelper.WriteSymbolDtoTransformation(
                                propertySymbol: parameter.property,
                                valueAccessor: $"dto.{parameter.property.Name}",
                                variableName: parameter.parameterName,
                                interfaceTransformLookup: interfaceTransformLookup,
                                writer);
                        }

                        writer.WriteLine();
                    }

                    IReadOnlyList <string> interfaceInitialization = interfaceParameters
                                                                     .Select(p => $"{p.property.Name}: {(p.requiresDtoTransform ? p.parameterName : $"dto.{p.property.Name}")}")
Exemplo n.º 2
0
        private void WriteClassDtoTransformMethod(SourceWriter writer, TsTypeSymbol symbol)
        {
            //InterfaceTransformLookup interfaceTransformLookup = this.BuildInterfaceTransformLookup(symbol);
            DtoInterfaceTransformLookup interfaceTransformLookup = DtoInterfaceTransformLookup.BuildLookup(symbol);

            writer.WriteLine();

            TsTypeSymbol dtoInterface = symbol.DtoInterface;

            writer.Write($"public static fromDto(dto: {dtoInterface.Name}): {symbol.Name} ");

            using (writer.Block())
            {
                var rawClassParameters = GetConstructorParameters(GetAllDistinctProperties(symbol))
                                         .Select(cp => new { cp.property, cp.parameterName, requiresTransform = cp.property.Type.RequiresDtoTransform() })
                                         .Apply();

                if (rawClassParameters.Any(x => x.requiresTransform))
                {
                    foreach (var parameter in rawClassParameters.Where(x => x.requiresTransform))
                    {
                        TsDtoTypeSymbolHelper.WriteSymbolDtoTransformation(
                            propertySymbol: parameter.property,
                            valueAccessor: $"dto.{parameter.property.Name}",
                            variableName: parameter.parameterName,
                            interfaceTransformLookup: interfaceTransformLookup,
                            writer);
                    }

                    writer.WriteLine();
                }

                // Write out the class constructor.
                var classParameters = rawClassParameters.Select(p => p.requiresTransform ? p.parameterName : "dto." + p.parameterName)
                                      .Apply();
                writer.Write($"return new {symbol.Name}(");
                this.WriteCommaSeparatedItems(writer, classParameters);
                writer.WriteLine(");");
            }

            // Write interface transform methods, if any.
            if (interfaceTransformLookup.Count > 0)
            {
                this.WriteClassDtoInterfaceTransfomMethods(writer, interfaceTransformLookup);
            }
        }