12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
+ using MongoDB . Analyzer . Core . Utilities ;
15
16
using static MongoDB . Analyzer . Core . HelperResources . MqlGeneratorSyntaxElements . Builders ;
16
17
17
18
namespace MongoDB . Analyzer . Core . Builders ;
18
19
19
20
internal sealed class BuildersMqlGeneratorTemplateBuilder
20
21
{
21
- internal record SyntaxElements (
22
- SyntaxNode Root ,
23
- ClassDeclarationSyntax ClassDeclarationSyntax ,
24
- MethodDeclarationSyntax TestMethodNode ,
25
- SyntaxNode BuilderDefinitionNode ,
26
- SyntaxNode CollectionTypeNode )
27
- {
28
- public SyntaxNode [ ] NodesToReplace { get ; } = new [ ] { BuilderDefinitionNode , CollectionTypeNode } ;
29
- }
30
-
31
22
private ClassDeclarationSyntax _mqlGeneratorDeclarationSyntaxNew ;
32
23
private int _nextTestMethodIndex ;
33
- private readonly SyntaxElements _syntaxElements ;
24
+ private readonly MqlGeneratorTestMethodTemplate _testMethodTemplate ;
34
25
35
- public BuildersMqlGeneratorTemplateBuilder ( SyntaxElements syntaxElements )
26
+ public BuildersMqlGeneratorTemplateBuilder ( MqlGeneratorTestMethodTemplate testMethodTemplate )
36
27
{
37
- _syntaxElements = syntaxElements ;
38
- _mqlGeneratorDeclarationSyntaxNew = _syntaxElements . ClassDeclarationSyntax ;
28
+ _testMethodTemplate = testMethodTemplate ;
29
+ _mqlGeneratorDeclarationSyntaxNew = _testMethodTemplate . ClassDeclarationSyntax ;
39
30
}
40
31
41
32
public void AddMqlGeneratorMethods ( MemberDeclarationSyntax [ ] methodDeclarations ) =>
42
33
_mqlGeneratorDeclarationSyntaxNew = _mqlGeneratorDeclarationSyntaxNew . AddMembers ( methodDeclarations ) ;
43
34
44
- public static SyntaxElements CreateSyntaxElements ( SyntaxTree mqlGeneratorSyntaxTree )
35
+ public static MqlGeneratorTestMethodTemplate CreateTestMethodTemplate ( SyntaxTree mqlGeneratorSyntaxTree )
45
36
{
46
37
var root = mqlGeneratorSyntaxTree . GetRoot ( ) ;
47
38
@@ -50,25 +41,25 @@ public static SyntaxElements CreateSyntaxElements(SyntaxTree mqlGeneratorSyntaxT
50
41
var builderDefinitionNode = mainTestMethodNode . GetSingleIdentifier ( FilterName ) . Parent . Parent ;
51
42
var collectionTypeNode = mainTestMethodNode . GetIdentifiers ( MqlGeneratorTemplateType ) . ElementAt ( 0 ) ;
52
43
53
- return new SyntaxElements ( root , classDeclarationSyntax , mainTestMethodNode , builderDefinitionNode , collectionTypeNode ) ;
44
+ return new MqlGeneratorTestMethodTemplate ( root , classDeclarationSyntax , mainTestMethodNode , builderDefinitionNode , collectionTypeNode , AnalysisType . Builders ) ;
54
45
}
55
46
56
47
public ( string newMethodName , MethodDeclarationSyntax newMethodDeclaration ) GenerateMqlGeneratorMethod ( string typeArgumentName , SyntaxNode buildersExpression )
57
48
{
58
- var newMethodDeclaration = _syntaxElements . TestMethodNode . ReplaceNodes ( _syntaxElements . NodesToReplace , ( n , _ ) =>
49
+ var newMethodDeclaration = _testMethodTemplate . TestMethodNode . ReplaceNodes ( _testMethodTemplate . NodesToReplace , ( n , _ ) =>
59
50
n switch
60
51
{
61
- _ when n == _syntaxElements . BuilderDefinitionNode => buildersExpression ,
62
- _ when n == _syntaxElements . CollectionTypeNode => SyntaxFactory . IdentifierName ( typeArgumentName ) ,
52
+ _ when n == _testMethodTemplate . ExpressionNode => buildersExpression ,
53
+ _ when n == _testMethodTemplate . TypeNode => SyntaxFactory . IdentifierName ( typeArgumentName ) ,
63
54
_ => throw new Exception ( $ "Unrecognized node { n } ")
64
55
} ) ;
65
56
66
- var newMqlGeneratorMethodName = $ "{ _syntaxElements . TestMethodNode . Identifier . Value } _{ _nextTestMethodIndex ++ } ";
57
+ var newMqlGeneratorMethodName = $ "{ _testMethodTemplate . TestMethodNode . Identifier . Value } _{ _nextTestMethodIndex ++ } ";
67
58
newMethodDeclaration = newMethodDeclaration . WithIdentifier ( SyntaxFactory . Identifier ( newMqlGeneratorMethodName ) ) ;
68
59
69
60
return ( newMqlGeneratorMethodName , newMethodDeclaration ) ;
70
61
}
71
62
72
63
public SyntaxTree GenerateSyntaxTree ( ) =>
73
- _syntaxElements . Root . ReplaceNode ( _syntaxElements . ClassDeclarationSyntax , _mqlGeneratorDeclarationSyntaxNew ) . SyntaxTree ;
64
+ _testMethodTemplate . Root . ReplaceNode ( _testMethodTemplate . ClassDeclarationSyntax , _mqlGeneratorDeclarationSyntaxNew ) . SyntaxTree ;
74
65
}
0 commit comments