Skip to content

Commit 0756b51

Browse files
authored
Merge pull request #207 from domaframework/fix/resolve-references-from-within-argument-parameter-elements
Cannot resolve references from within argument-parameter elements
2 parents 3bee5c4 + 56a7892 commit 0756b51

File tree

6 files changed

+32
-11
lines changed

6 files changed

+32
-11
lines changed

src/main/kotlin/org/domaframework/doma/intellij/reference/SqlPsiReferenceProvider.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import org.domaframework.doma.intellij.psi.SqlElClass
2727
import org.domaframework.doma.intellij.psi.SqlElForDirective
2828
import org.domaframework.doma.intellij.psi.SqlElFunctionCallExpr
2929
import org.domaframework.doma.intellij.psi.SqlElIdExpr
30+
import org.domaframework.doma.intellij.psi.SqlElParameters
3031
import org.domaframework.doma.intellij.psi.SqlElStaticFieldAccessExpr
3132
import org.domaframework.doma.intellij.psi.SqlTypes
3233

@@ -41,6 +42,9 @@ class SqlPsiReferenceProvider : PsiReferenceProvider() {
4142
arrayOf(SqlElClassExprReference(element))
4243
} else if (element is SqlElIdExpr) {
4344
when {
45+
getParentClassPsiType(element, SqlElParameters::class.java) != null ->
46+
arrayOf(SqlElIdExprReference(element))
47+
4448
getParentClassPsiType(element, SqlElFunctionCallExpr::class.java) != null ->
4549
arrayOf(SqlElFunctionCallExprReference(element))
4650

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ import org.domaframework.doma.intellij.psi.SqlTypes
2727
import org.jetbrains.kotlin.idea.core.util.toPsiFile
2828

2929
class SqlReferenceTestCase : DomaSqlTest() {
30-
val testPackage = "reference"
31-
val testDaoName = "ReferenceTestDao"
30+
private val testPackage = "reference"
31+
private val testDaoName = "ReferenceTestDao"
3232

33-
val forItemResolve = "SqlElIdExprImpl(EL_ID_EXPR)"
34-
val forItemFieldAccessResolve = "SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)"
35-
val daoParameterResolve = "PsiParameter"
36-
val fieldResolve = "PsiField"
37-
val methodResolve = "PsiMethod"
38-
val classResolve = "PsiClass"
33+
private val forItemResolve = "SqlElIdExprImpl(EL_ID_EXPR)"
34+
private val forItemFieldAccessResolve = "SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)"
35+
private val daoParameterResolve = "PsiParameter"
36+
private val fieldResolve = "PsiField"
37+
private val methodResolve = "PsiMethod"
38+
private val classResolve = "PsiClass"
3939

4040
override fun setUp() {
4141
super.setUp()
@@ -67,11 +67,15 @@ class SqlReferenceTestCase : DomaSqlTest() {
6767
mapOf(
6868
"detail" to listOf("$daoParameterResolve:detail"),
6969
"getFirstEmployee" to listOf("$methodResolve:getFirstEmployee"),
70+
"getCustomNumber" to listOf("$methodResolve:getCustomNumber"),
71+
"projectCategory" to listOf("$fieldResolve:projectCategory"),
7072
"projectNumber" to listOf("$fieldResolve:projectNumber"),
7173
"projects" to listOf("$daoParameterResolve:projects"),
7274
"project" to listOf(forItemResolve),
7375
"id" to listOf(null),
76+
"null" to listOf(null),
7477
"employeeId" to listOf("$fieldResolve:employeeId"),
78+
"isNotBlank" to listOf("$methodResolve:isNotBlank"),
7579
),
7680
)
7781
}
@@ -85,7 +89,10 @@ class SqlReferenceTestCase : DomaSqlTest() {
8589
"projectCategory" to listOf("$fieldResolve:projectCategory"),
8690
"getTermNumber" to listOf("$methodResolve:getTermNumber"),
8791
"getFirstEmployee" to listOf("$methodResolve:getFirstEmployee"),
92+
"getCustomNumber" to listOf("$methodResolve:getCustomNumber"),
93+
"detail" to listOf("$daoParameterResolve:detail"),
8894
"employeeId" to listOf("$fieldResolve:employeeId"),
95+
"toString" to listOf("$methodResolve:toString"),
8996
),
9097
)
9198
}

src/test/testData/src/main/java/doma/example/dao/reference/ReferenceTestDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public interface ReferenceTestDao {
1414
Project referenceEntityProperty(List<Project> projects, ProjectDetail detail);
1515

1616
@Select
17-
ProjectDetail referenceStaticField();
17+
ProjectDetail referenceStaticField(ProjectDetail detail);
1818

1919
@Select
2020
List<Employee> referenceListFieldMethod(List<Employee> employeesList);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class ProjectDetail {
1717

1818
// Accessible static fields
1919
public static Integr projectNumber;
20+
private static String projectName;
2021
private static String projectCategory;
2122

2223
private static Employee manager = new Employee();
@@ -39,4 +40,8 @@ public void addTermNumber(){
3940
projectNumber++;
4041
}
4142

43+
public static String getCustomNumber(String prefix) {
44+
return prefix + projectName;
45+
}
46+
4247
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
SELECT *
22
FROM project_detail
33
WHERE detail_id = /* detail.getFirstEmployee().employeeId */0
4+
/*%if (detail != null && @isNotBlank(detail.projectCategory)) */
5+
AND detail_id = /* detail.getCustomNumber(detail.projectCategory) */'number'
46
/*%for project : projects */
57
AND project_id = /* project.id */0
8+
AND detail_sub_id = /* detail.getCustomNumber(project.projectCategory) */'sub'
69
/*%end*/
7-
OR number = /* detail.projectNumber */
10+
/*%end*/
11+
OR number = /* detail.projectNumber */0
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
SELECT *
22
FROM project_detail
33
WHERE category = /* @doma.example.entity.ProjectDetail@projectCategory */'category'
4-
AND number = /* @doma.example.entity.Project@getFirstEmployee().employeeId */'9999'
4+
AND number = /* @doma.example.entity.Project@getFirstEmployee().employeeId.toString() */'9999'
5+
OR number = /* @doma.example.entity.ProjectDetail@getCustomNumber(detail.projectCategory) */'number'

0 commit comments

Comments
 (0)