diff --git a/src/BlueWest.EfMethods/AttributeSources/EfAddMethodsAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfAddMethodsAttributeSource.cs
index 05aff2d..7b38198 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfAddMethodsAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfAddMethodsAttributeSource.cs
@@ -31,6 +31,13 @@ namespace BlueWest.EfMethods.Sources
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Attribute for generating a method for creating a entity of the target property.")
+ .WriteLine("/// A typeof with the Create projection type.")
+ .WriteLine("/// The projection with the return data.")
+ .WriteLine("/// ");
+
builder
.WriteLine($"public {AttributeName}Attribute(Type createType = null, Type returnType = null){"{}"}")
.WriteLine();
diff --git a/src/BlueWest.EfMethods/AttributeSources/EfAddToListAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfAddToListAttributeSource.cs
index aac5979..e78f3dc 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfAddToListAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfAddToListAttributeSource.cs
@@ -29,6 +29,15 @@ namespace BlueWest.EfMethods.EfMethods.AttributeSources
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Attribute for generating a function to get many entities.")
+ .WriteLine("/// The nameof property of the list.")
+ .WriteLine("/// The projection with the creation data.")
+ .WriteLine("/// The projection type with the return data.")
+ .WriteLine("/// Nameof with look up key of the entity containing the list.")
+ .WriteLine("/// ");
+
builder
.WriteLine($"public {AttributeName}Attribute(string listPropertyNameof, Type createType, Type returnType, string primaryKeyNameof){"{}"}")
.WriteLine();
diff --git a/src/BlueWest.EfMethods/AttributeSources/EfGetListAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfGetListAttributeSource.cs
index 19a3ebb..6eff97f 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfGetListAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfGetListAttributeSource.cs
@@ -30,6 +30,14 @@ namespace BlueWest.Sources
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
+
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Gets records of a list.")
+ .WriteLine("/// A nameof with the containing list.")
+ .WriteLine("/// The projection with the return data.")
+ .WriteLine("/// The lookup key of the main entity.")
+ .WriteLine("/// ");
builder
.WriteLine($"public {AttributeName}Attribute(string listPropertyNameof, Type returnType, string primaryKeyNameof){"{}"}")
.WriteLine();
diff --git a/src/BlueWest.EfMethods/AttributeSources/EfGetManyAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfGetManyAttributeSource.cs
index 9a6ca5b..ff20982 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfGetManyAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfGetManyAttributeSource.cs
@@ -30,7 +30,11 @@ namespace BlueWest.EfMethods.Sources
.WriteLine("[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]")
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
-
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Gets many records of a entity.")
+ .WriteLine("/// The projection with the return data.")
+ .WriteLine("/// ");
builder
.WriteLine($"public {AttributeName}Attribute(Type returnType){"{}"}")
.WriteLine();
diff --git a/src/BlueWest.EfMethods/AttributeSources/EfGetOneByAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfGetOneByAttributeSource.cs
index d1c1cc9..56b8e7b 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfGetOneByAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfGetOneByAttributeSource.cs
@@ -29,6 +29,13 @@ namespace BlueWest.EfMethods.Sources
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Gets one record of a entity by a look up key.")
+ .WriteLine("/// The lookup key.")
+ .WriteLine("/// The projection with the return data.")
+ .WriteLine("/// ");
+
builder
.WriteLine($"public {AttributeName}Attribute(string bynameof, Type returnType)")
.WriteOpeningBracket()
diff --git a/src/BlueWest.EfMethods/AttributeSources/EfGetOneFromListAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfGetOneFromListAttributeSource.cs
index 3892e2a..cf51f28 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfGetOneFromListAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfGetOneFromListAttributeSource.cs
@@ -33,6 +33,15 @@ namespace BlueWest.Sources
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Gets one record of a list in a entity by the specified look up keys.")
+ .WriteLine("/// The lookup key of this entity.")
+ .WriteLine("/// A nameof with the list in the main type.")
+ .WriteLine("/// A nameof with the lookup key of the the list type.")
+ .WriteLine("/// The projection with the returning data.")
+ .WriteLine("/// ");
+
builder
.WriteLine($"public {AttributeName}Attribute(string entityPrimaryKeyNameof, string listMemberNameof, string listPrimaryKeyNameof, Type returnType){"{}"}")
.WriteLine();
diff --git a/src/BlueWest.EfMethods/AttributeSources/EfUpdateMethodsAttributeSource.cs b/src/BlueWest.EfMethods/AttributeSources/EfUpdateMethodsAttributeSource.cs
index f81cbfa..9039c12 100644
--- a/src/BlueWest.EfMethods/AttributeSources/EfUpdateMethodsAttributeSource.cs
+++ b/src/BlueWest.EfMethods/AttributeSources/EfUpdateMethodsAttributeSource.cs
@@ -27,6 +27,15 @@ namespace BlueWest.EfMethods.Sources
.WriteLine($"public sealed class {AttributeName}Attribute : Attribute")
.WriteOpeningBracket();
+
+ builder
+ .WriteLine("/// ")
+ .WriteLine("/// Updates a entity with projection data.")
+ .WriteLine("/// A projection type with the update data.")
+ .WriteLine("/// Type of the projection with the return data.")
+ .WriteLine("/// A nameof with the lookup key of this entity.")
+ .WriteLine("/// ");
+
builder
.WriteLine($"public {AttributeName}Attribute(Type updateType, Type returnType, string keyPropertyMemberName){"{}"}")
.WriteLine();
diff --git a/src/BlueWest.EfMethods/EfGeneratorContext.cs b/src/BlueWest.EfMethods/EfGeneratorContext.cs
index 148ca74..7c6ce0a 100644
--- a/src/BlueWest.EfMethods/EfGeneratorContext.cs
+++ b/src/BlueWest.EfMethods/EfGeneratorContext.cs
@@ -25,7 +25,6 @@ namespace BlueWest.EfMethods
public ImmutableArray Diagnostics { get; private set; }
public EfMethodsModel? Model { get; private set; }
protected Compilation Compilation { get; }
- protected INamedTypeSymbol MappingContextTypeSymbol { get; }
protected SourceGenerationOptions SourceGenerationOptions { get; }
protected TypeDeclarationSyntax TypeSyntax { get; }
@@ -136,10 +135,10 @@ namespace BlueWest.EfMethods
}
- protected string ExtractNameOfMemberName(MemberDeclarationSyntax memberDeclarationSyntax, string attributeName, SemanticModel? semanticModel = null, int skip = 0)
+ protected string ExtractNameOfMemberName(MemberDeclarationSyntax memberDeclarationSyntax, string attributeName, int skip = 0)
{
var attributeData = memberDeclarationSyntax.GetAttribute(attributeName);
- var sourceSymbol = ExtractNameOfMemberName(attributeData, semanticModel, skip);
+ var sourceSymbol = ExtractNameOfMemberName(attributeData, skip);
return sourceSymbol;
}
@@ -190,8 +189,9 @@ namespace BlueWest.EfMethods
return sourceTypeExpressionSyntax;
}
- protected string ExtractNameOfMemberName(SyntaxNode? attributeSyntax, SemanticModel semanticModel, int skip)
+ protected string ExtractNameOfMemberName(SyntaxNode? attributeSyntax, int skip)
{
+
if (attributeSyntax is null)
{
return string.Empty;
@@ -258,7 +258,7 @@ namespace BlueWest.EfMethods
var semanticModel = Compilation.GetSemanticModel(TypeSyntax.SyntaxTree);
// get containing class type information
- ClassDeclarationSyntax classDeclarationSyntax = TypeSyntax as ClassDeclarationSyntax;
+ ClassDeclarationSyntax classDeclarationSyntax = (TypeSyntax as ClassDeclarationSyntax)!;
// context name
var dbContextName = classDeclarationSyntax.Identifier.ValueText;
@@ -392,11 +392,11 @@ namespace BlueWest.EfMethods
var efAddAttributeTypeSymbols =
GetEntityTypeSymbol(uProperty, EfUpdateMethodsAttributeSource.AttributeName, semanticModel);
- var keyPropertyName = ExtractNameOfMemberName(uProperty, EfUpdateMethodsAttributeSource.AttributeName, semanticModel);
+ var keyPropertyName = ExtractNameOfMemberName(uProperty, EfUpdateMethodsAttributeSource.AttributeName);
var keyMemberType = FindTypeInfoOfMemberExpressionSyntax(semanticModel, TypeSyntax);
//var secondTypeInfo = FindSecondTypeInfoOfMemberExpressionSyntax(semanticModel, TypeSyntax);
- var keyMemberFullName = keyMemberType.Value.Type.ToDisplayString();
+ var keyMemberFullName = keyMemberType?.Type.ToDisplayString();
//var keyMemberName = keyMemberType.Value.Type.Name;
// Try grabbing string literal if there's no nameof in it
@@ -407,8 +407,6 @@ namespace BlueWest.EfMethods
.Token.ValueText ?? "Id";
}
- if (efAddAttributeTypeSymbols == null) return null;
-
string updateTypeIdentifierName = entityDataModel.EntityTypeIdentifierName;
string updateTypeFullName = entityDataModel.EntityTypeFullName;
string returnTypeIdentifierName = entityDataModel.EntityTypeIdentifierName;
@@ -429,14 +427,13 @@ namespace BlueWest.EfMethods
return new EfUpdateMethodsModel(entityDataModel, updateTypeFullName, updateTypeIdentifierName, returnTypeFullName,
- returnTypeIdentifierName, keyPropertyName, keyMemberFullName);
+ returnTypeIdentifierName, keyPropertyName, keyMemberFullName ?? string.Empty);
}
private EfGetOneWithModel ExtractEfGetEntityWithModel(MemberDeclarationSyntax uProperty, SemanticModel semanticModel, EfEntityDataModel entityDataModel)
{
var efTypeofSymbols =GetEntityTypeSymbol(uProperty, EfGetOneByAttributeSource.AttributeName, semanticModel);
- if (efTypeofSymbols == null) return null;
string returnTypeIdentifierName = entityDataModel.EntityTypeIdentifierName;
string returnTypeFullName = entityDataModel.EntityTypeFullName;
@@ -458,7 +455,6 @@ namespace BlueWest.EfMethods
{
var efTypeofSymbols =GetEntityTypeSymbol(uProperty, EfGetOneByAttributeSource.AttributeName, semanticModel);
- if (efTypeofSymbols == null) return null;
string returnTypeIdentifierName = entityDataModel.EntityTypeIdentifierName;
string returnTypeFullName = entityDataModel.EntityTypeFullName;
@@ -481,20 +477,11 @@ namespace BlueWest.EfMethods
{
var efTypeofSymbols = GetEntityTypeSymbol(uProperty, EfGetOneByAttributeSource.AttributeName, semanticModel);
- var byParamPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneByAttributeSource.AttributeName, semanticModel);
+ var byParamPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneByAttributeSource.AttributeName);
var keyMemberType = FindTypeInfoOfMemberExpressionSyntax(semanticModel, TypeSyntax);
- var byParamFullTypeName = keyMemberType.Value.Type.ToDisplayString();
-
- // Try grabbing string literal if there's no nameof in it
- if (byParamPropertyName == string.Empty)
- {
- byParamPropertyName = GetEntityStringLiteralSymbol(TypeSyntax, EfGetOneByAttributeSource.AttributeName, semanticModel)
- .FirstOrDefault()?
- .Token.ValueText ?? "Id";
- }
-
- if (efTypeofSymbols == null) return null;
+ var byParamFullTypeName = keyMemberType?.Type.ToDisplayString();
+
string returnTypeIdentifierName = entityDataModel.EntityTypeIdentifierName;
string returnTypeFullName = entityDataModel.EntityTypeFullName;
@@ -508,7 +495,7 @@ namespace BlueWest.EfMethods
}
- return new EfGetOneByModel(entityDataModel, byParamPropertyName, byParamFullTypeName, returnTypeFullName, returnTypeIdentifierName);
+ return new EfGetOneByModel(entityDataModel, byParamPropertyName, byParamFullTypeName ?? string.Empty, returnTypeFullName, returnTypeIdentifierName);
}
@@ -517,10 +504,12 @@ namespace BlueWest.EfMethods
var efTypeofSymbols = GetEntityTypeSymbol(uProperty, EfGetListAttributeSource.AttributeName, semanticModel);
- var listPropertyName = ExtractNameOfMemberName(uProperty, EfGetListAttributeSource.AttributeName, semanticModel);
- var keyPropertyName = ExtractNameOfMemberName(uProperty, EfGetListAttributeSource.AttributeName, semanticModel, 1);;
+ var listPropertyName = ExtractNameOfMemberName(uProperty, EfGetListAttributeSource.AttributeName);
+ var keyPropertyName = ExtractNameOfMemberName(uProperty, EfGetListAttributeSource.AttributeName, 1);;
var keyMemberType = FindTypeInfoOfMemberExpressionSyntax(semanticModel, TypeSyntax);
+#pragma warning disable CS8629
var keyFullTypeName = keyMemberType.Value.Type.ToDisplayString();
+#pragma warning restore CS8629
// Try grabbing string literal if there's no nameof in it
@@ -550,11 +539,15 @@ namespace BlueWest.EfMethods
{
- var listPropertyName = ExtractNameOfMemberName(uProperty, EfAddToListAttributeSource.AttributeName, semanticModel);
- var keyPropertyName = ExtractNameOfMemberName(uProperty, EfAddToListAttributeSource.AttributeName, semanticModel, 1);;
+ var listPropertyName = ExtractNameOfMemberName(uProperty, EfAddToListAttributeSource.AttributeName);
+ var keyPropertyName = ExtractNameOfMemberName(uProperty, EfAddToListAttributeSource.AttributeName, 1);;
var keyMemberType = FindTypeInfoOfMemberExpressionSyntax(semanticModel, TypeSyntax);
+#pragma warning disable CS8629
var keyFullTypeName = keyMemberType.Value.Type.ToDisplayString();
+#pragma warning restore CS8629
+#pragma warning disable CS8629
var listEntityTypeInfo = (FindTypeInfoOfMemberExpressionSyntax(semanticModel, TypeSyntax, 2).Value.Type as INamedTypeSymbol).TypeArguments.FirstOrDefault();
+#pragma warning restore CS8629
var listEntityIdentifierName = listEntityTypeInfo.Name;
var listEntityFullTypeName = listEntityTypeInfo.ToDisplayString();
@@ -611,17 +604,19 @@ namespace BlueWest.EfMethods
var efTypeofSymbols = GetEntityTypeSymbol(uProperty, EfGetOneFromListAttributeSource.AttributeName, semanticModel);
var attributeSymbol = uProperty.GetAttribute(EfGetOneFromListAttributeSource.AttributeName);
- var keyPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneFromListAttributeSource.AttributeName, semanticModel);
- var listKeyPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneFromListAttributeSource.AttributeName, semanticModel, 2);
+ var keyPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneFromListAttributeSource.AttributeName);
+ var listKeyPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneFromListAttributeSource.AttributeName, 2);
+#pragma warning disable CS8604
var keyMemberType = FindTypeInfoOfMemberExpressionSyntax(semanticModel, attributeSymbol);
+#pragma warning restore CS8604
var listKeyTypeInfo = FindTypeInfoOfMemberExpressionSyntax(semanticModel, attributeSymbol, 0);
- var keyFullTypeName = keyMemberType.Value.Type.ToDisplayString();
- var listEntityTypeInfo = (FindTypeInfoOfMemberExpressionSyntax(semanticModel, attributeSymbol, 1).Value.Type as INamedTypeSymbol).TypeArguments.FirstOrDefault();
+ var keyFullTypeName = keyMemberType?.Type.ToDisplayString();
+ var listEntityTypeInfo = (FindTypeInfoOfMemberExpressionSyntax(semanticModel, attributeSymbol, 1)?.Type as INamedTypeSymbol).TypeArguments.FirstOrDefault();
var listEntityIdentifierName = listEntityTypeInfo.Name;
var listEntityFullTypeName = listEntityTypeInfo.ToDisplayString();
- var listKeyFullTypeName =listKeyTypeInfo.Value.Type.ToDisplayString();;
- var listKeyTypeName = listKeyTypeInfo.Value.Type.Name;
- var listPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneFromListAttributeSource.AttributeName, semanticModel, 1);;
+ var listKeyFullTypeName =listKeyTypeInfo?.Type.ToDisplayString();;
+ var listKeyTypeName = listKeyTypeInfo?.Type.Name;
+ var listPropertyName = ExtractNameOfMemberName(uProperty, EfGetOneFromListAttributeSource.AttributeName, 1);;
string returnTypeIdentifierName = entityDataModel.EntityTypeIdentifierName;
@@ -640,10 +635,10 @@ namespace BlueWest.EfMethods
listEntityIdentifierName,
listEntityFullTypeName,
keyPropertyName,
- keyFullTypeName,
+ keyFullTypeName ?? string.Empty,
listKeyPropertyName,
- listKeyFullTypeName,
- listKeyTypeName,
+ listKeyFullTypeName?? string.Empty,
+ listKeyTypeName?? string.Empty,
returnTypeIdentifierName,
returnTypeFullName);
}
@@ -653,7 +648,9 @@ namespace BlueWest.EfMethods
{
var member = (memberDeclarationSyntax as PropertyDeclarationSyntax).Type;
var genericSyntax = member as GenericNameSyntax;
+#pragma warning disable CS8604
var typeInfo = semanticModel.GetTypeInfo( genericSyntax);
+#pragma warning restore CS8604
var firstTypeArgument = (typeInfo.ConvertedType as INamedTypeSymbol).TypeArguments[0];
return firstTypeArgument;
}
diff --git a/src/BlueWest.EfMethods/EfMethodsSource.cs b/src/BlueWest.EfMethods/EfMethodsSource.cs
index dd2c6b1..382962b 100644
--- a/src/BlueWest.EfMethods/EfMethodsSource.cs
+++ b/src/BlueWest.EfMethods/EfMethodsSource.cs
@@ -27,7 +27,7 @@ namespace BlueWest.EfMethods.Sources
.WriteLine($"namespace {model.Namespace}")
.WriteOpeningBracket()
// Class declaration
- .WriteLine($"public static partial class {model.ContextTypeName}Extensions")
+ .WriteLine($"internal static partial class {model.ContextTypeName}Extensions")
.WriteOpeningBracket()
.WriteLine();