Skip to content

Commit

Permalink
Replace Configuration.PropertyAccessorBodyWriter by GenerationContext…
Browse files Browse the repository at this point in the history
….OnDataPropertyGeneration
  • Loading branch information
Husqvik committed Aug 25, 2024
1 parent 1354b69 commit 1514c7c
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 62 deletions.
19 changes: 15 additions & 4 deletions src/GraphQlClientGenerator/Extensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,25 @@ public static class Extensions
public static GraphQlFieldType UnwrapIfNonNull(this GraphQlFieldType graphQlType) =>
graphQlType.Kind == GraphQlTypeKind.NonNull ? graphQlType.OfType : graphQlType;

public static bool IsComplex(this GraphQlTypeKind graphQlTypeKind) =>
internal static bool IsComplex(this GraphQlTypeKind graphQlTypeKind) =>
graphQlTypeKind is GraphQlTypeKind.Object or GraphQlTypeKind.Interface or GraphQlTypeKind.Union;

public static IEnumerable<GraphQlType> GetComplexTypes(this GraphQlSchema schema) =>
internal static IEnumerable<GraphQlType> GetComplexTypes(this GraphQlSchema schema) =>
schema.Types.Where(t => t.Kind.IsComplex() && !t.IsBuiltIn());

public static IEnumerable<GraphQlType> GetInputObjectTypes(this GraphQlSchema schema) =>
internal static IEnumerable<GraphQlType> GetInputObjectTypes(this GraphQlSchema schema) =>
schema.Types.Where(t => t.Kind == GraphQlTypeKind.InputObject && !t.IsBuiltIn());

public static bool IsBuiltIn(this GraphQlType graphQlType) => graphQlType.Name is not null && graphQlType.Name.StartsWith("__");
internal static bool IsBuiltIn(this GraphQlType graphQlType) => graphQlType.Name is not null && graphQlType.Name.StartsWith("__");

internal static string ToSetterAccessibilityPrefix(this PropertyAccessibility accessibility) =>
accessibility switch
{
PropertyAccessibility.Public => null,
PropertyAccessibility.Protected => "protected ",
PropertyAccessibility.Internal => "internal ",
PropertyAccessibility.ProtectedInternal => "protected internal ",
PropertyAccessibility.Private => "private ",
_ => throw new NotSupportedException()
};
}
34 changes: 34 additions & 0 deletions src/GraphQlClientGenerator/GenerationContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,39 @@ protected virtual void Initialize()

public abstract void BeforeDataPropertyGeneration(PropertyGenerationContext context);

public virtual void OnDataPropertyGeneration(PropertyGenerationContext context)
{
var generateBackingFields = _configuration.PropertyGeneration == PropertyGenerationOption.BackingField;
if (generateBackingFields)
{
var useCompatibleVersion = Configuration.CSharpVersion == CSharpVersion.Compatible;
Writer.Write(" { get");
Writer.Write(useCompatibleVersion ? " { return " : " => ");
Writer.Write(context.PropertyBackingFieldName);
Writer.Write(";");

if (useCompatibleVersion)
Writer.Write(" }");

Writer.Write(context.SetterAccessibility.ToSetterAccessibilityPrefix());
Writer.Write(" set");
Writer.Write(useCompatibleVersion ? " { " : " => ");
Writer.Write(context.PropertyBackingFieldName);
Writer.Write(" = value;");

if (useCompatibleVersion)
Writer.Write(" }");

Writer.Write(" }");
}
else
{
Writer.Write(" { get; ");
Writer.Write(context.SetterAccessibility.ToSetterAccessibilityPrefix());
Writer.Write("set; }");
}
}

public abstract void AfterDataPropertyGeneration(PropertyGenerationContext context);

public abstract void AfterGeneration();
Expand Down Expand Up @@ -512,5 +545,6 @@ public enum PropertyAccessibility
Public,
Internal,
Protected,
ProtectedInternal,
Private
}
24 changes: 2 additions & 22 deletions src/GraphQlClientGenerator/GraphQlGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -517,31 +517,11 @@ private void GenerateDataClassBody(ObjectGenerationContext objectContext, IReadO
DecorateWithJsonPropertyAttribute = true,
RequiresRawName = requiresRawName
},
(t, propertyGenerationContext) =>
{
if (generateBackingFields)
writer.Write(_configuration.PropertyAccessorBodyWriter(propertyGenerationContext.PropertyBackingFieldName, t));
else
{
writer.Write(" { get; ");
writer.Write(SetterAccessibilityPrefix(propertyGenerationContext.SetterAccessibility));
writer.Write("set; }");
}
},
(_, propertyGenerationContext) => context.OnDataPropertyGeneration(propertyGenerationContext),
context);
}
}

private static string SetterAccessibilityPrefix(PropertyAccessibility accessibility) =>
accessibility switch
{
PropertyAccessibility.Public => null,
PropertyAccessibility.Protected => "protected ",
PropertyAccessibility.Internal => "internal ",
PropertyAccessibility.Private => "private ",
_ => throw new NotSupportedException()
};

private void GenerateInputDataClassBody(ObjectGenerationContext objectContext, IEnumerable<IGraphQlMember> members, GenerationContext context)
{
var writer = context.Writer;
Expand Down Expand Up @@ -609,7 +589,7 @@ private void GenerateInputDataClassBody(ObjectGenerationContext objectContext, I

writer.Write(indentation);
writer.Write(" ");
writer.Write(SetterAccessibilityPrefix(propertyGenerationContext.SetterAccessibility));
writer.Write(propertyGenerationContext.SetterAccessibility.ToSetterAccessibilityPrefix());
writer.Write("set");
writer.Write(useCompatibleSyntax ? " { " : " => ");
writer.Write(kvp.Key);
Expand Down
37 changes: 1 addition & 36 deletions src/GraphQlClientGenerator/GraphQlGeneratorConfiguration.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
using System.Text;

namespace GraphQlClientGenerator;

public delegate string GetDataPropertyAccessorBodiesDelegate(string backingFieldName, ScalarFieldTypeDescription backingFieldType);
namespace GraphQlClientGenerator;

public class GraphQlGeneratorConfiguration
{
Expand Down Expand Up @@ -68,11 +64,6 @@ public class GraphQlGeneratorConfiguration
/// </summary>
public IScalarFieldTypeMappingProvider ScalarFieldTypeMappingProvider { get; set; }

/// <summary>
/// Used for custom data property accessor bodies generation; applicable only when <code>PropertyGeneration = PropertyGenerationOption.BackingField</code>.
/// </summary>
public GetDataPropertyAccessorBodiesDelegate PropertyAccessorBodyWriter { get; set; }

public bool FileScopedNamespaces { get; set; }

public DataClassMemberNullability DataClassMemberNullability { get; set; }
Expand All @@ -86,7 +77,6 @@ public void Reset()
CustomClassNameMapping.Clear();
CSharpVersion = CSharpVersion.Compatible;
ScalarFieldTypeMappingProvider = DefaultScalarFieldTypeMappingProvider.Instance;
PropertyAccessorBodyWriter = GeneratePropertyAccessors;
CodeDocumentationType = CodeDocumentationType.Disabled;
IncludeDeprecatedFields = false;
FloatTypeMapping = FloatTypeMapping.Decimal;
Expand All @@ -102,31 +92,6 @@ public void Reset()
FileScopedNamespaces = false;
DataClassMemberNullability = DataClassMemberNullability.AlwaysNullable;
}

public string GeneratePropertyAccessors(string backingFieldName, ScalarFieldTypeDescription backingFieldType)
{
var useCompatibleVersion = CSharpVersion == CSharpVersion.Compatible;
var builder = new StringBuilder();
builder.Append(" { get");
builder.Append(useCompatibleVersion ? " { return " : " => ");
builder.Append(backingFieldName);
builder.Append(";");

if (useCompatibleVersion)
builder.Append(" }");

builder.Append(" set");
builder.Append(useCompatibleVersion ? " { " : " => ");
builder.Append(backingFieldName);
builder.Append(" = value;");

if (useCompatibleVersion)
builder.Append(" }");

builder.Append(" }");

return builder.ToString();
}
}

public enum EnumValueNamingOption
Expand Down

0 comments on commit 1514c7c

Please sign in to comment.