Browse Source

finish InsertSpecialsVisitor

newNRILSpyDebugger
Siegfried Pammer 13 years ago
parent
commit
2a785892ca
  1. 26
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs
  2. 4
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs
  3. 27
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs
  4. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/UseStringFormatAction.cs

26
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs

@ -1,6 +1,6 @@
// //
// PrimitiveExpression.cs // PrimitiveExpression.cs
// //
// Author: // Author:
// Mike Krüger <mkrueger@novell.com> // Mike Krüger <mkrueger@novell.com>
// //
@ -58,20 +58,24 @@ namespace ICSharpCode.NRefactory.CSharp
public object Value { public object Value {
get { return this.value; } get { return this.value; }
set { set {
ThrowIfFrozen(); ThrowIfFrozen();
this.value = value; this.value = value;
literalValue = null;
} }
} }
public string LiteralValue { public string LiteralValue {
get { return literalValue; } get { return literalValue; }
set { }
if (value == null)
throw new ArgumentNullException(); public void SetValue(object value, string literalValue)
ThrowIfFrozen(); {
literalValue = value; if (value == null)
} throw new ArgumentNullException();
ThrowIfFrozen();
this.value = value;
this.literalValue = literalValue;
} }
public PrimitiveExpression (object value) public PrimitiveExpression (object value)
@ -97,7 +101,7 @@ namespace ICSharpCode.NRefactory.CSharp
{ {
visitor.VisitPrimitiveExpression (this); visitor.VisitPrimitiveExpression (this);
} }
public override T AcceptVisitor<T> (IAstVisitor<T> visitor) public override T AcceptVisitor<T> (IAstVisitor<T> visitor)
{ {
return visitor.VisitPrimitiveExpression (this); return visitor.VisitPrimitiveExpression (this);
@ -119,7 +123,7 @@ namespace ICSharpCode.NRefactory.CSharp
switch (*p) { switch (*p) {
case '\r': case '\r':
char* nextp = p + 1; char* nextp = p + 1;
if (nextp < endPtr && *nextp == '\n') if (nextp < endPtr && *nextp == '\n')
p++; p++;
goto case '\n'; goto case '\n';
case '\n': case '\n':

4
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs

@ -163,7 +163,7 @@ namespace ICSharpCode.NRefactory.CSharp
void WriteTypeDeclarationName(ITypeDefinition typeDef, ITokenWriter writer, CSharpFormattingOptions formattingPolicy) void WriteTypeDeclarationName(ITypeDefinition typeDef, ITokenWriter writer, CSharpFormattingOptions formattingPolicy)
{ {
TypeSystemAstBuilder astBuilder = CreateAstBuilder(); TypeSystemAstBuilder astBuilder = CreateAstBuilder();
TypeDeclaration node = (TypeDeclaration)astBuilder.ConvertEntity(typeDef); EntityDeclaration node = astBuilder.ConvertEntity(typeDef);
if (typeDef.DeclaringTypeDefinition != null) { if (typeDef.DeclaringTypeDefinition != null) {
WriteTypeDeclarationName(typeDef.DeclaringTypeDefinition, writer, formattingPolicy); WriteTypeDeclarationName(typeDef.DeclaringTypeDefinition, writer, formattingPolicy);
writer.WriteToken(Roles.Dot, "."); writer.WriteToken(Roles.Dot, ".");
@ -226,7 +226,7 @@ namespace ICSharpCode.NRefactory.CSharp
} }
break; break;
default: default:
writer.WriteIdentifier(node.NameToken); writer.WriteIdentifier(Identifier.Create(member.Name));
break; break;
} }
if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList && member.SymbolKind == SymbolKind.Method) { if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList && member.SymbolKind == SymbolKind.Method) {

27
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.NRefactory.CSharp
if (formattingPolicy == null) { if (formattingPolicy == null) {
throw new ArgumentNullException ("formattingPolicy"); throw new ArgumentNullException ("formattingPolicy");
} }
this.writer = new InsertRequiredSpacesDecorator(new TextWriterTokenWriter(textWriter)); this.writer = new InsertSpecialsDecorator(new InsertRequiredSpacesDecorator(new TextWriterTokenWriter(textWriter)));
this.policy = formattingPolicy; this.policy = formattingPolicy;
} }
@ -58,7 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp
if (formattingPolicy == null) { if (formattingPolicy == null) {
throw new ArgumentNullException ("formattingPolicy"); throw new ArgumentNullException ("formattingPolicy");
} }
this.writer = new InsertRequiredSpacesDecorator(writer); this.writer = new InsertSpecialsDecorator(new InsertRequiredSpacesDecorator(writer));
this.policy = formattingPolicy; this.policy = formattingPolicy;
} }
@ -907,7 +907,7 @@ namespace ICSharpCode.NRefactory.CSharp
if (!string.IsNullOrEmpty(primitiveExpression.LiteralValue)) { if (!string.IsNullOrEmpty(primitiveExpression.LiteralValue)) {
writer.WriteToken(primitiveExpression.Role, primitiveExpression.LiteralValue); writer.WriteToken(primitiveExpression.Role, primitiveExpression.LiteralValue);
} else { } else {
TextWriterTokenWriter.PrintPrimitiveValue(primitiveExpression.Value); writer.WritePrimitiveValue(primitiveExpression.Value);
} }
EndNode(primitiveExpression); EndNode(primitiveExpression);
} }
@ -2480,6 +2480,7 @@ namespace ICSharpCode.NRefactory.CSharp
class InsertSpecialsDecorator : DecoratingTokenWriter class InsertSpecialsDecorator : DecoratingTokenWriter
{ {
readonly Stack<AstNode> positionStack = new Stack<AstNode>(); readonly Stack<AstNode> positionStack = new Stack<AstNode>();
int visitorWroteNewLine = 0;
public InsertSpecialsDecorator(ITokenWriter writer) public InsertSpecialsDecorator(ITokenWriter writer)
: base(writer) : base(writer)
@ -2523,6 +2524,13 @@ namespace ICSharpCode.NRefactory.CSharp
base.WriteToken(role, token); base.WriteToken(role, token);
} }
public override void NewLine()
{
if (visitorWroteNewLine >= 0)
base.NewLine();
visitorWroteNewLine++;
}
#region WriteSpecials #region WriteSpecials
/// <summary> /// <summary>
/// Writes all specials from start to end (exclusive). Does not touch the positionStack. /// Writes all specials from start to end (exclusive). Does not touch the positionStack.
@ -2532,14 +2540,17 @@ namespace ICSharpCode.NRefactory.CSharp
for (AstNode pos = start; pos != end; pos = pos.NextSibling) { for (AstNode pos = start; pos != end; pos = pos.NextSibling) {
if (pos.Role == Roles.Comment) { if (pos.Role == Roles.Comment) {
var node = (Comment)pos; var node = (Comment)pos;
WriteComment(node.CommentType, node.Content); base.WriteComment(node.CommentType, node.Content);
}
if (pos.Role == Roles.NewLine) {
NewLine();
} }
// see CSharpOutputVisitor.VisitNewLine()
// if (pos.Role == Roles.NewLine) {
// if (visitorWroteNewLine <= 0)
// base.NewLine();
// visitorWroteNewLine--;
// }
if (pos.Role == Roles.PreProcessorDirective) { if (pos.Role == Roles.PreProcessorDirective) {
var node = (PreProcessorDirective)pos; var node = (PreProcessorDirective)pos;
WritePreProcessorDirective(node.Type, node.Argument); base.WritePreProcessorDirective(node.Type, node.Argument);
} }
} }
} }

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/UseStringFormatAction.cs

@ -94,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
format.Append ('"'); format.Append ('"');
if (verbatim) if (verbatim)
format.Insert (0, '@'); format.Insert (0, '@');
formatLiteral.LiteralValue = format.ToString (); formatLiteral.SetValue(format.ToString(), format.ToString());
script.Replace (expr, formatInvocation); script.Replace (expr, formatInvocation);
}, node); }, node);
} }

Loading…
Cancel
Save