Skip to content

Commit 42d432f

Browse files
authored
feat: add java importing pattern util (#260)
1 parent de58648 commit 42d432f

File tree

3 files changed

+443
-2
lines changed

3 files changed

+443
-2
lines changed
Lines changed: 340 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,340 @@
1+
---
2+
title: import util for java
3+
tag: [java]
4+
---
5+
6+
# Test remove statement
7+
8+
```grit
9+
language java
10+
11+
file($body) where {
12+
$delete_import = `import a.b.Text;`,
13+
$body <: maybe contains remove_import_statement($delete_import)
14+
}
15+
```
16+
17+
## test remove one import statements when there are more than one import statements
18+
19+
```java
20+
package xx;
21+
22+
import a.b.Text;
23+
import a.b.Form;
24+
25+
public class AClass {
26+
private Text str;
27+
28+
private Text getStr() {
29+
return str;
30+
}
31+
private Text setStr(Form form) {
32+
this.str = form.toText();
33+
}
34+
}
35+
```
36+
37+
```java
38+
package xx;
39+
40+
import a.b.Form;
41+
42+
public class AClass {
43+
private Text str;
44+
45+
private Text getStr() {
46+
return str;
47+
}
48+
private Text setStr(Form form) {
49+
this.str = form.toText();
50+
}
51+
}
52+
```
53+
54+
## test remove one import statements when there are only one import statements
55+
56+
```java
57+
package xx;
58+
59+
import a.b.Text;
60+
61+
public class AClass {
62+
private Text str;
63+
64+
private Text getStr() {
65+
return str;
66+
}
67+
private Text setStr(Text text) {
68+
this.str = text;
69+
}
70+
}
71+
```
72+
73+
```java
74+
package xx;
75+
76+
77+
public class AClass {
78+
private Text str;
79+
80+
private Text getStr() {
81+
return str;
82+
}
83+
private Text setStr(Text text) {
84+
this.str = text;
85+
}
86+
}
87+
```
88+
89+
# Test ensure_import_statement
90+
91+
```grit
92+
language java
93+
94+
file($body) where {
95+
$new_import = `import a.b.Text;`,
96+
$body <: maybe contains ensure_import_statement($new_import)
97+
}
98+
```
99+
100+
## test `ensure_import_statement` when there already have one
101+
102+
```java
103+
package xx;
104+
105+
import a.b.Text;
106+
107+
public class AClass {
108+
private Text str;
109+
110+
private Text getStr() {
111+
return str;
112+
}
113+
private Text setStr(Text text) {
114+
this.str = text;
115+
}
116+
}
117+
```
118+
119+
```java
120+
package xx;
121+
122+
import a.b.Text;
123+
124+
public class AClass {
125+
private Text str;
126+
127+
private Text getStr() {
128+
return str;
129+
}
130+
private Text setStr(Text text) {
131+
this.str = text;
132+
}
133+
}
134+
```
135+
136+
137+
138+
## test `ensure_import_statement` when missing import
139+
140+
```java
141+
package xx;
142+
143+
public class AClass {
144+
private Text str;
145+
146+
private Text getStr() {
147+
return str;
148+
}
149+
private Text setStr(Text text) {
150+
this.str = text;
151+
}
152+
}
153+
```
154+
155+
```java
156+
package xx;
157+
158+
import a.b.Text;
159+
160+
public class AClass {
161+
private Text str;
162+
163+
private Text getStr() {
164+
return str;
165+
}
166+
private Text setStr(Text text) {
167+
this.str = text;
168+
}
169+
}
170+
```
171+
172+
# Testing `replace_import_statement`
173+
174+
```grit
175+
language java
176+
177+
replace_import_statement(`import a.b.Text;`, `import a.c.Text;`)
178+
```
179+
180+
## test `replace_import_statement` when have
181+
182+
```java
183+
package xx;
184+
185+
import a.b.Text;
186+
import a.b.Form;
187+
188+
import a.b.Text;
189+
190+
public class AClass {
191+
private Text str;
192+
193+
private Text getStr() {
194+
return str;
195+
}
196+
private Text setStr(Form form) {
197+
this.str = form.toText();
198+
}
199+
}
200+
```
201+
202+
```java
203+
package xx;
204+
205+
import a.c.Text;
206+
import a.b.Form;
207+
208+
import a.c.Text;
209+
210+
public class AClass {
211+
private Text str;
212+
213+
private Text getStr() {
214+
return str;
215+
}
216+
private Text setStr(Form form) {
217+
this.str = form.toText();
218+
}
219+
}
220+
```
221+
222+
223+
# Testing `remove_duplicate_import_statements`
224+
225+
```grit
226+
language java
227+
228+
remove_duplicate_import_statements()
229+
```
230+
231+
## test `remove_duplicate_import_statements` when there are some duplicates
232+
233+
```java
234+
package xx;
235+
236+
import a.b.Text;
237+
import a.b.Form;
238+
239+
import a.b.Text;
240+
241+
public class AClass {
242+
private Text str;
243+
244+
private Text getStr() {
245+
return str;
246+
}
247+
private Text setStr(Form form) {
248+
this.str = form.toText();
249+
}
250+
}
251+
```
252+
253+
```java
254+
package xx;
255+
256+
import a.b.Text;
257+
import a.b.Form;
258+
259+
260+
public class AClass {
261+
private Text str;
262+
263+
private Text getStr() {
264+
return str;
265+
}
266+
private Text setStr(Form form) {
267+
this.str = form.toText();
268+
}
269+
}
270+
```
271+
272+
## test `replace_import_statement` when there are none duplicates
273+
274+
```java
275+
package xx;
276+
277+
import a.b.Text;
278+
import a.b.Form;
279+
280+
public class AClass {
281+
private Text str;
282+
283+
private Text getStr() {
284+
return str;
285+
}
286+
private Text setStr(Form form) {
287+
this.str = form.toText();
288+
}
289+
}
290+
```
291+
292+
```java
293+
package xx;
294+
295+
import a.b.Text;
296+
import a.b.Form;
297+
298+
public class AClass {
299+
private Text str;
300+
301+
private Text getStr() {
302+
return str;
303+
}
304+
private Text setStr(Form form) {
305+
this.str = form.toText();
306+
}
307+
}
308+
```
309+
310+
## test `replace_import_statement` when there are none import statements.
311+
312+
```java
313+
package xx;
314+
315+
public class AClass {
316+
private Text str;
317+
318+
private Text getStr() {
319+
return str;
320+
}
321+
private Text setStr(Form form) {
322+
this.str = form.toText();
323+
}
324+
}
325+
```
326+
327+
```java
328+
package xx;
329+
330+
public class AClass {
331+
private Text str;
332+
333+
private Text getStr() {
334+
return str;
335+
}
336+
private Text setStr(Form form) {
337+
this.str = form.toText();
338+
}
339+
}
340+
```

.grit/patterns/java/import.grit

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
language java
2+
3+
pattern remove_duplicate_import_statements() {
4+
$_ where { $GLOBAL_REMOVE_DUPLICATE_EXIST_IMPORTS = true }
5+
}
6+
7+
pattern ensure_import_statement($import_decl) {
8+
$_ where {
9+
$GLOBAL_EXIST_IMPORTS <: not some $import_decl,
10+
$GLOBAL_EXIST_IMPORTS += $import_decl,
11+
$GLOBAL_NEW_FROM_IMPORTS += $import_decl,
12+
$GLOBAL_NEW_FROM_IMPORTS = distinct($GLOBAL_NEW_FROM_IMPORTS)
13+
}
14+
}
15+
16+
pattern replace_import_statement($old_import, $new_import) {
17+
$body where {
18+
$find_all_import = [],
19+
$body <: program(statements=$statements),
20+
$statements <: bubble($find_all_import, $old_import, $new_import) every {
21+
or {
22+
bubble($old_import, $new_import, $find_all_import) import_declaration() as $this_import where {
23+
if ($this_import <: $old_import) { $this_import => `$new_import` }
24+
},
25+
$_
26+
}
27+
}
28+
}
29+
}
30+
31+
pattern remove_import_statement($import_statement) {
32+
$_ where { $GLOBAL_REMOVE_IMPORTS += $import_statement }
33+
}

0 commit comments

Comments
 (0)