diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs index 514bd9b027..a47906652f 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs @@ -1,6 +1,6 @@ // // PrimitiveExpression.cs -// +// // Author: // Mike Krüger // @@ -58,20 +58,24 @@ namespace ICSharpCode.NRefactory.CSharp public object Value { get { return this.value; } - set { - ThrowIfFrozen(); + set { + ThrowIfFrozen(); this.value = value; + literalValue = null; } } public string LiteralValue { get { return literalValue; } - set { - if (value == null) - throw new ArgumentNullException(); - ThrowIfFrozen(); - literalValue = value; - } + } + + public void SetValue(object value, string literalValue) + { + if (value == null) + throw new ArgumentNullException(); + ThrowIfFrozen(); + this.value = value; + this.literalValue = literalValue; } public PrimitiveExpression (object value) @@ -97,7 +101,7 @@ namespace ICSharpCode.NRefactory.CSharp { visitor.VisitPrimitiveExpression (this); } - + public override T AcceptVisitor (IAstVisitor visitor) { return visitor.VisitPrimitiveExpression (this); @@ -119,7 +123,7 @@ namespace ICSharpCode.NRefactory.CSharp switch (*p) { case '\r': char* nextp = p + 1; - if (nextp < endPtr && *nextp == '\n') + if (nextp < endPtr && *nextp == '\n') p++; goto case '\n'; case '\n': diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs index 6c150c72a9..4b584a49ce 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs +++ b/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) { TypeSystemAstBuilder astBuilder = CreateAstBuilder(); - TypeDeclaration node = (TypeDeclaration)astBuilder.ConvertEntity(typeDef); + EntityDeclaration node = astBuilder.ConvertEntity(typeDef); if (typeDef.DeclaringTypeDefinition != null) { WriteTypeDeclarationName(typeDef.DeclaringTypeDefinition, writer, formattingPolicy); writer.WriteToken(Roles.Dot, "."); @@ -226,7 +226,7 @@ namespace ICSharpCode.NRefactory.CSharp } break; default: - writer.WriteIdentifier(node.NameToken); + writer.WriteIdentifier(Identifier.Create(member.Name)); break; } if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList && member.SymbolKind == SymbolKind.Method) { diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs index ee72a53c80..5a4eadcc6a 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.NRefactory.CSharp if (formattingPolicy == null) { throw new ArgumentNullException ("formattingPolicy"); } - this.writer = new InsertRequiredSpacesDecorator(new TextWriterTokenWriter(textWriter)); + this.writer = new InsertSpecialsDecorator(new InsertRequiredSpacesDecorator(new TextWriterTokenWriter(textWriter))); this.policy = formattingPolicy; } @@ -58,7 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp if (formattingPolicy == null) { throw new ArgumentNullException ("formattingPolicy"); } - this.writer = new InsertRequiredSpacesDecorator(writer); + this.writer = new InsertSpecialsDecorator(new InsertRequiredSpacesDecorator(writer)); this.policy = formattingPolicy; } @@ -907,7 +907,7 @@ namespace ICSharpCode.NRefactory.CSharp if (!string.IsNullOrEmpty(primitiveExpression.LiteralValue)) { writer.WriteToken(primitiveExpression.Role, primitiveExpression.LiteralValue); } else { - TextWriterTokenWriter.PrintPrimitiveValue(primitiveExpression.Value); + writer.WritePrimitiveValue(primitiveExpression.Value); } EndNode(primitiveExpression); } @@ -2480,6 +2480,7 @@ namespace ICSharpCode.NRefactory.CSharp class InsertSpecialsDecorator : DecoratingTokenWriter { readonly Stack positionStack = new Stack(); + int visitorWroteNewLine = 0; public InsertSpecialsDecorator(ITokenWriter writer) : base(writer) @@ -2523,6 +2524,13 @@ namespace ICSharpCode.NRefactory.CSharp base.WriteToken(role, token); } + public override void NewLine() + { + if (visitorWroteNewLine >= 0) + base.NewLine(); + visitorWroteNewLine++; + } + #region WriteSpecials /// /// 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) { if (pos.Role == Roles.Comment) { var node = (Comment)pos; - WriteComment(node.CommentType, node.Content); - } - if (pos.Role == Roles.NewLine) { - NewLine(); + base.WriteComment(node.CommentType, node.Content); } + // see CSharpOutputVisitor.VisitNewLine() +// if (pos.Role == Roles.NewLine) { +// if (visitorWroteNewLine <= 0) +// base.NewLine(); +// visitorWroteNewLine--; +// } if (pos.Role == Roles.PreProcessorDirective) { var node = (PreProcessorDirective)pos; - WritePreProcessorDirective(node.Type, node.Argument); + base.WritePreProcessorDirective(node.Type, node.Argument); } } } diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/UseStringFormatAction.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/UseStringFormatAction.cs index e65b4cdb5f..393ea9e724 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/UseStringFormatAction.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/UseStringFormatAction.cs @@ -94,7 +94,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring format.Append ('"'); if (verbatim) format.Insert (0, '@'); - formatLiteral.LiteralValue = format.ToString (); + formatLiteral.SetValue(format.ToString(), format.ToString()); script.Replace (expr, formatInvocation); }, node); }