diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test1.xaml b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test1.xaml new file mode 100644 index 0000000000..eed0baf428 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test1.xaml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test2.xaml b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test2.xaml new file mode 100644 index 0000000000..51079a2975 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test2.xaml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test3.xaml b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test3.xaml new file mode 100644 index 0000000000..ebc70dd0a0 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/Test3.xaml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/UtilsTests.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/UtilsTests.cs new file mode 100644 index 0000000000..462d78ec19 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/UtilsTests.cs @@ -0,0 +1,78 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; + +using NUnit.Framework; + +namespace ICSharpCode.XamlBinding.Tests +{ + [TestFixture] + public class UtilsTests + { + [Test] + public void XmlNamespacesForOffsetSimple() + { + string xaml = File.ReadAllText("Test1.xaml"); + int offset = xaml.IndexOf("CheckBox") + "CheckBox ".Length; + + var expectedResult = new Dictionary { + {"xmlns", "http://schemas.microsoft.com/netfx/2007/xaml/presentation"}, + {"xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml"} + }; + + var result = Utils.GetXmlNamespacesForOffset(xaml, offset); + + foreach (var p in result) + Debug.Print(p.Key + " " + p.Value); + + Assert.AreEqual(expectedResult, result, "Is not equal"); + } + + [Test] + public void XmlNamespacesForOffsetSimple2() + { + string xaml = File.ReadAllText("Test2.xaml"); + int offset = xaml.IndexOf("CheckBox") + "CheckBox ".Length; + + var expectedResult = new Dictionary { + {"xmlns", "http://schemas.microsoft.com/netfx/2007/xaml/presentation"}, + {"xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml"}, + {"xmlns:y", "clr-namespace:ICSharpCode.Profiler.Controls;assembly=ICSharpCode.Profiler.Controls"} + }; + + var result = Utils.GetXmlNamespacesForOffset(xaml, offset); + + foreach (var p in result) + Debug.Print(p.Key + " " + p.Value); + + Assert.AreEqual(expectedResult, result, "Is not equal"); + } + + [Test] + public void XmlNamespacesForOffsetComplex() + { + string xaml = File.ReadAllText("Test3.xaml"); + int offset = xaml.IndexOf("CheckBox") + "CheckBox ".Length; + + var expectedResult = new Dictionary { + {"xmlns", "http://schemas.microsoft.com/netfx/2007/xaml/presentation"}, + {"xmlns:x", "clr-namespace:ICSharpCode.Profiler.Controls;assembly=ICSharpCode.Profiler.Controls"} + }; + + var result = Utils.GetXmlNamespacesForOffset(xaml, offset); + + foreach (var p in result) + Debug.Print(p.Key + " " + p.Value); + + Assert.AreEqual(expectedResult, result, "Is not equal"); + } + } +} diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/XamlBinding.Tests.csproj b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/XamlBinding.Tests.csproj index abf224bc48..1cf1f3f1b1 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/XamlBinding.Tests.csproj +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/XamlBinding.Tests.csproj @@ -33,7 +33,7 @@ False Auto 4194304 - AnyCPU + x86 4096 @@ -56,6 +56,7 @@ Properties\GlobalAssemblyInfo.cs + @@ -72,5 +73,14 @@ {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} XamlBinding + + Always + + + Always + + + Always + \ No newline at end of file diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs new file mode 100644 index 0000000000..f892120541 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs @@ -0,0 +1,329 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; + +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.XmlEditor; + +namespace ICSharpCode.XamlBinding +{ + public static class CompletionDataHelper + { + static List CreateListForAttributeName(ParseInformation parseInfo, string fileContent, XamlExpressionContext context, string[] existingItems) + { + if (context.ElementPath.Elements.Count == 0) + return null; + QualifiedName lastElement = context.ElementPath.Elements[context.ElementPath.Elements.Count - 1]; + XamlCompilationUnit cu = parseInfo.BestCompilationUnit as XamlCompilationUnit; + if (cu == null) + return null; + IReturnType rt = cu.CreateType(lastElement.Namespace, lastElement.Name); + if (rt == null) + return null; + var list = new List(); + foreach (IProperty p in rt.GetProperties()) { + if (p.IsPublic && p.CanSet && !existingItems.Contains(p.Name)) { + list.Add(new XamlCompletionItem(p)); + } + } + foreach (IEvent e in rt.GetEvents()) { + if (e.IsPublic && !existingItems.Contains(e.Name)) { + list.Add(new XamlCompletionItem(e)); + } + } + return list; + } + + static bool IsReaderAtTarget(XmlTextReader r, int caretLine, int caretColumn) + { + if (r.LineNumber > caretLine) + return true; + else if (r.LineNumber == caretLine) + return r.LinePosition >= caretColumn; + else + return false; + } + + static List CreateListForElement(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn) + { + using (XmlTextReader r = new XmlTextReader(new StringReader(fileContent))) { + try { + r.WhitespaceHandling = WhitespaceHandling.Significant; + // move reader to correct position + while (r.Read() && !IsReaderAtTarget(r, caretLine, caretColumn)) { } + } + catch (XmlException) { + } + var result = new List(); + IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent; + + TypeResolveResult rr = new XamlResolver().Resolve(new ExpressionResult(r.Name), parseInfo, fileContent) as TypeResolveResult; + if (rr != null) { + AddPropertiesForType(result, r, rr); + AddEventsForType(result, r, rr); + } + + foreach (var ns in r.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml)) { + var list = XamlCompilationUnit.GetNamespaceMembers(pc, ns.Value); + if (list != null) { + foreach (IClass c in list.OfType()) { + if (c.ClassType != ClassType.Class) + continue; + if (c.IsAbstract && c.IsStatic) + continue; + if (c.ClassInheritanceTree.Any(b => b.FullyQualifiedName == "System.Attribute")) + continue; + if (!c.Methods.Any(m => m.IsConstructor && m.IsPublic)) + continue; + + if (!string.IsNullOrEmpty(ns.Key)) + result.Add(new XamlCompletionItem(c, ns.Key)); + else + result.Add(new XamlCompletionItem(c)); + } + } + } + + return result; + } + } + + static void AddEventsForType(List result, XmlTextReader r, TypeResolveResult rr) + { + if (rr.ResolvedType != null) { + foreach (IEvent e in rr.ResolvedType.GetEvents()) { + if (!e.IsPublic) + continue; + + string propPrefix = e.DeclaringType.Name; + if (!string.IsNullOrEmpty(r.Prefix)) + propPrefix = r.Prefix + ":" + propPrefix; + result.Add(new XamlCompletionItem(e, propPrefix)); + } + } + } + + static void AddPropertiesForType(List result, XmlTextReader r, TypeResolveResult rr) + { + if (rr.ResolvedType != null) { + foreach (IProperty p in rr.ResolvedType.GetProperties()) { + if (!p.IsPublic) + continue; + if (!p.CanSet && !IsCollectionType(p.ReturnType)) + continue; + string propPrefix = p.DeclaringType.Name; + if (!string.IsNullOrEmpty(r.Prefix)) + propPrefix = r.Prefix + ":" + propPrefix; + result.Add(new XamlCompletionItem(p, propPrefix)); + } + } + } + + static bool IsCollectionType(IReturnType rt) + { + if (rt == null) + return false; + return rt.GetMethods().Any(m => m.Name == "Add" && m.IsPublic); + } + + class XamlCompletionProperty : DefaultProperty, IEntity + { + string newName; + + public XamlCompletionProperty(IProperty baseProperty, string prefix) + : base(baseProperty.DeclaringType, baseProperty.Name) + { + this.Modifiers = baseProperty.Modifiers; + this.CopyDocumentationFrom(baseProperty); + newName = prefix + "." + baseProperty.Name; + } + + string IEntity.Name + { + get { return newName; } + } + } + + class XamlCompletionEvent : DefaultEvent, IEntity + { + string newName; + + public XamlCompletionEvent(IEvent baseEvent, string prefix) + : base(baseEvent.DeclaringType, baseEvent.Name) + { + this.Modifiers = baseEvent.Modifiers; + this.CopyDocumentationFrom(baseEvent); + newName = prefix + "." + baseEvent.Name; + } + + string IEntity.Name + { + get { return newName; } + } + } + + static readonly List standardElements = new List { + new DefaultCompletionItem("!--"), + new DefaultCompletionItem("![CDATA["), + new DefaultCompletionItem("?") + }; + + static readonly List standardAttributes = new List { + new DefaultCompletionItem("xmlns:") + }; + + public const string XamlNamespace = "http://schemas.microsoft.com/winfx/2006/xaml"; + + static List CreateListOfMarkupExtensions(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn) + { + var list = CreateListForElement(parseInfo, fileContent, caretLine, caretColumn); + + var neededItems = list + .Where(i => ((i as XamlCompletionItem).Entity as IClass).ClassInheritanceTree + .Any(item => item.FullyQualifiedName == "System.Windows.Markup.MarkupExtension")) + .Select( + selItem => { + var it = selItem as XamlCompletionItem; + string text = it.Text; + if (it.Text.EndsWith("Extension")) + text = text.Remove(it.Text.Length - "Extension".Length); + return new XamlCompletionItem(text, it.Entity) as ICompletionItem; + } + ); + + return neededItems.ToList(); + } + + public static ICompletionItemList CreateListForContext(ITextEditor editor, XamlContext context, XmlElementPath path, IEntity entity) + { + XamlCompletionItemList list = new XamlCompletionItemList(); + ParseInformation info = ParserService.GetParseInformation(editor.FileName); + + switch (context) { + case XamlContext.AtTag: + list.Items.AddRange(standardElements); + list.Items.AddRange(CreateListForElement(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column)); + break; + case XamlContext.InTag: + list.Items.AddRange(CreateListForAttributeName(info, editor.Document.Text, new XamlExpressionContext(path, null, false), Utils.GetListOfExistingAttributeNames(editor.Document.Text, editor.Caret.Offset))); + list.Items.AddRange(standardAttributes); + break; + case XamlContext.InAttributeValue: + if (entity is IProperty) { + IProperty prop = entity as IProperty; + IReturnType type = prop.ReturnType; + if (type != null) { + TypeCompletion(type.GetUnderlyingClass(), list); + } + } else if (entity is IEvent) { + IEvent e = entity as IEvent; + IMethod invoker = GetInvokeMethod(e.ReturnType); + if (invoker == null) + break; + var item = path.Elements[path.Elements.Count - 1]; + string name = Utils.GetAttributeValue(editor.Document.Text, editor.Caret.Offset, "name"); + list.Items.Add(new NewEventCompletionItem(e, (string.IsNullOrEmpty(name)) ? item.Name : name)); + AddMatchingEventHandlers(editor, invoker, list.Items); + } + break; + case XamlContext.InMarkupExtension: + list.Items.AddRange(CreateListOfMarkupExtensions(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column)); + break; + } + + list.SortItems(); + + if (list.Items.Count >= 1) + list.SuggestedItem = list.Items[0]; + + return list; + } + + static void AddMatchingEventHandlers(ITextEditor editor, IMethod delegateInvoker, List list) + { + ParseInformation p = ParserService.GetParseInformation(editor.FileName); + var unit = p.MostRecentCompilationUnit; + var loc = editor.Document.OffsetToPosition(editor.Caret.Offset); + IClass c = unit.GetInnermostClass(loc.Line, loc.Column); + if (c == null) + return; + CompoundClass compound = c.GetCompoundClass() as CompoundClass; + if (compound != null) { + foreach (IClass part in compound.Parts) { + foreach (IMethod m in part.Methods) { + if (m.Parameters.Count != delegateInvoker.Parameters.Count) + continue; + + if ((m.ReturnType != null && delegateInvoker.ReturnType != null) && m.ReturnType.DotNetName != delegateInvoker.ReturnType.DotNetName) + continue; + + bool equal = true; + for (int i = 0; i < m.Parameters.Count; i++) { + equal &= CompareParameter(m.Parameters[i], delegateInvoker.Parameters[i]); + if (!equal) + break; + } + if (equal) { + list.Add(new XamlCompletionItem(m)); + } + } + } + } + } + + static bool CompareParameter(IParameter p1, IParameter p2) + { + bool result = p1.ReturnType.DotNetName == p2.ReturnType.DotNetName; + + result &= (p1.IsOut == p2.IsOut); + result &= (p1.IsParams == p2.IsParams); + result &= (p1.IsRef == p2.IsRef); + + return result; + } + + static IMethod GetInvokeMethod(IReturnType type) + { + if (type == null) + return null; + + foreach (IMethod method in type.GetMethods()) { + if (method.Name == "Invoke") + return method; + } + + return null; + } + + static bool TypeCompletion(IClass type, XamlCompletionItemList list) + { + switch (type.ClassType) { + case ClassType.Enum: + foreach (IField f in type.Fields) { + list.Items.Add(new XamlCompletionItem(f)); + } + return true; + case ClassType.Struct: + if (type.FullyQualifiedName == "System.Boolean") { + list.Items.Add(new DefaultCompletionItem("True")); + list.Items.Add(new DefaultCompletionItem("False")); + return true; + } + break; + } + + return false; + } + } +} diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Utils.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Utils.cs index c99668ad4c..2bd4fb9269 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Utils.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/Utils.cs @@ -5,11 +5,17 @@ // $Revision$ // -using ICSharpCode.XmlEditor; using System; +using System.Collections.Generic; +using System.Diagnostics; using System.IO; +using System.Text.RegularExpressions; using System.Xml; +using ICSharpCode.Core; +using ICSharpCode.XmlEditor; +using System.Linq; + namespace ICSharpCode.XamlBinding { /// @@ -48,28 +54,160 @@ namespace ICSharpCode.XamlBinding return false; } - public static string GetNameAttributeValue(string text, int offset) + public static string GetAttributeValue(string text, int offset, string name) { - int index = XmlParser.GetActiveElementStartIndex(text, offset); - if (index == -1) + text = SimplifyToSingleElement(text, offset, "Test"); + + if (text == null) return null; - index = text.IndexOf(' ', index); - text = text.Substring(index); - int endIndex = text.IndexOfAny(new char[] { '<', '>' }); - text = text.Substring(0, endIndex).Trim(' ', '\t', '\n', '\r'); + XmlReader reader = XmlTextReader.Create(new StringReader(text)); + + try { + reader.ReadToFollowing("Test"); + + if (!reader.MoveToFirstAttribute()) + return null; + + do { + LoggingService.Debug("name: " + reader.Name + " value: " + reader.Value); + int start = reader.Name.IndexOf(':') + 1; + string plainName = reader.Name.Substring(start, reader.Name.Length - start).ToLowerInvariant(); + + if (plainName == name.ToLowerInvariant()) + return reader.Value; + } while (reader.MoveToNextAttribute()); + } catch (XmlException) { } + + return null; + } + + public static Dictionary GetXmlNamespacesForOffset(string fileContent, int offset) + { + if (fileContent == null) + throw new ArgumentNullException("fileContent"); + if (offset < 0 || offset > fileContent.Length) + throw new ArgumentOutOfRangeException("offset", offset, "Value must be between 0 and " + fileContent.Length); + + var map = new Dictionary(); + + int endIndex = fileContent.IndexOfAny(new char[] {'<', '>'}, offset); + if (endIndex > -1) + fileContent = fileContent.Substring(0, endIndex + 1); - string[] attributes = text.Split(new string[] {"=\"", "\""}, StringSplitOptions.None); + int lastWhiteSpacePos = fileContent.LastIndexOfAny(new char[] {' ', '\t', '\n', '\r'}); - for (int i = 0; i < attributes.Length; i += 2) { - if (i + 1 < attributes.Length) { - if (attributes[i].Trim(' ', '\t', '\n', '\r').ToLowerInvariant() == "name") - return attributes[i + 1]; - } else - break; + bool inDouble = false, inSingle = false; + + for (int i = 0; i < fileContent.Length; i++) { + if (fileContent[i] == '"' && !inSingle) + inDouble = !inDouble; + if (fileContent[i] == '\'' && !inDouble) + inSingle = !inSingle; + if (fileContent[i] == '>') { + int lastDelimiterPos = fileContent.Substring(0, i + 1).LastIndexOfAny(new char[] {'>', '/'}); + if (inDouble) { + fileContent.Insert(lastDelimiterPos, "\""); + i++; + inDouble = false; + } + if (inSingle) { + fileContent.Insert(lastDelimiterPos, "'"); + inSingle = false; + i++; + } + } } + + fileContent = fileContent.Replace("", " ").Replace("<", " ").Replace("/>", " ").Replace(">", " ").Replace("\n", " ").Replace("\r", " ").Replace("\t", " "); + while (fileContent.Contains(" ")) + fileContent = fileContent.Replace(" ", " "); + + fileContent = fileContent.Replace("= \"", "=\""); + fileContent = fileContent.Replace(" =\"", "=\""); - return null; + Debug.Print(fileContent); + + string[] data = fileContent.Split(' '); + + var filter1 = data.Where(s => s.StartsWith("xmlns")); + + foreach (string item in filter1) { + string[] parts = item.Split(new char[] {'='}, 2); + if (parts.Length == 2) { + if (map.ContainsKey(parts[0])) // replace namespace with new one + map.Remove(parts[0]); + map.Add(parts[0], parts[1].Trim('"', '\'')); + } + } + + return map; + } + + public static string[] GetListOfExistingAttributeNames(string text, int offset) + { + List list = new List(); + + text = SimplifyToSingleElement(text, offset, "Test"); + + if (text == null) + return list.ToArray(); + + XmlReader reader = XmlTextReader.Create(new StringReader(text)); + + try { + reader.ReadToFollowing("Test"); + + if (!reader.MoveToFirstAttribute()) + return list.ToArray(); + + do { + LoggingService.Debug("name: " + reader.Name + " value: " + reader.Value); + list.Add(reader.Name); + } while (reader.MoveToNextAttribute()); + } catch (XmlException) { } + + return list.ToArray(); + } + + public static int GetPreviousLTCharPos(string text, int startIndex) + { + if (text == null) + throw new ArgumentNullException("text"); + + if (startIndex < 0) + return -1; + if (startIndex >= text.Length) + startIndex = text.Length - 1; + + while (startIndex > -1 && text[startIndex] != '<') + startIndex--; + + return startIndex; + } + + static string SimplifyToSingleElement(string text, int offset, string name) + { + int index = XmlParser.GetActiveElementStartIndex(text, offset); + if (index == -1) return null; + index = text.IndexOf(' ', index); + text = text.Substring(index); + int endIndex = text.IndexOfAny(new char[] { '<', '>' }); + text = text.Substring(0, endIndex).Trim(' ', '\t', '\n', '\r', '/'); + LoggingService.Debug("text: '" + text + "'"); + text = "<" + name + " " + text + " />"; + + return text; + } + + public static string GetXamlNamespacePrefix(string xaml, int offset) + { + var list = Utils.GetXmlNamespacesForOffset(xaml, offset); + var item = list.FirstOrDefault(i => i.Value == CompletionDataHelper.XamlNamespace); + + if (item.Key.StartsWith("xmlns:")) + return item.Key.Substring("xmlns:".Length); + return string.Empty; } } } diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj index a6f57524a5..fa16adc4c6 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlBinding.csproj @@ -60,15 +60,20 @@ Properties\GlobalAssemblyInfo.cs + + - + + XamlExpressionContext.cs + + diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs index d4c92ab1b5..a4948180d9 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCodeCompletionBinding.cs @@ -30,7 +30,11 @@ namespace ICSharpCode.XamlBinding /// /// Inside '="Value"' /// - InAttributeValue + InAttributeValue, + /// + /// Inside '="{}"' + /// + InMarkupExtension } public class XamlCodeCompletionBinding : ICodeCompletionBinding @@ -38,14 +42,17 @@ namespace ICSharpCode.XamlBinding public CodeCompletionKeyPressResult HandleKeyPress(ITextEditor editor, char ch) { XamlResolver resolver = new XamlResolver(); + ParseInformation info = ParserService.GetParseInformation(editor.FileName); + XmlElementPath path; int offset; + switch (ch) { case '<': - int prevLTCharPos = GetPreviousLTCharPos(editor.Document.Text, editor.Caret.Offset) + 1; + int prevLTCharPos = Utils.GetPreviousLTCharPos(editor.Document.Text, editor.Caret.Offset) + 1; path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, prevLTCharPos); if (path != null && path.Elements.Count > 0) { - ICompletionItemList list = CreateListForContext(editor, XamlContext.AtTag, path, null); + ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.AtTag, path, null); editor.ShowCompletionWindow(list); return CodeCompletionKeyPressResult.Completed; } @@ -77,24 +84,38 @@ namespace ICSharpCode.XamlBinding break; case '"': offset = editor.Caret.Offset; - path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, offset); - if (!XmlParser.IsInsideAttributeValue(editor.Document.Text, editor.Caret.Offset)) { - editor.Document.Insert(offset, "\""); - editor.Caret.Offset = offset; + + if (!XmlParser.IsInsideAttributeValue(editor.Document.Text, offset)) { + int search = offset + 1; + while (char.IsWhiteSpace(editor.Document.GetCharAt(search))) + search++; + + if (editor.Document.GetCharAt(search) != '"') { + editor.Document.Insert(offset, "\""); + editor.Caret.Offset = offset; + return CodeCompletionKeyPressResult.CompletedIncludeKeyInCompletion; + } } break; case '{': // starting point for Markup Extension Completion offset = editor.Caret.Offset; if (offset > 0) { int searchOffset = offset - 1; - char c = editor.Document.GetCharAt(searchOffset); - while (char.IsWhiteSpace(c)) { + while (char.IsWhiteSpace(editor.Document.GetCharAt(searchOffset))) searchOffset--; - c = editor.Document.GetCharAt(searchOffset); - } + + char c = editor.Document.GetCharAt(searchOffset); + if (XmlParser.IsInsideAttributeValue(editor.Document.Text, editor.Caret.Offset) && c == '"') { editor.Document.Insert(offset, "}"); editor.Caret.Offset = offset; + + path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); + if (path != null && path.Elements.Count > 0) { + ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.InMarkupExtension, path, null); + editor.ShowCompletionWindow(list); + return CodeCompletionKeyPressResult.Completed; + } } } break; @@ -102,21 +123,72 @@ namespace ICSharpCode.XamlBinding path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); if (path != null && path.Elements.Count > 0) { if (!XmlParser.IsInsideAttributeValue(editor.Document.Text, editor.Caret.Offset)) { - ICompletionItemList list = CreateListForContext(editor, XamlContext.InTag, path, null); + ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.InTag, path, null); + editor.ShowCompletionWindow(list); + return CodeCompletionKeyPressResult.Completed; + } + } + break; + case '.': + path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); + if (path != null && path.Elements.Count > 0) { + if (!XmlParser.IsInsideAttributeValue(editor.Document.Text, editor.Caret.Offset)) { + ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.InTag, path, null); editor.ShowCompletionWindow(list); return CodeCompletionKeyPressResult.Completed; } } break; + case ':': + path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); + if (path != null && path.Elements.Count > 0) { + if (XmlParser.GetQualifiedAttributeNameAtIndex(editor.Document.Text, editor.Caret.Offset) == null) { + ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.AtTag, path, null); + editor.ShowCompletionWindow(list); + return CodeCompletionKeyPressResult.CompletedIncludeKeyInCompletion; + } + } + break; + case '=': + offset = editor.Caret.Offset; + path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, offset); + if (!XmlParser.IsInsideAttributeValue(editor.Document.Text, editor.Caret.Offset)) { + int searchOffset = offset + 1; + while (char.IsWhiteSpace(editor.Document.GetCharAt(searchOffset))) + searchOffset++; + + if (editor.Document.GetCharAt(searchOffset) != '"') { +// if (path != null && path.Elements.Count > 0) { +// string attr = editor.GetWordBeforeCaret(); +// ResolveResult rr = resolver.Resolve(new ExpressionResult(attr, new XamlExpressionContext(path, attr, false)), info, editor.Document.Text); +// +// if (rr == null) { +// editor.Document.Insert(offset, "=\"\""); +// editor.Caret.Offset = offset + 2; +// +// return CodeCompletionKeyPressResult.EatKey; +// } +// +// ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.InAttributeValue, path, rr.ResolvedType)); +// editor.ShowCompletionWindow(list); +// } + + editor.Document.Insert(offset, "=\"\""); + editor.Caret.Offset = offset + 2; + + return CodeCompletionKeyPressResult.EatKey; + } + } + break; default: if (char.IsLetter(ch)) { offset = editor.Caret.Offset; if (offset > 0) { char c = editor.Document.GetCharAt(offset - 1); + path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, offset); if (c == ' ' || c == '\t') { - path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, offset); if (path != null && path.Elements.Count > 0) { - ICompletionItemList list = CreateListForContext(editor, XamlContext.InTag, path, null); + ICompletionItemList list = CompletionDataHelper.CreateListForContext(editor, XamlContext.InTag, path, null); editor.ShowCompletionWindow(list); return CodeCompletionKeyPressResult.CompletedIncludeKeyInCompletion; } @@ -128,224 +200,26 @@ namespace ICSharpCode.XamlBinding return CodeCompletionKeyPressResult.None; } - - int GetPreviousLTCharPos(string text, int startIndex) - { - if (text == null) - throw new ArgumentNullException("text"); - - if (startIndex < 0) - return -1; - if (startIndex >= text.Length) - startIndex = text.Length - 1; - - while (startIndex > -1 && text[startIndex] != '<') - startIndex--; - - return startIndex; - } - - static readonly List standardItems = new List { - new DefaultCompletionItem("!--"), - new DefaultCompletionItem("![CDATA["), - new DefaultCompletionItem("?") - }; - - public static ICompletionItemList CreateListForContext(ITextEditor editor, XamlContext context, XmlElementPath path, IEntity entity) - { - XamlCompletionItemList list = new XamlCompletionItemList(); - ParseInformation info = ParserService.GetParseInformation(editor.FileName); - - switch (context) { - case XamlContext.AtTag: - list.Items.AddRange(standardItems); - list.Items.AddRange(CreateListForElement(info, editor.Document.Text, editor.Caret.Line, editor.Caret.Column)); - break; - case XamlContext.InTag: - list.Items.AddRange(CreateListForAttributeName(info, editor.Document.Text, new XamlExpressionContext(path, null, false))); - break; - case XamlContext.InAttributeValue: - if (entity is IProperty) { - IProperty prop = entity as IProperty; - IReturnType type = prop.ReturnType; - if (type != null) { - TypeCompletion(type.GetUnderlyingClass(), list); - } - } else if (entity is IEvent) { - IEvent e = entity as IEvent; - IMethod invoker = GetInvokeMethod(e.ReturnType); - if (invoker == null) - break; - var item = path.Elements[path.Elements.Count - 1]; - string name = Utils.GetNameAttributeValue(editor.Document.Text, editor.Caret.Offset); - list.Items.Add(new NewEventCompletionItem(e, (string.IsNullOrEmpty(name)) ? item.Name : name)); - AddMatchingEventHandlers(editor, invoker, list.Items); - } - break; - } - - list.SortItems(); - - return list; - } - - static void AddMatchingEventHandlers(ITextEditor editor, IMethod delegateInvoker, List list) - { - ParseInformation p = ParserService.GetParseInformation(editor.FileName); - var unit = p.MostRecentCompilationUnit; - var loc = editor.Document.OffsetToPosition(editor.Caret.Offset); - IClass c = unit.GetInnermostClass(loc.Line, loc.Column); - CompoundClass compound = c.GetCompoundClass() as CompoundClass; - if (compound != null) { - foreach (IClass part in compound.Parts) { - foreach (IMethod m in part.Methods) { - if (m.Parameters.Count != delegateInvoker.Parameters.Count) - continue; - - if ((m.ReturnType != null && delegateInvoker.ReturnType != null) && m.ReturnType.DotNetName != delegateInvoker.ReturnType.DotNetName) - continue; - - bool equal = true; - for (int i = 0; i < m.Parameters.Count; i++) { - equal &= CompareParameter(m.Parameters[i], delegateInvoker.Parameters[i]); - if (!equal) - break; - } - if (equal) { - list.Add(new XamlCompletionItem(m)); - } - } - } - } - } - - static bool CompareParameter(IParameter p1, IParameter p2) - { - bool result = p1.ReturnType.DotNetName == p2.ReturnType.DotNetName; - - result &= (p1.IsOut == p2.IsOut); - result &= (p1.IsParams == p2.IsParams); - result &= (p1.IsRef == p2.IsRef); - - return result; - } - - static IMethod GetInvokeMethod(IReturnType type) - { - if (type == null) - return null; - - foreach (IMethod method in type.GetMethods()) { - if (method.Name == "Invoke") - return method; - } - - return null; - } - - static bool TypeCompletion(IClass type, XamlCompletionItemList list) - { - switch (type.ClassType) { - case ClassType.Enum: - foreach (IField f in type.Fields) { - list.Items.Add(new XamlCompletionItem(f)); - } - return true; - case ClassType.Struct: - if (type.FullyQualifiedName == "System.Boolean") { - list.Items.Add(new DefaultCompletionItem("True")); - list.Items.Add(new DefaultCompletionItem("False")); - return true; - } - break; - } - - return false; - } public bool CtrlSpace(ICSharpCode.SharpDevelop.ITextEditor editor) { -// XamlCompletionItemProvider provider = new XamlCompletionItemProvider(XamlExpressionContext.Empty); -// provider.ShowCompletion(editor); - return true; - } - - static List CreateListForAttributeName(ParseInformation parseInfo, string fileContent, XamlExpressionContext context) - { - if (context.ElementPath.Elements.Count == 0) - return null; - QualifiedName lastElement = context.ElementPath.Elements[context.ElementPath.Elements.Count - 1]; - XamlCompilationUnit cu = parseInfo.BestCompilationUnit as XamlCompilationUnit; - if (cu == null) - return null; - IReturnType rt = cu.CreateType(lastElement.Namespace, lastElement.Name); - if (rt == null) - return null; - var list = new List(); - foreach (IProperty p in rt.GetProperties()) { - if (p.IsPublic && p.CanSet) { - list.Add(new XamlCompletionItem(p)); - } - } - foreach (IEvent e in rt.GetEvents()) { - if (e.IsPublic) { - list.Add(new XamlCompletionItem(e)); - } - } - return list; - } - - static bool IsReaderAtTarget(XmlTextReader r, int caretLine, int caretColumn) - { - if (r.LineNumber > caretLine) - return true; - else if (r.LineNumber == caretLine) - return r.LinePosition >= caretColumn; - else - return false; - } - - static List CreateListForElement(ParseInformation parseInfo, string fileContent, int caretLine, int caretColumn) - { - using (XmlTextReader r = new XmlTextReader(new StringReader(fileContent))) { - try { - r.WhitespaceHandling = WhitespaceHandling.Significant; - // move reader to correct position - while (r.Read() && !IsReaderAtTarget(r, caretLine, caretColumn)) { } - } - catch (XmlException) { - } - var result = new List(); - IProjectContent pc = parseInfo.BestCompilationUnit.ProjectContent; - - TypeResolveResult rr = new XamlResolver().Resolve(new ExpressionResult(r.Name), parseInfo, fileContent) as TypeResolveResult; -// if (rr != null) { -// AddPropertiesForType(result, r, rr); -// AddEventsForType(result, r, rr); -// } - - foreach (var ns in r.GetNamespacesInScope(XmlNamespaceScope.ExcludeXml)) { - var list = XamlCompilationUnit.GetNamespaceMembers(pc, ns.Value); - if (list != null) { - foreach (IClass c in list.OfType()) { - if (c.ClassType != ClassType.Class) - continue; - if (c.IsAbstract && c.IsStatic) - continue; - if (c.ClassInheritanceTree.Any(b => b.FullyQualifiedName == "System.Attribute")) - continue; - if (!c.Methods.Any(m => m.IsConstructor && m.IsPublic)) - continue; - if (string.IsNullOrEmpty(ns.Key)) - result.Add(new XamlCompletionItem(c)); - else - result.Add(new XamlCompletionItem(c, ns.Key)); + var path = XmlParser.GetActiveElementStartPathAtIndex(editor.Document.Text, editor.Caret.Offset); + if (path != null && path.Elements.Count > 0) { + if (!XmlParser.IsInsideAttributeValue(editor.Document.Text, editor.Caret.Offset)) { + var list = CompletionDataHelper.CreateListForContext(editor, XamlContext.InTag, path, null) as XamlCompletionItemList; + string starter = editor.GetWordBeforeCaret().Trim(' ', '\t', '\n', '\r'); + if (!string.IsNullOrEmpty(starter)) { + var item = list.Items.FirstOrDefault(i => i.Text.StartsWith(starter, StringComparison.OrdinalIgnoreCase)); + if (item != null) { + list.SuggestedItem = item; + list.PreselectionLength = starter.Length; } } + editor.ShowCompletionWindow(list); + return true; } - - return result; } + return false; } } } diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizer.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizer.cs new file mode 100644 index 0000000000..beb1a0e413 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizer.cs @@ -0,0 +1,74 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Diagnostics; +using System.Linq; +using System.Windows; +using System.Windows.Media; +using System.Windows.Media.TextFormatting; + +using ICSharpCode.AvalonEdit.AddIn; +using ICSharpCode.AvalonEdit.Document; +using ICSharpCode.AvalonEdit.Gui; +using ICSharpCode.SharpDevelop.Gui; + +namespace ICSharpCode.XamlBinding +{ + public class XamlColorizer : ColorizingTransformer + { + static readonly XamlColorizerSettings defaultSettings = new XamlColorizerSettings(); + XamlColorizerSettings settings = defaultSettings; + static readonly char[] punctuationItems = {'"' }; // , '<', '>', '.', '=', '{', '}' + + public AvalonEditViewContent Content { get; set; } + + public XamlColorizer(AvalonEditViewContent content) + { + this.Content = content; + } + + protected override void Colorize(ITextRunConstructionContext context) + { + DocumentLine line = context.VisualLine.FirstDocumentLine; + + while (line != null) { + if (!line.IsDeleted) { + int index = 0; + do { + index = line.Text.IndexOfAny(punctuationItems, index); + if (index > -1) { + int col = context.VisualLine.GetVisualColumn(index); + ChangeVisualElements(index, index + 1, ColorizePunctuation); + index++; + } + } while (index > -1); + } + + line = line.NextLine; + } + } + + void ColorizePunctuation(VisualLineElement element) + { + element.TextRunProperties.SetForegroundBrush(settings.PunctuationForegroundBrush); + element.TextRunProperties.SetBackgroundBrush(settings.PunctuationBackgroundBrush); + } + } + + public class XamlColorizerSettings + { + public Brush PunctuationForegroundBrush { get; set; } + public Brush PunctuationBackgroundBrush { get; set; } + + public XamlColorizerSettings() + { + this.PunctuationBackgroundBrush = Brushes.Transparent; + this.PunctuationForegroundBrush = Brushes.Red; + } + } +} diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizerServer.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizerServer.cs new file mode 100644 index 0000000000..da57baee03 --- /dev/null +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlColorizerServer.cs @@ -0,0 +1,75 @@ +// +// +// +// +// $Revision$ +// + +using ICSharpCode.AvalonEdit.Gui; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using ICSharpCode.AvalonEdit.AddIn; +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.Gui; + +namespace ICSharpCode.XamlBinding +{ + /// + /// Description of XamlColorizerServer. + /// + public static class XamlColorizerServer + { + public static void InitializeServer() + { + WorkbenchSingleton.Workbench.ViewOpened += new ViewContentEventHandler(WorkbenchSingleton_Workbench_ViewOpened); + } + + static void WorkbenchSingleton_Workbench_ViewOpened(object sender, ViewContentEventArgs e) + { + if (e.Content is AvalonEditViewContent) { + AvalonEditViewContent content = e.Content as AvalonEditViewContent; + if (!Path.GetExtension(content.CodeEditor.FileName).Equals(".xaml", StringComparison.OrdinalIgnoreCase)) + return; + content.CodeEditor.TextArea.TextView.LineTransformers.Insert(1, new XamlColorizer(content)); + } + } + } + + public class ColorizerDoozer : IDoozer + { + public bool HandleConditions { + get { + return false; + } + } + + public object BuildItem(object caller, Codon codon, System.Collections.ArrayList subItems) + { + return new ColorizerDescriptor(codon); + } + } + + public class ColorizerDescriptor + { + Codon codon; + ColorizingTransformer colorizer; + + public ColorizingTransformer Colorizer { + get { + if (colorizer == null) + this.colorizer = (ColorizingTransformer)codon.AddIn.CreateObject(codon.Properties["class"]); + + return colorizer; + } + } + + public ColorizerDescriptor(Codon codon) + { + this.codon = codon; + } + + + } +} diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs index eda3d5a4b1..1c46fac6d7 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItem.cs @@ -37,6 +37,12 @@ namespace ICSharpCode.XamlBinding { this.entity = entity; } + + public XamlCompletionItem(string text, IEntity entity) + : base(text) + { + this.entity = entity; + } } class NewEventCompletionItem : DefaultCompletionItem diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs index ed580c746e..1c8808eda1 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlCompletionItemList.cs @@ -5,20 +5,13 @@ // $Revision: 3731 $ // -using ICSharpCode.AvalonEdit.AddIn; using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; using System.Linq; +using ICSharpCode.AvalonEdit.AddIn; using ICSharpCode.NRefactory.Ast; using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom.Refactoring; -using ICSharpCode.SharpDevelop.Gui; -using ICSharpCode.SharpDevelop.Project; -using ICSharpCode.TextEditor.Gui.CompletionWindow; using ICSharpCode.XmlEditor; namespace ICSharpCode.XamlBinding @@ -31,6 +24,9 @@ namespace ICSharpCode.XamlBinding public override CompletionItemListKeyResult ProcessInput(char key) { + if (key == ':') + return CompletionItemListKeyResult.NormalKey; + return base.ProcessInput(key); } @@ -39,23 +35,42 @@ namespace ICSharpCode.XamlBinding if (item is XamlCompletionItem) { XamlCompletionItem cItem = item as XamlCompletionItem; - if (cItem.Entity is IProperty) { - context.Editor.Document.Insert(context.EndOffset, "=\"\""); - context.Editor.Caret.Offset--; - XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(context.Editor.Document.Text, context.Editor.Caret.Offset); - if (path != null && path.Elements.Count > 0) { - ICompletionItemList list = XamlCodeCompletionBinding.CreateListForContext(context.Editor, XamlContext.InAttributeValue, path, cItem.Entity); - context.Editor.ShowCompletionWindow(list); + if (cItem.Entity is IProperty || cItem.Entity is IEvent) { + if (context.Editor.Document.GetCharAt(context.StartOffset - 1) != '.') { + context.Editor.Document.Insert(context.EndOffset, "=\"\""); + context.Editor.Caret.Offset--; + XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(context.Editor.Document.Text, context.Editor.Caret.Offset); + if (path != null && path.Elements.Count > 0) { + ICompletionItemList list = CompletionDataHelper.CreateListForContext(context.Editor, XamlContext.InAttributeValue, path, cItem.Entity); + context.Editor.ShowCompletionWindow(list); + } } } - if (cItem.Entity is IEvent) { - context.Editor.Document.Insert(context.EndOffset, "=\"\""); - context.Editor.Caret.Offset--; - XmlElementPath path = XmlParser.GetActiveElementStartPathAtIndex(context.Editor.Document.Text, context.Editor.Caret.Offset); - if (path != null && path.Elements.Count > 0) { - ICompletionItemList list = XamlCodeCompletionBinding.CreateListForContext(context.Editor, XamlContext.InAttributeValue, path, cItem.Entity); - context.Editor.ShowCompletionWindow(list); + if (cItem.Entity is IClass) { + IClass c = cItem.Entity as IClass; + // TODO : maybe allow accessing ch from HandleKeyPress through context? + if (c.FullyQualifiedName == "System.Windows.Style") { + string insertionString = ""; + if (!char.IsWhiteSpace(context.Editor.Document.GetCharAt(context.StartOffset - 1))) { + insertionString = " "; + } + + string prefix = Utils.GetXamlNamespacePrefix(context.Editor.Document.Text, context.StartOffset); + if (!string.IsNullOrEmpty(prefix)) + prefix += ":"; + + insertionString += "TargetType=\"{" + prefix + "Type }\""; + context.Editor.Document.Insert(context.EndOffset, insertionString); + context.Editor.Caret.Offset = context.EndOffset + insertionString.Length - 2; + } else if (c.FullyQualifiedName == "System.Windows.Setter") { + string insertionString = ""; + if (!char.IsWhiteSpace(context.Editor.Document.GetCharAt(context.StartOffset - 1))) { + insertionString = " "; + } + insertionString += "Property=\"\""; + context.Editor.Document.Insert(context.EndOffset, insertionString); + context.Editor.Caret.Offset = context.EndOffset + insertionString.Length - 1; } } } else { @@ -74,6 +89,8 @@ namespace ICSharpCode.XamlBinding var unit = p.MostRecentCompilationUnit; var loc = context.Editor.Document.OffsetToPosition(context.StartOffset); IClass c = unit.GetInnermostClass(loc.Line, loc.Column); + if (c == null) + return; IMethod initializeComponent = c.Methods[0]; CompoundClass compound = c.GetCompoundClass() as CompoundClass; if (compound != null) { @@ -101,7 +118,7 @@ namespace ICSharpCode.XamlBinding node.Modifier = Modifiers.None; AvalonEditViewContent viewContent = FileService.OpenFile(part.CompilationUnit.FileName) as AvalonEditViewContent; - + // TODO : shouldn't we be able to use viewContent.CodeEditor.textEditorAdapter here? (Property missing?) ITextEditor wrapper = new CodeEditorAdapter(viewContent.CodeEditor); @@ -110,7 +127,6 @@ namespace ICSharpCode.XamlBinding unit.ProjectContent.Language.CodeGenerator.InsertCodeAfter(lastMember, wrapper.Document, node); else unit.ProjectContent.Language.CodeGenerator.InsertCodeAtEnd(part.Region, wrapper.Document, node); - return; } return; } diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlParser.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlParser.cs index 9ff6b3ed1c..1a0c63b712 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlParser.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlParser.cs @@ -31,6 +31,12 @@ namespace ICSharpCode.XamlBinding { get { return LanguageProperties.CSharp; } } + + public XamlParser() + { + // HACK to make colorizing working! + XamlColorizerServer.InitializeServer(); + } public bool CanParse(string fileName) { @@ -42,8 +48,6 @@ namespace ICSharpCode.XamlBinding return false; } - const string XamlNamespace = "http://schemas.microsoft.com/winfx/2006/xaml"; - public ICompilationUnit Parse(IProjectContent projectContent, string fileName, string fileContent) { XamlCompilationUnit cu = new XamlCompilationUnit(projectContent); @@ -54,7 +58,7 @@ namespace ICSharpCode.XamlBinding r.Read(); r.MoveToContent(); DomRegion classStart = new DomRegion(r.LineNumber, r.LinePosition - 1); - string className = r.GetAttribute("Class", XamlNamespace); + string className = r.GetAttribute("Class", CompletionDataHelper.XamlNamespace); if (string.IsNullOrEmpty(className)) { LoggingService.Debug("XamlParser: returning empty cu because root element has no Class attribute"); } @@ -95,7 +99,7 @@ namespace ICSharpCode.XamlBinding void ParseXamlElement(XamlCompilationUnit cu, DefaultClass c, XmlTextReader r) { Debug.Assert(r.NodeType == XmlNodeType.Element); - string name = r.GetAttribute("Name", XamlNamespace) ?? r.GetAttribute("Name"); + string name = r.GetAttribute("Name", CompletionDataHelper.XamlNamespace) ?? r.GetAttribute("Name"); bool isEmptyElement = r.IsEmptyElement; if (!string.IsNullOrEmpty(name)) { diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs index e484879e58..5794911509 100644 --- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs +++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlResolver.cs @@ -181,82 +181,6 @@ namespace ICSharpCode.XamlBinding return null; } - void AddEventsForType(ArrayList result, XmlTextReader r, TypeResolveResult rr) - { - if (rr.ResolvedType != null) { - foreach (IEvent e in rr.ResolvedType.GetEvents()) { - if (!e.IsPublic) - continue; - - string propPrefix = e.DeclaringType.Name; - if (!string.IsNullOrEmpty(r.Prefix)) - propPrefix = r.Prefix + ":" + propPrefix; - result.Add(new XamlCompletionEvent(e, propPrefix)); - } - } - } - - void AddPropertiesForType(ArrayList result, XmlTextReader r, TypeResolveResult rr) - { - if (rr.ResolvedType != null) { - foreach (IProperty p in rr.ResolvedType.GetProperties()) { - if (!p.IsPublic) - continue; - if (!p.CanSet && !IsCollectionType(p.ReturnType)) - continue; - string propPrefix = p.DeclaringType.Name; - if (!string.IsNullOrEmpty(r.Prefix)) - propPrefix = r.Prefix + ":" + propPrefix; - result.Add(new XamlCompletionProperty(p, propPrefix)); - } - } - } - - bool IsCollectionType(IReturnType rt) - { - if (rt == null) - return false; - return rt.GetMethods().Any(m => m.Name == "Add" && m.IsPublic); - } - - - - class XamlCompletionProperty : DefaultProperty, IEntity - { - string newName; - - public XamlCompletionProperty(IProperty baseProperty, string prefix) - : base(baseProperty.DeclaringType, baseProperty.Name) - { - this.Modifiers = baseProperty.Modifiers; - this.CopyDocumentationFrom(baseProperty); - newName = prefix + "." + baseProperty.Name; - } - - string IEntity.Name - { - get { return newName; } - } - } - - class XamlCompletionEvent : DefaultEvent, IEntity - { - string newName; - - public XamlCompletionEvent(IEvent baseEvent, string prefix) - : base(baseEvent.DeclaringType, baseEvent.Name) - { - this.Modifiers = baseEvent.Modifiers; - this.CopyDocumentationFrom(baseEvent); - newName = prefix + "." + baseEvent.Name; - } - - string IEntity.Name - { - get { return newName; } - } - } - public ArrayList CtrlSpace(int caretLine, int caretColumn, ParseInformation parseInfo, string fileContent, ExpressionContext context) { return new ArrayList(); diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlParser.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlParser.cs index 6651df9f5d..0f5d1a98b5 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlParser.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlParser.cs @@ -203,6 +203,8 @@ namespace ICSharpCode.XmlEditor { string name = GetAttributeNameAtIndex(xml, index); QualifiedName qualifiedName = GetQualifiedName(name); + if (qualifiedName == null) + return null; if (String.IsNullOrEmpty(qualifiedName.Namespace) && includeNamespace) { QualifiedNameCollection namespaces = new QualifiedNameCollection(); XmlElementPath path = GetActiveElementStartPathAtIndex(xml, index, namespaces); diff --git a/src/SharpDevelop.Tests.sln b/src/SharpDevelop.Tests.sln index 4249fc8fb4..ca3528b1e4 100644 --- a/src/SharpDevelop.Tests.sln +++ b/src/SharpDevelop.Tests.sln @@ -1,128 +1,128 @@  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 -# SharpDevelop 3.1.0.3916 +# SharpDevelop 3.1.0.3955 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{F94FA21D-78E6-410B-895D-E16D3E7240DB}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{5DA95927-5F2D-46D8-9265-D092734B6F0E}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "AddIns\Misc\Debugger\Debugger.Tests\Project\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{5DA95927-5F2D-46D8-9265-D092734B6F0E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "AddIns\Misc\Debugger\Debugger.Tests\Project\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{F94FA21D-78E6-410B-895D-E16D3E7240DB}" + ProjectSection(SolutionItems) = postProject + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor.Tests", "Libraries\ICSharpCode.TextEditor\Test\ICSharpCode.TextEditor.Tests.csproj", "{6259D767-BA7C-484D-9472-68F350A20086}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" EndProject Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "{970116b0-f96b-4257-8579-986b9cf086f5}" EndProject @@ -337,57 +337,57 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {F390DA70-1FE1-4715-81A0-389AB010C130} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {5DA95927-5F2D-46D8-9265-D092734B6F0E} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {A569DCC1-C608-45FD-B770-4F79335EF154} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {388E7B64-0393-4EB4-A3E3-5C474F141853} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {1F261725-6318-4434-A1B1-6C70CE4CD324} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {BF38FB72-B380-4196-AF8C-95749D726C61} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {F94FA21D-78E6-410B-895D-E16D3E7240DB} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {50A89267-A28B-4DF3-8E62-912E005143B8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} - {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} - {833904AB-3CD4-4071-9B48-5770E44685AA} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} - {23B517C9-1ECC-4419-A13F-0B7136D085CB} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} - {A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} - {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} - {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} - {C9DE556D-325C-4544-B29F-16A9EB7C9830} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} - {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} - {6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} + {F94FA21D-78E6-410B-895D-E16D3E7240DB} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {BF38FB72-B380-4196-AF8C-95749D726C61} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {1F261725-6318-4434-A1B1-6C70CE4CD324} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {388E7B64-0393-4EB4-A3E3-5C474F141853} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {A569DCC1-C608-45FD-B770-4F79335EF154} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {5DA95927-5F2D-46D8-9265-D092734B6F0E} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {F390DA70-1FE1-4715-81A0-389AB010C130} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} - {6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {6259D767-BA7C-484D-9472-68F350A20086} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {870115DD-960A-4406-A6B9-600BCDC36A03} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} + {C9DE556D-325C-4544-B29F-16A9EB7C9830} = {5DA95927-5F2D-46D8-9265-D092734B6F0E} + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} + {A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} + {23B517C9-1ECC-4419-A13F-0B7136D085CB} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} + {833904AB-3CD4-4071-9B48-5770E44685AA} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} + {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} + {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {F94FA21D-78E6-410B-895D-E16D3E7240DB} {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {7DB80259-24D4-46C3-A024-53FF1987733D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {4980B743-B32F-4aba-AABD-45E2CAD3568D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {870115DD-960A-4406-A6B9-600BCDC36A03} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {6259D767-BA7C-484D-9472-68F350A20086} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {4980B743-B32F-4aba-AABD-45E2CAD3568D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {7DB80259-24D4-46C3-A024-53FF1987733D} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} EndGlobalSection EndGlobal diff --git a/src/SharpDevelop.sln b/src/SharpDevelop.sln index e1e4c46d36..29a02024a2 100644 --- a/src/SharpDevelop.sln +++ b/src/SharpDevelop.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 -# SharpDevelop 3.1.0.3903 +# SharpDevelop 3.1.0.3946 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" ProjectSection(SolutionItems) = postProject EndProjectSection