Advertisement
Guest User

Untitled

a guest
Jul 30th, 2015
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. using Microsoft.CodeAnalysis.CSharp;
  2. using Microsoft.CodeAnalysis.Text;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.IO;
  9. using Microsoft.CodeAnalysis.CSharp.Syntax;
  10. using Microsoft.CodeAnalysis;
  11.  
  12. namespace FixCode
  13. {
  14. class Program
  15. {
  16. static void Main(string[] args)
  17. {
  18. var root = @"E:\dd\ros\Open\src\Compilers\Core\MSBuildTask";
  19. Fix(Path.Combine(root, "Csc.cs"));
  20. Fix(Path.Combine(root, "Vbc.cs"));
  21. Fix(Path.Combine(root, "ManagedCompiler.cs"));
  22. }
  23.  
  24. static void Fix(string fileName)
  25. {
  26. var lines = File.ReadAllText(fileName);
  27. var tree = CSharpSyntaxTree.ParseText(lines);
  28.  
  29. var fixer = new Fixer();
  30. var root = fixer.Visit(tree.GetRoot());
  31.  
  32. using (var writer = new StreamWriter(File.Open(fileName, FileMode.Create)))
  33. {
  34. root.WriteTo(writer);
  35. }
  36. }
  37. }
  38.  
  39. internal sealed class Fixer : CSharpSyntaxRewriter
  40. {
  41. private PropertyDeclarationSyntax _currentProperty;
  42.  
  43. public override SyntaxNode VisitPropertyDeclaration(PropertyDeclarationSyntax node)
  44. {
  45. _currentProperty = node;
  46. var ret = base.VisitPropertyDeclaration(node);
  47. _currentProperty = null;
  48. return ret;
  49. }
  50.  
  51. public override SyntaxNode VisitLiteralExpression(LiteralExpressionSyntax node)
  52. {
  53. if (_currentProperty != null &&
  54. node.Token.Kind() == SyntaxKind.StringLiteralToken &&
  55. node.Token.ValueText == _currentProperty.Identifier.ValueText)
  56. {
  57. return SyntaxFactory.InvocationExpression(
  58. SyntaxFactory.IdentifierName("nameof"),
  59. SyntaxFactory.ArgumentList(
  60. SyntaxFactory.Token(SyntaxKind.OpenParenToken),
  61. SyntaxFactory.SeparatedList<ArgumentSyntax>(
  62. SyntaxFactory.NodeOrTokenList(
  63. SyntaxFactory.Argument(
  64. SyntaxFactory.IdentifierName(_currentProperty.Identifier.ValueText)))),
  65. SyntaxFactory.Token(SyntaxKind.CloseParenToken)));
  66. }
  67.  
  68. return base.VisitLiteralExpression(node);
  69. }
  70.  
  71. public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax node)
  72. {
  73. var modifiers = node.Modifiers;
  74. var index = 0;
  75. while (
  76. index + 1 < modifiers.Count &&
  77. modifiers[index].Kind() == SyntaxKind.OverrideKeyword &&
  78. SyntaxFacts.IsAccessibilityModifier(modifiers[index + 1].Kind()))
  79. {
  80. var overrideToken = modifiers[index];
  81. var accessToken = modifiers[index + 1];
  82.  
  83. var newOverrideToken = overrideToken.WithTriviaFrom(accessToken);
  84. var newAccessToken = accessToken.WithTriviaFrom(overrideToken);
  85.  
  86. modifiers = modifiers
  87. .RemoveAt(index)
  88. .Insert(index, newAccessToken)
  89. .RemoveAt(index + 1)
  90. .Insert(index + 1, newOverrideToken);
  91. index++;
  92. }
  93.  
  94. node = node.WithModifiers(modifiers);
  95. return base.VisitMethodDeclaration(node);
  96. }
  97. }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement