Browse Source

implement links to type definitions in the VB source view

pull/205/merge
Siegfried Pammer 14 years ago
parent
commit
68ba9bd28f
  1. 65
      ILSpy/VB/VBTextOutputFormatter.cs

65
ILSpy/VB/VBTextOutputFormatter.cs

@ -23,6 +23,7 @@ using System.Linq; @@ -23,6 +23,7 @@ using System.Linq;
using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.ILAst;
using ICSharpCode.NRefactory.VB;
using ICSharpCode.NRefactory.VB.Ast;
using Mono.Cecil;
namespace ICSharpCode.ILSpy.VB
@ -77,11 +78,25 @@ namespace ICSharpCode.ILSpy.VB @@ -77,11 +78,25 @@ namespace ICSharpCode.ILSpy.VB
public void WriteIdentifier(string identifier)
{
MemberReference memberRef = GetCurrentMemberReference();
object memberRef = GetCurrentMemberReference();
if (memberRef != null)
if (memberRef != null) {
output.WriteReference(identifier, memberRef);
else
return;
}
var definition = GetCurrentLocalDefinition();
if (definition != null) {
output.WriteDefinition(identifier, definition);
return;
}
memberRef = GetCurrentLocalReference();
if (memberRef != null) {
output.WriteReference(identifier, memberRef, true);
return;
}
output.Write(identifier);
}
@ -89,13 +104,49 @@ namespace ICSharpCode.ILSpy.VB @@ -89,13 +104,49 @@ namespace ICSharpCode.ILSpy.VB
{
AstNode node = nodeStack.Peek();
MemberReference memberRef = node.Annotation<MemberReference>();
// TODO : implement this!
// if (memberRef == null && node.Role == AstNode.Roles.TargetExpression && (node.Parent is InvocationExpression || node.Parent is ObjectCreateExpression)) {
// memberRef = node.Parent.Annotation<MemberReference>();
// }
if (memberRef == null && node.Role == AstNode.Roles.TargetExpression && (node.Parent is InvocationExpression || node.Parent is ObjectCreationExpression)) {
memberRef = node.Parent.Annotation<MemberReference>();
}
return memberRef;
}
object GetCurrentLocalReference()
{
AstNode node = nodeStack.Peek();
ILVariable variable = node.Annotation<ILVariable>();
if (variable != null) {
if (variable.OriginalParameter != null)
return variable.OriginalParameter;
//if (variable.OriginalVariable != null)
// return variable.OriginalVariable;
return variable;
}
return null;
}
object GetCurrentLocalDefinition()
{
AstNode node = nodeStack.Peek();
var parameterDef = node.Annotation<ParameterDefinition>();
if (parameterDef != null)
return parameterDef;
if (node is VariableInitializer || node is CatchBlock || node is ForEachStatement) {
var variable = node.Annotation<ILVariable>();
if (variable != null) {
if (variable.OriginalParameter != null)
return variable.OriginalParameter;
//if (variable.OriginalVariable != null)
// return variable.OriginalVariable;
return variable;
} else {
}
}
return null;
}
public void WriteKeyword(string keyword)
{
output.Write(keyword);

Loading…
Cancel
Save