Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using JetBrains.Annotations;
using EasySourceGenerators.Abstractions.Method;
using JetBrains.Annotations;

namespace EasySourceGenerators.Abstractions;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
namespace EasySourceGenerators.Abstractions;
using EasySourceGenerators.Abstractions.Method;

namespace EasySourceGenerators.Abstractions;

public interface IGeneratorsFactory
{
IMethodBodyBuilderStage1 StartFluentApiBuilderForBody();
IMethodBuilderStage1 StartFluentApiBuilderForMethod();
}
61 changes: 54 additions & 7 deletions EasySourceGenerators.Abstractions/Method/IMethodBuilderStage1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ public interface IMethodBuilderStage3ReturningVoid

public interface IMethodBuilderStage3<TReturnType>
{
IMethodBuilderStage4NoParam WithNoParameters();
IMethodBuilderStage4NoParam<TReturnType> WithNoParameters();

IMethodBuilderStage4<TParam1> WithParameter<TParam1>();
IMethodBuilderStage4 WithParameter(Type param1);
IMethodBuilderStage4 WithParameter(string param1);
IMethodBuilderStage4 WithParameter(Func<Type> param1Factory);
IMethodBuilderStage4 WithParameter(Func<string> param1Factory);
IMethodBuilderStage4<TParam1, TReturnType> WithParameter<TParam1>();
IMethodBuilderStage4WithSomeParam<TReturnType> WithParameter(Type param1);
IMethodBuilderStage4WithSomeParam<TReturnType> WithParameter(string param1);
IMethodBuilderStage4WithSomeParam<TReturnType> WithParameter(Func<Type> param1Factory);
IMethodBuilderStage4WithSomeParam<TReturnType> WithParameter(Func<string> param1Factory);
}

public interface IMethodBuilderStage3WithSomeReturnType
Expand All @@ -52,5 +52,52 @@ public interface IMethodBuilderStage3WithSomeReturnType

public interface IMethodBuilderStage4ReturnVoidNoParam
{

IMethodBodyGenerator UseProvidedBody(Action body);
}

public interface IMethodBuilderStage4ReturnVoid<TParam1>
{
IMethodBodyGenerator UseProvidedBody(Action<TParam1> body);
}

public interface IMethodBuilderStage4ReturnVoid
{
IMethodBodyGenerator UseProvidedBody(Action<object> body);
}

public interface IMethodBuilderStage4NoParam<TReturnType>
{
IMethodBodyGenerator UseProvidedBody(Func<TReturnType> body);
IMethodBodyGenerator BodyReturningConstant(Func<TReturnType> constantValueFactory);
}

public interface IMethodBuilderStage4<TParam1, TReturnType>
{
IMethodBodyGenerator UseProvidedBody(Func<TParam1, TReturnType> body);
IMethodBodyGenerator BodyReturningConstant(Func<TReturnType> constantValueFactory);
IMethodBodyGeneratorSwitchBody<TParam1, TReturnType> BodyWithSwitchStatement();
}

public interface IMethodBuilderStage4WithSomeParam<TReturnType>
{
IMethodBodyGenerator UseProvidedBody(Func<object, TReturnType> body);
IMethodBodyGenerator BodyReturningConstant(Func<TReturnType> constantValueFactory);
}

public interface IMethodBuilderStage4WithSomeReturnTypeNoParam
{
IMethodBodyGenerator UseProvidedBody(Func<object> body);
IMethodBodyGenerator BodyReturningConstant(Func<object> constantValueFactory);
}

public interface IMethodBuilderStage4WithSomeReturnType<TParam1>
{
IMethodBodyGenerator UseProvidedBody(Func<TParam1, object> body);
IMethodBodyGenerator BodyReturningConstant(Func<object> constantValueFactory);
}

public interface IMethodBuilderStage4WithSomeReturnTypeWithSomeParam
{
IMethodBodyGenerator UseProvidedBody(Func<object, object> body);
IMethodBodyGenerator BodyReturningConstant(Func<object> constantValueFactory);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

// ReSharper disable TypeParameterCanBeVariant - not available for every overload, so not used for consistency

public interface IMethodBodyBuilderStage1
public interface IMethodBodyBuilderStage1 : IMethodBodyBuilder
{
IMethodBodyBuilderStage2 ForMethod();
}
Expand Down Expand Up @@ -41,7 +41,7 @@ public interface IMethodBodyBuilderStage4ReturnVoid<TParam1>
IMethodBodyGenerator UseProvidedBody(Action<TParam1> body);
}

public interface IMethodBodyBuilderStage4<TParam1, in TReturnType>
public interface IMethodBodyBuilderStage4<TParam1, TReturnType>
{
IMethodBodyGenerator UseProvidedBody(Func<TParam1, TReturnType> body);
IMethodBodyGenerator BodyRetuningConstant(Func<TReturnType> constantValueFactory);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,34 @@
namespace EasySourceGenerators.Abstractions;

public interface IMethodBodyGenerator;
public interface IMethodBodyGenerator;

public interface IMethodBodyGeneratorWithNoParameter : IMethodBodyGenerator;

public interface IMethodBodyGenerator<TReturnType> : IMethodBodyGenerator
{
IMethodBodyGeneratorWithNoParameter BodyReturningConstantValue(Func<object> body);
}

public interface IMethodBodyGenerator<TArg1, TReturnType> : IMethodBodyGenerator
{
IMethodBodyGeneratorSwitchBody<TArg1, TReturnType> GenerateSwitchBody();
}

public interface IMethodBodyGeneratorStage0
{
IMethodBodyGeneratorWithNoParameter CreateImplementation();
IMethodBodyGenerator<TReturnType> CreateImplementation<TReturnType>();
IMethodBodyGenerator<TArg1, TReturnType> CreateImplementation<TArg1, TReturnType>();
IMethodBodyBuilder ForMethod();
}

public interface IMethodBodyBuilder
{
IMethodBodyBuilder<TArg1> WithParameter<TArg1>();
IMethodBodyGenerator<TReturnType> WithReturnType<TReturnType>();
}

public interface IMethodBodyBuilder<TArg1>
{
IMethodBodyGenerator<TArg1, TReturnType> WithReturnType<TReturnType>();
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,30 @@
namespace EasySourceGenerators.Abstractions;

public interface IMethodBodyGeneratorSwitchBody<TParam1, in TReturnType>
// ReSharper disable TypeParameterCanBeVariant - variance removed for simplicity

public interface IMethodBodyGeneratorSwitchBody<TParam1, TReturnType>
{
IMethodBodyGeneratorSwitchBodyCase<TParam1, TReturnType> ForCases(params TParam1[] cases);
IMethodBodyGeneratorSwitchBodyCase<TParam1, TReturnType> ForCases(params object[] cases);
IMethodBodyGeneratorSwitchBodyDefaultCase<TParam1, TReturnType> ForDefaultCase();
}

public interface IMethodBodyGeneratorSwitchBodyCase<out TParam1, in TReturnType>
public interface IMethodBodyGeneratorSwitchBodyCase<TParam1, TReturnType>
{
/// <summary>
/// Specific case(s) will use the body provided.
/// </summary>
/// <param name="body">During code generation this body will be emitted.</param>
IMethodBodyGeneratorSwitchBodyCaseStage2<TParam1, TReturnType> UseProvidedBody(Func<TParam1, TReturnType> body);
IMethodBodyGeneratorSwitchBody<TParam1, TReturnType> UseProvidedBody(Func<TParam1, TReturnType> body);

/// <summary>
/// Specify case(s) will return a constant value.
/// </summary>
/// <param name="constantValueFactory">During code generation, this delegate will be run to calculate the constant value.
/// The delegate will not be used in the generated code. Only the value it produces after it's executed during code generation.</param>
IMethodBodyGeneratorSwitchBodyCaseStage2<TParam1, TReturnType> ReturnConstantValue(Func<TParam1, TReturnType> constantValueFactory);
}

public interface IMethodBodyGeneratorSwitchBodyCaseStage2<out TParam1, in TReturnType>
{
IMethodBodyGeneratorSwitchBodyDefaultCase<TParam1, TReturnType> ForDefaultCase();
IMethodBodyGeneratorSwitchBody<TParam1, TReturnType> ReturnConstantValue(Func<TParam1, TReturnType> constantValueFactory);
}

public interface IMethodBodyGeneratorSwitchBodyDefaultCase<out TParam1, in TReturnType> : IMethodBodyGenerator
public interface IMethodBodyGeneratorSwitchBodyDefaultCase<TParam1, TReturnType> : IMethodBodyGenerator
{
IMethodBodyGenerator UseProvidedBody(Func<TParam1, TReturnType> body);
IMethodBodyGenerator ReturnConstantValue(Func<TParam1, TReturnType> constantValueFactory);
Expand Down
Loading