diff options
Diffstat (limited to 'main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/WriteLineGenerator.cs')
-rw-r--r-- | main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/WriteLineGenerator.cs | 78 |
1 files changed, 46 insertions, 32 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/WriteLineGenerator.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/WriteLineGenerator.cs index 3a47fe1d5e..f150e59a13 100644 --- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/WriteLineGenerator.cs +++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/WriteLineGenerator.cs @@ -25,15 +25,13 @@ // THE SOFTWARE. using System; -using MonoDevelop.Components; -using Gtk; -using MonoDevelop.Ide.Gui; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp; using System.Text; using MonoDevelop.Core; -using MonoDevelop.Refactoring; -using ICSharpCode.NRefactory.TypeSystem; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Simplification; namespace MonoDevelop.CodeGeneration { @@ -77,52 +75,56 @@ namespace MonoDevelop.CodeGeneration protected override IEnumerable<object> GetValidMembers () { - if (Options == null || Options.EnclosingType == null || Options.EnclosingMember == null || Options.Document == null) + if (Options == null || Options.EnclosingType == null) yield break; - var editor = Options.Document.Editor; + if (Options.EnclosingMember == null) + yield break; + if (Options.DocumentContext == null) + yield break; + var editor = Options.Editor; if (editor == null) yield break; - // add local variables var state = Options.CurrentState; if (state != null) { - foreach (var v in state.LocalVariables) + foreach (var v in state.LookupSymbols (editor.CaretOffset).OfType<ILocalSymbol> ()) yield return v; } - + // add parameters - if (Options.EnclosingMember is IParameterizedMember) { - foreach (IParameter param in ((IParameterizedMember)Options.EnclosingMember).Parameters) + if (Options.EnclosingMember is IMethodSymbol) { + foreach (var param in ((IMethodSymbol)Options.EnclosingMember).Parameters) yield return param; } - + if (Options.EnclosingMember is IPropertySymbol) { + foreach (var param in ((IPropertySymbol)Options.EnclosingMember).Parameters) + yield return param; + } + // add type members - foreach (IField field in Options.EnclosingType.Fields) { - if (field.IsSynthetic) + foreach (IFieldSymbol field in Options.EnclosingType.GetMembers ().OfType<IFieldSymbol> ()) { + if (field.IsImplicitlyDeclared) continue; yield return field; } - foreach (IProperty property in Options.EnclosingType.Properties) { - if (property.IsSynthetic) + foreach (IPropertySymbol property in Options.EnclosingType.GetMembers ().OfType<IPropertySymbol> ()) { + if (property.IsImplicitlyDeclared) continue; - if (property.CanGet) + if (property.GetMethod != null) yield return property; } } static string GetName (object m) { - var e = m as IEntity; - if (e != null) - return e.Name; - return ((IVariable)m).Name; + return ((ISymbol)m).Name; } protected override IEnumerable<string> GenerateCode (List<object> includedMembers) { - StringBuilder format = new StringBuilder (); + var format = new StringBuilder (); int i = 0; foreach (var member in includedMembers) { if (i > 0) @@ -132,14 +134,26 @@ namespace MonoDevelop.CodeGeneration format.Append (i++); format.Append ("}"); } - - var consoleType = typeof (Console).ToTypeReference ().Resolve (Options.Document.Compilation.TypeResolveContext); - var invocationExpression = new InvocationExpression (new MemberReferenceExpression (new TypeReferenceExpression (Options.CreateShortType (consoleType)), "WriteLine")); - invocationExpression.Arguments.Add (new PrimitiveExpression (format.ToString ())); - foreach (var member in includedMembers) { - invocationExpression.Arguments.Add (new IdentifierExpression (GetName (member))); - } - yield return new ExpressionStatement (invocationExpression).ToString (Options.FormattingOptions); + + var arguments = new List<ArgumentSyntax> (); + arguments.Add (SyntaxFactory.Argument (SyntaxFactory.LiteralExpression (SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal (format.ToString ())))); + var node = + SyntaxFactory.ExpressionStatement ( + SyntaxFactory.InvocationExpression ( + SyntaxFactory.MemberAccessExpression (SyntaxKind.SimpleMemberAccessExpression, + SyntaxFactory.MemberAccessExpression (SyntaxKind.SimpleMemberAccessExpression, + SyntaxFactory.IdentifierName ("System"), + SyntaxFactory.IdentifierName ("Console") + ), + SyntaxFactory.IdentifierName ("WriteLine") + ), + SyntaxFactory.ArgumentList ( + SyntaxFactory.SeparatedList<ArgumentSyntax> (arguments) + ) + ) + ); + + yield return Options.OutputNode (node).Result; } } } |