private static Task<Document> FixGuidExportMetadata(Document document, CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, string guid) { var newSyntax = classDeclaration; newSyntax = newSyntax.ReplaceNode( newSyntax.GetAttributes("ExportMetadata").First(x => x.ArgumentList.Arguments[0].ToString() == "\"Guid\""), SyntaxFactory.Attribute(SyntaxFactory.ParseName("ExportMetadata"), SyntaxFactory.ParseAttributeArgumentList($"(\"Guid\", \"{guid}\")"))); var newRoot = root.ReplaceNode(classDeclaration, newSyntax); var newDocument = document.WithSyntaxRoot(newRoot); return Task.FromResult(newDocument); }
private static Task<Document> AddExport(Document document, CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, string[] interfaceNames) { var newSyntax = classDeclaration; foreach (var interfaceName in interfaceNames) { var attributeList = SyntaxFactory.AttributeList( SyntaxFactory.SingletonSeparatedList( SyntaxFactory.Attribute(SyntaxFactory.ParseName("Export"), SyntaxFactory.ParseAttributeArgumentList($"(typeof({interfaceName}))")))); newSyntax = newSyntax.AddAttributeLists(attributeList); } var newRoot = root.ReplaceNode(classDeclaration, newSyntax); var newDocument = document.WithSyntaxRoot(newRoot); return Task.FromResult(newDocument); }
private static Task<Document> AddInterface(Document document, CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, string[] interfaceNames) { var newSyntax = classDeclaration; foreach (var interfaceName in interfaceNames) { var baseType = SyntaxFactory.SimpleBaseType(SyntaxFactory.IdentifierName(interfaceName)); newSyntax = newSyntax .AddBaseListTypes(baseType); newSyntax = newSyntax.ReplaceToken(newSyntax.Identifier, newSyntax.Identifier.WithTrailingTrivia(SyntaxFactory.Whitespace(" "))); } var newRoot = root.ReplaceNode(classDeclaration, newSyntax); var newDocument = document.WithSyntaxRoot(newRoot); return Task.FromResult(newDocument); }
private static Task<Document> AddExportMetadata(Document document, CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, string[] missingMetadata) { var newSyntax = classDeclaration; //値は空の状態で、必要なExportMetadataを全部追加 foreach (var metadata in missingMetadata) { var attributeList = SyntaxFactory.AttributeList( SyntaxFactory.SingletonSeparatedList( SyntaxFactory.Attribute(SyntaxFactory.ParseName("ExportMetadata"), SyntaxFactory.ParseAttributeArgumentList($"(\"{metadata}\", \"\")")))); newSyntax = newSyntax.AddAttributeLists(attributeList); } var newRoot = root.ReplaceNode(classDeclaration, newSyntax); var newDocument = document.WithSyntaxRoot(newRoot); return Task.FromResult(newDocument); }
private static CompilationUnitSyntax NewCompilationFactory(CompilationUnitSyntax OldCompilation, ClassDeclarationSyntax OldClass, MethodDeclarationSyntax OldMethod) { var newNameSpace = OldCompilation; var className = $"NewClass{OldMethod.Identifier.Text}"; var OldMemberNameSpace = (from member in OldCompilation.Members where member == OldClass select member).FirstOrDefault(); newNameSpace = OldCompilation.ReplaceNode(OldMemberNameSpace, NewClassFactory(className, OldClass, OldMethod)); var newParameterClass = NewClassParameterFactory(className, NewPropertyClassFactory(OldMethod)); return newNameSpace.WithMembers(newNameSpace.Members.Add(newParameterClass)) .WithAdditionalAnnotations(Formatter.Annotation); }
private static CompilationUnitSyntax ReplaceStaticCallWithExtionMethodCall(CompilationUnitSyntax root, InvocationExpressionSyntax staticInvocationExpression, ExpressionSyntax sourceExpression, SimpleNameSyntax methodName, ArgumentListSyntax argumentList) { var extensionInvocationExpression = CallExtensionMethodAsExtensionAnalyzer.CreateInvocationExpression(sourceExpression, methodName, argumentList) .WithLeadingTrivia(staticInvocationExpression.GetLeadingTrivia()); return root.ReplaceNode(staticInvocationExpression, extensionInvocationExpression); }
private static CompilationUnitSyntax AddParameterClassToCompilationUnitAndUpdateClassToUseNamespace(CompilationUnitSyntax oldCompilation, ClassDeclarationSyntax oldClass, MethodDeclarationSyntax oldMethod) { var className = $"NewClass{oldMethod.Identifier.Text}"; var newParameterClass = CreateParameterClass(className, oldMethod); var newNamespace = oldCompilation.ReplaceNode(oldClass, UpdateClassToUseNewParameterClass(className, oldClass, oldMethod)) .AddMembers(newParameterClass); return newNamespace; }
private static Task<Document> AddGuidExportMetadata(Document document, CompilationUnitSyntax root, ClassDeclarationSyntax classDeclaration, string guid) { var newSyntax = classDeclaration; var attributeList = SyntaxFactory.AttributeList( SyntaxFactory.SingletonSeparatedList( SyntaxFactory.Attribute(SyntaxFactory.ParseName("ExportMetadata"), SyntaxFactory.ParseAttributeArgumentList($"(\"Guid\", \"{guid}\")")))); newSyntax = newSyntax.AddAttributeLists(attributeList); var newRoot = root.ReplaceNode(classDeclaration, newSyntax); var newDocument = document.WithSyntaxRoot(newRoot); return Task.FromResult(newDocument); }
private static CompilationUnitSyntax RewriteNotNestedInstance(CompilationUnitSyntax root, MethodDeclarationSyntax originalCallingMethod, InvocationExpressionSyntax apmSyntax, BlockSyntax lambdaBlock, InvocationExpressionSyntax endStatement, string methodNameBase, Workspace workspace) { var taskName = FreeTaskName(originalCallingMethod); var awaitStatement = NewAwaitExpression(taskName); var rewrittenLambdaBlock = lambdaBlock.ReplaceNode(endStatement, awaitStatement); var newCallingMethod = RewriteOriginatingMethod(beginXxxCall, rewrittenLambdaBlock, methodNameBase, taskName); return root .ReplaceNode(originalCallingMethod, newCallingMethod) .WithUsingSystemThreadingTasks() .Format(workspace); }