From 533901ec488a80711e5bd5a3eb89d90e77bef3e4 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sun, 8 May 2022 19:46:53 +0200 Subject: [PATCH] If the parameter is defined as Nullable, always return "null" as default value. (#36) * In case the parameter is defined as Nullable, always return "null". * icon * . --- Generate-ReleaseNotes.bat | 2 +- resources/icon.png | Bin 0 -> 7811 bytes .../Extensions/ParameterSymbolExtensions.cs | 32 ++++++++++-------- .../ProxyInterfaceSourceGenerator.csproj | 16 ++++----- 4 files changed, 25 insertions(+), 25 deletions(-) create mode 100644 resources/icon.png diff --git a/Generate-ReleaseNotes.bat b/Generate-ReleaseNotes.bat index 69a1974..9f7365d 100644 --- a/Generate-ReleaseNotes.bat +++ b/Generate-ReleaseNotes.bat @@ -1,6 +1,6 @@ rem https://github.com/StefH/GitHubReleaseNotes -SET version=0.0.20 +SET version=0.0.21 GitHubReleaseNotes --output "ReleaseNotes.md" --skip-empty-releases --exclude-labels question invalid doc --version %version% diff --git a/resources/icon.png b/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65e107f2ee6a9ed7c0a785425849950faa44703e GIT binary patch literal 7811 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 z zzbGwqKxI$=74>Pq3#?HMRyQXkBr00rBP+gP0LgB|0=HFzRzgouD)yZ7o$I?C(m|qIU zPUSOK`1kFq1a2_hjCm~xCR>rycPkTfiDfJ8a8o}YaRC5;@mPF(f-Wq9(m#%YEH|#- zpz5+(Dl4v1+o-8v{r%~@P6(06YS=NkyiP|)ucW;)?h^mD7(i1>L`1|ln5SouX*`4f ze+I7PSu8~P90G9^!od4}ux$5DO-)B{T>{`sYv9*i%AUE0sI<>*iyIrHhQU1>%`1J< zI(!u{zZO>P6(!;&Kfaj&O1+KH*s1cHb3>m(1L{&7!d1p|u6ws{-#)r$8|~S%=X*s$ zz+ME>coS|T0=sAh!FoK`kCD4Usv}SW?PUAvjAk$df1L|$kHi61L8$2chCLse=8B2m z2CX{D3Ox##pT`cnR-&EWm~A7+=l!7N`M^ph^Sw9j`+L00bw2mTZ##?ok8Z1aWMq^T zgrHrDN$Uk>P>D(2h-g$Md>S4eJ`=)_20>{VY374*9T*mv1epPwr>EC*=H}*~V`sEV zymO}%0j|O4yv#lz-e00=WHmcklqXWxgza`FD?8^%?Q9qv%)_m)y1)-e-JeC>Ve}5V z!hX7l2~4|0oij+0iox_PD0=)ixyuLJ^l9_40+K?9*n~azKV!Dn5KOZZZ#h?G;2y^x*8AdlU#XI&fqALJYa;QT z39H$u0y@|e5fQm|%nASwru-#LaOp5AU_F3#UmfED&<6`JtRhWva`HzI^!pP|0QzB6 zD^;|rzfhBe-u?d?>jHobXjlS(4D2HW*b`O&ruXkttkjQV=lUSxH+z`xs;Ub>biRK$ z&kYZcn8}(!CZqr$!u=HlAWa3odIv$=UmoVWB3}85VI3+!zK5~8_%T(V3;#b0bJV4R zg}fgb8M#_(tP}j3pR$oPOyZ@7{ho1gaj)Ck+xtPYPO&mEUuyv7^TP*~MzSm-*wHn4!i*5gO? z@EIshb>QqGxzRrWs<+`cmy3S}x3NrQ!dZhRAY(I$$zB9dYmSmG%u^A(EOy#jxN?@! z>N(aP&Xf5!@o)dGHC_oto4??P{FTqZL{37T;RzY$@>!HdcY(pxV9Z?vnHB(wIRA^! zizKl5Qp6F@_51gg_)ar~qyfjn97m@QuLeuFqMt*%V|iMxW(Zg&P)LQRlH=WM~M$pDUlP`DO~qwv_ZPVtpNV3alAX95QI;R|Rz zSaf1^9s<8XddipbCaj7p{#_?;c_v&9ne0$Nm}&Uxq)IqDZv_CEukm=QoFG0cz1>zZ8X(C79f$2(FePy8b`e z#To~Hb+(4%+3dLck2F#MP-9Q*->tKkHLNi7YlIptdjR2fu__$vcRTU~%1=xe;)W{17Mt%+CzV3<7!n6lKU?x0U>Pu)6jJ(!+m9`#vy&7huAFkS9c7elDQgf5-r^991c1jr4$k zUxP4D($Yji%H}H#FkzYv=H?=&m%Gj%Db&-59WKboyZgez!jfct7huxQAOseO6*^_? z_tOOd?c|FVN_#$YKkL@5>y&l6D{ExM{eP>mX&>@usZlr!_cH!fPrre60e_B-jeShw9zVhFdJ-9r z3mBgWfzV9NhuJ=<04nW6={7@|d%~Q@D(>yK$s5jlLx>)Sr3sT4bFkDCmcv3zAh`l? zN|Eox5_hE(s?TVMgwN8a3Prjhj|c|SfF9m+RlW!T9nZ7g^hs#Nx>=eD)5z2D6_nI=BglU^|L7%Z1q-r-YL0JhpcLAk|{z?*kh%p@0-D z-YkMZFJbrYJx}$!jo%}XyZ~tVI8eI9!Yqz+va_@MDcZQ6kgyJ4B0yxl1FVa<3kaZz z#Py$Hk;db~>`hQYx%YQ)2@4?r3z63^grEPjFe?HHB#=M?2_%p}0tqCLKmtur`hN!D V@LR{{KWhL0002ovPDHLkV1i*k1v&r# literal 0 HcmV?d00001 diff --git a/src/ProxyInterfaceSourceGenerator/Extensions/ParameterSymbolExtensions.cs b/src/ProxyInterfaceSourceGenerator/Extensions/ParameterSymbolExtensions.cs index e7a6bee..1d32edd 100644 --- a/src/ProxyInterfaceSourceGenerator/Extensions/ParameterSymbolExtensions.cs +++ b/src/ProxyInterfaceSourceGenerator/Extensions/ParameterSymbolExtensions.cs @@ -6,25 +6,17 @@ namespace ProxyInterfaceSourceGenerator.Extensions; internal static class ParameterSymbolExtensions { - // private const string ParameterValueDefault = "default"; private const string ParameterValueNull = "null"; public static string GetRefPrefix(this IParameterSymbol ps) { - switch (ps.RefKind) + return ps.RefKind switch { - case RefKind.In: - return "in "; - - case RefKind.Out: - return "out "; - - case RefKind.Ref: - return "ref "; - - default: - return string.Empty; - } + RefKind.In => "in ", + RefKind.Out => "out ", + RefKind.Ref => "ref ", + _ => string.Empty + }; } public static string GetParamsPrefix(this IParameterSymbol ps) => @@ -40,7 +32,17 @@ internal static class ParameterSymbolExtensions string defaultValue; if (ps.ExplicitDefaultValue == null) { - defaultValue = ps.Type.IsReferenceType ? ParameterValueNull : $"default({ps.Type})"; + if (ps.NullableAnnotation == NullableAnnotation.Annotated) + { + // The parameter is defined as Nullable, so always use "null". + defaultValue = ParameterValueNull; + } + else + { + defaultValue = ps.Type.IsReferenceType + ? ParameterValueNull : // The parameter is a ReferenceType, so use "null". + $"default({ps.Type})"; // The parameter is not a ReferenceType, so use "default(T)". + } } else { diff --git a/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj b/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj index d178ced..35bee15 100644 --- a/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj +++ b/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj @@ -1,7 +1,7 @@ - 0.0.20 + 0.0.21 netstandard2.0 {12344228-91F4-4502-9595-39584E5ABB34} 10 @@ -12,14 +12,13 @@ ProxyInterfaceGenerator This project uses Source Generation to generate an interface and a Proxy class for classes. This makes it possible to wrap external classes which do not have an interface, in a Proxy class which makes it easier to Mock and use DI. class;interface;proxy;SourceGenerator;Analyzer;Generation;Generate;wrap - MIT $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/../../PackageReleaseNotes.txt")) https://github.com/StefH/ProxyInterfaceGenerator git https://github.com/StefH/ProxyInterfaceGenerator PackageReadme.md - + icon.png false true $(BaseIntermediateOutputPath)Generated @@ -33,32 +32,31 @@ + - all runtime; build; native; contentfiles; analyzers; buildtransitive - - + - + ProxyClassesGenerator.cs - +