Skip to content

Commit dc61bd5

Browse files
author
Julien Couvreur
committed
Extensions: update xml docs to new metadata design
1 parent e7fd8da commit dc61bd5

31 files changed

+1607
-784
lines changed

src/Compilers/CSharp/Portable/Binder/Semantics/Operators/UnaryOperatorOverloadResolution.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,9 @@ public bool Equals(MethodSymbol? x, MethodSymbol? y)
262262
}
263263

264264
var xExtension = x.OriginalDefinition.ContainingType;
265-
var xGroupingKey = ((SourceNamedTypeSymbol)xExtension).GetExtensionGroupingMetadataName();
265+
var xGroupingKey = ((SourceNamedTypeSymbol)xExtension).ExtensionGroupingName;
266266
var yExtension = y.OriginalDefinition.ContainingType;
267-
var yGroupingKey = ((SourceNamedTypeSymbol)yExtension).GetExtensionGroupingMetadataName();
267+
var yGroupingKey = ((SourceNamedTypeSymbol)yExtension).ExtensionGroupingName;
268268

269269
if (!xGroupingKey.Equals(yGroupingKey))
270270
{
@@ -293,7 +293,7 @@ public int GetHashCode(MethodSymbol op)
293293
int result = typeComparer.GetHashCode(op.OriginalDefinition.ContainingType.ContainingType);
294294

295295
var extension = op.OriginalDefinition.ContainingType;
296-
var groupingKey = ((SourceNamedTypeSymbol)extension).GetExtensionGroupingMetadataName();
296+
var groupingKey = ((SourceNamedTypeSymbol)extension).ExtensionGroupingName;
297297
result = Hash.Combine(result, groupingKey.GetHashCode());
298298

299299
foreach (var parameter in op.OriginalDefinition.AsMember(Normalize(extension)).Parameters)

src/Compilers/CSharp/Portable/Compiler/DocumentationCommentCompiler.cs

Lines changed: 252 additions & 167 deletions
Large diffs are not rendered by default.

src/Compilers/CSharp/Portable/DocumentationComments/DocumentationCommentIDVisitor.PartVisitor.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,14 @@ public override object VisitTypeParameter(TypeParameterSymbol symbol, StringBuil
175175

176176
public override object VisitNamedType(NamedTypeSymbol symbol, StringBuilder builder)
177177
{
178-
if ((object)symbol.ContainingSymbol != null && symbol.ContainingSymbol.Name.Length != 0)
178+
Symbol containingSymbol = symbol.ContainingSymbol;
179+
if ((object)containingSymbol != null && (containingSymbol.Name.Length != 0 || containingSymbol is NamedTypeSymbol { IsExtension: true }))
179180
{
180-
Visit(symbol.ContainingSymbol, builder);
181+
Visit(containingSymbol, builder);
181182
builder.Append('.');
182183
}
183184

184-
// PROTOTYPE: Finalize the doc ID story. When we refer to a member, we probably need to use grouping type name,
185-
// but when we refer to an extension block, we probably need to "dot" through both names.
186-
builder.Append(symbol.IsExtension ? symbol.ExtensionName : symbol.Name);
185+
builder.Append(symbol.IsExtension ? symbol.ExtensionGroupingName : symbol.Name);
187186

188187
if (symbol.Arity != 0)
189188
{

src/Compilers/CSharp/Portable/DocumentationComments/DocumentationCommentIDVisitor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ public override object VisitNamedType(NamedTypeSymbol symbol, StringBuilder buil
7070
{
7171
builder.Append("T:");
7272
PartVisitor.Instance.Visit(symbol, builder);
73+
if (symbol.IsExtension)
74+
{
75+
builder.Append('.');
76+
builder.Append(symbol.ExtensionMarkerName);
77+
}
7378

7479
return null;
7580
}

src/Compilers/CSharp/Portable/Emitter/Model/MethodSymbolAdapter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ Cci.ITypeDefinition Cci.ITypeDefinitionMember.ContainingTypeDefinition
310310
return synthesizedGlobalMethod.ContainingPrivateImplementationDetailsType;
311311
}
312312

313-
// PROTOTYPE: Share logic with Cci.ITypeMemberReference.GetContainingType implementation?
313+
// Tracked by https://github.com/dotnet/roslyn/issues/78827 : code quality, share logic with Cci.ITypeMemberReference.GetContainingType implementation?
314314
if (AdaptedMethodSymbol is SynthesizedExtensionMarker marker)
315315
{
316316
return ((SourceMemberContainerTypeSymbol)AdaptedMethodSymbol.ContainingType.ContainingType).GetExtensionGroupingInfo().GetCorrespondingMarkerType(marker);

src/Compilers/CSharp/Portable/Emitter/Model/PropertySymbolAdapter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ ITypeDefinition ITypeDefinitionMember.ContainingTypeDefinition
221221
{
222222
CheckDefinitionInvariant();
223223

224-
// PROTOTYPE: Share logic with Cci.ITypeMemberReference.GetContainingType implementation?
224+
// Tracked by https://github.com/dotnet/roslyn/issues/78827 : code quality, share logic with Cci.ITypeMemberReference.GetContainingType implementation?
225225
if (AdaptedPropertySymbol.GetIsNewExtensionMember())
226226
{
227227
var containingType = AdaptedPropertySymbol.ContainingType;
@@ -249,7 +249,7 @@ ITypeReference ITypeMemberReference.GetContainingType(EmitContext context)
249249
{
250250
CheckDefinitionInvariant();
251251

252-
// PROTOTYPE: Share logic with Cci.ITypeMemberReference.GetContainingType implementation in MethodSymbolAdapter?
252+
// Tracked by https://github.com/dotnet/roslyn/issues/78827 : code quality, share logic with Cci.ITypeMemberReference.GetContainingType implementation in MethodSymbolAdapter?
253253
if (AdaptedPropertySymbol.GetIsNewExtensionMember())
254254
{
255255
var containingType = AdaptedPropertySymbol.ContainingType;

src/Compilers/CSharp/Portable/SymbolDisplay/SymbolDisplayVisitor.Types.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ private void AddNameAndTypeArgumentsOrParameters(INamedTypeSymbol symbol)
346346
if (Format.CompilerInternalOptions.HasFlag(SymbolDisplayCompilerInternalOptions.UseMetadataMemberNames))
347347
{
348348
// PROTOTYPE: What should we output as the name here
349-
var extensionIdentifier = underlyingTypeSymbol!.ExtensionName; // Tracked by https://github.com/dotnet/roslyn/issues/78957 : public API, use public API once it's available
349+
var extensionIdentifier = underlyingTypeSymbol!.ExtensionGroupingName; // Tracked by https://github.com/dotnet/roslyn/issues/78957 : public API, use public API once it's available
350350
Builder.Add(CreatePart(SymbolDisplayPartKind.ClassName, symbol, extensionIdentifier));
351351
}
352352
else

src/Compilers/CSharp/Portable/Symbols/AnonymousTypes/PublicSymbols/AnonymousManager.TypeOrDelegatePublicSymbol.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ internal sealed override bool MangleName
8282
internal sealed override bool IsFileLocal => false;
8383
internal sealed override FileIdentifier? AssociatedFileIdentifier => null;
8484

85-
internal override string ExtensionName
85+
internal override string ExtensionGroupingName
86+
=> throw ExceptionUtilities.Unreachable();
87+
88+
internal override string ExtensionMarkerName
8689
=> throw ExceptionUtilities.Unreachable();
8790

8891
public sealed override int Arity

src/Compilers/CSharp/Portable/Symbols/AnonymousTypes/SynthesizedSymbols/AnonymousType.TypeOrDelegateTemplateSymbol.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,10 @@ public sealed override bool IsRefLikeType
167167
get { return false; }
168168
}
169169

170-
internal override string ExtensionName
170+
internal override string ExtensionGroupingName
171+
=> throw ExceptionUtilities.Unreachable();
172+
173+
internal override string ExtensionMarkerName
171174
=> throw ExceptionUtilities.Unreachable();
172175

173176
public sealed override bool IsReadOnly

src/Compilers/CSharp/Portable/Symbols/ErrorTypeSymbol.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ public sealed override bool IsRefLikeType
116116
}
117117
}
118118

119-
internal override string ExtensionName
119+
internal sealed override string ExtensionGroupingName
120+
=> throw ExceptionUtilities.Unreachable();
121+
122+
internal sealed override string ExtensionMarkerName
120123
=> throw ExceptionUtilities.Unreachable();
121124

122125
public sealed override bool IsReadOnly

0 commit comments

Comments
 (0)