Skip to content

Commit 1125f19

Browse files
committed
Change all to records
1 parent 796b791 commit 1125f19

File tree

5 files changed

+167
-13
lines changed

5 files changed

+167
-13
lines changed

src/GeneratorHelper/Foundation.Crawler/Extensions/New/DtoExtensions.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,25 @@ namespace Foundation.Crawler.Extensions.New
1717
public static class DtoExtensions
1818
{
1919
public static IEnumerable<IPropertySymbol> DtoForeignProperties(
20-
this ClassDeclarationSyntax dto,
20+
this RecordDeclarationSyntax dto,
2121
SemanticModel semanticModel
2222
)
2323
{
2424
return dto.GetAllPropertiesWithBaseClass(semanticModel, true)
2525
.Where(x => x.HasAttribute(AttributeNames.ForeignKey));
2626
}
2727

28-
public static IncrementalValueProvider<ImmutableArray<ClassDeclarationSyntax>> Dtos(
28+
public static IncrementalValueProvider<ImmutableArray<RecordDeclarationSyntax>> Dtos(
2929
this IncrementalGeneratorInitializationContext context
3030
)
3131
{
3232
var dtos = context
3333
.SyntaxProvider.ForAttributeWithMetadataName(
3434
typeof(DtoAttribute).FullName,
35-
static (n, _) => n is ClassDeclarationSyntax,
35+
static (n, _) => n is RecordDeclarationSyntax,
3636
static (context, cancellationToken) =>
3737
{
38-
ClassDeclarationSyntax classDeclarationSyntax = (ClassDeclarationSyntax)
38+
RecordDeclarationSyntax classDeclarationSyntax = (RecordDeclarationSyntax)
3939
context.TargetNode;
4040

4141
return classDeclarationSyntax.HasAttribute<DtoAttribute>()
@@ -49,10 +49,10 @@ this IncrementalGeneratorInitializationContext context
4949
var tenantDtos = context
5050
.SyntaxProvider.ForAttributeWithMetadataName(
5151
typeof(TenantDtoAttribute).FullName,
52-
static (n, _) => n is ClassDeclarationSyntax,
52+
static (n, _) => n is RecordDeclarationSyntax,
5353
static (context, cancellationToken) =>
5454
{
55-
ClassDeclarationSyntax classDeclarationSyntax = (ClassDeclarationSyntax)
55+
RecordDeclarationSyntax classDeclarationSyntax = (RecordDeclarationSyntax)
5656
context.TargetNode;
5757

5858
return classDeclarationSyntax.HasAttribute<TenantDtoAttribute>()
@@ -109,7 +109,7 @@ this PropertyDeclarationSyntax foreignKeyProperty
109109
return result;
110110
}
111111

112-
public static string GetFullModelName(this ClassDeclarationSyntax dto, bool plural = false)
112+
public static string GetFullModelName(this RecordDeclarationSyntax dto, bool plural = false)
113113
{
114114
var name = dto.Identifier.Text.ReplaceLast("Dto", "Full");
115115
if (plural)
@@ -119,7 +119,7 @@ public static string GetFullModelName(this ClassDeclarationSyntax dto, bool plur
119119
return name;
120120
}
121121

122-
public static string GetEntityName(this ClassDeclarationSyntax dto, bool plural = false)
122+
public static string GetEntityName(this RecordDeclarationSyntax dto, bool plural = false)
123123
{
124124
var name = dto.Identifier.Text.ReplaceLast("Dto", "Entity");
125125
if (plural)
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Generators.Base.Extensions.Common;
5+
using Microsoft.CodeAnalysis;
6+
using Microsoft.CodeAnalysis.CSharp;
7+
using Microsoft.CodeAnalysis.CSharp.Syntax;
8+
9+
namespace Generators.Base.Extensions.New
10+
{
11+
public static class RecordDeclarationSyntaxExtensions
12+
{
13+
public static RecordDeclarationSyntax Construct(
14+
this RecordDeclarationSyntax symbol,
15+
params string[] typeArguments
16+
)
17+
{
18+
// Erstelle eine Liste der TypeArgumentSyntax-Knoten basierend auf den übergebenen Strings
19+
var typeArgumentList = SyntaxFactory.TypeArgumentList(
20+
SyntaxFactory.SeparatedList<TypeSyntax>(
21+
typeArguments.Select(arg => SyntaxFactory.ParseTypeName(arg))
22+
)
23+
);
24+
25+
// Erstelle eine neue BaseList, wenn Typargumente vorhanden sind
26+
var newBaseList =
27+
symbol.BaseList != null
28+
? symbol.BaseList.WithTypes(
29+
SyntaxFactory.SeparatedList<BaseTypeSyntax>(
30+
symbol.BaseList.Types.Select(bt =>
31+
bt.WithType(
32+
SyntaxFactory.GenericName(
33+
((IdentifierNameSyntax)bt.Type).Identifier,
34+
typeArgumentList
35+
)
36+
)
37+
)
38+
)
39+
)
40+
: null;
41+
42+
// Rückgabe einer neuen Klasse mit den modifizierten Basisklassen
43+
return symbol.WithBaseList(newBaseList);
44+
}
45+
46+
public static bool HasAttribute<TAttribute>(
47+
this RecordDeclarationSyntax RecordDeclarationSyntax
48+
)
49+
{
50+
// Check if the type declaration has the BaseContext attribute
51+
foreach (var attributeList in RecordDeclarationSyntax.AttributeLists)
52+
{
53+
foreach (var attribute in attributeList.Attributes)
54+
{
55+
var sdf = attribute.Name.ToFullString();
56+
if (attribute.Name.ToString() == typeof(TAttribute).RealAttributeName())
57+
{
58+
return true;
59+
}
60+
}
61+
}
62+
return false;
63+
}
64+
65+
public static string GetName(this RecordDeclarationSyntax RecordDeclaration)
66+
{
67+
return RecordDeclaration.Identifier.Text;
68+
}
69+
70+
public static string GetNamespace(this RecordDeclarationSyntax RecordDeclaration)
71+
{
72+
// Get the root of the syntax tree
73+
var root = RecordDeclaration.SyntaxTree.GetRoot();
74+
75+
// Traverse up to find the NamespaceDeclarationSyntax or CompilationUnitSyntax
76+
var namespaceDeclaration = RecordDeclaration
77+
.Ancestors()
78+
.OfType<NamespaceDeclarationSyntax>()
79+
.FirstOrDefault();
80+
if (namespaceDeclaration != null)
81+
{
82+
return namespaceDeclaration.Name.ToString();
83+
}
84+
85+
// If not found, check the compilation unit (the top-level container)
86+
var compilationUnit = RecordDeclaration
87+
.Ancestors()
88+
.OfType<CompilationUnitSyntax>()
89+
.FirstOrDefault();
90+
if (compilationUnit != null)
91+
{
92+
return string.Empty; // No namespace, top-level code
93+
}
94+
95+
// Return null or empty if not found
96+
return null;
97+
}
98+
99+
public static IEnumerable<IPropertySymbol>? GetAllPropertiesWithBaseClass(
100+
this RecordDeclarationSyntax RecordDeclaration,
101+
SemanticModel semanticModel,
102+
bool onlyPublic
103+
)
104+
{
105+
var allProperties = new List<IPropertySymbol>();
106+
107+
var classSymbol =
108+
semanticModel.GetDeclaredSymbol(RecordDeclaration) as INamedTypeSymbol;
109+
if (classSymbol == null)
110+
return null;
111+
112+
allProperties = classSymbol.GetAllProperties(true);
113+
if (onlyPublic)
114+
{
115+
return allProperties.Where(p => p.DeclaredAccessibility == Accessibility.Public);
116+
}
117+
118+
return allProperties;
119+
}
120+
121+
private static IEnumerable<INamedTypeSymbol> GetBaseTypes(INamedTypeSymbol type)
122+
{
123+
var baseTypes = new List<INamedTypeSymbol>();
124+
var currentType = type.BaseType;
125+
126+
while (currentType != null)
127+
{
128+
baseTypes.Add(currentType);
129+
currentType = currentType.BaseType;
130+
}
131+
132+
return baseTypes;
133+
}
134+
135+
public static List<PropertyDeclarationSyntax> GetAllProperties(
136+
this RecordDeclarationSyntax RecordDeclaration,
137+
bool onlyPublic
138+
)
139+
{
140+
var properties = new List<PropertyDeclarationSyntax>();
141+
142+
var classProperties = RecordDeclaration.Members.OfType<PropertyDeclarationSyntax>();
143+
if (onlyPublic)
144+
{
145+
classProperties = classProperties.Where(p =>
146+
p.Modifiers.Any(m => m.IsKind(SyntaxKind.PublicKeyword))
147+
);
148+
}
149+
properties.AddRange(classProperties);
150+
151+
return properties.ToList();
152+
}
153+
}
154+
}

src/Generators/Foundation/Codelisk.Foundation.Generator/Generators/EntityGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public override void Initialize(IncrementalGeneratorInitializationContext contex
4646
(string, string)? replace
4747
)>
4848
{
49-
(result, "Entities", ("namespace <global namespace>;", "")),
49+
(result, "Entities", ("public partial class ", "public partial record ")),
5050
};
5151

5252
AddSourceHelper.Add(sourceProductionContext, codeBuildersTuples);
@@ -56,7 +56,7 @@ public override void Initialize(IncrementalGeneratorInitializationContext contex
5656

5757
private static IReadOnlyList<ClassBuilder> Class(
5858
CodeBuilder builder,
59-
ClassDeclarationSyntax dto,
59+
RecordDeclarationSyntax dto,
6060
Compilation compilation
6161
)
6262
{

src/Generators/Foundation/Codelisk.Foundation.Generator/Generators/ExtensionsGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public override void Initialize(IncrementalGeneratorInitializationContext contex
5050

5151
private static List<CodeBuilder?> Class(
5252
CodeBuilder builder,
53-
ImmutableArray<ClassDeclarationSyntax> dtos,
53+
ImmutableArray<RecordDeclarationSyntax> dtos,
5454
Compilation compilation
5555
)
5656
{

src/Generators/Foundation/Codelisk.Foundation.Generator/Generators/FullModelGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ public override void Initialize(IncrementalGeneratorInitializationContext contex
5656

5757
private static IReadOnlyList<ClassBuilder> Class(
5858
CodeBuilder builder,
59-
ClassDeclarationSyntax dto,
60-
ImmutableArray<ClassDeclarationSyntax> dtos,
59+
RecordDeclarationSyntax dto,
60+
ImmutableArray<RecordDeclarationSyntax> dtos,
6161
Compilation compilation
6262
)
6363
{

0 commit comments

Comments
 (0)