Skip to content

Commit 0d61484

Browse files
committed
release v3.0.0
1 parent 25be5bf commit 0d61484

19 files changed

+701
-533
lines changed

src/DataContext/SqlDbHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public static Type GetType(SqlDbType sqlType, bool isNullable)
1919
case SqlDbType.Bit:
2020
return isNullable ? typeof(bool?) : typeof(bool);
2121

22+
case SqlDbType.Char:
2223
case SqlDbType.VarChar:
2324
case SqlDbType.NVarChar:
2425
return typeof(string);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using Microsoft.CodeAnalysis;
2+
using Microsoft.CodeAnalysis.CSharp;
3+
using Microsoft.CodeAnalysis.CSharp.Syntax;
4+
using SpocR.Roslyn.Helpers;
5+
6+
namespace SpocR.Extensions
7+
{
8+
internal static class ClassDeclarationSyntaxExtensions
9+
{
10+
internal static ConstructorDeclarationSyntax CreateConstructor(this ClassDeclarationSyntax classDeclaration, string name)
11+
{
12+
var constructorIdentifier = TokenHelper.Parse(name);
13+
14+
var constructorDeclaration =
15+
SyntaxFactory.ConstructorDeclaration(constructorIdentifier)
16+
.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
17+
.AddBodyStatements()
18+
.NormalizeWhitespace();
19+
20+
return constructorDeclaration;
21+
}
22+
23+
internal static PropertyDeclarationSyntax CreateProperty(this ClassDeclarationSyntax classDeclaration, TypeSyntax type, string name)
24+
{
25+
var propertyIdentifier = TokenHelper.Parse(name);
26+
27+
var propertyDeclaration =
28+
SyntaxFactory.PropertyDeclaration(type, propertyIdentifier)
29+
.AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
30+
.AddAccessorListAccessors(
31+
SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
32+
SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))
33+
)
34+
.NormalizeWhitespace();
35+
36+
return propertyDeclaration;
37+
}
38+
}
39+
}

src/Extensions/CompilationUnitSyntaxExtensions.cs

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ namespace SpocR.Extensions
77
{
88
internal static class CompilationUnitSyntaxExtensions
99
{
10-
internal static CompilationUnitSyntax ReplaceUsings(this CompilationUnitSyntax root, Func<string, string> replacer)
10+
internal static CompilationUnitSyntax ReplaceUsings(this CompilationUnitSyntax root, Func<string, string> replacer)
1111
{
1212
var newUsings = new SyntaxList<UsingDirectiveSyntax>();
13-
foreach(var u in root.Usings)
13+
foreach (var u in root.Usings)
1414
{
1515
var uValue = replacer.Invoke(u.Name.ToString());
1616
var usingName = SyntaxFactory.ParseName(uValue);
@@ -19,35 +19,97 @@ internal static CompilationUnitSyntax ReplaceUsings(this CompilationUnitSyntax r
1919
return root.WithUsings(newUsings);
2020
}
2121

22-
internal static CompilationUnitSyntax ReplaceNamespace(this CompilationUnitSyntax root, Func<string, string> replacer)
22+
internal static CompilationUnitSyntax ReplaceNamespace(this CompilationUnitSyntax root, Func<string, string> replacer)
2323
{
2424
var nsNode = (NamespaceDeclarationSyntax)root.Members[0];
2525
var nsValue = replacer.Invoke(nsNode.Name.ToString());
2626
var fullSchemaName = SyntaxFactory.ParseName($"{nsValue}{Environment.NewLine}");
2727
return root.ReplaceNode(nsNode, nsNode.WithName(fullSchemaName));
2828
}
2929

30-
internal static CompilationUnitSyntax ReplaceClassName(this CompilationUnitSyntax root, Func<string, string> replacer, Func<NamespaceDeclarationSyntax, ClassDeclarationSyntax> selector = null)
30+
internal static CompilationUnitSyntax ReplaceClassName(this CompilationUnitSyntax root, Func<string, string> replacer, Func<NamespaceDeclarationSyntax, ClassDeclarationSyntax> selector = null)
3131
{
3232
var nsNode = (NamespaceDeclarationSyntax)root.Members[0];
3333
var classNode = selector != null
3434
? selector.Invoke(nsNode)
3535
: (ClassDeclarationSyntax)nsNode.Members[0];
36-
var cnValue = replacer.Invoke(classNode.Identifier.ValueText);
36+
var cnValue = replacer.Invoke(classNode.Identifier.ValueText);
3737
var classIdentifier = SyntaxFactory.ParseToken($"{cnValue}{Environment.NewLine}");
3838
return root.ReplaceNode(classNode, classNode.WithIdentifier(classIdentifier));
3939
}
4040

41-
internal static CompilationUnitSyntax AddProperty(this CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, PropertyDeclarationSyntax propertyDeclaration)
41+
internal static CompilationUnitSyntax AddProperty(this CompilationUnitSyntax root, ref ClassDeclarationSyntax classDeclaration, PropertyDeclarationSyntax propertyDeclaration)
4242
{
4343
var newClass = classDeclaration.AddMembers(propertyDeclaration);
44-
return root.ReplaceNode(classDeclaration, newClass);
44+
root = root.ReplaceNode(classDeclaration, newClass);
45+
classDeclaration = newClass;
46+
return root;
4547
}
4648

47-
internal static CompilationUnitSyntax AddMethod(this CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, MethodDeclarationSyntax methodDeclaration)
49+
internal static CompilationUnitSyntax AddMethod(this CompilationUnitSyntax root, ref ClassDeclarationSyntax classDeclaration, MethodDeclarationSyntax methodDeclaration)
4850
{
4951
var newClass = classDeclaration.AddMembers(methodDeclaration);
50-
return root.ReplaceNode(classDeclaration, newClass);
52+
root = root.ReplaceNode(classDeclaration, newClass);
53+
classDeclaration = newClass;
54+
return root;
55+
}
56+
57+
internal static CompilationUnitSyntax AddConstructor(this CompilationUnitSyntax root, ref ClassDeclarationSyntax classDeclaration, ConstructorDeclarationSyntax constructorDeclaration)
58+
{
59+
var newClass = classDeclaration.AddMembers(constructorDeclaration);
60+
root = root.ReplaceNode(classDeclaration, newClass);
61+
classDeclaration = newClass;
62+
return root;
63+
}
64+
65+
internal static CompilationUnitSyntax AddCustomAttribute(this CompilationUnitSyntax root, ref MethodDeclarationSyntax methodDeclaration, string name, AttributeArgumentListSyntax arguments = default)
66+
{
67+
var attributes = methodDeclaration.AttributeLists.Add(
68+
SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList<AttributeSyntax>(
69+
SyntaxFactory.Attribute(SyntaxFactory.IdentifierName(name))
70+
.WithArgumentList(arguments)
71+
)).NormalizeWhitespace());
72+
73+
var newMethodDeclaration = methodDeclaration.WithAttributeLists(attributes);
74+
root = root.ReplaceNode(
75+
methodDeclaration,
76+
newMethodDeclaration
77+
);
78+
79+
methodDeclaration = newMethodDeclaration;
80+
81+
return root;
82+
}
83+
84+
internal static CompilationUnitSyntax AddCustomAttribute(this CompilationUnitSyntax root, ref ConstructorDeclarationSyntax constructorDeclaration, string name, AttributeArgumentListSyntax arguments = default)
85+
{
86+
var attributes = constructorDeclaration.AttributeLists.Add(
87+
SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList<AttributeSyntax>(
88+
SyntaxFactory.Attribute(SyntaxFactory.IdentifierName(name))
89+
.WithArgumentList(arguments)
90+
)).NormalizeWhitespace());
91+
92+
var newConstructorDeclaration = constructorDeclaration.WithAttributeLists(attributes);
93+
root = root.ReplaceNode(
94+
constructorDeclaration,
95+
newConstructorDeclaration
96+
);
97+
98+
constructorDeclaration = newConstructorDeclaration;
99+
100+
return root;
101+
}
102+
103+
internal static CompilationUnitSyntax AddObsoleteAttribute(this CompilationUnitSyntax root, ref MethodDeclarationSyntax methodDeclaration, string message = null)
104+
{
105+
var arguments = !string.IsNullOrWhiteSpace(message) ? SyntaxFactory.ParseAttributeArgumentList($"(\"{message}\")") : default;
106+
return root.AddCustomAttribute(ref methodDeclaration, "Obsolete", arguments);
107+
}
108+
109+
internal static CompilationUnitSyntax AddObsoleteAttribute(this CompilationUnitSyntax root, ref ConstructorDeclarationSyntax constructorDeclaration, string message = null)
110+
{
111+
var arguments = !string.IsNullOrWhiteSpace(message) ? SyntaxFactory.ParseAttributeArgumentList($"(\"{message}\")") : default;
112+
return root.AddCustomAttribute(ref constructorDeclaration, "Obsolete", arguments);
51113
}
52114
}
53115
}

0 commit comments

Comments
 (0)