diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
index 2bbdcf11da..17aeeb0b2a 100644
--- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
+++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
@@ -39,13 +39,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
}
- public object Options {
- get {
- return prettyPrintOptions;
- }
- set {
- prettyPrintOptions = value as PrettyPrintOptions;
- }
+ AbstractPrettyPrintOptions IOutputAstVisitor.Options {
+ get { return prettyPrintOptions; }
+ }
+
+ public PrettyPrintOptions Options {
+ get { return prettyPrintOptions; }
}
public IOutputFormatter OutputFormatter {
diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/IOutputAstVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/IOutputAstVisitor.cs
index 8d8435b179..c73230a469 100644
--- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/IOutputAstVisitor.cs
+++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/IOutputAstVisitor.cs
@@ -27,9 +27,8 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
get;
}
- object Options {
+ AbstractPrettyPrintOptions Options {
get;
- set;
}
IOutputFormatter OutputFormatter {
get;
diff --git a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs
index f79b2348aa..e979e0ab27 100644
--- a/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs
+++ b/src/Libraries/NRefactory/Project/Src/PrettyPrinter/VBNet/VBNetOutputVisitor.cs
@@ -41,13 +41,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
}
}
- public object Options {
- get {
- return prettyPrintOptions;
- }
- set {
- prettyPrintOptions = value as VBNetPrettyPrintOptions;
- }
+ AbstractPrettyPrintOptions IOutputAstVisitor.Options {
+ get { return prettyPrintOptions; }
+ }
+
+ public VBNetPrettyPrintOptions Options {
+ get { return prettyPrintOptions; }
}
public NodeTracker NodeTracker {
diff --git a/src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs b/src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs
index c818d1d117..98deebdff9 100644
--- a/src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs
+++ b/src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs
@@ -8,13 +8,22 @@
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
+using ICSharpCode.SharpDevelop.Dom.Refactoring;
+using ICSharpCode.NRefactory.PrettyPrinter;
namespace ICSharpCode.SharpDevelop
{
public static class AmbienceService
{
- static readonly string ambienceProperty = "SharpDevelop.UI.CurrentAmbience";
- static readonly string codeGenerationProperty = "SharpDevelop.UI.CodeGenerationOptions";
+ const string ambienceProperty = "SharpDevelop.UI.CurrentAmbience";
+ const string codeGenerationProperty = "SharpDevelop.UI.CodeGenerationOptions";
+ const string textEditorProperty = "ICSharpCode.TextEditor.Document.Document.DefaultDocumentAggregatorProperties";
+
+ static AmbienceService()
+ {
+ PropertyService.PropertyChanged += new PropertyChangedEventHandler(PropertyChanged);
+ ApplyCodeGenerationPropertiesToNRefactory();
+ }
public static Properties CodeGenerationProperties {
get {
@@ -22,6 +31,16 @@ namespace ICSharpCode.SharpDevelop
}
}
+ static void ApplyCodeGenerationPropertiesToNRefactory()
+ {
+ Properties p = CodeGenerationProperties;
+ LanguageProperties.CSharp.CodeGenerator.Options.EmptyLinesBetweenMembers = p.Get("BlankLinesBetweenMembers", true);
+ LanguageProperties.CSharp.CodeGenerator.Options.BracesOnSameLine = p.Get("StartBlockOnSameLine", true);
+
+ System.CodeDom.Compiler.CodeGeneratorOptions cdo = new CodeDOMGeneratorUtility().CreateCodeGeneratorOptions;
+ LanguageProperties.CSharp.CodeGenerator.Options.IndentString = cdo.IndentString;
+ }
+
public static bool GenerateDocumentComments {
get {
return CodeGenerationProperties.Get("GenerateDocumentComments", true);
@@ -90,14 +109,11 @@ namespace ICSharpCode.SharpDevelop
defaultAmbience = null;
OnAmbienceChanged(EventArgs.Empty);
}
+ if (e.Key == codeGenerationProperty || e.Key == textEditorProperty) {
+ ApplyCodeGenerationPropertiesToNRefactory();
+ }
}
- static AmbienceService()
- {
- PropertyService.PropertyChanged += new PropertyChangedEventHandler(PropertyChanged);
- }
-
-
static void OnAmbienceChanged(EventArgs e)
{
if (AmbienceChanged != null) {
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
index 5bcbb4f6bd..c729757248 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
@@ -88,6 +88,7 @@
+
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs
index 019d1deba3..29fe06d42f 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs
@@ -243,6 +243,12 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
}
#endregion
+ readonly CodeGeneratorOptions options = new CodeGeneratorOptions();
+
+ public CodeGeneratorOptions Options {
+ get { return options; }
+ }
+
#region Code generation / insertion
public virtual void InsertCodeAfter(IMember member, IDocument document, params AbstractNode[] nodes)
{
@@ -258,13 +264,13 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
public virtual void InsertCodeAtEnd(DomRegion region, IDocument document, params AbstractNode[] nodes)
{
InsertCodeAfter(region.EndLine - 1, document,
- GetIndentation(document, region.BeginLine) + '\t', nodes);
+ GetIndentation(document, region.BeginLine) + options.IndentString, nodes);
}
public virtual void InsertCodeInClass(IClass c, IDocument document, int targetLine, params AbstractNode[] nodes)
{
InsertCodeAfter(targetLine, document,
- GetIndentation(document, c.Region.BeginLine) + '\t', false, nodes);
+ GetIndentation(document, c.Region.BeginLine) + options.IndentString, false, nodes);
}
protected string GetIndentation(IDocument document, int line)
@@ -291,8 +297,11 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
IDocumentLine lineSegment = document.GetLine(insertLine + 1);
StringBuilder b = new StringBuilder();
for (int i = 0; i < nodes.Length; i++) {
- if (startWithEmptyLine || i > 0)
- b.AppendLine(indentation);
+ if (options.EmptyLinesBetweenMembers) {
+ if (startWithEmptyLine || i > 0) {
+ b.AppendLine(indentation);
+ }
+ }
b.Append(GenerateCode(nodes[i], indentation));
}
document.Insert(lineSegment.Offset, b.ToString());
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGeneratorOptions.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGeneratorOptions.cs
new file mode 100644
index 0000000000..bb5acc8e46
--- /dev/null
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGeneratorOptions.cs
@@ -0,0 +1,28 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+
+namespace ICSharpCode.SharpDevelop.Dom.Refactoring
+{
+ public class CodeGeneratorOptions
+ {
+ public bool BracesOnSameLine = true;
+ public bool EmptyLinesBetweenMembers = true;
+ string indentString;
+
+ public string IndentString {
+ get { return indentString; }
+ set {
+ if (string.IsNullOrEmpty(value)) {
+ throw new ArgumentNullException("value");
+ }
+ indentString = value;
+ }
+ }
+ }
+}
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/NRefactoryCodeGenerator.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/NRefactoryCodeGenerator.cs
index ab98deb347..ede220eb1a 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/NRefactoryCodeGenerator.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/NRefactoryCodeGenerator.cs
@@ -38,11 +38,31 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
public class CSharpCodeGenerator : NRefactoryCodeGenerator
{
- public static readonly CSharpCodeGenerator Instance = new CSharpCodeGenerator();
+ internal static readonly CSharpCodeGenerator Instance = new CSharpCodeGenerator();
public override IOutputAstVisitor CreateOutputVisitor()
{
- return new CSharpOutputVisitor();
+ CSharpOutputVisitor v = new CSharpOutputVisitor();
+ PrettyPrintOptions pOpt = v.Options;
+
+ BraceStyle braceStyle;
+ if (this.Options.BracesOnSameLine) {
+ braceStyle = BraceStyle.EndOfLine;
+ } else {
+ braceStyle = BraceStyle.NextLine;
+ }
+ pOpt.StatementBraceStyle = braceStyle;
+ pOpt.EventAddBraceStyle = braceStyle;
+ pOpt.EventRemoveBraceStyle = braceStyle;
+ pOpt.PropertyBraceStyle = braceStyle;
+ pOpt.PropertyGetBraceStyle = braceStyle;
+ pOpt.PropertySetBraceStyle = braceStyle;
+
+ pOpt.IndentationChar = this.Options.IndentString[0];
+ pOpt.IndentSize = this.Options.IndentString.Length;
+ pOpt.TabSize = this.Options.IndentString.Length;
+
+ return v;
}
///
@@ -100,17 +120,24 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
}
}
}
- InsertCodeAfter(insertionLine, document, beginLineIndentation + '\t', nodes);
+ InsertCodeAfter(insertionLine, document, beginLineIndentation + this.Options.IndentString, nodes);
}
}
public class VBNetCodeGenerator : NRefactoryCodeGenerator
{
- public static readonly VBNetCodeGenerator Instance = new VBNetCodeGenerator();
+ internal static readonly VBNetCodeGenerator Instance = new VBNetCodeGenerator();
public override IOutputAstVisitor CreateOutputVisitor()
{
- return new VBNetOutputVisitor();
+ VBNetOutputVisitor v = new VBNetOutputVisitor();
+ VBNetPrettyPrintOptions pOpt = v.Options;
+
+ pOpt.IndentationChar = this.Options.IndentString[0];
+ pOpt.IndentSize = this.Options.IndentString.Length;
+ pOpt.TabSize = this.Options.IndentString.Length;
+
+ return v;
}
public override PropertyDeclaration CreateProperty(IField field, bool createGetter, bool createSetter)