1
+ // script
2
+ use coref::java::*
3
+
4
+ pub fn default_db() -> JavaDB {
5
+ return JavaDB::load("coref_java_src.db")
6
+ }
7
+
8
+ //过滤用关键字,可修改
9
+ pub fn KEYWORDS(k: string) -> bool {
10
+ [{"PLEASE DO NOT MODIFY THIS FILE MANUALLY"},
11
+ {"This method was generated by MyBatis Generator"},
12
+ {"Generated by the protocol buffer compiler."},
13
+ {"@mbg.generated"},
14
+ {"Autogenerated by Thrift Compiler"},
15
+ {"@author smartf-generate"},
16
+ {"Ibatis implementation for"},
17
+ {"This class was generated by MyBatis Generator"},
18
+ {"This file was automatically generated"},
19
+ {"Generated By:JavaCC: Do not edit this line."},
20
+ {"This class was generated by Ali-Generator"},
21
+ {"This field was generated by MyBatis Generator."}
22
+ ]
23
+ }
24
+
25
+ //过滤用文件夹名,可修改
26
+ pub fn FOLDERNAMES(n: string) -> bool {
27
+ [
28
+ {"/daointerface/"},
29
+ {"/dataobject/"},
30
+ {"/ibatis/"},
31
+ {"/mybatis/domain/"},
32
+ {"/mybatis/mapper/"},
33
+ {"/mybatis/model/"},
34
+ {"/dal/"},
35
+ {"/dao/"},
36
+ {"/entity/"}
37
+ ]
38
+ }
39
+
40
+ //用关键字进行过滤
41
+ pub fn filterByKeyWords(f: string) -> bool {
42
+ let (db = default_db()) {
43
+ for (n in string::__undetermined_all__(),
44
+ k in string::__undetermined_all__()) {
45
+ for (i in ElementParent(db),
46
+ c in JavadocComment(db)) {
47
+ if (n = c.getText()) {
48
+ if (KEYWORDS(k)) {
49
+ if (n.contains(k)) {
50
+ if (i = c.getDocumentableElement()) {
51
+ if (f = c.getLocation().getFile().getRelativePath()) {
52
+ return true
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+
63
+ //用文件夹名进行过滤
64
+ pub fn filterByFolderNames(d: File) -> bool {
65
+ for (m in string::__undetermined_all__(),
66
+ n in string::__undetermined_all__()) {
67
+ if (n = d.getRelativePath()) {
68
+ if (FOLDERNAMES(m)) {
69
+ if (n.contains(m)) {
70
+ return true
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ //用注解 @Generated("org.mybatis.generator.api.MyBatisGenerator") 进行过滤
78
+ pub fn filterByAnnotation(f: string) -> bool {
79
+ let (db = default_db()) {
80
+ for (a in Annotation(db)) {
81
+ if (f = a.getLocation().getFile().getRelativePath()) {
82
+ if (a.getName() = "javax.annotation.Generated") {
83
+ for (auto_tmp1 in a.getAnnotationArgument()) {
84
+ if (auto_tmp1.getAnnotationArgumentValue() = "\"org.mybatis.generator.api.MyBatisGenerator\"") {
85
+ return true
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ //过滤得到的自动生成文件名
95
+ pub fn getAutoGeneratedFiles(n: string) -> bool {
96
+ let (db = default_db()) {
97
+ for (f in File(db)) {
98
+ if (n = f.getRelativePath()) {
99
+ if (filterByFolderNames(f)) {
100
+ if (filterByAnnotation(n)) {
101
+ return true
102
+ }
103
+ if (filterByKeyWords(n)) {
104
+ return true
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+
112
+ schema PublicVisitedElement extends Callable {
113
+
114
+ }
115
+
116
+ //定义分母
117
+ impl PublicVisitedElement {
118
+
119
+ @data_constraint
120
+ @inline
121
+ pub fn __all__(db: JavaDB) -> *PublicVisitedElement {
122
+ for (tmp in Callable(db)) {
123
+ yield PublicVisitedElement {
124
+ id: tmp.id
125
+ }
126
+ }
127
+ }
128
+
129
+ //返回在上方的单行注释
130
+ pub fn getPossibleAboveComment(self) -> Comment {
131
+ for (c in Comment(__all_data__)) {
132
+ if (self.key_eq(c.getParent())) {
133
+ for (auto_tmp1 in self.getModifier()) {
134
+ if (auto_tmp1.getLocation().getStartLineNumber() > c.getLocation().getStartLineNumber()) {
135
+ return c
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ pub fn getDefinitionBody(self) -> string {
143
+ for (definitionBody in string::__undetermined_all__()) {
144
+ for (m in Method(__all_data__)) {
145
+ if (self.key_eq(m)) {
146
+ if (definitionBody = m.getDefinitionBody()) {
147
+ return definitionBody
148
+ }
149
+ }
150
+ }
151
+ for (c in Constructor(__all_data__)) {
152
+ if (self.key_eq(c)) {
153
+ if (definitionBody = c.getDefinitionBody()) {
154
+ return definitionBody
155
+ }
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+
162
+ //找到注释与JavaDoc注释连在一起的情况,用于排除
163
+ pub fn commentConnectDocComment(c: Comment) -> bool {
164
+ let (db = default_db()) {
165
+ for (i in int::__undetermined_all__(),
166
+ m in int::__undetermined_all__(),
167
+ l in int::__undetermined_all__()) {
168
+ for (j in JavadocComment(db)) {
169
+ if (getJavadocCommentLocInfo(j, i, m)) {
170
+ if (l = m - 1) {
171
+ if (getCommentLocInfo(c, i, l)) {
172
+ return true
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+
181
+ //找到注释所在文件和行号信息
182
+ pub fn getCommentLocInfo(e: Comment, i: int, j: int) -> bool {
183
+ let (db = default_db()) {
184
+ if (i = e.getLocation().getFile().element_hash_id) {
185
+ if (j = e.getLocation().getStartLineNumber()) {
186
+ return true
187
+ }
188
+ }
189
+ }
190
+ }
191
+
192
+ //找到公共访问元素的所属文件和行号信息
193
+ pub fn getPublicElementLocInfo(e: PublicVisitedElement, i: int, j: int) -> bool {
194
+ let (db = default_db()) {
195
+ if (i = e.getLocation().getFile().element_hash_id) {
196
+ if (j = e.getLocation().getStartLineNumber()) {
197
+ return true
198
+ }
199
+ }
200
+ }
201
+ }
202
+
203
+ //找到Javadoc注释所在文件和行号信息
204
+ pub fn getJavadocCommentLocInfo(e: JavadocComment, i: int, j: int) -> bool {
205
+ let (db = default_db()) {
206
+ for (n in int::__undetermined_all__()) {
207
+ if (i = e.getLocation().getFile().element_hash_id) {
208
+ if (n = e.getLocation().getStartLineNumber()) {
209
+ if (j = n - 1) {
210
+ return true
211
+ }
212
+ }
213
+ if (n = e.getLocation().getEndLineNumber()) {
214
+ if (j = n + 1) {
215
+ return true
216
+ }
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+
223
+ //找到JavaDoc注释的owner为空的情况
224
+ pub fn connectDoc(j: JavadocComment, e: PublicVisitedElement) -> bool {
225
+ let (db = default_db()) {
226
+ for (i in int::__undetermined_all__(),
227
+ m in int::__undetermined_all__()) {
228
+ if (getJavadocCommentLocInfo(j, i, m)) {
229
+ if (getPublicElementLocInfo(e, i, m)) {
230
+ return true
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+
237
+ pub fn hasComment(e: PublicVisitedElement, tmp_j: int) -> bool {
238
+ let (db = default_db()) {
239
+ for (j in JavadocComment(db)) {
240
+ if (j.element_hash_id = tmp_j) {
241
+ if (e.key_eq(j.getDocumentableElement())) {
242
+ return true
243
+ }
244
+ if (connectDoc(j, e)) {
245
+ return true
246
+ }
247
+ }
248
+ }
249
+ for (j in Comment(db)) {
250
+ if (j = e.getPossibleAboveComment() &&
251
+ j.element_hash_id = tmp_j) {
252
+ return true
253
+ }
254
+ }
255
+ }
256
+ }
257
+
258
+ pub fn getCommentInfo(j: int, cContext: string) -> bool {
259
+ for (d in JavadocComment(__all_data__)) {
260
+ if (d.element_hash_id = j) {
261
+ if (cContext = d.getText()) {
262
+ return true
263
+ }
264
+ }
265
+ }
266
+ for (d in Comment(__all_data__)) {
267
+ if (d.element_hash_id = j) {
268
+ if (cContext = d.getText()) {
269
+ return true
270
+ }
271
+ }
272
+ }
273
+ }
274
+
275
+ pub fn output_(signature: string, methodText: string, commentText: string) -> bool {
276
+ let (db = default_db()) {
277
+ for (j in int::__undetermined_all__()) {
278
+ for (e in PublicVisitedElement(db),
279
+ i in Identifier(db),
280
+ filePath in string::__undetermined_all__()) {
281
+ if (signature = e.getSignature()) {
282
+ if (filePath = e.getLocation().getFile().getRelativePath()) {
283
+ if (!getAutoGeneratedFiles(filePath)) {
284
+ if (e.key_eq(i.getParent())) {
285
+ if (hasComment(e, j)) {
286
+ if (getCommentInfo(j, commentText)) {
287
+ if (methodText = e.getDefinitionBody()) {
288
+ return true
289
+ }
290
+ }
291
+ }
292
+ }
293
+ }
294
+ }
295
+ }
296
+ }
297
+ }
298
+ }
299
+ }
300
+
301
+ fn main() {
302
+ output(output_())
303
+ }
0 commit comments