Browse Source

Reimplement folding for C#.

pull/863/head
Siegfried Pammer 8 years ago
parent
commit
c918d66e9d
  1. 2
      ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs
  2. 41
      ICSharpCode.Decompiler/Output/TextTokenWriter.cs

2
ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs

@ -1373,8 +1373,8 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
foreach (var node in blockStatement.Statements) { foreach (var node in blockStatement.Statements) {
node.AcceptVisitor(this); node.AcceptVisitor(this);
} }
EndNode(blockStatement);
CloseBrace(style); CloseBrace(style);
EndNode(blockStatement);
} }
public virtual void VisitBreakStatement(BreakStatement breakStatement) public virtual void VisitBreakStatement(BreakStatement breakStatement)

41
ICSharpCode.Decompiler/Output/TextTokenWriter.cs

@ -206,6 +206,23 @@ namespace ICSharpCode.Decompiler
public override void WriteToken(Role role, string token) public override void WriteToken(Role role, string token)
{ {
switch (token) {
case "{":
if (braceLevelWithinType >= 0 || nodeStack.Peek() is TypeDeclaration)
braceLevelWithinType++;
if (nodeStack.OfType<BlockStatement>().Count() <= 1 || FoldBraces) {
output.MarkFoldStart(defaultCollapsed: braceLevelWithinType == 1);
}
output.Write("{");
break;
case "}":
output.Write('}');
if (nodeStack.OfType<BlockStatement>().Count() <= 1 || FoldBraces)
output.MarkFoldEnd();
if (braceLevelWithinType >= 0)
braceLevelWithinType--;
break;
default:
// Attach member reference to token only if there's no identifier in the current node. // Attach member reference to token only if there's no identifier in the current node.
var member = GetCurrentMemberReference(); var member = GetCurrentMemberReference();
var node = nodeStack.Peek(); var node = nodeStack.Peek();
@ -213,6 +230,8 @@ namespace ICSharpCode.Decompiler
output.WriteReference(token, member); output.WriteReference(token, member);
else else
output.Write(token); output.Write(token);
break;
}
} }
public override void Space() public override void Space()
@ -220,28 +239,6 @@ namespace ICSharpCode.Decompiler
output.Write(' '); output.Write(' ');
} }
public void OpenBrace(BraceStyle style)
{
if (braceLevelWithinType >= 0 || nodeStack.Peek() is TypeDeclaration)
braceLevelWithinType++;
if (nodeStack.OfType<BlockStatement>().Count() <= 1 || FoldBraces) {
output.MarkFoldStart(defaultCollapsed: braceLevelWithinType == 1);
}
output.WriteLine();
output.WriteLine("{");
output.Indent();
}
public void CloseBrace(BraceStyle style)
{
output.Unindent();
output.Write('}');
if (nodeStack.OfType<BlockStatement>().Count() <= 1 || FoldBraces)
output.MarkFoldEnd();
if (braceLevelWithinType >= 0)
braceLevelWithinType--;
}
public override void Indent() public override void Indent()
{ {
output.Indent(); output.Indent();

Loading…
Cancel
Save