Skip to content

Commit 04e1540

Browse files
committed
Add code completion for class names and package names for static property calls, and test cases for the Inspect feature.
1 parent 44b293d commit 04e1540

File tree

9 files changed

+145
-40
lines changed

9 files changed

+145
-40
lines changed

src/test/kotlin/org/domaframework/doma/intellij/complate/sql/SqlCompleteTest.kt

Lines changed: 80 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,41 @@ import org.domaframework.doma.intellij.inspection.sql.inspector.SqlBindVariableV
2222
* Code completion testing in SQL
2323
*/
2424
class SqlCompleteTest : DomaSqlTest() {
25+
private val testDapName = "SqlCompleteTestDao"
26+
2527
override fun setUp() {
2628
super.setUp()
2729
addDaoJavaFile(
28-
"SqlCompleteTestDao.java",
30+
"$testDapName.java",
2931
)
3032
addSqlFile(
31-
"SqlCompleteTestDao/completeDaoArgument.sql",
32-
"SqlCompleteTestDao/completeInstancePropertyFromDaoArgumentClass.sql",
33-
"SqlCompleteTestDao/completeJavaPackageClass.sql",
34-
"SqlCompleteTestDao/completeDirective.sql",
35-
"SqlCompleteTestDao/completeStaticPropertyFromStaticPropertyCall.sql",
36-
"SqlCompleteTestDao/completePropertyAfterStaticPropertyCall.sql",
37-
"SqlCompleteTestDao/completeBuiltinFunction.sql",
38-
"SqlCompleteTestDao/completeDirectiveInsideIf.sql",
39-
"SqlCompleteTestDao/completeDirectiveInsideElseIf.sql",
40-
"SqlCompleteTestDao/completeDirectiveInsideFor.sql",
41-
"SqlCompleteTestDao/completeDirectiveFieldInsideIf.sql",
42-
"SqlCompleteTestDao/completeDirectiveFieldInsideElseIf.sql",
43-
"SqlCompleteTestDao/completeDirectiveFieldInsideFor.sql",
44-
"SqlCompleteTestDao/completeConcatenationOperator.sql",
45-
"SqlCompleteTestDao/completeComparisonOperator.sql",
46-
"SqlCompleteTestDao/completeParameterFirst.sql",
47-
"SqlCompleteTestDao/completeParameterFirstProperty.sql",
48-
"SqlCompleteTestDao/completeParameterSecond.sql",
49-
"SqlCompleteTestDao/completeParameterSecondProperty.sql",
33+
"$testDapName/completeDaoArgument.sql",
34+
"$testDapName/completeInstancePropertyFromDaoArgumentClass.sql",
35+
"$testDapName/completeJavaPackageClass.sql",
36+
"$testDapName/completeDirective.sql",
37+
"$testDapName/completeStaticPropertyFromStaticPropertyCall.sql",
38+
"$testDapName/completePropertyAfterStaticPropertyCall.sql",
39+
"$testDapName/completeBuiltinFunction.sql",
40+
"$testDapName/completeDirectiveInsideIf.sql",
41+
"$testDapName/completeDirectiveInsideElseIf.sql",
42+
"$testDapName/completeDirectiveInsideFor.sql",
43+
"$testDapName/completeDirectiveFieldInsideIf.sql",
44+
"$testDapName/completeDirectiveFieldInsideElseIf.sql",
45+
"$testDapName/completeDirectiveFieldInsideFor.sql",
46+
"$testDapName/completeConcatenationOperator.sql",
47+
"$testDapName/completeComparisonOperator.sql",
48+
"$testDapName/completeParameterFirst.sql",
49+
"$testDapName/completeParameterFirstProperty.sql",
50+
"$testDapName/completeParameterSecond.sql",
51+
"$testDapName/completeParameterSecondProperty.sql",
52+
"$testDapName/completeCallStaticPropertyClassPackage.sql",
53+
"$testDapName/completeCallStaticPropertyClass.sql",
5054
)
5155
myFixture.enableInspections(SqlBindVariableValidInspector())
5256
}
5357

5458
fun testCompleteDaoArgument() {
55-
val sqlFile = findSqlFile("SqlCompleteTestDao/completeDaoArgument.sql")
59+
val sqlFile = findSqlFile("$testDapName/completeDaoArgument.sql")
5660
assertNotNull("Not Found SQL File", sqlFile)
5761
if (sqlFile == null) return
5862

@@ -74,7 +78,7 @@ class SqlCompleteTest : DomaSqlTest() {
7478

7579
fun testCompleteInstancePropertyFromDaoArgumentClass() {
7680
innerDirectiveCompleteTest(
77-
"SqlCompleteTestDao/completeInstancePropertyFromDaoArgumentClass.sql",
81+
"$testDapName/completeInstancePropertyFromDaoArgumentClass.sql",
7882
listOf(
7983
"employeeId",
8084
"employeeName",
@@ -89,7 +93,7 @@ class SqlCompleteTest : DomaSqlTest() {
8993

9094
fun testCompleteJavaPackageClass() {
9195
innerDirectiveCompleteTest(
92-
"SqlCompleteTestDao/completeJavaPackageClass.sql",
96+
"$testDapName/completeJavaPackageClass.sql",
9397
listOf(
9498
"CASE_INSENSITIVE_ORDER",
9599
"toString()",
@@ -105,7 +109,7 @@ class SqlCompleteTest : DomaSqlTest() {
105109

106110
fun testCompleteDirective() {
107111
innerDirectiveCompleteTest(
108-
"SqlCompleteTestDao/completeDirective.sql",
112+
"$testDapName/completeDirective.sql",
109113
listOf(
110114
"elseif",
111115
"else",
@@ -124,7 +128,7 @@ class SqlCompleteTest : DomaSqlTest() {
124128

125129
fun testCompleteStaticPropertyFromStaticPropertyCall() {
126130
innerDirectiveCompleteTest(
127-
"SqlCompleteTestDao/completeStaticPropertyFromStaticPropertyCall.sql",
131+
"$testDapName/completeStaticPropertyFromStaticPropertyCall.sql",
128132
listOf(
129133
"members",
130134
"projectNumber",
@@ -139,9 +143,46 @@ class SqlCompleteTest : DomaSqlTest() {
139143
)
140144
}
141145

146+
fun testCompleteCallStaticPropertyClassPackage() {
147+
innerDirectiveCompleteTest(
148+
"$testDapName/completeCallStaticPropertyClassPackage.sql",
149+
listOf(
150+
"doma",
151+
"com",
152+
"org",
153+
),
154+
listOf(
155+
"resources",
156+
),
157+
)
158+
159+
innerDirectiveCompleteTest(
160+
"$testDapName/completeCallStaticPropertyClass.sql",
161+
listOf(
162+
"doma.example.entity.Employee",
163+
"doma.example.entity.EmployeeSummary",
164+
"doma.example.entity.Principal.Permission",
165+
"doma.example.entity.Principal",
166+
"doma.example.entity.Project",
167+
"doma.example.entity.ProjectDetail",
168+
"doma.example.entity.Employee.Rank",
169+
"doma.example.entity.User",
170+
"doma.example.entity.UserSummary",
171+
),
172+
listOf(
173+
"resources",
174+
"com",
175+
"document",
176+
"org",
177+
"doma.example.dao.BatchDeleteTestDao",
178+
"doma.example.dao.DeleteTestDao",
179+
),
180+
)
181+
}
182+
142183
fun testCompletePropertyAfterStaticPropertyCall() {
143184
innerDirectiveCompleteTest(
144-
"SqlCompleteTestDao/completePropertyAfterStaticPropertyCall.sql",
185+
"$testDapName/completePropertyAfterStaticPropertyCall.sql",
145186
listOf(
146187
"managerId",
147188
),
@@ -154,7 +195,7 @@ class SqlCompleteTest : DomaSqlTest() {
154195

155196
fun testCompleteBuiltinFunction() {
156197
innerDirectiveCompleteTest(
157-
"SqlCompleteTestDao/completeBuiltinFunction.sql",
198+
"$testDapName/completeBuiltinFunction.sql",
158199
listOf(
159200
"isEmpty()",
160201
"isNotEmpty()",
@@ -174,35 +215,35 @@ class SqlCompleteTest : DomaSqlTest() {
174215

175216
fun testCompleteDirectiveInside() {
176217
innerDirectiveCompleteTest(
177-
"SqlCompleteTestDao/completeDirectiveInsideIf.sql",
218+
"$testDapName/completeDirectiveInsideIf.sql",
178219
listOf("employee"),
179220
listOf("project"),
180221
)
181222
innerDirectiveCompleteTest(
182-
"SqlCompleteTestDao/completeDirectiveInsideElseIf.sql",
223+
"$testDapName/completeDirectiveInsideElseIf.sql",
183224
listOf("employee", "project"),
184225
emptyList(),
185226
)
186227
innerDirectiveCompleteTest(
187-
"SqlCompleteTestDao/completeDirectiveInsideFor.sql",
228+
"$testDapName/completeDirectiveInsideFor.sql",
188229
listOf("project"),
189230
listOf("employee"),
190231
)
191232
}
192233

193234
fun testCompleteDirectiveFieldInside() {
194235
innerDirectiveCompleteTest(
195-
"SqlCompleteTestDao/completeDirectiveFieldInsideIf.sql",
236+
"$testDapName/completeDirectiveFieldInsideIf.sql",
196237
listOf("startsWith()"),
197238
listOf("employee", "project", "toLowCase"),
198239
)
199240
innerDirectiveCompleteTest(
200-
"SqlCompleteTestDao/completeDirectiveFieldInsideElseIf.sql",
241+
"$testDapName/completeDirectiveFieldInsideElseIf.sql",
201242
listOf("department"),
202243
listOf("employee", "project"),
203244
)
204245
innerDirectiveCompleteTest(
205-
"SqlCompleteTestDao/completeDirectiveFieldInsideFor.sql",
246+
"$testDapName/completeDirectiveFieldInsideFor.sql",
206247
listOf(
207248
"projectId",
208249
"projectName",
@@ -219,39 +260,39 @@ class SqlCompleteTest : DomaSqlTest() {
219260

220261
fun testCompleteConcatenationOperator() {
221262
innerDirectiveCompleteTest(
222-
"SqlCompleteTestDao/completeConcatenationOperator.sql",
263+
"$testDapName/completeConcatenationOperator.sql",
223264
listOf("rank"),
224265
listOf("employee", "employeeId", "department"),
225266
)
226267

227268
innerDirectiveCompleteTest(
228-
"SqlCompleteTestDao/completeComparisonOperator.sql",
269+
"$testDapName/completeComparisonOperator.sql",
229270
listOf("rank"),
230271
listOf("employee", "employeeId", "department"),
231272
)
232273
}
233274

234275
fun testCompleteParameter() {
235276
innerDirectiveCompleteTest(
236-
"SqlCompleteTestDao/completeParameterFirst.sql",
277+
"$testDapName/completeParameterFirst.sql",
237278
listOf("employee"),
238279
listOf("employeeId", "department", "rank", "startWith"),
239280
)
240281

241282
innerDirectiveCompleteTest(
242-
"SqlCompleteTestDao/completeParameterFirstProperty.sql",
283+
"$testDapName/completeParameterFirstProperty.sql",
243284
listOf("employeeId", "department", "rank"),
244285
listOf("employee"),
245286
)
246287

247288
innerDirectiveCompleteTest(
248-
"SqlCompleteTestDao/completeParameterSecond.sql",
289+
"$testDapName/completeParameterSecond.sql",
249290
listOf("employee"),
250291
listOf("employeeId", "department", "rank", "startWith"),
251292
)
252293

253294
innerDirectiveCompleteTest(
254-
"SqlCompleteTestDao/completeParameterSecondProperty.sql",
295+
"$testDapName/completeParameterSecondProperty.sql",
255296
listOf("managerId"),
256297
listOf("employee", "department", "rank"),
257298
)

src/test/kotlin/org/domaframework/doma/intellij/inspection/sql/ParameterDefinedTest.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class ParameterDefinedTest : DomaSqlTest() {
3636
"$testDaoName/batchAnnotationResolvesClassInList.sql",
3737
"$testDaoName/resolveDaoArgumentOfListType.sql",
3838
"$testDaoName/bindVariableInFunctionParameters.sql",
39+
"$testDaoName/callStaticPropertyPackageName.sql",
3940
)
4041
myFixture.enableInspections(SqlBindVariableValidInspector())
4142
}
@@ -68,6 +69,14 @@ class ParameterDefinedTest : DomaSqlTest() {
6869
myFixture.testHighlighting(false, false, false, sqlFile)
6970
}
7071

72+
fun testCallStaticPropertyPackageName() {
73+
val sqlFile = findSqlFile("$testDaoName/callStaticPropertyPackageName.sql")
74+
assertNotNull("Not Found SQL File", sqlFile)
75+
if (sqlFile == null) return
76+
77+
myFixture.testHighlighting(false, false, false, sqlFile)
78+
}
79+
7180
fun testBatchAnnotationResolvesClassInList() {
7281
val sqlFile =
7382
findSqlFile("$testDaoName/batchAnnotationResolvesClassInList.sql")

src/test/kotlin/org/domaframework/doma/intellij/reference/SqlReferenceTestCase.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,9 @@ class SqlReferenceTestCase : DomaSqlTest() {
167167
val resolveResult = reference.references.firstOrNull()?.resolve()
168168
val expectedResults = resolveExpects[reference.text]
169169

170-
println("Reference: ${reference.text}, Resolve Result: ${resolveResult?.toString()}, Expected Results: $expectedResults")
170+
println(
171+
"Reference: ${reference.text}, Resolve StaticClassPackageSearchResult: ${resolveResult?.toString()}, Expected Results: $expectedResults",
172+
)
171173
assertTrue(expectedResults?.contains(resolveResult?.toString()) == true)
172174
}
173175
}

src/test/testData/src/main/java/doma/example/dao/EmployeeSummaryDao.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ interface EmployeeSummaryDao {
2121
@Update(sqlFile=true)
2222
int accessStaticProperty(Project project,LocalDate referenceDate);
2323

24+
@Select
25+
int callStaticPropertyPackageName();
26+
2427
@Select
2528
ProjectDetail resolveDaoArgumentOfListType(List<Employee> employees);
2629

src/test/testData/src/main/java/doma/example/dao/SqlCompleteTestDao.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,10 @@ interface SqlCompleteTestDao {
6969
@Select
7070
Employee completeParameterSecondProperty(Employee employee);
7171

72+
@Select
73+
Employee completeCallStaticPropertyClassPackage();
74+
75+
@Select
76+
Employee completeCallStaticPropertyClass();
77+
7278
}

src/test/testData/src/main/java/doma/example/entity/Employee.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,10 @@ private String getEmployeeRank() {
3131
public Integer employeeParam(Integer p1, Integer p2) {
3232
return p1 + p2;
3333
}
34+
35+
enum Rank {
36+
MANAGER,
37+
STAFF,
38+
INTERN
39+
}
3440
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Select COUNT(*) from employee
2+
where rank = /* @<error descr="A non-existent package or class name was specified. [doma.example.entity.EmployeeBase.Rank]">doma.example.entity.EmployeeBase.Rank</error>@MANAGER */1
3+
and exist_class = /* @<error descr="A non-existent package or class name was specified. [doma.example.entity.Employee.Exists]">doma.example.entity.Employee.Exists</error>@T */false
4+
and exist_pkg = /* @<error descr="A non-existent package or class name was specified. [doma.example.entity]">doma.example.entity</error>@T */false
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
select
2+
p.project_id
3+
, p.statis
4+
, p.project_name
5+
, p.rank
6+
from project p
7+
inner join project_detail pd
8+
on p.project_id = pd.project_id
9+
where
10+
p.project_id = /* detail.projectId */0
11+
/*%if @isNotEmpty(detail.members) */
12+
-- Code completion for static fields and methods
13+
and pd.type = /* @doma.example.entity.<caret>@ */'TODO'
14+
/*%for member: detail.members */
15+
and pd.member_id = /* member.memberId */0
16+
/*%end */
17+
/*%end */
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
select
2+
p.project_id
3+
, p.statis
4+
, p.project_name
5+
, p.rank
6+
from project p
7+
inner join project_detail pd
8+
on p.project_id = pd.project_id
9+
where
10+
p.project_id = /* detail.projectId */0
11+
/*%if @isNotEmpty(detail.members) */
12+
-- Code completion for static fields and methods
13+
and pd.type = /* @<caret>@ */'TODO'
14+
/*%for member: detail.members */
15+
and pd.member_id = /* member.memberId */0
16+
/*%end */
17+
/*%end */

0 commit comments

Comments
 (0)