Browse Source

finish InsertSpecialsVisitor

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

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

@ -61,17 +61,21 @@ namespace ICSharpCode.NRefactory.CSharp
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 { }
public void SetValue(object value, string literalValue)
{
if (value == null) if (value == null)
throw new ArgumentNullException(); throw new ArgumentNullException();
ThrowIfFrozen(); ThrowIfFrozen();
literalValue = value; this.value = value;
} this.literalValue = literalValue;
} }
public PrimitiveExpression (object value) public PrimitiveExpression (object value)

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) {

29
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) { // see CSharpOutputVisitor.VisitNewLine()
NewLine(); // 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