Browse Source

Fixed SD2-1348: "Find missing resource keys" exception when run before AmbienceService is used.

CodeGenerator constructor now requests initialization of the code generator options through the HostCallback.
AmbienceService keeps track of instantiated code generators to update the options when changed.
Code generator options are now also applied to code generators defined in addins.
Made default code generator options valid.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2500 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Christian Hornung 19 years ago
parent
commit
86d3fdcc78
  1. 29
      src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs
  2. 2
      src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs
  3. 7
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/HostCallback.cs
  4. 5
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs
  5. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGeneratorOptions.cs

29
src/Main/Base/Project/Src/Services/AmbienceService/AmbienceService.cs

@ -6,6 +6,7 @@
// </file> // </file>
using System; using System;
using System.Collections.Generic;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring; using ICSharpCode.SharpDevelop.Dom.Refactoring;
@ -22,7 +23,6 @@ namespace ICSharpCode.SharpDevelop
static AmbienceService() static AmbienceService()
{ {
PropertyService.PropertyChanged += new PropertyChangedEventHandler(PropertyChanged); PropertyService.PropertyChanged += new PropertyChangedEventHandler(PropertyChanged);
ApplyCodeGenerationPropertiesToNRefactory();
} }
public static Properties CodeGenerationProperties { public static Properties CodeGenerationProperties {
@ -31,21 +31,22 @@ namespace ICSharpCode.SharpDevelop
} }
} }
static void ApplyCodeGenerationPropertiesToNRefactory() static List<CodeGenerator> codeGenerators = new List<CodeGenerator>();
static void ApplyCodeGenerationProperties(CodeGenerator generator)
{ {
CodeGeneratorOptions csharpOptions = LanguageProperties.CSharp.CodeGenerator.Options; CodeGeneratorOptions options = generator.Options;
CodeGeneratorOptions vbOptions = LanguageProperties.VBNet.CodeGenerator.Options;
System.CodeDom.Compiler.CodeGeneratorOptions cdo = new CodeDOMGeneratorUtility().CreateCodeGeneratorOptions; System.CodeDom.Compiler.CodeGeneratorOptions cdo = new CodeDOMGeneratorUtility().CreateCodeGeneratorOptions;
csharpOptions.EmptyLinesBetweenMembers = cdo.BlankLinesBetweenMembers; options.EmptyLinesBetweenMembers = cdo.BlankLinesBetweenMembers;
vbOptions.EmptyLinesBetweenMembers = cdo.BlankLinesBetweenMembers; options.BracesOnSameLine = CodeGenerationProperties.Get("StartBlockOnSameLine", true);;
options.IndentString = cdo.IndentString;
bool startBlockOnSameLine = CodeGenerationProperties.Get("StartBlockOnSameLine", true); }
csharpOptions.BracesOnSameLine = startBlockOnSameLine;
vbOptions.BracesOnSameLine = startBlockOnSameLine; internal static void InitializeCodeGeneratorOptions(CodeGenerator generator)
{
csharpOptions.IndentString = cdo.IndentString; codeGenerators.Add(generator);
vbOptions.IndentString = cdo.IndentString; ApplyCodeGenerationProperties(generator);
} }
public static bool GenerateDocumentComments { public static bool GenerateDocumentComments {
@ -117,7 +118,7 @@ namespace ICSharpCode.SharpDevelop
OnAmbienceChanged(EventArgs.Empty); OnAmbienceChanged(EventArgs.Empty);
} }
if (e.Key == codeGenerationProperty || e.Key == textEditorProperty) { if (e.Key == codeGenerationProperty || e.Key == textEditorProperty) {
ApplyCodeGenerationPropertiesToNRefactory(); codeGenerators.ForEach(ApplyCodeGenerationProperties);
} }
} }

2
src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs

@ -43,6 +43,8 @@ namespace ICSharpCode.SharpDevelop
WorkbenchSingleton.SafeThreadAsyncCall(ShowAssemblyLoadError, WorkbenchSingleton.SafeThreadAsyncCall(ShowAssemblyLoadError,
fileName, include, message); fileName, include, message);
}; };
HostCallback.InitializeCodeGeneratorOptions = AmbienceService.InitializeCodeGeneratorOptions;
} }
static void ShowAssemblyLoadError(string fileName, string include, string message) static void ShowAssemblyLoadError(string fileName, string include, string message)

7
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/HostCallback.cs

@ -6,6 +6,7 @@
// </file> // </file>
using System; using System;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
namespace ICSharpCode.SharpDevelop.Dom namespace ICSharpCode.SharpDevelop.Dom
{ {
@ -65,5 +66,11 @@ namespace ICSharpCode.SharpDevelop.Dom
+ ":\r\n" + message + "\r\n"); + ":\r\n" + message + "\r\n");
ShowAssemblyLoadError(fileName, include, message); ShowAssemblyLoadError(fileName, include, message);
} }
/// <summary>
/// Initialize the code generator options of the passed CodeGenerator.
/// Invoked exactly once for each created instance of a class derived from CodeGenerator.
/// </summary>
public static Action<CodeGenerator> InitializeCodeGeneratorOptions = delegate {};
} }
} }

5
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGenerator.cs

@ -19,6 +19,11 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
/// </summary> /// </summary>
public abstract class CodeGenerator public abstract class CodeGenerator
{ {
protected CodeGenerator()
{
HostCallback.InitializeCodeGeneratorOptions(this);
}
#region Dummy Code Generator #region Dummy Code Generator
public static readonly CodeGenerator DummyCodeGenerator = new DummyCodeGeneratorClass(); public static readonly CodeGenerator DummyCodeGenerator = new DummyCodeGeneratorClass();

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Refactoring/CodeGeneratorOptions.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.SharpDevelop.Dom.Refactoring
{ {
public bool BracesOnSameLine = true; public bool BracesOnSameLine = true;
public bool EmptyLinesBetweenMembers = true; public bool EmptyLinesBetweenMembers = true;
string indentString; string indentString = "\t";
public string IndentString { public string IndentString {
get { return indentString; } get { return indentString; }

Loading…
Cancel
Save