Skip to content

Commit d0686f1

Browse files
authored
Remove Symbol references from IOutputTypeInfo and implementations (#9058)
1 parent cda9fba commit d0686f1

18 files changed

Lines changed: 200 additions & 181 deletions

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/ConnectionTypeFileBuilder.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public override void WriteBeginClass(IOutputTypeInfo type)
1616
"{0} partial class {1} : ObjectType<global::{2}>",
1717
type.IsPublic ? "public" : "internal",
1818
type.Name,
19-
type.RuntimeTypeFullName);
19+
type.RuntimeTypeName?.FullName);
2020
Writer.WriteIndentedLine("{");
2121
Writer.IncreaseIndent();
2222
}
@@ -32,7 +32,7 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
3232
Writer.WriteIndentedLine(
3333
"protected override void Configure(global::{0}<global::{1}> descriptor)",
3434
WellKnownTypes.IObjectTypeDescriptor,
35-
connectionType.RuntimeTypeFullName);
35+
connectionType.RuntimeTypeName.FullName);
3636

3737
Writer.WriteIndentedLine("{");
3838

@@ -48,7 +48,7 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
4848
{
4949
Writer.WriteIndentedLine(
5050
"var thisType = typeof(global::{0});",
51-
connectionType.RuntimeTypeFullName);
51+
connectionType.RuntimeTypeName.FullName);
5252
Writer.WriteIndentedLine(
5353
"var bindingResolver = extension.Context.ParameterBindingResolver;");
5454
Writer.WriteIndentedLine(
@@ -106,15 +106,14 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
106106
}
107107
}
108108

109-
if (connectionType.RuntimeType.IsGenericType
109+
if (connectionType.NodeFullyQualifiedName is not null
110110
&& !string.IsNullOrEmpty(connectionType.NameFormat)
111111
&& connectionType.NameFormat!.Contains("{0}"))
112112
{
113-
var nodeTypeName = connectionType.RuntimeType.TypeArguments[0].ToFullyQualified();
114113
Writer.WriteLine();
115114
Writer.WriteIndentedLine(
116115
"var nodeTypeRef = extension.Context.TypeInspector.GetTypeRef(typeof({0}));",
117-
nodeTypeName);
116+
connectionType.NodeFullyQualifiedName);
118117
Writer.WriteIndentedLine("descriptor");
119118
using (Writer.IncreaseIndent())
120119
{

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/EdgeTypeFileBuilder.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Text;
22
using HotChocolate.Types.Analyzers.Generators;
3-
using HotChocolate.Types.Analyzers.Helpers;
43
using HotChocolate.Types.Analyzers.Models;
54

65
namespace HotChocolate.Types.Analyzers.FileBuilders;
@@ -11,11 +10,17 @@ public sealed class EdgeTypeFileBuilder(StringBuilder sb) : TypeFileBuilderBase(
1110

1211
public override void WriteBeginClass(IOutputTypeInfo type)
1312
{
13+
if (type is not EdgeTypeInfo edgeType)
14+
{
15+
throw new InvalidOperationException(
16+
"The specified type is not an edge type.");
17+
}
18+
1419
Writer.WriteIndentedLine(
1520
"{0} partial class {1} : ObjectType<global::{2}>",
16-
type.IsPublic ? "public" : "internal",
17-
type.Name,
18-
type.RuntimeTypeFullName);
21+
edgeType.IsPublic ? "public" : "internal",
22+
edgeType.Name,
23+
edgeType.RuntimeTypeName.FullName);
1924
Writer.WriteIndentedLine("{");
2025
Writer.IncreaseIndent();
2126
}
@@ -31,7 +36,7 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
3136
Writer.WriteIndentedLine(
3237
"protected override void Configure(global::{0}<global::{1}> descriptor)",
3338
WellKnownTypes.IObjectTypeDescriptor,
34-
edgeType.RuntimeTypeFullName);
39+
edgeType.RuntimeTypeName.FullName);
3540

3641
Writer.WriteIndentedLine("{");
3742

@@ -47,7 +52,7 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
4752
{
4853
Writer.WriteIndentedLine(
4954
"var thisType = typeof(global::{0});",
50-
edgeType.RuntimeTypeFullName);
55+
edgeType.RuntimeTypeName.FullName);
5156
Writer.WriteIndentedLine(
5257
"var bindingResolver = extension.Context.ParameterBindingResolver;");
5358
Writer.WriteIndentedLine(
@@ -105,15 +110,14 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
105110
}
106111
}
107112

108-
if (edgeType.RuntimeType.IsGenericType
113+
if (edgeType.NodeFullyQualifiedName is not null
109114
&& !string.IsNullOrEmpty(edgeType.NameFormat)
110115
&& edgeType.NameFormat!.Contains("{0}"))
111116
{
112-
var nodeTypeName = edgeType.RuntimeType.TypeArguments[0].ToFullyQualified();
113117
Writer.WriteLine();
114118
Writer.WriteIndentedLine(
115119
"var nodeTypeRef = extension.Context.TypeInspector.GetTypeRef(typeof({0}));",
116-
nodeTypeName);
120+
edgeType.NodeFullyQualifiedName);
117121
Writer.WriteIndentedLine("descriptor");
118122
using (Writer.IncreaseIndent())
119123
{

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/InterfaceTypeFileBuilder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
1919
Writer.WriteIndentedLine(
2020
"internal static void Initialize(global::{0}<global::{1}> descriptor)",
2121
WellKnownTypes.IInterfaceTypeDescriptor,
22-
interfaceType.RuntimeTypeFullName);
22+
interfaceType.RuntimeTypeName.FullName);
2323

2424
Writer.WriteIndentedLine("{");
2525

2626
using (Writer.IncreaseIndent())
2727
{
2828
WriteInitializationBase(
29-
interfaceType.SchemaTypeFullName,
29+
interfaceType.SchemaTypeName.FullName,
3030
interfaceType.Resolvers.Length > 0,
3131
interfaceType.Resolvers.Any(t => t.RequiresParameterBindings),
3232
interfaceType.DescriptorAttributes,
@@ -53,7 +53,7 @@ public override void WriteConfigureMethod(IOutputTypeInfo type)
5353
Writer.WriteIndentedLine(
5454
"static partial void Configure(global::{0}<global::{1}> descriptor);",
5555
WellKnownTypes.IInterfaceTypeDescriptor,
56-
interfaceType.RuntimeTypeFullName);
56+
interfaceType.RuntimeTypeName.FullName);
5757
Writer.WriteLine();
5858
}
5959
}

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/ObjectTypeFileBuilder.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
1919
Writer.WriteIndentedLine(
2020
"internal static void Initialize(global::{0}<global::{1}> descriptor)",
2121
WellKnownTypes.IObjectTypeDescriptor,
22-
objectType.RuntimeTypeFullName);
22+
objectType.RuntimeTypeName.FullName);
2323

2424
Writer.WriteIndentedLine("{");
2525

2626
using (Writer.IncreaseIndent())
2727
{
2828
WriteInitializationBase(
29-
objectType.SchemaTypeFullName,
29+
objectType.SchemaTypeName.FullName,
3030
objectType.Resolvers.Length > 0 || objectType.NodeResolver is not null,
3131
objectType.Resolvers.Any(t => t.RequiresParameterBindings)
3232
|| (objectType.NodeResolver?.RequiresParameterBindings ?? false),
@@ -92,7 +92,6 @@ public override void WriteResolverConstructor(IOutputTypeInfo type, ILocalTypeLo
9292
WriteResolverConstructor(
9393
objectType,
9494
typeLookup,
95-
$"global::{objectType.SchemaTypeFullName}",
9695
type.Resolvers.Any(t => t.RequiresParameterBindings)
9796
|| (objectType.NodeResolver?.RequiresParameterBindings ?? false));
9897
}

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/RootTypeFileBuilder.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Text;
22
using HotChocolate.Types.Analyzers.Generators;
3-
using HotChocolate.Types.Analyzers.Helpers;
43
using HotChocolate.Types.Analyzers.Models;
54

65
namespace HotChocolate.Types.Analyzers.FileBuilders;
@@ -26,7 +25,7 @@ public override void WriteInitializeMethod(IOutputTypeInfo type, ILocalTypeLooku
2625
using (Writer.IncreaseIndent())
2726
{
2827
WriteInitializationBase(
29-
rootType.SchemaSchemaType.ToFullyQualified(),
28+
rootType.SchemaTypeName.FullyQualifiedName,
3029
rootType.Resolvers.Length > 0,
3130
rootType.Resolvers.Any(t => t.RequiresParameterBindings),
3231
rootType.DescriptorAttributes,

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/TypeFileBuilderBase.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@ protected void WriteFieldFlags(Resolver resolver)
600600

601601
public virtual void WriteConfigureMethod(IOutputTypeInfo type)
602602
{
603-
if (type.RuntimeType is null)
603+
if (type.RuntimeTypeName is null)
604604
{
605605
Writer.WriteIndentedLine(
606606
"static partial void Configure(global::HotChocolate.Types.IObjectTypeDescriptor descriptor);");
@@ -609,7 +609,7 @@ public virtual void WriteConfigureMethod(IOutputTypeInfo type)
609609
{
610610
Writer.WriteIndentedLine(
611611
"static partial void Configure(global::HotChocolate.Types.IObjectTypeDescriptor<{0}> descriptor);",
612-
type.RuntimeType.ToFullyQualified());
612+
type.RuntimeTypeName.FullyQualifiedName);
613613
}
614614

615615
Writer.WriteLine();
@@ -675,21 +675,15 @@ protected void WriteResolverField(Resolver resolver)
675675

676676
public virtual void WriteResolverConstructor(IOutputTypeInfo type, ILocalTypeLookup typeLookup)
677677
{
678-
var resolverType =
679-
type.SchemaSchemaType ??
680-
type.RuntimeType ?? throw new InvalidOperationException("Schema type and runtime type are null.");
681-
682678
WriteResolverConstructor(
683679
type,
684680
typeLookup,
685-
resolverType.ToFullyQualified(),
686681
type.Resolvers.Any(t => t.RequiresParameterBindings));
687682
}
688683

689684
protected void WriteResolverConstructor(
690685
IOutputTypeInfo type,
691686
ILocalTypeLookup typeLookup,
692-
string resolverTypeName,
693687
bool requiresParameterBindings)
694688
{
695689
if (!requiresParameterBindings)

src/HotChocolate/Core/src/Types.Analyzers/Generators/TypeModuleSyntaxGenerator.cs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,12 @@ private static void WriteConfiguration(
149149
&& objectTypeExtension.Diagnostics.Length == 0)
150150
{
151151
objectTypeExtensions ??= [];
152-
objectTypeExtensions.Add(objectTypeExtension.RuntimeType.ToFullyQualified());
152+
objectTypeExtensions.Add(objectTypeExtension.RuntimeTypeName.FullyQualifiedName);
153153

154154
generator.WriteRegisterTypeExtension(
155-
GetAssemblyQualifiedName(objectTypeExtension.SchemaSchemaType),
156-
objectTypeExtension.RuntimeType.ToFullyQualified(),
157-
objectTypeExtension.SchemaSchemaType.ToFullyQualified());
155+
objectTypeExtension.RegistrationKey,
156+
objectTypeExtension.RuntimeTypeName.FullyQualifiedName,
157+
objectTypeExtension.SchemaTypeName.FullyQualifiedName);
158158
hasConfigurations = true;
159159
}
160160

@@ -185,12 +185,12 @@ private static void WriteConfiguration(
185185
&& interfaceType.Diagnostics.Length == 0)
186186
{
187187
interfaceTypeExtensions ??= [];
188-
interfaceTypeExtensions.Add(interfaceType.RuntimeType.ToFullyQualified());
188+
interfaceTypeExtensions.Add(interfaceType.RuntimeTypeName.FullyQualifiedName);
189189

190190
generator.WriteRegisterTypeExtension(
191-
GetAssemblyQualifiedName(interfaceType.SchemaSchemaType),
192-
interfaceType.RuntimeType.ToFullyQualified(),
193-
interfaceType.SchemaSchemaType.ToFullyQualified());
191+
interfaceType.RegistrationKey,
192+
interfaceType.RuntimeTypeName.FullyQualifiedName,
193+
interfaceType.SchemaTypeName.FullyQualifiedName);
194194
hasConfigurations = true;
195195
}
196196

@@ -203,9 +203,9 @@ private static void WriteConfiguration(
203203
var operationType = rootType.OperationType;
204204

205205
generator.WriteRegisterRootTypeExtension(
206-
GetAssemblyQualifiedName(rootType.SchemaSchemaType),
206+
rootType.RegistrationKey,
207207
operationType,
208-
rootType.SchemaSchemaType.ToFullyQualified());
208+
rootType.SchemaTypeName.FullyQualifiedName);
209209
hasConfigurations = true;
210210

211211
if (operationType is not OperationType.No && (operations & operationType) != operationType)
@@ -311,11 +311,4 @@ private static void WriteOperationTypes(
311311

312312
addSource(WellKnownFileNames.RootTypesFile, generator.ToString());
313313
}
314-
315-
public static string GetAssemblyQualifiedName(ITypeSymbol typeSymbol)
316-
{
317-
var assemblyName = typeSymbol.ContainingAssembly?.Name ?? "UnknownAssembly";
318-
var typeFullName = typeSymbol.ToDisplayString();
319-
return $"{assemblyName}::{typeFullName}";
320-
}
321314
}

src/HotChocolate/Core/src/Types.Analyzers/Helpers/SymbolExtensions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,13 @@ public static bool IsNullableValueType(this ITypeSymbol typeSymbol)
685685
public static string PrintNullRefQualifier(this ITypeSymbol typeSymbol)
686686
=> typeSymbol.IsNullableRefType() ? "?" : string.Empty;
687687

688+
public static string ToAssemblyQualified(this ITypeSymbol typeSymbol)
689+
{
690+
var assemblyName = typeSymbol.ContainingAssembly?.Name ?? "UnknownAssembly";
691+
var typeFullName = typeSymbol.ToDisplayString();
692+
return $"{assemblyName}::{typeFullName}";
693+
}
694+
688695
public static string ToFullyQualified(this ITypeSymbol typeSymbol)
689696
=> typeSymbol.ToDisplayString(FullyQualifiedFormat);
690697

src/HotChocolate/Core/src/Types.Analyzers/Inspectors/ConnectionTypeTransformer.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,7 @@ public ImmutableArray<SyntaxInfo> Transform(
4949
{
5050
if (syntaxInfo is IOutputTypeInfo { HasRuntimeType: true } typeInfo)
5151
{
52-
#if NET8_0_OR_GREATER
53-
connectionTypeLookup[typeInfo.RuntimeTypeFullName] = typeInfo;
54-
#else
55-
connectionTypeLookup[typeInfo.RuntimeTypeFullName!] = typeInfo;
56-
#endif
52+
connectionTypeLookup[GetTypeLookupKey(typeInfo)] = typeInfo;
5753
}
5854
}
5955

@@ -161,8 +157,8 @@ public ImmutableArray<SyntaxInfo> Transform(
161157
connection.Name,
162158
connection.NameFormat ?? connection.Name);
163159

164-
var connectionTypeName = "global::" + connectionTypeInfo.Namespace + "." + connectionTypeInfo.Name;
165-
var edgeTypeName = "global::" + edgeTypeInfo.Namespace + "." + edgeTypeInfo.Name;
160+
var connectionTypeName = GetTypeLookupKey(connectionTypeInfo);
161+
var edgeTypeName = GetTypeLookupKey(edgeTypeInfo);
166162

167163
if (!connectionTypeLookup.ContainsKey(connectionTypeName))
168164
{
@@ -240,8 +236,8 @@ public ImmutableArray<SyntaxInfo> Transform(
240236
connectionName,
241237
connectionName);
242238

243-
var connectionTypeName = "global::" + connectionTypeInfo.Namespace + "." + connectionTypeInfo.Name;
244-
var edgeTypeName = "global::" + edgeTypeInfo.Namespace + "." + edgeTypeInfo.Name;
239+
var connectionTypeName = GetTypeLookupKey(connectionTypeInfo);
240+
var edgeTypeName = GetTypeLookupKey(edgeTypeInfo);
245241

246242
if (!connectionTypeLookup.ContainsKey(connectionTypeName))
247243
{
@@ -307,6 +303,12 @@ private static INamedTypeSymbol GetConnectionType(
307303
static void Throw() => throw new InvalidOperationException("Could not resolve connection base type.");
308304
}
309305

306+
private static string GetTypeLookupKey(IOutputTypeInfo typeInfo)
307+
=> GetTypeLookupKey(typeInfo.Namespace, typeInfo.Name);
308+
309+
private static string GetTypeLookupKey(string typeNamespace, string typeName)
310+
=> $"global::{typeNamespace}.{typeName}";
311+
310312
private static GenericTypeInfo? CreateGenericTypeInfo(
311313
INamedTypeSymbol genericType,
312314
ISymbol resolver,

0 commit comments

Comments
 (0)