PageRenderTime 64ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/SolutionFramework/Microsoft.VisualStudio.ServiceModel.DomainServices.Tools.10.0/Microsoft/VisualStudio/ServiceModel/DomainServices/Tools/DomainServiceFixupCodeDomVisitor.cs

#
C# | 143 lines | 131 code | 12 blank | 0 comment | 18 complexity | a4d7899e804ca82dcb3a8eaf6d68da99 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0
  1. namespace Microsoft.VisualStudio.ServiceModel.DomainServices.Tools
  2. {
  3. using Microsoft.ServiceModel.DomainServices.Tools;
  4. using System;
  5. using System.CodeDom;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. internal sealed class DomainServiceFixupCodeDomVisitor : CodeDomVisitor
  10. {
  11. private CodeGenContext _context;
  12. public DomainServiceFixupCodeDomVisitor(CodeGenContext context)
  13. {
  14. if (context == null)
  15. {
  16. throw new ArgumentNullException("context");
  17. }
  18. this._context = context;
  19. }
  20. private void FixUpNamespaceRootNamespace(CodeNamespace ns)
  21. {
  22. string rootNamespace = this.RootNamespace;
  23. if (!this.IsCSharp && !string.IsNullOrEmpty(rootNamespace))
  24. {
  25. string name = ns.Name;
  26. if (name.Equals(rootNamespace, StringComparison.Ordinal))
  27. {
  28. ns.Name = string.Empty;
  29. }
  30. else if (name.StartsWith(rootNamespace + ".", StringComparison.Ordinal))
  31. {
  32. ns.Name = name.Substring(rootNamespace.Length + 1);
  33. }
  34. }
  35. }
  36. private static string GetAttributeId(CodeAttributeDeclaration attribute)
  37. {
  38. StringBuilder builder = new StringBuilder(attribute.Name);
  39. foreach (CodeAttributeArgument argument in attribute.Arguments)
  40. {
  41. CodePrimitiveExpression expression = argument.Value as CodePrimitiveExpression;
  42. builder.Append(argument.Name);
  43. if ((expression != null) && (expression.Value != null))
  44. {
  45. builder.Append(expression.Value.ToString());
  46. }
  47. else
  48. {
  49. builder.Append(argument.Value.ToString());
  50. }
  51. }
  52. return builder.ToString();
  53. }
  54. protected override void VisitCodeAttributeDeclarationCollection(CodeAttributeDeclarationCollection codeAttributeDeclarationCollection)
  55. {
  56. CodeAttributeDeclaration[] declarationArray = (from a in codeAttributeDeclarationCollection.Cast<CodeAttributeDeclaration>()
  57. orderby GetAttributeId(a)
  58. select a).ToArray<CodeAttributeDeclaration>();
  59. codeAttributeDeclarationCollection.Clear();
  60. codeAttributeDeclarationCollection.AddRange(declarationArray);
  61. base.VisitCodeAttributeDeclarationCollection(codeAttributeDeclarationCollection);
  62. }
  63. protected override void VisitCodeNamespaceCollection(CodeNamespaceCollection codeNamespaceCollection)
  64. {
  65. CodeNamespace[] namespaceArray = (from ns in codeNamespaceCollection.Cast<CodeNamespace>()
  66. orderby ns.Name
  67. select ns).ToArray<CodeNamespace>();
  68. codeNamespaceCollection.Clear();
  69. if (this.IsCSharp)
  70. {
  71. codeNamespaceCollection.AddRange(namespaceArray);
  72. }
  73. else
  74. {
  75. foreach (CodeNamespace namespace2 in namespaceArray)
  76. {
  77. this.FixUpNamespaceRootNamespace(namespace2);
  78. codeNamespaceCollection.Add(namespace2);
  79. }
  80. }
  81. base.VisitCodeNamespaceCollection(codeNamespaceCollection);
  82. }
  83. protected override void VisitCodeNamespaceImportCollection(CodeNamespaceImportCollection codeNamespaceImportCollection)
  84. {
  85. CodeNamespaceImport[] importArray = codeNamespaceImportCollection.Cast<CodeNamespaceImport>().OrderBy<CodeNamespaceImport, string>(i => i.Namespace, new NamespaceImportComparer()).Distinct<CodeNamespaceImport>().ToArray<CodeNamespaceImport>();
  86. codeNamespaceImportCollection.Clear();
  87. codeNamespaceImportCollection.AddRange(importArray);
  88. base.VisitCodeNamespaceImportCollection(codeNamespaceImportCollection);
  89. }
  90. protected override void VisitCodeTypeDeclarationCollection(CodeTypeDeclarationCollection codeTypeDeclarationCollection)
  91. {
  92. CodeTypeDeclaration[] declarationArray = (from c in codeTypeDeclarationCollection.Cast<CodeTypeDeclaration>()
  93. orderby c.Name
  94. select c).ToArray<CodeTypeDeclaration>();
  95. codeTypeDeclarationCollection.Clear();
  96. codeTypeDeclarationCollection.AddRange(declarationArray);
  97. base.VisitCodeTypeDeclarationCollection(codeTypeDeclarationCollection);
  98. }
  99. private bool IsCSharp
  100. {
  101. get
  102. {
  103. return this._context.IsCSharp;
  104. }
  105. }
  106. private string RootNamespace
  107. {
  108. get
  109. {
  110. return this._context.RootNamespace;
  111. }
  112. }
  113. private class NamespaceImportComparer : IComparer<string>
  114. {
  115. public int Compare(string x, string y)
  116. {
  117. bool flag = x.Equals("System", StringComparison.Ordinal) || x.StartsWith("System.", StringComparison.Ordinal);
  118. bool flag2 = y.Equals("System", StringComparison.Ordinal) || y.StartsWith("System.", StringComparison.Ordinal);
  119. if (flag && !flag2)
  120. {
  121. return -1;
  122. }
  123. if (!flag && flag2)
  124. {
  125. return 1;
  126. }
  127. return string.Compare(x, y, StringComparison.Ordinal);
  128. }
  129. }
  130. }
  131. }