{
GenerateCompileUnitStart (compileUnit);
- GenerateGlobalNamespace (compileUnit);
+ List<CodeNamespaceImport> imports = null;
+ foreach (CodeNamespace codeNamespace in compileUnit.Namespaces) {
+ if (!string.IsNullOrEmpty (codeNamespace.Name))
+ continue;
+
+ if (codeNamespace.Imports.Count == 0)
+ continue;
+
+ if (imports == null)
+ imports = new List<CodeNamespaceImport> ();
+
+ foreach (CodeNamespaceImport i in codeNamespace.Imports)
+ imports.Add (i);
+ }
+
+ if (imports != null) {
+ imports.Sort ((a, b) => a.Namespace.CompareTo (b.Namespace));
+ foreach (var import in imports)
+ GenerateNamespaceImport (import);
+
+ Output.WriteLine ();
+ }
if (compileUnit.AssemblyCustomAttributes.Count > 0) {
OutputAttributes (compileUnit.AssemblyCustomAttributes,
Output.WriteLine ("");
}
- GenerateLocalNamespaces (compileUnit);
-
- GenerateCompileUnitEnd (compileUnit);
- }
+ CodeNamespaceImportCollection global_imports = null;
+ foreach (CodeNamespace codeNamespace in compileUnit.Namespaces) {
+ if (string.IsNullOrEmpty (codeNamespace.Name)) {
+ global_imports = codeNamespace.Imports;
+ codeNamespace.Imports.Clear ();
+ }
- private void GenerateGlobalNamespace (CodeCompileUnit compileUnit) {
- CodeNamespace globalNamespace = null;
+ GenerateNamespace (codeNamespace);
- foreach (CodeNamespace codeNamespace in compileUnit.Namespaces)
- if (string.IsNullOrEmpty (codeNamespace.Name))
- globalNamespace = codeNamespace;
-
- if (globalNamespace != null)
- GenerateNamespace (globalNamespace);
- }
+ if (global_imports != null) {
+ codeNamespace.Imports.Clear ();
+ foreach (CodeNamespaceImport ns in global_imports)
+ codeNamespace.Imports.Add (ns);
+ global_imports = null;
+ }
+ }
- private void GenerateLocalNamespaces (CodeCompileUnit compileUnit) {
- foreach (CodeNamespace codeNamespace in compileUnit.Namespaces)
- if (!string.IsNullOrEmpty (codeNamespace.Name))
- GenerateNamespace (codeNamespace);
+ GenerateCompileUnitEnd (compileUnit);
}
protected override void GenerateDefaultValueExpression (CodeDefaultValueExpression e)
static void FillKeywordTable ()
{
- keywordsTable = new Hashtable ();
- foreach (string keyword in keywords) {
- keywordsTable.Add (keyword, keyword);
+ lock (keywords) {
+ if (keywordsTable == null) {
+ keywordsTable = new Hashtable ();
+ foreach (string keyword in keywords) {
+ keywordsTable.Add (keyword, keyword);
+ }
+ }
}
}