コード例 #1
0
		public override bool TryFix (ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset)
		{
			foreach (var invocationExpression in syntaxTree.FindToken (location).Parent.AncestorsAndSelf ().OfType<InvocationExpressionSyntax> ()) {
				if (invocationExpression != null) {
					if (!invocationExpression.ArgumentList.OpenParenToken.IsMissing && invocationExpression.ArgumentList.CloseParenToken.IsMissing) {

						var insertionOffset = invocationExpression.Span.End - 1;

						newOffset = insertionOffset;

						var text = ")";
						newOffset++;
						var expressionStatement = invocationExpression.Parent as ExpressionStatementSyntax;
						if (expressionStatement != null) {
							if (expressionStatement.SemicolonToken.IsMissing)
								text = ");";
							newOffset++;
						}
						document.Editor.InsertText (insertionOffset, text);
						return true;
					}

				}
			}
			return false;
		}
コード例 #2
0
 public override bool TryFix(ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset)
 {
     foreach (var breakStatementSyntax in syntaxTree.FindToken(location).Parent.AncestorsAndSelf().OfType <BreakStatementSyntax> ())
     {
         if (breakStatementSyntax.SemicolonToken.IsMissing)
         {
             var insertionOffset = breakStatementSyntax.Span.End - 1;
             newOffset = insertionOffset;
             newOffset++;
             document.Editor.InsertText(insertionOffset, ";");
             return(true);
         }
     }
     foreach (var breakStatementSyntax in syntaxTree.FindToken(location).Parent.AncestorsAndSelf().OfType <ContinueStatementSyntax> ())
     {
         if (breakStatementSyntax.SemicolonToken.IsMissing)
         {
             var insertionOffset = breakStatementSyntax.Span.End - 1;
             newOffset = insertionOffset;
             newOffset++;
             document.Editor.InsertText(insertionOffset, ";");
             return(true);
         }
     }
     return(false);
 }
コード例 #3
0
        public override bool TryFix(ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset)
        {
            foreach (var invocationExpression in syntaxTree.FindToken(location).Parent.AncestorsAndSelf().OfType <InvocationExpressionSyntax> ())
            {
                if (invocationExpression != null)
                {
                    if (!invocationExpression.ArgumentList.OpenParenToken.IsMissing && invocationExpression.ArgumentList.CloseParenToken.IsMissing)
                    {
                        var insertionOffset = invocationExpression.Span.End - 1;

                        newOffset = insertionOffset;

                        var text = ")";
                        newOffset++;
                        var expressionStatement = invocationExpression.Parent as ExpressionStatementSyntax;
                        if (expressionStatement != null)
                        {
                            if (expressionStatement.SemicolonToken.IsMissing)
                            {
                                text = ");";
                            }
                            newOffset++;
                        }
                        document.Editor.InsertText(insertionOffset, text);
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #4
0
        public override void CompleteStatement(MonoDevelop.Ide.Gui.Document doc)
        {
            var fixer = new ConstructFixer(doc.GetFormattingOptions(), doc.Editor.CreateNRefactoryTextEditorOptions());
            int newOffset;

            if (fixer.TryFix(doc.Editor.Document, doc.Editor.Caret.Offset, out newOffset))
            {
                doc.Editor.Caret.Offset = newOffset;
            }
        }
コード例 #5
0
		public override bool TryFix (ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset)
		{
			foreach (var breakStatementSyntax in syntaxTree.FindToken (location).Parent.AncestorsAndSelf ().OfType<BreakStatementSyntax> ()) {
				if (breakStatementSyntax.SemicolonToken.IsMissing) {
					var insertionOffset = breakStatementSyntax.Span.End - 1;
					newOffset = insertionOffset;
					newOffset++;
					document.Editor.InsertText (insertionOffset, ";");
					return true;
				}
			}
			foreach (var breakStatementSyntax in syntaxTree.FindToken (location).Parent.AncestorsAndSelf ().OfType<ContinueStatementSyntax> ()) {
				if (breakStatementSyntax.SemicolonToken.IsMissing) {
					var insertionOffset = breakStatementSyntax.Span.End - 1;
					newOffset = insertionOffset;
					newOffset++;
					document.Editor.InsertText (insertionOffset, ";");
					return true;
				}
			}
			return false;
		}
コード例 #6
0
		public abstract bool TryFix (ConstructFixer fixer, SyntaxNode syntaxTree, MonoDevelop.Ide.Gui.Document document, int location, ref int newOffset);
コード例 #7
0
 public abstract bool TryFix(ConstructFixer fixer, SyntaxNode syntaxTree, MonoDevelop.Ide.Gui.Document document, int location, ref int newOffset);
コード例 #8
0
		////		public override string CreateFieldEncapsulation (IUnresolvedTypeDefinition implementingType, IField field, string propertyName, Accessibility modifiers, bool readOnly)
		////		{
		////			SetIndentTo (implementingType);
		////			StringBuilder result = new StringBuilder ();
		////			AppendIndent (result);
		////			
		//////			if (modifiers != MonoDevelop.Projects.Dom.Modifiers.None) {
		//////				switch (modifiers) {
		//////				}
		//////				result.Append (ambience.GetString (modifiers));
		//////				result.Append (" ");
		//////			}
		////			var options = new CodeGenerationOptions () {
		////				ImplementingType = field.DeclaringTypeDefinition,
		////				Part = implementingType
		////			};
		////			result.Append ("public ");
		////			AppendReturnType (result, options, field.ReturnType);
		////			result.Append (" ");
		////			result.Append (propertyName);
		////			AppendBraceStart (result, Policy.PropertyBraceStyle);
		////			AppendIndent (result);
		////			
		////			result.Append ("get");
		////			AppendBraceStart (result, Policy.PropertyGetBraceStyle);
		////			AppendIndent (result);
		////			result.Append ("return this.");
		////			result.Append (CSharpAmbience.FilterName (field.Name));
		////			result.Append (";");
		////			AppendLine (result);
		////			AppendBraceEnd (result, Policy.PropertyGetBraceStyle);
		////			AppendLine (result);
		////
		////			if (!readOnly) {
		////				AppendIndent (result);
		////				result.Append ("set");
		////				AppendBraceStart (result, Policy.PropertyGetBraceStyle);
		////				AppendIndent (result);
		////				result.Append (CSharpAmbience.FilterName (field.Name));
		////				result.Append (" = value;");
		////				AppendLine (result);
		////				AppendBraceEnd (result, Policy.PropertyGetBraceStyle);
		////				AppendLine (result);
		////			}
		////			
		////			AppendBraceEnd (result, Policy.PropertyBraceStyle);
		////			return result.ToString ();
		////		}
		//		
		//		int CountBlankLines (IReadonlyTextDocument doc, int startLine)
		//		{
		//			int result = 0;
		//			IDocumentLine line;
		//			while ((line = doc.GetLine (startLine + result)) != null && doc.GetLineIndent (line).Length == line.Length) {
		//				result++;
		//			}
		//		
		//			return result;
		//		}
		//		
		//		static bool InsertUsingAfter (AstNode node)
		//		{
		//			return node is NewLineNode && IsCommentOrUsing (node.GetNextSibling (s => !(s is NewLineNode))) ||
		//				IsCommentOrUsing (node) || (node is PreProcessorDirective);
		//		}
		//
		//		static bool IsCommentOrUsing (AstNode node)
		//		{
		//			return node is ICSharpCode.NRefactory.CSharp.Comment ||
		//				node is UsingDeclaration ||
		//				node is UsingAliasDeclaration;
		//		}
		//		

		//		
		//		static string OutputNode (TextEditor editor, DocumentContext context, AstNode node)
		//		{
		//			using (var stringWriter = new System.IO.StringWriter ()) {
		////				formatter.Indentation = indentLevel;
		//				var formatter = new TextWriterTokenWriter (stringWriter);
		//				stringWriter.NewLine = editor.EolMarker;
		//
		//				var visitor = new CSharpOutputVisitor (formatter, null /* TODO: BROKEN DUE ROSLYN PORT (note: that code should be unused) */ );
		//				node.AcceptVisitor (visitor);
		//				return stringWriter.ToString ();
		//			}
		//		}
		//		
		//		
		//		public AstType CreateShortType (ICompilation compilation, CSharpUnresolvedFile parsedFile, TextLocation loc, IType fullType)
		//		{
		//			var csResolver = parsedFile.GetResolver (compilation, loc);
		//			var builder = new ICSharpCode.NRefactory.CSharp.Refactoring.TypeSystemAstBuilder (csResolver);
		//			return builder.ConvertType (fullType);			
		//		}
		//

		public override async void CompleteStatement (MonoDevelop.Ide.Gui.Document doc)
		{
			var fixer = new ConstructFixer (doc.GetFormattingOptions ());
			int newOffset = await fixer.TryFix (doc, doc.Editor.CaretOffset, default(CancellationToken));
			if (newOffset != -1) {
				doc.Editor.CaretOffset = newOffset;
			}
		}