Browse Source

Allow unit tests to set the list of parser descriptors in the ParserService.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4723 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
9caed44e73
  1. 2
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlDisplayBinding.cs
  2. 49
      src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDescriptor.cs
  3. 3
      src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDoozer.cs
  4. 20
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

2
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlDisplayBinding.cs

@ -63,7 +63,7 @@ namespace ICSharpCode.XmlEditor @@ -63,7 +63,7 @@ namespace ICSharpCode.XmlEditor
public static string[] GetXmlFileExtensions()
{
foreach (ParserDescriptor parser in AddInTree.BuildItems<ParserDescriptor>("/Workspace/Parser", null, false)) {
if (parser.Codon.Id == "XmlFoldingParser") {
if (parser.Language == "XmlFoldingParser") {
return parser.Supportedextensions;
}
}

49
src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDescriptor.cs

@ -16,35 +16,19 @@ namespace ICSharpCode.SharpDevelop @@ -16,35 +16,19 @@ namespace ICSharpCode.SharpDevelop
public sealed class ParserDescriptor
{
Codon codon;
Type parserType;
public IParser CreateParser()
{
return (IParser)codon.AddIn.CreateObject(codon.Properties["class"]);
if (codon != null)
return (IParser)codon.AddIn.CreateObject(codon.Properties["class"]);
else
return (IParser)Activator.CreateInstance(parserType);
}
public Codon Codon {
get {
return codon;
}
}
public string Language { get; private set; }
public string Language {
get {
return codon.Id;
}
}
public string ProjectFileExtension {
get {
return codon.Properties["projectfileextension"];
}
}
public string[] Supportedextensions {
get {
return codon.Properties["supportedextensions"].Split(';');
}
}
public string[] Supportedextensions { get; private set; }
public bool CanParse(string fileName)
{
@ -57,9 +41,26 @@ namespace ICSharpCode.SharpDevelop @@ -57,9 +41,26 @@ namespace ICSharpCode.SharpDevelop
return false;
}
public ParserDescriptor (Codon codon)
public ParserDescriptor(Codon codon)
{
if (codon == null)
throw new ArgumentNullException("codon");
this.codon = codon;
this.Language = codon.Id;
this.Supportedextensions = codon.Properties["supportedextensions"].Split(';');
}
public ParserDescriptor(Type parserType, string language, string[] supportedExtensions)
{
if (parserType == null)
throw new ArgumentNullException("parserType");
if (language == null)
throw new ArgumentNullException("language");
if (supportedExtensions == null)
throw new ArgumentNullException("supportedExtensions");
this.parserType = parserType;
this.Language = language;
this.Supportedextensions = supportedExtensions;
}
}
}

3
src/Main/Base/Project/Src/Services/ParserService/Doozer/ParserDoozer.cs

@ -17,9 +17,6 @@ namespace ICSharpCode.SharpDevelop @@ -17,9 +17,6 @@ namespace ICSharpCode.SharpDevelop
/// <attribute name="supportedextensions">
/// Semicolon-separated list of file extensions for which the parser is used. (e.g. ".boo")
/// </attribute>
/// <attribute name="projectfileextension">
/// File extension of project files. (e.g. ".booproj")
/// </attribute>
/// <attribute name="class">
/// Name of the IParser class.
/// </attribute>

20
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -701,6 +701,21 @@ namespace ICSharpCode.SharpDevelop @@ -701,6 +701,21 @@ namespace ICSharpCode.SharpDevelop
FileEntry entry = GetFileEntry(fileName, true);
return entry.RegisterParseInformation(cu);
}
/// <summary>
/// Replaces the list of available parsers.
/// Causes all stored parse information to be deleted.
/// Please use this for unit tests only!
/// </summary>
public static void RegisterAvailableParsers(params ParserDescriptor[] descriptors)
{
lock (syncLock) {
parserDescriptors = new List<ParserDescriptor>();
parserDescriptors.AddRange(descriptors);
ClearAllFileEntries();
}
}
#endregion
#region ParseInformationUpdated / ParserUpdateStepFinished events
@ -790,6 +805,11 @@ namespace ICSharpCode.SharpDevelop @@ -790,6 +805,11 @@ namespace ICSharpCode.SharpDevelop
}
projectContents.Clear();
}
ClearAllFileEntries();
}
static void ClearAllFileEntries()
{
FileEntry[] entries;
lock (fileEntryDict) {
entries = fileEntryDict.Values.ToArray();

Loading…
Cancel
Save