@@ -49,8 +49,8 @@ private static bool FilterSyntaxNode(SyntaxNode node, CancellationToken cancella
4949
5050 var result = new Builder ( )
5151 {
52- TypeFullyQualifiedName = type . ToString ( ) ,
53- ModelTypeFullyQualifiedName = modelType . ToString ( ) ,
52+ TypeFullMetadataName = type . GetFullMetadataName ( ) ,
53+ ModelTypeFullMetadataName = modelType is INamedTypeSymbol namedModelType ? namedModelType . GetFullMetadataName ( ) : modelType . ToString ( ) ,
5454 IsPartial = tds . Modifiers . Any ( SyntaxKind . PartialKeyword ) ,
5555 IsRecord = type . IsRecord ,
5656 IsClass = type . TypeKind == TypeKind . Class ,
@@ -91,15 +91,15 @@ private static void GenerateSource(SourceProductionContext context, (ImmutableAr
9191
9292 var concreteBuilderTypesByModel = builders
9393 . Where ( builder => ! builder . IsAbstract && ! builder . IsGeneric ) // Concrete only
94- . GroupBy ( builder => builder . ModelTypeFullyQualifiedName ) // Deduplicate
95- . Select ( group => new KeyValuePair < ITypeSymbol ? , string > ( compilation . GetTypeByMetadataName ( group . Key ) , group . First ( ) . TypeFullyQualifiedName ) )
96- . Where ( pair => pair . Key is not null )
94+ . GroupBy ( builder => builder . ModelTypeFullMetadataName ) // Deduplicate
95+ . Select ( group => new KeyValuePair < ITypeSymbol ? , string > ( compilation . GetTypeByMetadataName ( group . Key ) , compilation . GetTypeByMetadataName ( group . First ( ) . TypeFullMetadataName ) ? . ToString ( ) ! ) )
96+ . Where ( pair => pair . Key is not null && pair . Value is not null )
9797 . ToDictionary < KeyValuePair < ITypeSymbol ? , string > , ITypeSymbol , string > ( pair => pair . Key ! , pair => pair . Value , SymbolEqualityComparer . Default ) ;
9898
9999 // Remove models for which multiple builders exist
100100 {
101101 var buildersWithDuplicateModel = builders
102- . GroupBy ( builder => builder . ModelTypeFullyQualifiedName )
102+ . GroupBy ( builder => builder . ModelTypeFullMetadataName )
103103 . Where ( group => group . Count ( ) > 1 )
104104 . ToList ( ) ;
105105
@@ -110,15 +110,15 @@ private static void GenerateSource(SourceProductionContext context, (ImmutableAr
110110 builders . Remove ( type ) ;
111111
112112 context . ReportDiagnostic ( "DummyBuilderGeneratorDuplicateBuilders" , "Duplicate builders" ,
113- $ "Multiple dummy builders exist for { group . Key } . Source generation for these builders was skipped.", DiagnosticSeverity . Warning , compilation . GetTypeByMetadataName ( group . Last ( ) . TypeFullyQualifiedName ) ) ;
113+ $ "Multiple dummy builders exist for { group . Key } . Source generation for these builders was skipped.", DiagnosticSeverity . Warning , compilation . GetTypeByMetadataName ( group . Last ( ) . TypeFullMetadataName ) ) ;
114114 }
115115 }
116116
117117 foreach ( var builder in builders )
118118 {
119119 context . CancellationToken . ThrowIfCancellationRequested ( ) ;
120120
121- var type = compilation . GetTypeByMetadataName ( builder . TypeFullyQualifiedName ) ;
121+ var type = compilation . GetTypeByMetadataName ( builder . TypeFullMetadataName ) ;
122122 var modelType = type ? . GetAttribute ( "DummyBuilderAttribute" , Constants . DomainModelingNamespace , arity : 1 ) is AttributeData { AttributeClass : not null } attribute
123123 ? attribute . AttributeClass . TypeArguments [ 0 ]
124124 : null ;
@@ -135,15 +135,15 @@ private static void GenerateSource(SourceProductionContext context, (ImmutableAr
135135 if ( type is null )
136136 {
137137 context . ReportDiagnostic ( "DummyBuilderGeneratorUnexpectedType" , "Unexpected type" ,
138- $ "Type marked as dummy builder has unexpected type '{ builder . TypeFullyQualifiedName } '.", DiagnosticSeverity . Warning , type ) ;
138+ $ "Type marked as dummy builder has unexpected type '{ builder . TypeFullMetadataName } '.", DiagnosticSeverity . Warning , type ) ;
139139 continue ;
140140 }
141141
142142 // Require being able to find the model type
143143 if ( modelType is null )
144144 {
145145 context . ReportDiagnostic ( "DummyBuilderGeneratorUnexpectedModelType" , "Unexpected model type" ,
146- $ "Type marked as dummy builder has unexpected model type '{ builder . ModelTypeFullyQualifiedName } '.", DiagnosticSeverity . Warning , type ) ;
146+ $ "Type marked as dummy builder has unexpected model type '{ builder . ModelTypeFullMetadataName } '.", DiagnosticSeverity . Warning , type ) ;
147147 continue ;
148148 }
149149
@@ -218,7 +218,7 @@ private static void GenerateSource(SourceProductionContext context, (ImmutableAr
218218 componentBuilder . Append ( "// " ) ;
219219 componentBuilder . AppendLine ( $ " private { param . Type . WithNullableAnnotation ( NullableAnnotation . None ) } { memberName } {{ get; set; }} = { param . Type . CreateDummyInstantiationExpression ( param . Name == "value" ? param . ContainingType . Name : param . Name , concreteBuilderTypesByModel . Keys , type => $ "new { concreteBuilderTypesByModel [ type ] } ().Build()") } ;") ;
220220
221- concreteBuilderTypesByModel . Add ( modelType , builder . TypeFullyQualifiedName ) ;
221+ concreteBuilderTypesByModel . Add ( modelType , builder . TypeFullMetadataName ) ;
222222 }
223223
224224 if ( membersByName [ $ "With{ memberName } "] . Any ( member => member is IMethodSymbol method && method . Parameters . Length == 1 && method . Parameters [ 0 ] . Type . Equals ( param . Type , SymbolEqualityComparer . Default ) ) )
@@ -336,8 +336,8 @@ namespace {containingNamespace}
336336
337337 private sealed record Builder : IGeneratable
338338 {
339- public string TypeFullyQualifiedName { get ; set ; } = null ! ;
340- public string ModelTypeFullyQualifiedName { get ; set ; } = null ! ;
339+ public string TypeFullMetadataName { get ; set ; } = null ! ;
340+ public string ModelTypeFullMetadataName { get ; set ; } = null ! ;
341341 public bool IsPartial { get ; set ; }
342342 public bool IsRecord { get ; set ; }
343343 public bool IsClass { get ; set ; }
0 commit comments