8
8
//.title~
9
9
10
10
import 'package:analyzer/dart/analysis/analysis_context_collection.dart' ;
11
+ import 'package:df_generate_dart_models_core/df_generate_dart_models_core.dart' ;
12
+
11
13
import 'package:path/path.dart' as p;
12
14
import 'package:df_gen_core/df_gen_core.dart' ;
15
+ import 'package:df_screen_core/df_screen_core.dart' ;
16
+
17
+ import '../dart_from_record_on_dart_object_x.dart' ;
13
18
14
19
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
15
20
16
21
Future <List <_ClassInsight >> extractClassInsightsFromDartFile (
17
22
AnalysisContextCollection analysisContextCollection,
18
23
String filePath,
19
24
) async {
25
+ late ModelGenerateScreenBindings temp;
20
26
final analyzer = DartAnnotatedClassAnalyzer (
21
27
filePath: filePath,
22
28
analysisContextCollection: analysisContextCollection,
23
29
);
24
30
25
31
final insights = < _ClassInsight > [];
26
32
await analyzer.analyze (
27
- inclClassAnnotations: {'GenerateScreenBindings' },
33
+ inclClassAnnotations: {ModelGenerateScreenBindings .CLASS_NAME },
34
+ onClassAnnotationField: (p) async => temp = _updateFromClassAnnotationField (temp, p),
35
+ onPreAnalysis: (_, className) => temp = const ModelGenerateScreenBindings (),
28
36
onPostAnalysis: (params) {
29
37
final fullPathName = params.fullFilePath;
30
38
final fileName = p.basename (fullPathName);
31
39
final dirPath = p.dirname (fullPathName);
32
40
final insight = _ClassInsight (
33
41
className: params.className,
34
- annotation: null ,
42
+ annotation: temp ,
35
43
dirPath: dirPath,
36
44
fileName: fileName,
37
45
);
@@ -43,4 +51,110 @@ Future<List<_ClassInsight>> extractClassInsightsFromDartFile(
43
51
44
52
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
45
53
46
- typedef _ClassInsight = ClassInsight <Null >;
54
+ ModelGenerateScreenBindings _updateFromClassAnnotationField (
55
+ ModelGenerateScreenBindings annotation,
56
+ OnClassAnnotationFieldParams params,
57
+ ) {
58
+ switch (params.fieldName) {
59
+ case ModelGenerateScreenBindingsFieldNames .args:
60
+ return annotation.copyWith (
61
+ ModelGenerateScreenBindings (
62
+ args: params.fieldValue.toMapValue ()? .map (
63
+ (k, v) => MapEntry (k? .toStringValue (), v? .toStringValue ()),
64
+ ),
65
+ ),
66
+ );
67
+ case ModelGenerateScreenBindingsFieldNames .isAccessibleOnlyIfLoggedInAndVerified:
68
+ return annotation.copyWith (
69
+ ModelGenerateScreenBindings (
70
+ isAccessibleOnlyIfLoggedInAndVerified: params.fieldValue.toBoolValue (),
71
+ ),
72
+ );
73
+ case ModelGenerateScreenBindingsFieldNames .isAccessibleOnlyIfLoggedIn:
74
+ return annotation.copyWith (
75
+ ModelGenerateScreenBindings (
76
+ isAccessibleOnlyIfLoggedIn: params.fieldValue.toBoolValue (),
77
+ ),
78
+ );
79
+ case ModelGenerateScreenBindingsFieldNames .isAccessibleOnlyIfLoggedOut:
80
+ return annotation.copyWith (
81
+ ModelGenerateScreenBindings (
82
+ isAccessibleOnlyIfLoggedOut: params.fieldValue.toBoolValue (),
83
+ ),
84
+ );
85
+ case ModelGenerateScreenBindingsFieldNames .isRedirectable:
86
+ return annotation.copyWith (
87
+ ModelGenerateScreenBindings (
88
+ isRedirectable: params.fieldValue.toBoolValue (),
89
+ ),
90
+ );
91
+ case ModelGenerateScreenBindingsFieldNames .path:
92
+ return annotation.copyWith (
93
+ ModelGenerateScreenBindings (
94
+ path: params.fieldValue.toStringValue (),
95
+ ),
96
+ );
97
+ case ModelGenerateScreenBindingsFieldNames .queryParameters:
98
+ return annotation.copyWith (
99
+ ModelGenerateScreenBindings (
100
+ queryParameters: {
101
+ ...? annotation.queryParameters,
102
+ ...? params.fieldValue.toSetValue ()? .map ((e) {
103
+ final field = FieldModel (
104
+ fieldPath: e.fieldPathFromRecord ()! ,
105
+ fieldType: e.fieldTypeFromRecord ()! ,
106
+ nullable: e.nullableFromRecord ()! ,
107
+ );
108
+ return field.toRecord;
109
+ }),
110
+ },
111
+ ),
112
+ );
113
+ case ModelGenerateScreenBindingsFieldNames .internalParameters:
114
+ return annotation.copyWith (
115
+ ModelGenerateScreenBindings (
116
+ internalParameters: {
117
+ ...? annotation.internalParameters,
118
+ ...? params.fieldValue.toSetValue ()? .map ((e) {
119
+ final field = FieldModel (
120
+ fieldPath: e.fieldPathFromRecord ()! ,
121
+ fieldType: e.fieldTypeFromRecord ()! ,
122
+ nullable: e.nullableFromRecord ()! ,
123
+ );
124
+ return field.toRecord;
125
+ }),
126
+ },
127
+ ),
128
+ );
129
+ case ModelGenerateScreenBindingsFieldNames .title:
130
+ return annotation.copyWith (
131
+ ModelGenerateScreenBindings (
132
+ title: params.fieldValue.toStringValue (),
133
+ ),
134
+ );
135
+ case ModelGenerateScreenBindingsFieldNames .className:
136
+ return annotation.copyWith (
137
+ ModelGenerateScreenBindings (
138
+ className: params.fieldValue.toStringValue (),
139
+ ),
140
+ );
141
+ case ModelGenerateScreenBindingsFieldNames .screenKey:
142
+ return annotation.copyWith (
143
+ ModelGenerateScreenBindings (
144
+ screenKey: params.fieldValue.toStringValue (),
145
+ ),
146
+ );
147
+ case ModelGenerateScreenBindingsFieldNames .keyStringCase:
148
+ return annotation.copyWith (
149
+ ModelGenerateScreenBindings (
150
+ keyStringCase: params.fieldValue.toStringValue (),
151
+ ),
152
+ );
153
+ default :
154
+ }
155
+ return ModelGenerateScreenBindings .of (annotation);
156
+ }
157
+
158
+ // ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
159
+
160
+ typedef _ClassInsight = ClassInsight <ModelGenerateScreenBindings >;
0 commit comments