Browse Source

Reverted fix for doubled overloaded methods, instead ClassBrowser now properly reacts to MemberModel updates.

pull/297/head
Andreas Weizel 12 years ago
parent
commit
32151c102b
  1. 8
      src/Main/Base/Project/Dom/ClassBrowser/MemberTreeNode.cs
  2. 10
      src/Main/SharpDevelop/Dom/MemberModel.cs
  3. 36
      src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

8
src/Main/Base/Project/Dom/ClassBrowser/MemberTreeNode.cs

@ -17,11 +17,19 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -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;

10
src/Main/SharpDevelop/Dom/MemberModel.cs

@ -37,7 +37,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -37,7 +37,7 @@ namespace ICSharpCode.SharpDevelop.Dom
this.member = member;
}
public event PropertyChangedEventHandler PropertyChanged { add {} remove {} }
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Updates the member model with the specified new member.
@ -47,6 +47,14 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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 {

36
src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

@ -36,11 +36,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -36,11 +36,6 @@ namespace ICSharpCode.SharpDevelop.Dom
this.fullTypeName = firstPart.FullTypeName;
}
public IEntityModelContext Context
{
get { return context; }
}
public IReadOnlyList<IUnresolvedTypeDefinition> Parts {
get { return parts; }
}
@ -144,14 +139,14 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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 @@ -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<MemberModel> CollectionChanged {

Loading…
Cancel
Save