diff --git a/Sybil.IntegrationTests/FlowTests.cs b/Sybil.IntegrationTests/FlowTests.cs index 28b7147..49a4252 100644 --- a/Sybil.IntegrationTests/FlowTests.cs +++ b/Sybil.IntegrationTests/FlowTests.cs @@ -35,6 +35,7 @@ public sealed class TestClass : BaseTestClass, IInterface where T : new(), cl return this.fieldString; } + [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization | MethodImplOptions.PreserveSig)] public string GetSomething(); }"; @@ -101,6 +102,8 @@ public sealed class TestClass : BaseTestClass, IInterface where T : new(), cl .WithMethod( SyntaxBuilder.CreateMethod("string", "GetSomething") .WithModifier("public") + .WithAttribute(SyntaxBuilder.CreateAttribute("MethodImpl") + .WithRawArgument("MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization | MethodImplOptions.PreserveSig")) .WithNoBody()))) .Build(); diff --git a/Sybil.IntegrationTests/Sybil.IntegrationTests.csproj b/Sybil.IntegrationTests/Sybil.IntegrationTests.csproj index 4281029..74137e6 100644 --- a/Sybil.IntegrationTests/Sybil.IntegrationTests.csproj +++ b/Sybil.IntegrationTests/Sybil.IntegrationTests.csproj @@ -8,11 +8,14 @@ - - - - - + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Sybil.UnitTests/AttributeBuilderTests.cs b/Sybil.UnitTests/AttributeBuilderTests.cs index cf2835a..cce5124 100644 --- a/Sybil.UnitTests/AttributeBuilderTests.cs +++ b/Sybil.UnitTests/AttributeBuilderTests.cs @@ -10,6 +10,7 @@ public class AttributeBuilderTests private const string AttributeName = "SomeAttribute"; private const string PropertyName = "SomeProperty"; private const string StringValue = "SomeString"; + private const string RawArgument = "MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization | MethodImplOptions.PreserveSig"; private const int IntValue = 1; private const uint UintValue = 1U; private const long LongValue = 1L; @@ -51,6 +52,7 @@ public class AttributeBuilderTests private const string AttributeWithBoolTrueValue = $"{AttributeName}(true)"; private const string AttributeWithBoolFalseValue = $"{AttributeName}(false)"; private const string AttributeWithNullValue = $"{AttributeName}(null)"; + private const string AttributeWithRawArgument = $"{AttributeName}(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization | MethodImplOptions.PreserveSig)"; private readonly AttributeBuilder attributeBuilder = SyntaxBuilder.CreateAttribute(AttributeName); @@ -433,4 +435,12 @@ public class AttributeBuilderTests result.Should().Be(AttributeWithNullValue); } + + [TestMethod] + public void WithRawArgument_WithRawValue_ReturnsExpected() + { + var result = this.attributeBuilder.WithRawArgument(RawArgument).Build().ToFullString(); + + result.Should().Be(AttributeWithRawArgument); + } } diff --git a/Sybil.UnitTests/Sybil.UnitTests.csproj b/Sybil.UnitTests/Sybil.UnitTests.csproj index 1e39f04..6e8c0fd 100644 --- a/Sybil.UnitTests/Sybil.UnitTests.csproj +++ b/Sybil.UnitTests/Sybil.UnitTests.csproj @@ -8,11 +8,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Sybil/AttributeBuilder.cs b/Sybil/AttributeBuilder.cs index 8331b2c..8ca6c20 100644 --- a/Sybil/AttributeBuilder.cs +++ b/Sybil/AttributeBuilder.cs @@ -408,6 +408,15 @@ namespace Sybil return this; } + public AttributeBuilder WithRawArgument(string rawArgument) + { + this.AttributeSyntax = this.AttributeSyntax.AddArgumentListArguments( + SyntaxFactory.AttributeArgument( + SyntaxFactory.ParseExpression(rawArgument))); + + return this; + } + public AttributeSyntax Build() { return this.AttributeSyntax diff --git a/Sybil/Sybil.csproj b/Sybil/Sybil.csproj index bb1ea07..1a5a19e 100644 --- a/Sybil/Sybil.csproj +++ b/Sybil/Sybil.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.8.3 + 0.8.4