Skip to content

Commit 9044870

Browse files
committed
Enhance SQL parameter completion for static access and custom functions
1 parent 5f23d3a commit 9044870

File tree

11 files changed

+180
-3
lines changed

11 files changed

+180
-3
lines changed

src/main/kotlin/org/domaframework/doma/intellij/contributor/sql/provider/SqlParameterCompletionProvider.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,13 @@ class SqlParameterCompletionProvider : CompletionProvider<CompletionParameters>(
295295

296296
var isBatchAnnotation = false
297297
if (top.parent !is PsiFile && top.parent?.parent !is PsiDirectory) {
298-
val staticDirective = top.findNodeParent(SqlTypes.EL_STATIC_FIELD_ACCESS_EXPR)
299-
staticDirective?.let {
300-
topElementType = getElementTypeByStaticFieldAccess(top, it, topText) ?: return
298+
// In function-parameter elements, apply the same processing as normal field access.
299+
val parameter = top.findNodeParent(SqlTypes.EL_PARAMETERS)
300+
if (parameter == null) {
301+
val staticDirective = top.findNodeParent(SqlTypes.EL_STATIC_FIELD_ACCESS_EXPR)
302+
staticDirective?.let {
303+
topElementType = getElementTypeByStaticFieldAccess(top, it, topText) ?: return
304+
}
301305
}
302306
}
303307

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

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ class SqlCompleteTest : DomaSqlTest() {
5050
"$testDaoName/completeParameterFirstProperty.sql",
5151
"$testDaoName/completeParameterSecond.sql",
5252
"$testDaoName/completeParameterSecondProperty.sql",
53+
"$testDaoName/completeParameterFirstInStaticAccess.sql",
54+
"$testDaoName/completeParameterFirstPropertyInStaticAccess.sql",
55+
"$testDaoName/completeParameterSecondInStaticAccess.sql",
56+
"$testDaoName/completeParameterSecondPropertyInStaticAccess.sql",
57+
"$testDaoName/completeParameterFirstInCustomFunctions.sql",
58+
"$testDaoName/completeParameterFirstPropertyInCustomFunctions.sql",
59+
"$testDaoName/completeParameterSecondInCustomFunctions.sql",
60+
"$testDaoName/completeParameterSecondPropertyInCustomFunctions.sql",
5361
"$testDaoName/completeCallStaticPropertyClassPackage.sql",
5462
"$testDaoName/completeCallStaticPropertyClass.sql",
5563
"$testDaoName/completeForItemHasNext.sql",
@@ -379,6 +387,130 @@ class SqlCompleteTest : DomaSqlTest() {
379387
)
380388
}
381389

390+
fun testCompleteParameterInStaticAccess() {
391+
innerDirectiveCompleteTest(
392+
"$testDaoName/completeParameterFirstInStaticAccess.sql",
393+
listOf(
394+
"project",
395+
),
396+
listOf(
397+
"projectId",
398+
"projectName",
399+
"rank",
400+
"projectNumber",
401+
"projectCategory",
402+
"getFirstEmployee()",
403+
"getTermNumber()",
404+
),
405+
)
406+
407+
innerDirectiveCompleteTest(
408+
"$testDaoName/completeParameterFirstPropertyInStaticAccess.sql",
409+
listOf(
410+
"projectId",
411+
"projectName",
412+
"rank",
413+
"projectNumber",
414+
"projectCategory",
415+
"getFirstEmployee()",
416+
"getTermNumber()",
417+
),
418+
listOf(
419+
"project",
420+
),
421+
)
422+
423+
innerDirectiveCompleteTest(
424+
"$testDaoName/completeParameterSecondInStaticAccess.sql",
425+
listOf("project"),
426+
listOf(
427+
"projectId",
428+
"projectName",
429+
"rank",
430+
"projectNumber",
431+
"projectCategory",
432+
"getFirstEmployee()",
433+
"getTermNumber()",
434+
),
435+
)
436+
437+
innerDirectiveCompleteTest(
438+
"$testDaoName/completeParameterSecondPropertyInStaticAccess.sql",
439+
listOf(
440+
"projectId",
441+
"projectName",
442+
"rank",
443+
"projectNumber",
444+
"projectCategory",
445+
"getFirstEmployee()",
446+
"getTermNumber()",
447+
),
448+
listOf("project"),
449+
)
450+
}
451+
452+
fun testCompleteParameterInCustomFunctions() {
453+
innerDirectiveCompleteTest(
454+
"$testDaoName/completeParameterFirstInCustomFunctions.sql",
455+
listOf(
456+
"project",
457+
),
458+
listOf(
459+
"projectId",
460+
"projectName",
461+
"rank",
462+
"projectNumber",
463+
"projectCategory",
464+
"getFirstEmployee()",
465+
"getTermNumber()",
466+
),
467+
)
468+
469+
innerDirectiveCompleteTest(
470+
"$testDaoName/completeParameterFirstPropertyInCustomFunctions.sql",
471+
listOf(
472+
"projectId",
473+
"projectName",
474+
"rank",
475+
"projectNumber",
476+
"projectCategory",
477+
"getFirstEmployee()",
478+
"getTermNumber()",
479+
),
480+
listOf(
481+
"project",
482+
),
483+
)
484+
485+
innerDirectiveCompleteTest(
486+
"$testDaoName/completeParameterSecondInCustomFunctions.sql",
487+
listOf("project"),
488+
listOf(
489+
"projectId",
490+
"projectName",
491+
"rank",
492+
"projectNumber",
493+
"projectCategory",
494+
"getFirstEmployee()",
495+
"getTermNumber()",
496+
),
497+
)
498+
499+
innerDirectiveCompleteTest(
500+
"$testDaoName/completeParameterSecondPropertyInCustomFunctions.sql",
501+
listOf(
502+
"projectId",
503+
"projectName",
504+
"rank",
505+
"projectNumber",
506+
"projectCategory",
507+
"getFirstEmployee()",
508+
"getTermNumber()",
509+
),
510+
listOf("project"),
511+
)
512+
}
513+
382514
fun testCompleteOptionalDaoParam() {
383515
innerDirectiveCompleteTest(
384516
"$testDaoName/completeOptionalDaoParam.sql",

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,30 @@ interface SqlCompleteTestDao {
7676
@Select
7777
Employee completeParameterSecondProperty(Employee employee);
7878

79+
@Select
80+
ProjectDetail completeParameterFirstInStaticAccess(Project project);
81+
82+
@Select
83+
ProjectDetail completeParameterFirstPropertyInStaticAccess(Project project);
84+
85+
@Select
86+
ProjectDetail completeParameterSecondInStaticAccess(Project project);
87+
88+
@Select
89+
ProjectDetail completeParameterSecondPropertyInStaticAccess(Project project);
90+
91+
@Select
92+
ProjectDetail completeParameterFirstInCustomFunctions(Project project);
93+
94+
@Select
95+
ProjectDetail completeParameterFirstPropertyInCustomFunctions(Project project);
96+
97+
@Select
98+
ProjectDetail completeParameterSecondInCustomFunctions(Project project);
99+
100+
@Select
101+
ProjectDetail completeParameterSecondPropertyInCustomFunctions(Project project);
102+
79103
@Select
80104
Employee completeCallStaticPropertyClassPackage();
81105

@@ -108,4 +132,5 @@ interface SqlCompleteTestDao {
108132

109133
@Select
110134
Employee completeNotImplementCustomFunction(Project project);
135+
111136
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @langCode(<caret>) */1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @doma.example.entity.Project@getTermNumber(<caret>) */1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @langCode(project.<caret>) */1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @doma.example.entity.Project@getTermNumber(project.<caret>) */1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @langCode(project.cons, <caret>) */1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @doma.example.entity.Project@getTermNumber(project.cons, <caret>) */1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
select * from project_detail
2+
where number = /* @langCode(project.cost, project.<caret>) */1

0 commit comments

Comments
 (0)