Skip to content

Commit 1ea50a1

Browse files
Fix derived model description when no public derived models (#11791)
## Summary Fixes the C# generator description for discriminated base models whose derived models are all non-public. `ModelProvider.BuildDescription` now returns the model description without appending the derived-classes sentence when there are no public derived models. This avoids both the dangling `instantiation are:` text and its trailing whitespace. A regression test covers the all-internal-derived-model case. Fixes #11769 ## Validation - Regression test failed before the fix and passes after it. - `Microsoft.TypeSpec.Generator.Tests`: 2162 passed, 0 failed. - `npm run build` passed. - `eng/scripts/Generate.ps1` completed successfully. - `npm run cop` passed (`cop checks passed.`). - `git diff --check` passed.
1 parent 45eea52 commit 1ea50a1

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Providers/ModelProvider.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ protected override FormattableString BuildDescription()
3232
{
3333
_derivedModels = BuildDerivedModels();
3434
var publicDerivedModels = _derivedModels.Where(m => m.DeclarationModifiers.HasFlag(TypeSignatureModifiers.Public)).ToList();
35+
if (publicDerivedModels.Count == 0)
36+
{
37+
return description;
38+
}
3539
var derivedClassesDescription = DeclarationModifiers.HasFlag(TypeSignatureModifiers.Abstract)
3640
? "Please note this is the abstract base class. The derived classes available for instantiation are: "
3741
: "Please note this is the base class. The derived classes available for instantiation are: ";

packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/ModelProviderTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,24 @@ public void Setup()
2828
MockHelpers.LoadMockGenerator();
2929
}
3030

31+
[Test]
32+
public void TestBuildDescription_SkipsDerivedClassesTextWhenNoPublicDerivedModels()
33+
{
34+
var discriminator = InputFactory.Property("kind", InputPrimitiveType.String, isRequired: true, isDiscriminator: true);
35+
var internalDerived = InputFactory.Model("InternalDerived", access: "internal");
36+
var baseModel = InputFactory.Model(
37+
"BaseModel",
38+
properties: [discriminator],
39+
derivedModels: [internalDerived],
40+
discriminatorProperty: discriminator);
41+
MockHelpers.LoadMockGenerator(inputModelTypes: [baseModel, internalDerived]);
42+
43+
var provider = CodeModelGenerator.Instance.TypeFactory.CreateModel(baseModel);
44+
45+
Assert.IsNotNull(provider);
46+
Assert.AreEqual("BaseModel description", provider!.Description.ToString());
47+
}
48+
3149
[Test]
3250
public void TestBuildProperties_ValidateInheritHierarchyWithOverride()
3351
{

0 commit comments

Comments
 (0)