Browse Source

Fixed SD2-1082: Adding a user control to a form throws exception if the control's code doesn't have a constructor without arguments.

Prevent ParserService.AllProjectContents from returning project contents multiple times.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2151 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
c75e4a3e5e
  1. 7
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs
  2. 7
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  3. 36
      src/Main/Base/Project/Src/Util/Linq.cs

7
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs

@ -56,6 +56,13 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -56,6 +56,13 @@ namespace ICSharpCode.FormsDesigner.Gui
continue;
}
foreach (IClass c in pc.Classes) {
if (!c.Methods.Exists(delegate (IMethod method) {
return method.IsConstructor && method.IsPublic && method.Parameters.Count == 0;
}))
{
// do not include classes that don't have a public parameterless constructor
continue;
}
foreach (IClass subClass in c.ClassInheritanceTree) {
if (subClass.FullyQualifiedName == "System.Windows.Forms.Form") {
break; // is not a design component

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

@ -86,12 +86,7 @@ namespace ICSharpCode.SharpDevelop @@ -86,12 +86,7 @@ namespace ICSharpCode.SharpDevelop
/// </summary>
public static IEnumerable<IProjectContent> AllProjectContentsWithReferences {
get {
foreach (IProjectContent pc in AllProjectContents) {
yield return pc;
}
foreach (IProjectContent pc in defaultProjectContentRegistry.GetLoadedProjectContents()) {
yield return pc;
}
return Linq.Distinct(Linq.Concat(AllProjectContents, defaultProjectContentRegistry.GetLoadedProjectContents()));
}
}

36
src/Main/Base/Project/Src/Util/Linq.cs

@ -104,5 +104,41 @@ namespace ICSharpCode.SharpDevelop @@ -104,5 +104,41 @@ namespace ICSharpCode.SharpDevelop
}
return count;
}
/// <summary>
/// Concatenates the specified enumerables.
/// </summary>
public static IEnumerable<T> Concat<T>(params IEnumerable<T>[] inputs)
{
return Concat(inputs as IEnumerable<IEnumerable<T>>);
}
/// <summary>
/// Concatenates the specified enumerables.
/// </summary>
public static IEnumerable<T> Concat<T>(IEnumerable<IEnumerable<T>> inputs)
{
foreach (IEnumerable<T> input in inputs) {
foreach (T element in input) {
yield return element;
}
}
}
/// <summary>
/// Outputs distinct elements only, filtering all duplicates.
/// </summary>
public static IEnumerable<T> Distinct<T>(IEnumerable<T> input)
{
// store elements already seen
Dictionary<T, object> elements = new Dictionary<T, object>();
foreach (T element in input) {
if (!elements.ContainsKey(element)) {
elements.Add(element, null);
yield return element;
}
}
}
}
}

Loading…
Cancel
Save