示例#1
0
        private static IReadOnlyList <CodeAction> CodeActions(CodeRefactoringProvider refactoring, string testCode, TextSpan span, IEnumerable <MetadataReference> metadataReferences)
        {
            var sln = CodeFactory.CreateSolutionWithOneProject(
                testCode,
                CodeFactory.DefaultCompilationOptions(Array.Empty <DiagnosticAnalyzer>()),
                metadataReferences);
            var document = sln.Projects.Single().Documents.Single();
            var actions  = new List <CodeAction>();
            var context  = new CodeRefactoringContext(document, span, a => actions.Add(a), CancellationToken.None);

            refactoring.ComputeRefactoringsAsync(context).GetAwaiter().GetResult();
            return(actions);
        }
示例#2
0
        /// <summary>
        /// Create a binary reference from strings.
        /// This is useful when testing for example deriving from a base class not in source.
        /// </summary>
        /// <param name="code">The code to create a dll project from.</param>
        /// <returns>A <see cref="MetadataReference"/>.</returns>
        public static MetadataReference CreateBinary(params string[] code)
        {
            var sln = CodeFactory.CreateSolutionWithOneProject(
                code,
                new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, allowUnsafe: true),
                AnalyzerAssert.MetadataReferences);

            AnalyzerAssert.NoCompilerErrors(sln);

            using (var ms = new MemoryStream())
            {
                _           = sln.Projects.Single().GetCompilationAsync().Result.Emit(ms);
                ms.Position = 0;
                return(MetadataReference.CreateFromStream(ms));
            }
        }
示例#3
0
        /// <summary>
        /// Create a binary reference from strings.
        /// This is useful when testing for example deriving from a base class not in source.
        /// </summary>
        /// <param name="code">The code to create a dll project from.</param>
        /// <returns>A <see cref="MetadataReference"/>.</returns>
        public static MetadataReference CreateBinary(params string[] code)
        {
            var sln = CodeFactory.CreateSolutionWithOneProject(
                code,
                CodeFactory.DllCompilationOptions,
#pragma warning disable CS0618 // Suppress until removed. Will be replaced with Metadatareferences.FromAttributes()
                RoslynAssert.MetadataReferences);

#pragma warning restore CS0618 // Suppress until removed. Will be replaced with Metadatareferences.FromAttributes()
            RoslynAssert.NoCompilerErrors(sln);

            using (var ms = new MemoryStream())
            {
                _           = sln.Projects.Single().GetCompilationAsync().Result.Emit(ms);
                ms.Position = 0;
                return(MetadataReference.CreateFromStream(ms));
            }
        }
示例#4
0
        /// <summary>
        /// Apply the single refactoring registered at <paramref name="position"/>.
        /// </summary>
        /// <param name="refactoring">The <see cref="CodeRefactoringProvider"/>.</param>
        /// <param name="testCode">The code to refactor.</param>
        /// <param name="position">The position to pass in to the RefactoringContext.</param>
        /// <param name="metadataReferences">The <see cref="MetadataReference"/> to use when compiling.</param>
        /// <returns>The refactored document.</returns>
        public static Document Apply(CodeRefactoringProvider refactoring, string testCode, int position, IEnumerable <MetadataReference> metadataReferences = null)
        {
            if (refactoring == null)
            {
                throw new ArgumentNullException(nameof(refactoring));
            }

            if (testCode == null)
            {
                throw new ArgumentNullException(nameof(testCode));
            }

            var sln = CodeFactory.CreateSolutionWithOneProject(
                testCode,
                CodeFactory.DefaultCompilationOptions(Array.Empty <DiagnosticAnalyzer>()),
                metadataReferences);
            var document = sln.Projects.Single().Documents.Single();
            var action   = SingleAction(document, refactoring, position);
            var edit     = action.GetOperationsAsync(CancellationToken.None).GetAwaiter().GetResult().OfType <ApplyChangesOperation>().First();

            return(edit.ChangedSolution.Projects.Single().Documents.Single());
        }
示例#5
0
        private static IReadOnlyList <CodeAction> CodeActions(CodeRefactoringProvider refactoring, string testCode, int position, IEnumerable <MetadataReference> metadataReferences)
        {
            var sln = CodeFactory.CreateSolutionWithOneProject(
                testCode,
                CodeFactory.DefaultCompilationOptions(Array.Empty <DiagnosticAnalyzer>()),
                metadataReferences);
            var document = sln.Projects.Single().Documents.Single();
            var context  = new RefactoringContext(document, refactoring, position);
            var token    = context.SyntaxRoot.FindToken(position);

            refactoring.ComputeRefactoringsAsync(context.CreateRefactoringContext(token.Span)).GetAwaiter().GetResult();

            var node = token.Parent;

            while (node != null &&
                   node.SpanStart == position)
            {
                refactoring.ComputeRefactoringsAsync(context.CreateRefactoringContext(node.Span)).GetAwaiter().GetResult();
                node = node.Parent;
            }

            return(context.Actions);
        }