GenerateLinePragmaEnd (prevMember.LinePragma);
if (prevMember.EndDirectives.Count > 0)
GenerateDirectives (prevMember.EndDirectives);
+ if (!Options.VerbatimOrder && prevMember is CodeSnippetTypeMember && !(member is CodeSnippetTypeMember))
+ output.WriteLine ();
}
if (options.BlankLinesBetweenMembers)
GenerateLinePragmaEnd (currentMember.LinePragma);
if (currentMember.EndDirectives.Count > 0)
GenerateDirectives (currentMember.EndDirectives);
+ if (!Options.VerbatimOrder && currentMember is CodeSnippetTypeMember)
+ output.WriteLine ();
}
this.currentType = type;
// The position in the array determines the order in which those
// kind of CodeTypeMembers are generated. Less is more ;-)
- static Type [] memberTypes = { typeof (CodeMemberField),
+ static readonly Type [] memberTypes = { typeof (CodeMemberField),
typeof (CodeSnippetTypeMember),
typeof (CodeTypeConstructor),
typeof (CodeConstructor),
public void Visit (CodeSnippetTypeMember o)
{
+ var indent = g.Indent;
+ g.Indent = 0;
g.GenerateSnippetMember (o);
+
+ if (g.Options.VerbatimOrder)
+ g.Output.WriteLine ();
+
+ g.Indent = indent;
}
public void Visit (CodeTypeConstructor o)
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
+using Microsoft.CSharp;
using System.IO;
using NUnit.Framework;
Assert.Greater (attributePosition, importPosition, "Actual order: " + result);
}
+ [Test]
+ public void CodeSnippetBlankLines ()
+ {
+ var opt = new CodeGeneratorOptions () {
+ BlankLinesBetweenMembers = false,
+ VerbatimOrder = false
+ };
+
+ var ccu = new CodeCompileUnit ();
+ var ns = new CodeNamespace ("Foo");
+ ccu.Namespaces.Add (ns);
+ var t = new CodeTypeDeclaration ("Bar");
+ ns.Types.Add (t);
+
+ t.Members.Add (new CodeSnippetTypeMember ("#line hidden"));
+ t.Members.Add (new CodeSnippetTypeMember ("#line hidden2"));
+
+ t.Members.Add (new CodeMemberMethod () { Name = "Foo" });
+
+ using (var sw = new StringWriter ()) {
+ new CSharpCodeProvider ().GenerateCodeFromCompileUnit (ccu, sw, opt);
+ var str = sw.ToString ();
+
+ Assert.IsFalse (str.Contains ("hidden2private"), "#0");
+ Assert.IsTrue (str.Contains( "#line hidden#line hidden2"), "#1");
+ }
+ }
+
+ [Test]
+ public void CodeSnippetBlankLinesVerbatimOrder ()
+ {
+ var opt = new CodeGeneratorOptions () {
+ BlankLinesBetweenMembers = false,
+ VerbatimOrder = true
+ };
+
+ var ccu = new CodeCompileUnit ();
+ var ns = new CodeNamespace ("Foo");
+ ccu.Namespaces.Add (ns);
+ var t = new CodeTypeDeclaration ("Bar");
+ ns.Types.Add (t);
+
+ t.Members.Add (new CodeSnippetTypeMember ("#line hidden"));
+ t.Members.Add (new CodeSnippetTypeMember ("#line hidden2"));
+
+ t.Members.Add (new CodeMemberMethod () { Name = "Foo" });
+
+ using (var sw = new StringWriter ()) {
+ new CSharpCodeProvider ().GenerateCodeFromCompileUnit (ccu, sw, opt);
+ var str = sw.ToString ();
+
+ Assert.IsFalse (str.Contains ("hidden2private"), "#0");
+ Assert.IsFalse (str.Contains( "#line hidden#line hidden2"), "#1");
+ Assert.IsTrue (str.Contains( "#line hidden" + Environment.NewLine), "#2");
+ Assert.IsTrue (str.Contains( "#line hidden2" + Environment.NewLine), "#3");
+ }
+ }
+
private const string ATTRIBUTE = "ATTRIBUTE";
private const string IMPORT = "IMPORT";