Skip to content

Commit b18327d

Browse files
maca88hazzik
authored andcommitted
generating files and updating projects with MSBuildWorkspace, removed unneeded partial keywords
1 parent 8f0dceb commit b18327d

File tree

2,503 files changed

+3228
-3108
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,503 files changed

+3228
-3108
lines changed

src/NHibernate.AsyncGenerator/DocumentWriter.cs

Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -380,20 +380,33 @@ private class TypeInfoMetadata
380380

381381
public List<RewrittenNode> RewrittenNodes { get; } = new List<RewrittenNode>();
382382

383+
public bool MissingPartialKeyword { get; set; }
384+
383385
public bool TaskUsed { get; set; }
384386

385387
public bool AsyncLockUsed { get; set; }
386388
}
387389

388390
private class RewriteTypeResult
389391
{
392+
public bool ReplaceOriginalNode { get; set; }
393+
394+
public TypeDeclarationSyntax OriginalNode { get; set; }
395+
390396
public TypeDeclarationSyntax Node { get; set; }
391397

392398
public bool TaskUsed { get; set; }
393399

394400
public bool AsyncLockUsed { get; set; }
395401
}
396402

403+
public class TransformDocumentResult
404+
{
405+
public CompilationUnitSyntax NewRootNode { get; set; }
406+
407+
public CompilationUnitSyntax OriginalRootNode { get; set; }
408+
}
409+
397410
private RewriteTypeResult RewriteType(TypeInfo rootTypeInfo, bool onlyMissingMembers = false)
398411
{
399412
var result = new RewriteTypeResult();
@@ -411,7 +424,8 @@ private RewriteTypeResult RewriteType(TypeInfo rootTypeInfo, bool onlyMissingMem
411424
var annotation = Guid.NewGuid().ToString();
412425
var metadata = new TypeInfoMetadata
413426
{
414-
NodeAnnotation = annotation
427+
NodeAnnotation = annotation,
428+
MissingPartialKeyword = typeInfo.TypeTransformation == TypeTransformation.Partial && !typeInfo.Node.IsPartial()
415429
};
416430

417431
var typeSpanStart = typeInfo.Node.SpanStart - startRootTypeSpan;
@@ -490,19 +504,21 @@ private RewriteTypeResult RewriteType(TypeInfo rootTypeInfo, bool onlyMissingMem
490504
typeInfoMetadatas.Add(typeInfo, metadata);
491505
}
492506

507+
result.OriginalNode = rootTypeNode.WithTriviaFrom(rootTypeInfo.Node);
493508

494509
foreach (var typeInfo in rootTypeInfo.GetDescendantTypeInfosAndSelf()
495510
.Where(o => o.TypeTransformation != TypeTransformation.None)
496511
.OrderByDescending(o => o.Node.SpanStart))
497512
{
498513
var metadata = typeInfoMetadatas[typeInfo];
499-
// add partial to the original file
500-
//var partialTypeDeclaration = typeDeclaration.AddPartial();
501-
//if (partialTypeDeclaration != typeDeclaration)
502-
//{
503-
// partialTypeDeclaration = partialTypeDeclaration.NormalizeWhitespace(" ");
504-
// rootChanged = true;
505-
514+
// add partial to the original node
515+
if (metadata.MissingPartialKeyword)
516+
{
517+
result.ReplaceOriginalNode = true;
518+
var typeNode = result.OriginalNode.GetAnnotatedNodes(metadata.NodeAnnotation).OfType<TypeDeclarationSyntax>().First();
519+
result.OriginalNode = result.OriginalNode.ReplaceNode(typeNode, typeNode
520+
.AddPartial(t => t.WithTrailingTrivia(SyntaxTrivia(SyntaxKind.WhitespaceTrivia, " "))));
521+
}
506522

507523
// if the root type has to be a new type then all nested types have to be new types
508524
if (!onlyMissingMembers && rootTypeInfo.TypeTransformation == TypeTransformation.NewType)
@@ -618,19 +634,21 @@ private RewriteTypeResult RewriteType(TypeInfo rootTypeInfo, bool onlyMissingMem
618634
return result;
619635
}
620636

621-
public void Write()
637+
public TransformDocumentResult Transform()
622638
{
623-
var rootNode = DocumentInfo.RootNode;
639+
var result = new TransformDocumentResult();
640+
var rootNode = DocumentInfo.RootNode.WithoutTrivia();
624641
var namespaceNodes = new List<MemberDeclarationSyntax>();
625642
var customTask = Configuration.Async.CustomTaskType;
626643
var tasksUsed = false;
627644
var taskConflict = false;
628645
var asyncLockUsed = false;
646+
var rewrittenNodes = new List<RewrittenNode>();
647+
629648
// TODO: handle global namespace
630649
foreach (var namespaceInfo in DocumentInfo.Values.OrderBy(o => o.Node.SpanStart))
631650
{
632651
var namespaceNode = namespaceInfo.Node;
633-
634652
taskConflict |= !DocumentInfo.ProjectInfo.IsNameUniqueInsideNamespace(namespaceInfo.Symbol, "Task");
635653

636654
var typeNodes = new List<MemberDeclarationSyntax>();
@@ -649,6 +667,22 @@ public void Write()
649667
tasksUsed |= rewriteResult.TaskUsed;
650668
asyncLockUsed |= rewriteResult.AsyncLockUsed;
651669
typeNodes.Add(rewriteResult.Node);
670+
671+
if (rewriteResult.ReplaceOriginalNode)
672+
{
673+
var rewritenNode = new RewrittenNode
674+
{
675+
Annotation = Guid.NewGuid().ToString(),
676+
Rewritten = rewriteResult.OriginalNode
677+
};
678+
var typeSpanStart = typeInfo.Node.SpanStart;
679+
var typeSpanLength = typeInfo.Node.Span.Length;
680+
var typeNode = rootNode.DescendantNodesAndSelf().OfType<TypeDeclarationSyntax>()
681+
.First(o => o.SpanStart == typeSpanStart && o.Span.Length == typeSpanLength);
682+
rootNode = rootNode.ReplaceNode(typeNode, typeNode.WithAdditionalAnnotations(new SyntaxAnnotation(rewritenNode.Annotation)));
683+
rewrittenNodes.Add(rewritenNode);
684+
}
685+
652686
if (typeInfo.TypeTransformation == TypeTransformation.NewType && typeInfo.HasMissingMembers)
653687
{
654688
rewriteResult = RewriteType(typeInfo, true);
@@ -667,9 +701,22 @@ public void Write()
667701
}
668702
if (!namespaceNodes.Any())
669703
{
670-
return;
704+
return null;
705+
}
706+
707+
rootNode = rootNode.WithTriviaFrom(DocumentInfo.RootNode);
708+
709+
var origRootNode = rootNode;
710+
foreach (var rewrittenNode in rewrittenNodes)
711+
{
712+
origRootNode = rootNode.ReplaceNode(rootNode.GetAnnotatedNodes(rewrittenNode.Annotation).First(), rewrittenNode.Rewritten);
713+
}
714+
if (rootNode != origRootNode)
715+
{
716+
result.OriginalRootNode = origRootNode;
671717
}
672718

719+
673720
var lockNamespace = Configuration.Async.Lock.Namespace;
674721
if (asyncLockUsed && rootNode.Usings.All(o => o.Name.ToString() != lockNamespace))
675722
{
@@ -723,15 +770,8 @@ public void Write()
723770
var rewriter = new TransactionScopeRewriter();
724771
rootNode = (CompilationUnitSyntax)rewriter.VisitCompilationUnit(rootNode);
725772

726-
var content = rootNode
727-
.NormalizeWhitespace(" ")
728-
.ToFullString();
729-
730-
if (!Directory.Exists(DestinationFolder))
731-
{
732-
Directory.CreateDirectory(DestinationFolder);
733-
}
734-
File.WriteAllText($"{DestinationFolder}\\{DocumentInfo.Name}", content);
773+
result.NewRootNode = rootNode.NormalizeWhitespace(" ");
774+
return result;
735775
}
736776
}
737777
}

src/NHibernate.AsyncGenerator/Extensions/SyntaxExtensions.Await.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,38 @@ public static TypeDeclarationSyntax AddGeneratedCodeAttribute(this TypeDeclarati
4646
.WithAttributes(List(new List<AttributeListSyntax> { attrList }));
4747
}
4848

49-
public static TypeDeclarationSyntax AddPartial(this TypeDeclarationSyntax typeDeclaration)
49+
public static bool IsPartial(this TypeDeclarationSyntax typeDeclaration)
50+
{
51+
var interfaceDeclaration = typeDeclaration as InterfaceDeclarationSyntax;
52+
if (interfaceDeclaration != null)
53+
{
54+
return typeDeclaration.Modifiers.Any(o => o.IsKind(SyntaxKind.PartialKeyword));
55+
}
56+
var classDeclaration = typeDeclaration as ClassDeclarationSyntax;
57+
if (classDeclaration != null)
58+
{
59+
return typeDeclaration.Modifiers.Any(o => o.IsKind(SyntaxKind.PartialKeyword));
60+
}
61+
return false;
62+
}
63+
64+
public static TypeDeclarationSyntax AddPartial(this TypeDeclarationSyntax typeDeclaration, Func<SyntaxToken, SyntaxToken> partialTokenFun = null)
5065
{
5166
var interfaceDeclaration = typeDeclaration as InterfaceDeclarationSyntax;
5267
if (interfaceDeclaration != null && !typeDeclaration.Modifiers.Any(o => o.IsKind(SyntaxKind.PartialKeyword)))
5368
{
69+
var token = Token(SyntaxKind.PartialKeyword);
70+
token = partialTokenFun?.Invoke(token) ?? token;
5471
return interfaceDeclaration
55-
.AddModifiers(Token(SyntaxKind.PartialKeyword));
72+
.AddModifiers(token);
5673
}
5774
var classDeclaration = typeDeclaration as ClassDeclarationSyntax;
5875
if (classDeclaration != null && !classDeclaration.Modifiers.Any(o => o.IsKind(SyntaxKind.PartialKeyword)))
5976
{
77+
var token = Token(SyntaxKind.PartialKeyword);
78+
token = partialTokenFun?.Invoke(token) ?? token;
6079
return classDeclaration
61-
.AddModifiers(Token(SyntaxKind.PartialKeyword));
80+
.AddModifiers(token);
6281
}
6382
return typeDeclaration;
6483
}

0 commit comments

Comments
 (0)