diff --git a/src/Main/Base/Project/Dom/ClassBrowser/MemberTreeNode.cs b/src/Main/Base/Project/Dom/ClassBrowser/MemberTreeNode.cs index 0e95e5d5e1..9655dc6801 100644 --- a/src/Main/Base/Project/Dom/ClassBrowser/MemberTreeNode.cs +++ b/src/Main/Base/Project/Dom/ClassBrowser/MemberTreeNode.cs @@ -17,11 +17,19 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser if (model == null) throw new ArgumentNullException("model"); this.model = model; + this.model.PropertyChanged += OnModelPropertyChanged; // disable lazy loading to avoid showing a useless + sign in the tree. // remove this line if you add child nodes LazyLoading = false; } + private void OnModelPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + // Update properties of tree node, since member model has been changed + cachedText = null; + RaisePropertyChanged(null); + } + protected override object GetModel() { return model; diff --git a/src/Main/SharpDevelop/Dom/MemberModel.cs b/src/Main/SharpDevelop/Dom/MemberModel.cs index fc1b91bd30..cca4191937 100644 --- a/src/Main/SharpDevelop/Dom/MemberModel.cs +++ b/src/Main/SharpDevelop/Dom/MemberModel.cs @@ -37,7 +37,7 @@ namespace ICSharpCode.SharpDevelop.Dom this.member = member; } - public event PropertyChangedEventHandler PropertyChanged { add {} remove {} } + public event PropertyChangedEventHandler PropertyChanged; /// /// Updates the member model with the specified new member. @@ -47,6 +47,14 @@ namespace ICSharpCode.SharpDevelop.Dom if (newMember == null) throw new ArgumentNullException("newMember"); this.member = newMember; + RaisePropertyChanged(); + } + + private void RaisePropertyChanged() + { + if (this.PropertyChanged != null) { + this.PropertyChanged(this, new PropertyChangedEventArgs(null)); + } } public IProject ParentProject { diff --git a/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs b/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs index 39133788eb..d3c260052f 100644 --- a/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs +++ b/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs @@ -36,11 +36,6 @@ namespace ICSharpCode.SharpDevelop.Dom this.fullTypeName = firstPart.FullTypeName; } - public IEntityModelContext Context - { - get { return context; } - } - public IReadOnlyList Parts { get { return parts; } } @@ -144,14 +139,14 @@ namespace ICSharpCode.SharpDevelop.Dom var newMembers = newPart.Members; int startPos = 0; // Look at the initial members and update them if they're matching - while (startPos < list.Count && startPos < newMembers.Count && IsMatch(parent.Context, list[startPos], newMembers[startPos])) { + while (startPos < list.Count && startPos < newMembers.Count && IsMatch(list[startPos], newMembers[startPos])) { list[startPos].Update(newMembers[startPos]); startPos++; } // Look at the final members int endPosOld = list.Count - 1; int endPosNew = newMembers.Count - 1; - while (endPosOld >= startPos && endPosNew >= startPos && IsMatch(parent.Context, list[endPosOld], newMembers[endPosNew])) { + while (endPosOld >= startPos && endPosNew >= startPos && IsMatch(list[endPosOld], newMembers[endPosNew])) { list[endPosOld--].Update(newMembers[endPosNew--]); } // [startPos, endPos] is the middle portion that contains all the changes @@ -177,32 +172,9 @@ namespace ICSharpCode.SharpDevelop.Dom } } - static bool IsMatch(IEntityModelContext context, MemberModel memberModel, IUnresolvedMember newMember) + static bool IsMatch(MemberModel memberModel, IUnresolvedMember newMember) { - bool isSymbolOfTypeAndName = memberModel.SymbolKind == newMember.SymbolKind && memberModel.Name == newMember.Name; - if (isSymbolOfTypeAndName) { - var parametrizedNewMember = newMember as IUnresolvedParameterizedMember; - var parametrizedModelMember = memberModel.UnresolvedMember as IUnresolvedParameterizedMember; - if ((parametrizedNewMember != null) && (parametrizedModelMember != null)) { - // For methods and constructors additionally check the parameters and their types to handle overloading properly - int treeNodeParamsCount = parametrizedModelMember.Parameters != null ? parametrizedModelMember.Parameters.Count : 0; - int entityParamsCount = parametrizedNewMember.Parameters != null ? parametrizedNewMember.Parameters.Count : 0; - if (treeNodeParamsCount == entityParamsCount) { - for (int i = 0; i < entityParamsCount; i++) { - if (!parametrizedNewMember.Parameters[i].Type.Resolve(context.GetCompilation()).Equals(parametrizedModelMember.Parameters[i].Type.Resolve(context.GetCompilation()))) { - return false; - } - } - - // All parameters were equal - return true; - } - } else { - return true; - } - } - - return false; + return memberModel.SymbolKind == newMember.SymbolKind && memberModel.Name == newMember.Name; } public event ModelCollectionChangedEventHandler CollectionChanged {