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

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

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

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

@ -27,12 +27,13 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow @@ -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 @@ -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 @@ -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 @@ -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);

6
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs

@ -229,10 +229,12 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow @@ -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()

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

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

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

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

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

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

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

@ -59,6 +59,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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()
{
IReturnType baseType = BaseType;

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

@ -219,6 +219,14 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -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 @@ -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

14
src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs

@ -377,10 +377,12 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -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 @@ -433,6 +435,10 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
this.FullyQualifiedName = fullName;
}
public override IClass GetUnderlyingClass() {
return null;
}
public override List<IMethod> GetMethods() {
return new List<IMethod>();
}

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

@ -188,11 +188,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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);
}
}
}
}

55
src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs

@ -47,7 +47,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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<TreeNode> nodeSorter = new ExtTreeViewComparer();
public IComparer<TreeNode> NodeSorter {
@ -79,26 +78,27 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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 @@ -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 @@ -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 @@ -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 @@ -314,7 +325,7 @@ namespace ICSharpCode.SharpDevelop.Gui
if (node != null) {
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 @@ -265,6 +265,7 @@ namespace ICSharpCode.SharpDevelop.Gui
notFoundMsg.Text = "No search results found.";
notFoundMsg.AddTo(classBrowserTreeView);
}
classBrowserTreeView.Sort();
classBrowserTreeView.EndUpdate();
}

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

@ -62,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -62,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Gui
((IStatusUpdate)item).UpdateStatus();
}
}
dropDownButton.DropDownItems.AddRange(items);
}
}
@ -172,18 +172,19 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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()

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

@ -64,16 +64,17 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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 @@ -99,8 +100,6 @@ namespace ICSharpCode.SharpDevelop.Gui
new MemberNode(c, e).AddTo(this);
}
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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);
}
}
}
}

16
src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/ProjectNode.cs

@ -122,11 +122,25 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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] == '.') {

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

@ -42,7 +42,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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 @@ -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 @@ -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 @@ -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;
}
}
}

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

@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (AbstractProjectBrowserTreeNode node in treeView.Nodes) {
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 @@ -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)

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

@ -206,7 +206,7 @@ End Module @@ -206,7 +206,7 @@ End Module
}
#endregion
#region BasicTests
#region Simple Tests
[Test]
public void InheritedInterfaceResolveTest()
{
@ -409,6 +409,62 @@ End Class @@ -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
}
}

Loading…
Cancel
Save