@@ -986,6 +986,65 @@ private void GenerateSyntaxWrapperHelper(in SourceProductionContext context, Imm
986986 continue ;
987987 }
988988
989+ if ( node . Name == nameof ( BaseNamespaceDeclarationSyntax ) )
990+ {
991+ // Prior to C# 10, NamespaceDeclarationSyntax was the base type for all namespace declarations.
992+ // If the BaseNamespaceDeclarationSyntax type isn't found at runtime, we fall back
993+ // to using this type instead.
994+ //
995+ // var baseNamespaceDeclarationSyntaxType = csharpCodeAnalysisAssembly.GetType(BaseNamespaceDeclarationSyntaxWrapper.WrappedTypeName)
996+ // ?? csharpCodeAnalysisAssembly.GetType(BaseNamespaceDeclarationSyntaxWrapper.WrappedTypeName);
997+ LocalDeclarationStatementSyntax localStatement =
998+ SyntaxFactory . LocalDeclarationStatement ( SyntaxFactory . VariableDeclaration (
999+ type : SyntaxFactory . IdentifierName ( "var" ) ,
1000+ variables : SyntaxFactory . SingletonSeparatedList ( SyntaxFactory . VariableDeclarator (
1001+ identifier : SyntaxFactory . Identifier ( "baseNamespaceDeclarationSyntaxType" ) ,
1002+ argumentList : null ,
1003+ initializer : SyntaxFactory . EqualsValueClause (
1004+ SyntaxFactory . BinaryExpression (
1005+ SyntaxKind . CoalesceExpression ,
1006+ left : SyntaxFactory . InvocationExpression (
1007+ expression : SyntaxFactory . MemberAccessExpression (
1008+ SyntaxKind . SimpleMemberAccessExpression ,
1009+ expression : SyntaxFactory . IdentifierName ( "csharpCodeAnalysisAssembly" ) ,
1010+ name : SyntaxFactory . IdentifierName ( "GetType" ) ) ,
1011+ argumentList : SyntaxFactory . ArgumentList ( SyntaxFactory . SingletonSeparatedList ( SyntaxFactory . Argument (
1012+ SyntaxFactory . MemberAccessExpression (
1013+ SyntaxKind . SimpleMemberAccessExpression ,
1014+ expression : SyntaxFactory . IdentifierName ( node . WrapperName ) ,
1015+ name : SyntaxFactory . IdentifierName ( "WrappedTypeName" ) ) ) ) ) ) ,
1016+ right : SyntaxFactory . InvocationExpression (
1017+ expression : SyntaxFactory . MemberAccessExpression (
1018+ SyntaxKind . SimpleMemberAccessExpression ,
1019+ expression : SyntaxFactory . IdentifierName ( "csharpCodeAnalysisAssembly" ) ,
1020+ name : SyntaxFactory . IdentifierName ( "GetType" ) ) ,
1021+ argumentList : SyntaxFactory . ArgumentList ( SyntaxFactory . SingletonSeparatedList ( SyntaxFactory . Argument (
1022+ SyntaxFactory . MemberAccessExpression (
1023+ SyntaxKind . SimpleMemberAccessExpression ,
1024+ expression : SyntaxFactory . IdentifierName ( node . WrapperName ) ,
1025+ name : SyntaxFactory . IdentifierName ( "FallbackWrappedTypeName" ) ) ) ) ) ) ) ) ) ) ) ) ;
1026+
1027+ // This is the first line of the statements that initialize 'builder', so start it with a blank line
1028+ staticCtorStatements = staticCtorStatements . Add ( localStatement . WithLeadingBlankLine ( ) ) ;
1029+
1030+ // builder.Add(typeof(BaseNamespaceDeclarationSyntaxWrapper), baseNamespaceDeclarationSyntaxType);
1031+ staticCtorStatements = staticCtorStatements . Add ( SyntaxFactory . ExpressionStatement (
1032+ SyntaxFactory . InvocationExpression (
1033+ expression : SyntaxFactory . MemberAccessExpression (
1034+ SyntaxKind . SimpleMemberAccessExpression ,
1035+ expression : SyntaxFactory . IdentifierName ( "builder" ) ,
1036+ name : SyntaxFactory . IdentifierName ( "Add" ) ) ,
1037+ argumentList : SyntaxFactory . ArgumentList (
1038+ SyntaxFactory . SeparatedList (
1039+ new [ ]
1040+ {
1041+ SyntaxFactory . Argument ( SyntaxFactory . TypeOfExpression ( SyntaxFactory . IdentifierName ( node . WrapperName ) ) ) ,
1042+ SyntaxFactory . Argument ( SyntaxFactory . IdentifierName ( "baseNamespaceDeclarationSyntaxType" ) ) ,
1043+ } ) ) ) ) ) ;
1044+
1045+ continue ;
1046+ }
1047+
9891048 // builder.Add(typeof(ConstantPatternSyntaxWrapper), csharpCodeAnalysisAssembly.GetType(ConstantPatternSyntaxWrapper.WrappedTypeName));
9901049 staticCtorStatements = staticCtorStatements . Add ( SyntaxFactory . ExpressionStatement (
9911050 SyntaxFactory . InvocationExpression (
0 commit comments