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 } }