Browse Source

Fix #2771: Allow MetadataTypeDefinition.DefaultMemberName to return null if DefaultMemberAttribute is not present.

pull/2804/head
Siegfried Pammer 4 years ago
parent
commit
b85d1ba65a
  1. 7
      ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs

7
ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs

@ -58,6 +58,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
IEvent[] events; IEvent[] events;
IMethod[] methods; IMethod[] methods;
List<IType> directBaseTypes; List<IType> directBaseTypes;
bool defaultMemberNameInitialized;
string defaultMemberName; string defaultMemberName;
internal MetadataTypeDefinition(MetadataModule module, TypeDefinitionHandle handle) internal MetadataTypeDefinition(MetadataModule module, TypeDefinitionHandle handle)
@ -459,7 +460,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
public string DefaultMemberName { public string DefaultMemberName {
get { get {
string defaultMemberName = LazyInit.VolatileRead(ref this.defaultMemberName); string defaultMemberName = LazyInit.VolatileRead(ref this.defaultMemberName);
if (defaultMemberName != null) if (defaultMemberName != null || defaultMemberNameInitialized)
return defaultMemberName; return defaultMemberName;
var metadata = module.metadata; var metadata = module.metadata;
var typeDefinition = metadata.GetTypeDefinition(handle); var typeDefinition = metadata.GetTypeDefinition(handle);
@ -475,7 +476,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
break; break;
} }
} }
return LazyInit.GetOrSet(ref this.defaultMemberName, defaultMemberName ?? "Item"); defaultMemberName = LazyInit.GetOrSet(ref this.defaultMemberName, defaultMemberName);
defaultMemberNameInitialized = true;
return defaultMemberName;
} }
} }
#endregion #endregion

Loading…
Cancel
Save