Browse Source

Fixed some issues with code completion and the class browser.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@163 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
01675c578c
  1. 4
      src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
  2. 5
      src/AddIns/Misc/AddinScout/Project/AddinScout.csproj
  3. 14
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/AbstractCompletionWindow.cs
  4. 6
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs
  5. 5
      src/Main/Base/Project/Src/Dom/IReturnType.cs
  6. 1
      src/Main/Base/Project/Src/Dom/Implementations/AbstractReturnType.cs
  7. 5
      src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs
  8. 9
      src/Main/Base/Project/Src/Dom/Implementations/ProxyReturnType.cs
  9. 18
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  10. 14
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  11. 2
      src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
  12. 55
      src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
  13. 1
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowser.cs
  14. 9
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowserToolbarCommands.cs
  15. 13
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs
  16. 30
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs
  17. 16
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ProjectNode.cs
  18. 40
      src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs
  19. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  20. 10
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs
  21. 58
      src/Main/Base/Test/NRefactoryResolverTests.cs

4
src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj

@ -11,6 +11,10 @@
<NoConfig>False</NoConfig> <NoConfig>False</NoConfig>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<AssemblyOriginatorKeyMode>File</AssemblyOriginatorKeyMode> <AssemblyOriginatorKeyMode>File</AssemblyOriginatorKeyMode>
<RootNamespace>ResourceEditor</RootNamespace>
<StartupObject />
<ApplicationIcon />
<Win32Resource />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols> <DebugSymbols>True</DebugSymbols>

5
src/AddIns/Misc/AddinScout/Project/AddinScout.csproj

@ -5,7 +5,7 @@
<ProductVersion>8.0.50215</ProductVersion> <ProductVersion>8.0.50215</ProductVersion>
<SchemaVersion>2.0</SchemaVersion> <SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}</ProjectGuid> <ProjectGuid>{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}</ProjectGuid>
<RootNamespace>NewProject</RootNamespace> <RootNamespace>AddInScout</RootNamespace>
<AssemblyName>AddinScout</AssemblyName> <AssemblyName>AddinScout</AssemblyName>
<OutputTarget>Library</OutputTarget> <OutputTarget>Library</OutputTarget>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
@ -13,6 +13,9 @@
<NoConfig>False</NoConfig> <NoConfig>False</NoConfig>
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent> <RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<StartupObject />
<ApplicationIcon />
<Win32Resource />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols> <DebugSymbols>True</DebugSymbols>

14
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/AbstractCompletionWindow.cs

@ -27,12 +27,13 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
protected string fileName; protected string fileName;
protected Size drawingSize; protected Size drawingSize;
Rectangle workingScreen; Rectangle workingScreen;
Form parentForm;
protected AbstractCompletionWindow(Form parentForm, TextEditorControl control, string fileName) protected AbstractCompletionWindow(Form parentForm, TextEditorControl control, string fileName)
{ {
workingScreen = Screen.GetWorkingArea(parentForm); workingScreen = Screen.GetWorkingArea(parentForm);
// SetStyle(ControlStyles.Selectable, false); // SetStyle(ControlStyles.Selectable, false);
this.parentForm = parentForm;
this.control = control; this.control = control;
this.fileName = fileName; this.fileName = fileName;
@ -41,7 +42,6 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
FormBorderStyle = FormBorderStyle.None; FormBorderStyle = FormBorderStyle.None;
ShowInTaskbar = false; ShowInTaskbar = false;
Size = new Size(1, 1); Size = new Size(1, 1);
Owner = parentForm;
} }
protected virtual void SetLocation() protected virtual void SetLocation()
@ -86,12 +86,14 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
protected void ShowCompletionWindow() protected void ShowCompletionWindow()
{ {
Owner = parentForm;
Enabled = true; Enabled = true;
AbstractCompletionWindow.ShowWindow(base.Handle, AbstractCompletionWindow.SW_SHOWNA); AbstractCompletionWindow.ShowWindow(base.Handle, AbstractCompletionWindow.SW_SHOWNA);
control.Focus(); 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); control.ActiveTextAreaControl.VScrollBar.ValueChanged += new EventHandler(ParentFormLocationChanged);
@ -141,9 +143,7 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow
base.OnClosed(e); base.OnClosed(e);
// take out the inserted methods // take out the inserted methods
if (Owner != null) { parentForm.LocationChanged -= new EventHandler(ParentFormLocationChanged);
Owner.LocationChanged -= new EventHandler(this.ParentFormLocationChanged);
}
control.ActiveTextAreaControl.VScrollBar.ValueChanged -= new EventHandler(ParentFormLocationChanged); control.ActiveTextAreaControl.VScrollBar.ValueChanged -= new EventHandler(ParentFormLocationChanged);
control.ActiveTextAreaControl.HScrollBar.ValueChanged -= new EventHandler(ParentFormLocationChanged); control.ActiveTextAreaControl.HScrollBar.ValueChanged -= new EventHandler(ParentFormLocationChanged);

6
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) protected override void OnClosed(EventArgs e)
{ {
codeCompletionListView.Close();
base.OnClosed(e); base.OnClosed(e);
declarationViewWindow.Close(); Dispose();
codeCompletionListView.Dispose();
codeCompletionListView = null;
declarationViewWindow.Dispose(); declarationViewWindow.Dispose();
declarationViewWindow = null;
} }
void InsertSelectedItem() void InsertSelectedItem()

5
src/Main/Base/Project/Src/Dom/IReturnType.cs

@ -43,6 +43,11 @@ namespace ICSharpCode.SharpDevelop.Dom
get; get;
} }
/// <summary>
/// Gets the underlying class of this return type.
/// </summary>
IClass GetUnderlyingClass();
List<IMethod> GetMethods(); List<IMethod> GetMethods();
List<IProperty> GetProperties(); List<IProperty> GetProperties();
List<IField> GetFields(); List<IField> GetFields();

1
src/Main/Base/Project/Src/Dom/Implementations/AbstractReturnType.cs

@ -16,6 +16,7 @@ namespace ICSharpCode.SharpDevelop.Dom
[Serializable] [Serializable]
public abstract class AbstractReturnType : IReturnType public abstract class AbstractReturnType : IReturnType
{ {
public abstract IClass GetUnderlyingClass();
public abstract List<IMethod> GetMethods(); public abstract List<IMethod> GetMethods();
public abstract List<IProperty> GetProperties(); public abstract List<IProperty> GetProperties();
public abstract List<IField> GetFields(); public abstract List<IField> GetFields();

5
src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs

@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Dom
this.c = c; this.c = c;
} }
public override IClass GetUnderlyingClass()
{
return c;
}
public override List<IMethod> GetMethods() public override List<IMethod> GetMethods()
{ {
List<IMethod> l = new List<IMethod>(); List<IMethod> l = new List<IMethod>();

9
src/Main/Base/Project/Src/Dom/Implementations/ProxyReturnType.cs

@ -59,6 +59,15 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
/// <summary>
/// Gets the underlying class of this return type.
/// </summary>
public virtual IClass GetUnderlyingClass()
{
IReturnType baseType = BaseType;
return (baseType != null) ? baseType.GetUnderlyingClass() : null;
}
public virtual List<IMethod> GetMethods() public virtual List<IMethod> GetMethods()
{ {
IReturnType baseType = BaseType; IReturnType baseType = BaseType;

18
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -219,6 +219,14 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (m.IsConstructor && !m.IsStatic) if (m.IsConstructor && !m.IsStatic)
constructors.Add(m); 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 CreateMemberResolveResult(typeVisitor.FindOverload(constructors, ((ObjectCreateExpression)expr).Parameters, null));
} }
return new ResolveResult(callingClass, callingMember, type); return new ResolveResult(callingClass, callingMember, type);
@ -324,11 +332,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ResolveResult result = ResolveMethod(callingClass.DefaultReturnType, identifier); ResolveResult result = ResolveMethod(callingClass.DefaultReturnType, identifier);
if (result != null) if (result != null)
return result; return result;
}
IClass c = SearchType(identifier, callingClass, cu);
if (c != null) { IClass c = SearchType(identifier, callingClass, cu);
return new TypeResolveResult(callingClass, callingMember, c.DefaultReturnType, c); if (c != null) {
} return new TypeResolveResult(callingClass, callingMember, c.DefaultReturnType, c);
} }
// try if there exists a static member in outer classes named typeName // try if there exists a static member in outer classes named typeName

14
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); IClass c = resolver.SearchType(reference.SystemType, callingClass);
if (c == null) return null; if (c == null) return null;
IReturnType t = c.DefaultReturnType; IReturnType t = c.DefaultReturnType;
foreach (ITypeParameter tp in callingClass.TypeParameters) { if (callingClass != null) {
if (resolver.LanguageProperties.NameComparer.Equals(reference.SystemType, tp.Name)) { foreach (ITypeParameter tp in callingClass.TypeParameters) {
t = new GenericReturnType(tp); if (resolver.LanguageProperties.NameComparer.Equals(reference.SystemType, tp.Name)) {
break; t = new GenericReturnType(tp);
break;
}
} }
} }
if (reference.GenericTypes.Count > 0) { if (reference.GenericTypes.Count > 0) {
@ -433,6 +435,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
this.FullyQualifiedName = fullName; this.FullyQualifiedName = fullName;
} }
public override IClass GetUnderlyingClass() {
return null;
}
public override List<IMethod> GetMethods() { public override List<IMethod> GetMethods() {
return new List<IMethod>(); return new List<IMethod>();
} }

2
src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs

@ -188,11 +188,9 @@ namespace ICSharpCode.SharpDevelop.Dom
BaseTypes.Add(type.BaseType.FullName); BaseTypes.Add(type.BaseType.FullName);
} }
// add members
foreach (Type iface in type.GetInterfaces()) { foreach (Type iface in type.GetInterfaces()) {
BaseTypes.Add(iface.FullName); BaseTypes.Add(iface.FullName);
} }
} }
} }
} }

55
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 // using TreeView.TreeViewNodeSorter will result in TreeNodeCollection
// calling Sort() after every insertion. Therefore, we have to create // calling Sort() after every insertion. Therefore, we have to create
// our own NodeSorter property. // our own NodeSorter property.
IComparer<TreeNode> nodeSorter = new ExtTreeViewComparer(); IComparer<TreeNode> nodeSorter = new ExtTreeViewComparer();
public IComparer<TreeNode> NodeSorter { public IComparer<TreeNode> NodeSorter {
@ -79,26 +78,27 @@ namespace ICSharpCode.SharpDevelop.Gui
newImageList.ColorDepth = ColorDepth.Depth32Bit; newImageList.ColorDepth = ColorDepth.Depth32Bit;
this.ImageList = newImageList; this.ImageList = newImageList;
} }
public void SortNodes(TreeNode node) public new void Sort()
{
SortNodes(Nodes, true);
}
public void SortNodes(TreeNodeCollection nodes, bool recursive)
{ {
if (!isSorted) { if (!isSorted) {
return; return;
} }
if (node == null) { TreeNode[] nodeArray = new TreeNode[nodes.Count];
foreach (TreeNode childNode in Nodes) { nodes.CopyTo(nodeArray, 0);
SortNodes(childNode);
}
return;
}
TreeNode[] nodeArray = new TreeNode[node.Nodes.Count];
node.Nodes.CopyTo(nodeArray, 0);
Array.Sort(nodeArray, nodeSorter); Array.Sort(nodeArray, nodeSorter);
node.Nodes.Clear(); nodes.Clear();
node.Nodes.AddRange(nodeArray); nodes.AddRange(nodeArray);
foreach (TreeNode childNode in nodeArray) { if (recursive) {
SortNodes(childNode); foreach (TreeNode childNode in nodeArray) {
SortNodes(childNode.Nodes, true);
}
} }
} }
@ -166,7 +166,13 @@ namespace ICSharpCode.SharpDevelop.Gui
if (node != null) { if (node != null) {
node.AfterLabelEdit(e.Label); 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 #endregion
bool inRefresh = false; bool inRefresh = false;
@ -175,10 +181,15 @@ namespace ICSharpCode.SharpDevelop.Gui
base.OnBeforeExpand(e); base.OnBeforeExpand(e);
inRefresh = true; inRefresh = true;
BeginUpdate(); BeginUpdate();
if (e.Node is ExtTreeNode) { try {
((ExtTreeNode)e.Node).Expanding(); 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) { if (e.Node.Nodes.Count == 0) {
// when the node's subnodes have been removed by Expanding, AfterExpand is not called // when the node's subnodes have been removed by Expanding, AfterExpand is not called
inRefresh = false; inRefresh = false;
@ -273,7 +284,7 @@ namespace ICSharpCode.SharpDevelop.Gui
DataObject dataObject = node.DragDropDataObject; DataObject dataObject = node.DragDropDataObject;
if (dataObject != null) { if (dataObject != null) {
DoDragDrop(dataObject, DragDropEffects.All); DoDragDrop(dataObject, DragDropEffects.All);
SortNodes(node.Parent); SortParentNodes(node);
} }
} }
} }
@ -314,7 +325,7 @@ namespace ICSharpCode.SharpDevelop.Gui
if (node != null) { if (node != null) {
node.DoDragDrop(e.Data, e.Effect); node.DoDragDrop(e.Data, e.Effect);
SortNodes(node.Parent); SortParentNodes(node);
} }
} }

1
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.Text = "No search results found.";
notFoundMsg.AddTo(classBrowserTreeView); notFoundMsg.AddTo(classBrowserTreeView);
} }
classBrowserTreeView.Sort();
classBrowserTreeView.EndUpdate(); classBrowserTreeView.EndUpdate();
} }

9
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/ClassBrowserToolbarCommands.cs

@ -62,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Gui
((IStatusUpdate)item).UpdateStatus(); ((IStatusUpdate)item).UpdateStatus();
} }
} }
dropDownButton.DropDownItems.AddRange(items); dropDownButton.DropDownItems.AddRange(items);
} }
} }
@ -172,18 +172,19 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
ComboBox comboBox; ComboBox comboBox;
protected override void OnOwnerChanged(EventArgs e) protected override void OnOwnerChanged(EventArgs e)
{ {
base.OnOwnerChanged(e); base.OnOwnerChanged(e);
ToolBarComboBox toolbarItem = (ToolBarComboBox)Owner; ToolBarComboBox toolbarItem = (ToolBarComboBox)Owner;
comboBox = toolbarItem.ComboBox; comboBox = toolbarItem.ComboBox;
comboBox.DropDownStyle = ComboBoxStyle.DropDown; 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; ClassBrowser.Instance.SearchTerm = comboBox.Text;
Run(); // TODO: Enable live search via option
} }
public override void Run() public override void Run()

13
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ClassNode.cs

@ -64,16 +64,17 @@ namespace ICSharpCode.SharpDevelop.Gui
base.Initialize(); base.Initialize();
Nodes.Clear(); Nodes.Clear();
IAmbience languageConversion= AmbienceService.CurrentAmbience;
languageConversion.ConversionFlags = ConversionFlags.None;
// don't insert delegate 'members' // don't insert delegate 'members'
if (c.ClassType == ClassType.Delegate) { if (c.ClassType == ClassType.Delegate) {
return; return;
} }
new BaseTypesNode(project, c).AddTo(this); if (c.BaseTypes.Count > 0) {
new DerivedTypesNode(project, c).AddTo(this); 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) { foreach (IClass innerClass in c.InnerClasses) {
new ClassNode(project, innerClass).AddTo(this); new ClassNode(project, innerClass).AddTo(this);
@ -99,8 +100,6 @@ namespace ICSharpCode.SharpDevelop.Gui
new MemberNode(c, e).AddTo(this); new MemberNode(c, e).AddTo(this);
} }
UpdateVisibility(); UpdateVisibility();
// TODO: TreeNode comparer
// SortUtility.QuickSort(classNode.Nodes, TreeNodeComparer.Default); }
} }
} }
} }

30
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs

@ -55,7 +55,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.declaringType = declaringType; this.declaringType = declaringType;
modifiers = method.Modifiers; modifiers = method.Modifiers;
Text = AmbienceService.CurrentAmbience.Convert(method); Text = AppendReturnType(GetAmbience().Convert(method), method.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(method); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(method);
if (method.Region != null) { if (method.Region != null) {
line = method.Region.BeginLine; line = method.Region.BeginLine;
@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.declaringType = declaringType; this.declaringType = declaringType;
modifiers = property.Modifiers; modifiers = property.Modifiers;
Text = AmbienceService.CurrentAmbience.Convert(property); Text = AppendReturnType(GetAmbience().Convert(property), property.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(property); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(property);
if (property.Region != null) { if (property.Region != null) {
line = property.Region.BeginLine; line = property.Region.BeginLine;
@ -84,7 +84,7 @@ namespace ICSharpCode.SharpDevelop.Gui
sortOrder = 13; sortOrder = 13;
this.declaringType = declaringType; this.declaringType = declaringType;
modifiers = indexer.Modifiers; modifiers = indexer.Modifiers;
Text = AmbienceService.CurrentAmbience.Convert(indexer); Text = AppendReturnType(GetAmbience().Convert(indexer), indexer.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(indexer); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(indexer);
if (indexer.Region != null) { if (indexer.Region != null) {
line = indexer.Region.BeginLine; line = indexer.Region.BeginLine;
@ -96,10 +96,10 @@ namespace ICSharpCode.SharpDevelop.Gui
public MemberNode(IClass declaringType, IField field) public MemberNode(IClass declaringType, IField field)
{ {
sortOrder = 11; sortOrder = 11;
this.declaringType = declaringType; this.declaringType = declaringType;
modifiers = field.Modifiers; modifiers = field.Modifiers;
Text = AmbienceService.CurrentAmbience.Convert(field); Text = AppendReturnType(GetAmbience().Convert(field), field.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(field); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(field);
if (field.Region != null) { if (field.Region != null) {
line = field.Region.BeginLine; line = field.Region.BeginLine;
@ -112,7 +112,7 @@ namespace ICSharpCode.SharpDevelop.Gui
sortOrder = 14; sortOrder = 14;
this.declaringType = declaringType; this.declaringType = declaringType;
modifiers = e.Modifiers; modifiers = e.Modifiers;
Text = AmbienceService.CurrentAmbience.Convert(e); Text = AppendReturnType(GetAmbience().Convert(e), e.ReturnType);
SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(e); SelectedImageIndex = ImageIndex = ClassBrowserIconService.GetIcon(e);
if (e.Region != null) { if (e.Region != null) {
line = e.Region.BeginLine; 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() public override void ActivateItem()
{ {
if (FileName != null) { if (FileName != null) {
FileService.JumpToFilePosition(FileName, line - 1, column - 1); FileService.JumpToFilePosition(FileName, line - 1, column - 1);
} }
} }
} }
} }

16
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) public TreeNode GetNodeByPath(string directory, bool create)
{ {
directory = StripRootNamespace(directory);
string[] treepath = directory.Split(new char[] { '.' }); string[] treepath = directory.Split(new char[] { '.' });
TreeNodeCollection curcollection = Nodes; TreeNodeCollection curcollection = Nodes;
TreeNode curnode = null; TreeNode curnode = this;
foreach (string path in treepath) { foreach (string path in treepath) {
if (path.Length == 0 || path[0] == '.') { if (path.Length == 0 || path[0] == '.') {

40
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ReferenceFolderNode.cs

@ -42,7 +42,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public ReferenceFolderNode(IProject project) public ReferenceFolderNode(IProject project)
{ {
sortOrder = 0; sortOrder = -1;
this.project = project; this.project = project;
Text = "References"; Text = "References";
@ -59,7 +59,7 @@ namespace ICSharpCode.SharpDevelop.Gui
Nodes.Clear(); Nodes.Clear();
foreach (ProjectItem item in project.Items) { foreach (ProjectItem item in project.Items) {
if (item.ItemType == ItemType.Reference) { 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 public class ReferenceNode : ProjectNode
{ {
ProjectItem item; ReferenceProjectItem item;
public ReferenceNode(ProjectItem item) public ReferenceNode(ReferenceProjectItem item)
{ {
this.item = item; this.item = item;
Text = item.Include; Text = item.Include;
@ -83,27 +83,23 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
isInitialized = true; isInitialized = true;
Assembly assembly = null; IProjectContent pc = ProjectContentRegistry.GetProjectContentForReference(item);
try { if (pc != null) {
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) {
Nodes.Clear(); Nodes.Clear();
foreach (Type type in assembly.GetTypes()) { foreach (IClass c in pc.Classes) {
if (!type.FullName.StartsWith("<") && type.IsPublic) { TreeNode node = GetNodeByPath(c.Namespace, true);
IClass c = new ReflectionClass(null, type, null); new ClassNode(item.Project, c).AddTo(node);
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;
} }
} }
} }

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (AbstractProjectBrowserTreeNode node in treeView.Nodes) { foreach (AbstractProjectBrowserTreeNode node in treeView.Nodes) {
node.UpdateVisibility(); node.UpdateVisibility();
} }
treeView.SortNodes(null); treeView.Sort();
} }
} }
} }

10
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) { if (insightWindow == null || insightWindow.IsDisposed) {
insightWindow = new InsightWindow(((Form)WorkbenchSingleton.Workbench), this, FileName); insightWindow = new InsightWindow(((Form)WorkbenchSingleton.Workbench), this, FileName);
if (insightWindow != null) { insightWindow.Closed += new EventHandler(CloseInsightWindow);
insightWindow.Closed += new EventHandler(CloseInsightWindow);
}
}
if (insightWindow != null) {
insightWindow.AddInsightDataProvider(insightDataProvider);
insightWindow.ShowInsightWindow();
} }
insightWindow.AddInsightDataProvider(insightDataProvider);
insightWindow.ShowInsightWindow();
} }
public void ShowCompletionWindow(ICompletionDataProvider completionDataProvider, char ch) public void ShowCompletionWindow(ICompletionDataProvider completionDataProvider, char ch)

58
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -206,7 +206,7 @@ End Module
} }
#endregion #endregion
#region BasicTests #region Simple Tests
[Test] [Test]
public void InheritedInterfaceResolveTest() public void InheritedInterfaceResolveTest()
{ {
@ -409,6 +409,62 @@ End Class
Assert.IsTrue(result is TypeResolveResult); Assert.IsTrue(result is TypeResolveResult);
Assert.AreEqual("System.Int32", result.ResolvedType.FullyQualifiedName); 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 #endregion
} }
} }

Loading…
Cancel
Save