コード例 #1
0
        public string GetSourceCode()
        {
            var writer = new IndentedTextWriter2(2, false);
            var sng    = new ShortTypeNameGenerator();

            foreach (var methodProduct in MethodProducts)
            {
                methodProduct.Write(writer, sng);
            }

            return($@"
{sng.GetCombinedUsings()}

namespace {BindToType.ContainingNamespace.ToFullDisplayString()}
{{
    public partial class {BindToType.Name} : {BindFromType.ToGlobalDisplayString()}
    {{
        {Unknowns.Join(u => $"private readonly {u.Type!.ToGlobalDisplayString()} {u.Name};")}

        public {BindToType.Name}(
            {Unknowns.Join(u => $"{u.Type!.ToGlobalDisplayString()} {u.Name}", ",")}
            )
        {{
            {Unknowns.Join(u => $"this.{u.Name} = {u.Name};")}
        }}

        {writer.GetResultString()}
    }}
}}
");
        }
コード例 #2
0
        public void Write(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
        {
            var returnName = MethodResult.GetString(sng);

            var methodBody = _fullMethodBody(MethodName, returnName);

            writer.WriteLine2(methodBody);
        }
コード例 #3
0
ファイル: InstanceProduct.cs プロジェクト: lsoft/DpdtInject
        internal void WriteDisposeMethodInvoke(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
        {
            if (DisposeMethod is null)
            {
                return;
            }

            writer.WriteLine($"TryToSafeDispose({DisposeMethod.MethodName}, ref result);");
        }
コード例 #4
0
ファイル: ResolutionProduct.cs プロジェクト: lsoft/DpdtInject
 internal void WriteMethods(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
 {
     RetrieveExplicitMethod.Write(writer, sng);
     writer.WriteLine();
     RetrieveMethod.Write(writer, sng);
     writer.WriteLine();
     RetrieveAllExplicitMethod.Write(writer, sng);
     writer.WriteLine();
     RetrieveAllMethod.Write(writer, sng);
     writer.WriteLine();
     RetrieveFastMethod.Write(writer, sng);
 }
コード例 #5
0
ファイル: InstanceProduct.cs プロジェクト: lsoft/DpdtInject
        public void WriteCombinedUnknownTypeBody(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
        {
            if (UnknownTypeProducts.Count == 0)
            {
                return;
            }

            foreach (var utp in UnknownTypeProducts)
            {
                utp.WriteBody(writer, sng);
            }
        }
コード例 #6
0
        public string GetSourceCode()
        {
            var writer = new IndentedTextWriter2(2, false);
            var sng    = new ShortTypeNameGenerator();

            foreach (var methodProduct in MembersProduct)
            {
                methodProduct.Write(writer, sng);
            }

            var compilationUnit = DpdtInject.Generator.Core.Properties.Resource.CarcassProxy;

            var fixedCompilationUnit = compilationUnit
                                       .ReplaceLineStartsWith(
                "namespace",
                $"namespace {BindToType.ContainingNamespace.ToFullDisplayString()}"
                )
                                       .ReplaceLineStartsWith(
                "using BindFromType",
                $""
                )
                                       .ReplaceLineStartsWith(
                "using SessionSaver",
                $""
                )
                                       .CheckAndReplace(
                "//PROXYPRODUCER: additonal usings",
                sng.GetCombinedUsings()
                )
                                       .CheckAndReplace(
                nameof(CarcassProxy),
                BindToType.Name
                )
                                       .CheckAndReplace(
                "BindFromType",
                BindFromType.ToGlobalDisplayString()
                )
                                       .CheckAndReplace(
                "SessionSaver",
                _sessionSaverType.ToGlobalDisplayString()
                )
                                       .CheckAndReplace(
                "//PROXYPRODUCER: put methods here",
                writer.GetResultString()
                )
            ;

            return(fixedCompilationUnit);
        }
コード例 #7
0
ファイル: InstanceProduct.cs プロジェクト: lsoft/DpdtInject
        internal void WriteCombinedBody(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
        {
            if (PredicateMethod != null)
            {
                PredicateMethod.Write(writer, sng);
            }

            FactoryObjectMethod.Write(writer, sng);
            FuncMethod.Write(writer, sng);

            if (DisposeMethod != null)
            {
                DisposeMethod.Write(writer, sng);
            }
        }
コード例 #8
0
        public void Write(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
        {
            writer.Write("new System.Tuple<");

            _tuplesParts.IterateWithLastSignal(
                t => t.WriteItem0(writer, sng),
                () => writer.Write(", ")
                );

            writer.Write(">(");

            _tuplesParts.IterateWithLastSignal(
                t => t.WriteItem1(writer, sng),
                () => writer.Write(", ")
                );

            writer.Write(")");
        }
コード例 #9
0
        internal void Write(
            bool isLast0,
            IndentedTextWriter2 itwMethods,
            IndentedTextWriter2 itwInterfaces,
            IndentedTextWriter2 itwNonGenericInterfaces,
            IndentedTextWriter2 itwNonGenericGetAllInterfaces,
            ShortTypeNameGenerator sng
            )
        {
            itwMethods.WriteLine($"#region {BindFrom.ToFullDisplayString()}");
            itwMethods.WriteLine();

            foreach (var(resolutionProduct, isLast1) in ResolutionProducts.IterateWithLastSignal())
            {
                resolutionProduct.WriteMethods(itwMethods, sng);

                resolutionProduct.WriteInterface(itwInterfaces, sng);
                if (!isLast0 || !isLast1)
                {
                    itwInterfaces.WriteLine(",");
                }

                resolutionProduct.NonGenericGetTuple.Write(itwNonGenericInterfaces, sng);
                if (!isLast0 || !isLast1)
                {
                    itwNonGenericInterfaces.WriteLine(",");
                }

                resolutionProduct.NonGenericGetAllTuple.Write(itwNonGenericGetAllInterfaces, sng);
                if (!isLast0 || !isLast1)
                {
                    itwNonGenericGetAllInterfaces.WriteLine(",");
                }
            }

            itwMethods.WriteLine();
            itwMethods.WriteLine($"#endregion");
        }
コード例 #10
0
ファイル: EventProduct.cs プロジェクト: lsoft/DpdtInject
 public void Write(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
 {
     writer.WriteLine2(GetText());
 }
コード例 #11
0
ファイル: TypeStringPair.cs プロジェクト: lsoft/DpdtInject
 public void WriteItem1(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
 {
     writer.Write(_item1);
 }
コード例 #12
0
ファイル: TypeStringPair.cs プロジェクト: lsoft/DpdtInject
 public void WriteItem0(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
 {
     writer.Write($"{sng.GetShortName(_item0)}");
 }
コード例 #13
0
ファイル: TypeTypePair.cs プロジェクト: lsoft/DpdtInject
 public void WriteItem1(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
 {
     writer.Write($"typeof({sng.GetShortName(_item1)})");
 }
コード例 #14
0
ファイル: ResolutionProduct.cs プロジェクト: lsoft/DpdtInject
 internal void WriteInterface(IndentedTextWriter2 writer, ShortTypeNameGenerator sng)
 {
     writer.Write(InterfaceProduct.GetInterfaceDeclaration(sng));
     writer.Write(", ");
     writer.Write(InterfaceFastProduct.GetInterfaceDeclaration(sng));
 }
コード例 #15
0
 public string GetString(ShortTypeNameGenerator sng)
 {
     return(sng.GetShortName(_type));
 }
コード例 #16
0
ファイル: InterfaceProduct.cs プロジェクト: lsoft/DpdtInject
 public string GetInterfaceDeclaration(ShortTypeNameGenerator sng)
 {
     return($"{InterfaceName}<{sng.GetShortName(TypeSymbol)}>");
 }