diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
index 623a0a8797..78c05820f4 100644
--- a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
+++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
@@ -11,6 +11,10 @@
False
Library
File
+ ResourceEditor
+
+
+
True
diff --git a/src/AddIns/Misc/AddinScout/Project/AddinScout.csproj b/src/AddIns/Misc/AddinScout/Project/AddinScout.csproj
index 74b6bd836f..7281c18428 100644
--- a/src/AddIns/Misc/AddinScout/Project/AddinScout.csproj
+++ b/src/AddIns/Misc/AddinScout/Project/AddinScout.csproj
@@ -5,7 +5,7 @@
8.0.50215
2.0
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}
- NewProject
+ AddInScout
AddinScout
Library
4
@@ -13,6 +13,9 @@
False
OnSuccessfulBuild
Library
+
+
+
True
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/AbstractCompletionWindow.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/AbstractCompletionWindow.cs
index f42e08a61d..d4c7c2bac4 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/AbstractCompletionWindow.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/AbstractCompletionWindow.cs
@@ -27,12 +27,13 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
protected string fileName;
protected Size drawingSize;
Rectangle workingScreen;
+ Form parentForm;
protected AbstractCompletionWindow(Form parentForm, TextEditorControl control, string fileName)
{
workingScreen = Screen.GetWorkingArea(parentForm);
// SetStyle(ControlStyles.Selectable, false);
-
+ this.parentForm = parentForm;
this.control = control;
this.fileName = fileName;
@@ -41,7 +42,6 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
FormBorderStyle = FormBorderStyle.None;
ShowInTaskbar = false;
Size = new Size(1, 1);
- Owner = parentForm;
}
protected virtual void SetLocation()
@@ -86,12 +86,14 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
protected void ShowCompletionWindow()
{
+ Owner = parentForm;
Enabled = true;
AbstractCompletionWindow.ShowWindow(base.Handle, AbstractCompletionWindow.SW_SHOWNA);
control.Focus();
- if (Owner != null) {
- Owner.LocationChanged += new EventHandler(this.ParentFormLocationChanged);
+
+ if (parentForm != null) {
+ parentForm.LocationChanged += new EventHandler(this.ParentFormLocationChanged);
}
control.ActiveTextAreaControl.VScrollBar.ValueChanged += new EventHandler(ParentFormLocationChanged);
@@ -141,9 +143,7 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
base.OnClosed(e);
// take out the inserted methods
- if (Owner != null) {
- Owner.LocationChanged -= new EventHandler(this.ParentFormLocationChanged);
- }
+ parentForm.LocationChanged -= new EventHandler(ParentFormLocationChanged);
control.ActiveTextAreaControl.VScrollBar.ValueChanged -= new EventHandler(ParentFormLocationChanged);
control.ActiveTextAreaControl.HScrollBar.ValueChanged -= new EventHandler(ParentFormLocationChanged);
diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs
index 6720c55eae..b64717baf8 100644
--- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs
+++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs
@@ -229,10 +229,12 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
protected override void OnClosed(EventArgs e)
{
- codeCompletionListView.Close();
base.OnClosed(e);
- declarationViewWindow.Close();
+ Dispose();
+ codeCompletionListView.Dispose();
+ codeCompletionListView = null;
declarationViewWindow.Dispose();
+ declarationViewWindow = null;
}
void InsertSelectedItem()
diff --git a/src/Main/Base/Project/Src/Dom/IReturnType.cs b/src/Main/Base/Project/Src/Dom/IReturnType.cs
index b7bd1011c2..32df382661 100644
--- a/src/Main/Base/Project/Src/Dom/IReturnType.cs
+++ b/src/Main/Base/Project/Src/Dom/IReturnType.cs
@@ -43,6 +43,11 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
+ ///
+ /// Gets the underlying class of this return type.
+ ///
+ IClass GetUnderlyingClass();
+
List GetMethods();
List GetProperties();
List GetFields();
diff --git a/src/Main/Base/Project/Src/Dom/Implementations/AbstractReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/AbstractReturnType.cs
index 7882f7aadc..d0df23adec 100644
--- a/src/Main/Base/Project/Src/Dom/Implementations/AbstractReturnType.cs
+++ b/src/Main/Base/Project/Src/Dom/Implementations/AbstractReturnType.cs
@@ -16,6 +16,7 @@ namespace ICSharpCode.SharpDevelop.Dom
[Serializable]
public abstract class AbstractReturnType : IReturnType
{
+ public abstract IClass GetUnderlyingClass();
public abstract List GetMethods();
public abstract List GetProperties();
public abstract List GetFields();
diff --git a/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs
index fc6356b388..1d5a45e172 100644
--- a/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs
+++ b/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs
@@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Dom
this.c = c;
}
+ public override IClass GetUnderlyingClass()
+ {
+ return c;
+ }
+
public override List GetMethods()
{
List l = new List();
diff --git a/src/Main/Base/Project/Src/Dom/Implementations/ProxyReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/ProxyReturnType.cs
index 9c53f3f079..d10d154f7a 100644
--- a/src/Main/Base/Project/Src/Dom/Implementations/ProxyReturnType.cs
+++ b/src/Main/Base/Project/Src/Dom/Implementations/ProxyReturnType.cs
@@ -59,6 +59,15 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
+ ///
+ /// Gets the underlying class of this return type.
+ ///
+ public virtual IClass GetUnderlyingClass()
+ {
+ IReturnType baseType = BaseType;
+ return (baseType != null) ? baseType.GetUnderlyingClass() : null;
+ }
+
public virtual List GetMethods()
{
IReturnType baseType = BaseType;
diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
index 98bfef65f2..ab23d2a8a5 100644
--- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
+++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
@@ -219,6 +219,14 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (m.IsConstructor && !m.IsStatic)
constructors.Add(m);
}
+
+ if (constructors.Count == 0) {
+ // Class has no constructors -> create default constructor
+ IClass c = type.GetUnderlyingClass();
+ if (c != null) {
+ return CreateMemberResolveResult(new Constructor(ModifierEnum.Public, c.Region, c.Region, c));
+ }
+ }
return CreateMemberResolveResult(typeVisitor.FindOverload(constructors, ((ObjectCreateExpression)expr).Parameters, null));
}
return new ResolveResult(callingClass, callingMember, type);
@@ -324,11 +332,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ResolveResult result = ResolveMethod(callingClass.DefaultReturnType, identifier);
if (result != null)
return result;
-
- IClass c = SearchType(identifier, callingClass, cu);
- if (c != null) {
- return new TypeResolveResult(callingClass, callingMember, c.DefaultReturnType, c);
- }
+ }
+
+ IClass c = SearchType(identifier, callingClass, cu);
+ if (c != null) {
+ return new TypeResolveResult(callingClass, callingMember, c.DefaultReturnType, c);
}
// try if there exists a static member in outer classes named typeName
diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
index 7bd197e720..d2e3093ef3 100644
--- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
+++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
@@ -377,10 +377,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
IClass c = resolver.SearchType(reference.SystemType, callingClass);
if (c == null) return null;
IReturnType t = c.DefaultReturnType;
- foreach (ITypeParameter tp in callingClass.TypeParameters) {
- if (resolver.LanguageProperties.NameComparer.Equals(reference.SystemType, tp.Name)) {
- t = new GenericReturnType(tp);
- break;
+ if (callingClass != null) {
+ foreach (ITypeParameter tp in callingClass.TypeParameters) {
+ if (resolver.LanguageProperties.NameComparer.Equals(reference.SystemType, tp.Name)) {
+ t = new GenericReturnType(tp);
+ break;
+ }
}
}
if (reference.GenericTypes.Count > 0) {
@@ -433,6 +435,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
this.FullyQualifiedName = fullName;
}
+ public override IClass GetUnderlyingClass() {
+ return null;
+ }
+
public override List GetMethods() {
return new List();
}
diff --git a/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs b/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
index 6710d169ee..9b8f4bdd10 100644
--- a/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
+++ b/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
@@ -188,11 +188,9 @@ namespace ICSharpCode.SharpDevelop.Dom
BaseTypes.Add(type.BaseType.FullName);
}
- // add members
foreach (Type iface in type.GetInterfaces()) {
BaseTypes.Add(iface.FullName);
}
-
}
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
index 4ad5cd4abf..70b41dbb3b 100644
--- a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
+++ b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
@@ -47,7 +47,6 @@ namespace ICSharpCode.SharpDevelop.Gui
// using TreeView.TreeViewNodeSorter will result in TreeNodeCollection
// calling Sort() after every insertion. Therefore, we have to create
// our own NodeSorter property.
-
IComparer nodeSorter = new ExtTreeViewComparer();
public IComparer NodeSorter {
@@ -79,26 +78,27 @@ namespace ICSharpCode.SharpDevelop.Gui
newImageList.ColorDepth = ColorDepth.Depth32Bit;
this.ImageList = newImageList;
}
-
- public void SortNodes(TreeNode node)
+
+ public new void Sort()
+ {
+ SortNodes(Nodes, true);
+ }
+
+ public void SortNodes(TreeNodeCollection nodes, bool recursive)
{
if (!isSorted) {
return;
}
- if (node == null) {
- foreach (TreeNode childNode in Nodes) {
- SortNodes(childNode);
- }
- return;
- }
- TreeNode[] nodeArray = new TreeNode[node.Nodes.Count];
- node.Nodes.CopyTo(nodeArray, 0);
+ TreeNode[] nodeArray = new TreeNode[nodes.Count];
+ nodes.CopyTo(nodeArray, 0);
Array.Sort(nodeArray, nodeSorter);
- node.Nodes.Clear();
- node.Nodes.AddRange(nodeArray);
-
- foreach (TreeNode childNode in nodeArray) {
- SortNodes(childNode);
+ nodes.Clear();
+ nodes.AddRange(nodeArray);
+
+ if (recursive) {
+ foreach (TreeNode childNode in nodeArray) {
+ SortNodes(childNode.Nodes, true);
+ }
}
}
@@ -166,7 +166,13 @@ namespace ICSharpCode.SharpDevelop.Gui
if (node != null) {
node.AfterLabelEdit(e.Label);
}
- SortNodes(e.Node.Parent);
+ SortParentNodes(e.Node);
+ }
+
+ private void SortParentNodes(TreeNode treeNode)
+ {
+ TreeNode parent = treeNode.Parent;
+ SortNodes((parent == null) ? Nodes : parent.Nodes, false);
}
#endregion
bool inRefresh = false;
@@ -175,10 +181,15 @@ namespace ICSharpCode.SharpDevelop.Gui
base.OnBeforeExpand(e);
inRefresh = true;
BeginUpdate();
- if (e.Node is ExtTreeNode) {
- ((ExtTreeNode)e.Node).Expanding();
+ try {
+ if (e.Node is ExtTreeNode) {
+ ((ExtTreeNode)e.Node).Expanding();
+ }
+ SortNodes(e.Node.Nodes, true);
+ } catch (Exception ex) {
+ // catch error to prevent corrupting the TreeView component
+ MessageService.ShowError(ex);
}
- SortNodes(e.Node);
if (e.Node.Nodes.Count == 0) {
// when the node's subnodes have been removed by Expanding, AfterExpand is not called
inRefresh = false;
@@ -273,7 +284,7 @@ namespace ICSharpCode.SharpDevelop.Gui
DataObject dataObject = node.DragDropDataObject;
if (dataObject != null) {
DoDragDrop(dataObject, DragDropEffects.All);
- SortNodes(node.Parent);
+ SortParentNodes(node);
}
}
}
@@ -314,7 +325,7 @@ namespace ICSharpCode.SharpDevelop.Gui
if (node != null) {
node.DoDragDrop(e.Data, e.Effect);
- SortNodes(node.Parent);
+ SortParentNodes(node);
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs
index af4487fa22..e0a198c995 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs
@@ -265,6 +265,7 @@ namespace ICSharpCode.SharpDevelop.Gui
notFoundMsg.Text = "No search results found.";
notFoundMsg.AddTo(classBrowserTreeView);
}
+ classBrowserTreeView.Sort();
classBrowserTreeView.EndUpdate();
}
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowserToolbarCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowserToolbarCommands.cs
index 344c89c95d..019a34e5a5 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowserToolbarCommands.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowserToolbarCommands.cs
@@ -62,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Gui
((IStatusUpdate)item).UpdateStatus();
}
}
-
+
dropDownButton.DropDownItems.AddRange(items);
}
}
@@ -172,18 +172,19 @@ namespace ICSharpCode.SharpDevelop.Gui
{
ComboBox comboBox;
- protected override void OnOwnerChanged(EventArgs e)
+ protected override void OnOwnerChanged(EventArgs e)
{
base.OnOwnerChanged(e);
ToolBarComboBox toolbarItem = (ToolBarComboBox)Owner;
comboBox = toolbarItem.ComboBox;
comboBox.DropDownStyle = ComboBoxStyle.DropDown;
- comboBox.TextChanged += new EventHandler(ComboBoxTextChanged);
+ comboBox.TextChanged += ComboBoxTextChanged;
}
- void ComboBoxTextChanged(object sender, EventArgs e)
+ void ComboBoxTextChanged(object sender, EventArgs e)
{
ClassBrowser.Instance.SearchTerm = comboBox.Text;
+ Run(); // TODO: Enable live search via option
}
public override void Run()
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs
index e6c34580fc..c5fd5c9796 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs
@@ -64,16 +64,17 @@ namespace ICSharpCode.SharpDevelop.Gui
base.Initialize();
Nodes.Clear();
- IAmbience languageConversion= AmbienceService.CurrentAmbience;
- languageConversion.ConversionFlags = ConversionFlags.None;
-
// don't insert delegate 'members'
if (c.ClassType == ClassType.Delegate) {
return;
}
- new BaseTypesNode(project, c).AddTo(this);
- new DerivedTypesNode(project, c).AddTo(this);
+ if (c.BaseTypes.Count > 0) {
+ new BaseTypesNode(project, c).AddTo(this);
+ }
+ if ((c.Modifiers & ModifierEnum.Sealed) != ModifierEnum.Sealed) {
+ new DerivedTypesNode(project, c).AddTo(this);
+ }
foreach (IClass innerClass in c.InnerClasses) {
new ClassNode(project, innerClass).AddTo(this);
@@ -99,8 +100,6 @@ namespace ICSharpCode.SharpDevelop.Gui
new MemberNode(c, e).AddTo(this);
}
UpdateVisibility();
-// TODO: TreeNode comparer
-// SortUtility.QuickSort(classNode.Nodes, TreeNodeComparer.Default); }
}
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs
index d72f2daf71..4741819e57 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs
@@ -55,7 +55,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.declaringType = declaringType;
modifiers = method.Modifiers;
- Text = AmbienceService.CurrentAmbience.Convert(method);
+ Text = AppendReturnType(GetAmbience().Convert(method), method.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(method);
if (method.Region != null) {
line = method.Region.BeginLine;
@@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.declaringType = declaringType;
modifiers = property.Modifiers;
- Text = AmbienceService.CurrentAmbience.Convert(property);
+ Text = AppendReturnType(GetAmbience().Convert(property), property.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(property);
if (property.Region != null) {
line = property.Region.BeginLine;
@@ -84,7 +84,7 @@ namespace ICSharpCode.SharpDevelop.Gui
sortOrder = 13;
this.declaringType = declaringType;
modifiers = indexer.Modifiers;
- Text = AmbienceService.CurrentAmbience.Convert(indexer);
+ Text = AppendReturnType(GetAmbience().Convert(indexer), indexer.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(indexer);
if (indexer.Region != null) {
line = indexer.Region.BeginLine;
@@ -96,10 +96,10 @@ namespace ICSharpCode.SharpDevelop.Gui
public MemberNode(IClass declaringType, IField field)
{
sortOrder = 11;
-
+
this.declaringType = declaringType;
modifiers = field.Modifiers;
- Text = AmbienceService.CurrentAmbience.Convert(field);
+ Text = AppendReturnType(GetAmbience().Convert(field), field.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(field);
if (field.Region != null) {
line = field.Region.BeginLine;
@@ -112,7 +112,7 @@ namespace ICSharpCode.SharpDevelop.Gui
sortOrder = 14;
this.declaringType = declaringType;
modifiers = e.Modifiers;
- Text = AmbienceService.CurrentAmbience.Convert(e);
+ Text = AppendReturnType(GetAmbience().Convert(e), e.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(e);
if (e.Region != null) {
line = e.Region.BeginLine;
@@ -120,16 +120,24 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
+ IAmbience GetAmbience()
+ {
+ IAmbience ambience = AmbienceService.CurrentAmbience;
+ ambience.ConversionFlags = ConversionFlags.None;
+ return ambience;
+ }
+
+ string AppendReturnType(string text, IReturnType rt)
+ {
+ // TODO: Give user the possibility to turn off visibility of the return type
+ return text + " : " + GetAmbience().Convert(rt);
+ }
+
public override void ActivateItem()
{
if (FileName != null) {
FileService.JumpToFilePosition(FileName, line - 1, column - 1);
}
}
-
-
-
-
-
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ProjectNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ProjectNode.cs
index bc48366d2e..dd9b27dabb 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ProjectNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ProjectNode.cs
@@ -122,11 +122,25 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
+ protected virtual string StripRootNamespace(string directory)
+ {
+ if (project != null) {
+ // TODO: Give user the option to always show the root namespace
+ string rootNamespace = project.RootNamespace;
+ if (directory.StartsWith(rootNamespace)) {
+ directory = directory.Substring(rootNamespace.Length);
+ }
+ }
+ return directory;
+ }
+
public TreeNode GetNodeByPath(string directory, bool create)
{
+ directory = StripRootNamespace(directory);
+
string[] treepath = directory.Split(new char[] { '.' });
TreeNodeCollection curcollection = Nodes;
- TreeNode curnode = null;
+ TreeNode curnode = this;
foreach (string path in treepath) {
if (path.Length == 0 || path[0] == '.') {
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs
index 9e41d794d1..b1139c20a3 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs
@@ -42,7 +42,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public ReferenceFolderNode(IProject project)
{
- sortOrder = 0;
+ sortOrder = -1;
this.project = project;
Text = "References";
@@ -59,7 +59,7 @@ namespace ICSharpCode.SharpDevelop.Gui
Nodes.Clear();
foreach (ProjectItem item in project.Items) {
if (item.ItemType == ItemType.Reference) {
- new ReferenceNode(item).AddTo(this);
+ new ReferenceNode((ReferenceProjectItem)item).AddTo(this);
}
}
}
@@ -67,9 +67,9 @@ namespace ICSharpCode.SharpDevelop.Gui
public class ReferenceNode : ProjectNode
{
- ProjectItem item;
+ ReferenceProjectItem item;
- public ReferenceNode(ProjectItem item)
+ public ReferenceNode(ReferenceProjectItem item)
{
this.item = item;
Text = item.Include;
@@ -83,27 +83,23 @@ namespace ICSharpCode.SharpDevelop.Gui
{
isInitialized = true;
- Assembly assembly = null;
- try {
- assembly = Assembly.ReflectionOnlyLoadFrom(item.FileName);
- } catch (Exception) {
- try {
- assembly = Assembly.ReflectionOnlyLoad(item.Include);
- } catch (Exception e) {
- Console.WriteLine("Can't load assembly '{0}' : " + e.Message, item.Include);
- }
- }
- if (assembly != null) {
+ IProjectContent pc = ProjectContentRegistry.GetProjectContentForReference(item);
+ if (pc != null) {
Nodes.Clear();
- foreach (Type type in assembly.GetTypes()) {
- if (!type.FullName.StartsWith("<") && type.IsPublic) {
- IClass c = new ReflectionClass(null, type, null);
- TreeNode node = GetNodeByPath(c.Namespace, true);
- new ClassNode(item.Project, c).AddTo(node);
- }
+ foreach (IClass c in pc.Classes) {
+ TreeNode node = GetNodeByPath(c.Namespace, true);
+ new ClassNode(item.Project, c).AddTo(node);
}
}
-
+ }
+
+ protected override string StripRootNamespace(string directory)
+ {
+ string rootNamespace = item.Include;
+ if (directory.ToLower().StartsWith(rootNamespace.ToLower())) {
+ directory = directory.Substring(rootNamespace.Length);
+ }
+ return directory;
}
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
index eaa9d0640b..d90a7789f0 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
@@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (AbstractProjectBrowserTreeNode node in treeView.Nodes) {
node.UpdateVisibility();
}
- treeView.SortNodes(null);
+ treeView.Sort();
}
}
}
diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs
index a6cff132ef..563f98c303 100644
--- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs
@@ -274,14 +274,10 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
if (insightWindow == null || insightWindow.IsDisposed) {
insightWindow = new InsightWindow(((Form)WorkbenchSingleton.Workbench), this, FileName);
- if (insightWindow != null) {
- insightWindow.Closed += new EventHandler(CloseInsightWindow);
- }
- }
- if (insightWindow != null) {
- insightWindow.AddInsightDataProvider(insightDataProvider);
- insightWindow.ShowInsightWindow();
+ insightWindow.Closed += new EventHandler(CloseInsightWindow);
}
+ insightWindow.AddInsightDataProvider(insightDataProvider);
+ insightWindow.ShowInsightWindow();
}
public void ShowCompletionWindow(ICompletionDataProvider completionDataProvider, char ch)
diff --git a/src/Main/Base/Test/NRefactoryResolverTests.cs b/src/Main/Base/Test/NRefactoryResolverTests.cs
index 8bbac78228..83e9c06087 100644
--- a/src/Main/Base/Test/NRefactoryResolverTests.cs
+++ b/src/Main/Base/Test/NRefactoryResolverTests.cs
@@ -206,7 +206,7 @@ End Module
}
#endregion
- #region BasicTests
+ #region Simple Tests
[Test]
public void InheritedInterfaceResolveTest()
{
@@ -409,6 +409,62 @@ End Class
Assert.IsTrue(result is TypeResolveResult);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName);
}
+
+ // PrimitiveTypeOutsideClass and OtherTypeOutsideClass
+ // are necessary for delegate declarations and class inheritance
+ // (because "outside" is everything before {, so the reference to the
+ // base class is outside the class)
+ [Test]
+ public void PrimitiveTypeOutsideClass()
+ {
+ string program = @"class A {
+
+}
+
+class B {
+
+}
+";
+ ResolveResult result = Resolve(program, "int", 4);
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result is TypeResolveResult);
+ Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName);
+ }
+
+ [Test]
+ public void OtherTypeOutsideClass()
+ {
+ string program = @"using System;
+class A {
+
+}
+
+class B {
+
+}
+";
+ ResolveResult result = Resolve(program, "Activator", 5);
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result is TypeResolveResult);
+ Assert.AreEqual("System.Activator", result.ResolvedType.FullyQualifiedName);
+ }
+
+ [Test]
+ public void FullyQualifiedTypeOutsideClass()
+ {
+ string program = @"class A {
+
+}
+
+class B {
+
+}
+";
+ ResolveResult result = Resolve(program, "System.Activator", 4);
+ Assert.IsNotNull(result);
+ Assert.IsTrue(result is TypeResolveResult);
+ Assert.AreEqual("System.Activator", result.ResolvedType.FullyQualifiedName);
+ }
#endregion
}
}