Skip to content

Defining partial types emits multiple type definitions #357

@adrianoc

Description

@adrianoc

The following snippet:

partial class PartialClass
{
    public int Foo() => 42;
}

partial class PartialClass
{
    public string Name { get; }
}

results in a runtime exception in both APIs.

Mono.Cecil:

System.ApplicationException : Error: Unhandled exception. System.ArgumentException: Member already attached
   at Mono.Cecil.MemberDefinitionCollection`1.Attach(T element)
   at Mono.Cecil.MemberDefinitionCollection`1.OnAdd(T item, Int32 index)
   at Mono.Collections.Generic.Collection`1.Add(T item)
   at SnippetRunner.Main(String[] args) in :line 76

Executable: dotnet
Args: /tmp/CecilifierTests/Integration/PartialClassTest/Types/PartialClass/Runner-3D46021D4A53D88EC05E779F724B15643436E867.exe /tmp/CecilifierTests/Integration/PartialClassTest/Types/PartialClass/PartialClass-Cecilified-EED5168C5A9F20B5A52E5AB8AEF5DB527B767BA2000000000000000000000000.dll
   at Cecilifier.Core.Tests.Framework.TestFramework.ExecuteWithOutput(String executable, String args) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Framework/TestFramework.cs:line 57
   at Cecilifier.Core.Tests.Framework.TestFramework.Execute(String executable, String args) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Framework/TestFramework.cs:line 11
   at Cecilifier.Core.Tests.Framework.CecilifierTestBase`1.CecilifyAndExecute(Stream tbc, String testBasePath) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Framework/CecilifierTestBase.cs:line 161
   at Cecilifier.Core.Tests.Framework.ResourceTestBase`1.AssertResourceTest(String testBasePath, String expectedAssemblyPath, CecilifyTestOptions options) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Framework/ResourceTestBase.cs:line 86
   at Cecilifier.Core.Tests.Framework.ResourceTestBase`1.AssertResourceTest(String resourceName, CecilifyTestOptions options) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Framework/ResourceTestBase.cs:line 81
   at Cecilifier.Core.Tests.Framework.ResourceTestBase`1.AssertResourceTest(String resourceName) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Framework/ResourceTestBase.cs:line 15
   at Cecilifier.Core.Tests.Integration.Types.TypesTestCase`1.PartialClassTest() in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.Core.Tests/Tests/Integration/Types/TypesTestCase.cs:line 103
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

System.Reflection.Metadata:

JetBrains.ReSharper.TestRunner.Logging.TraceListener+AssertionException : !Unsafe.IsNullRef(ref declaringTypeRecord)

   at JetBrains.ReSharper.TestRunner.Logging.TraceListener.Fail(String message, String detailMessage) in Z:\BuildAgent\work\1b668fe37ef92293\ReSharperTestRunner\src\TestRunner.Utilities\Logging\TraceListener.cs:line 33
   at System.Diagnostics.TraceInternal.Fail(String message, String detailMessage)
   at System.Diagnostics.Debug.Fail(String message, String detailMessage)
   at Cecilifier.ApiDriver.SystemReflectionMetadata.DelayedDefinitions.DelayedDefinitionsManager.RegisterMethodDefinition(String declaringTypeVarName, Func`3 newMethodFunc) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.ApiDriver.SystemReflectionMetadata/DelayedDefinitions/DelayedDefinitionsManager.cs:line 44
   at Cecilifier.ApiDriver.SystemReflectionMetadata.SystemReflectionMetadataDefinitionsFactory.Method(IVisitorContext context, BodiedMemberDefinitionContext definitionContext, String declaringTypeName, String methodModifiers, IReadOnlyList`1 parameters, IList`1 typeParameters, Func`2 returnTypeResolver, MethodDefinitionVariable& methodDefinitionVariable) in /home/adriano/Projects/study/DotNet/Cecilifier/Cecilifier.ApiDriver.SystemReflectionMetadata/SystemReflectionMetadataDefinitionsFactory.cs:line 163

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions