private static TMemberDeclarationSyntax? ChangePublicToInternal()

in src/PublicToInternalGenerator/PublicToInternalGenerator.cs [218:240]


  private static TMemberDeclarationSyntax? ChangePublicToInternal<TMemberDeclarationSyntax>(TMemberDeclarationSyntax? node)
    where TMemberDeclarationSyntax : MemberDeclarationSyntax
  {
    if (node is null) return null;

    // check if this is a top-level type (not nested)
    if (IsNestedType(node)) return node;

    var modifiers = node.Modifiers;

    // find public modifier
    var publicModifier = modifiers.FirstOrDefault(m => m.IsKind(SyntaxKind.PublicKeyword));
    if (publicModifier.IsKind(SyntaxKind.None))
      return node;

    // Replace public with internal
    var internalToken = SyntaxFactory.Token(SyntaxKind.InternalKeyword)
      .WithLeadingTrivia(publicModifier.LeadingTrivia)
      .WithTrailingTrivia(publicModifier.TrailingTrivia);

    var newModifiersList = modifiers.Replace(publicModifier, internalToken);
    return (TMemberDeclarationSyntax)node.WithModifiers(newModifiersList);
  }