diff --git a/src/main/kotlin/org/domaframework/doma/intellij/reference/SqlPsiReferenceProvider.kt b/src/main/kotlin/org/domaframework/doma/intellij/reference/SqlPsiReferenceProvider.kt index 922003d1..cd878e1e 100644 --- a/src/main/kotlin/org/domaframework/doma/intellij/reference/SqlPsiReferenceProvider.kt +++ b/src/main/kotlin/org/domaframework/doma/intellij/reference/SqlPsiReferenceProvider.kt @@ -27,6 +27,7 @@ import org.domaframework.doma.intellij.psi.SqlElClass import org.domaframework.doma.intellij.psi.SqlElForDirective import org.domaframework.doma.intellij.psi.SqlElFunctionCallExpr import org.domaframework.doma.intellij.psi.SqlElIdExpr +import org.domaframework.doma.intellij.psi.SqlElParameters import org.domaframework.doma.intellij.psi.SqlElStaticFieldAccessExpr import org.domaframework.doma.intellij.psi.SqlTypes @@ -41,6 +42,9 @@ class SqlPsiReferenceProvider : PsiReferenceProvider() { arrayOf(SqlElClassExprReference(element)) } else if (element is SqlElIdExpr) { when { + getParentClassPsiType(element, SqlElParameters::class.java) != null -> + arrayOf(SqlElIdExprReference(element)) + getParentClassPsiType(element, SqlElFunctionCallExpr::class.java) != null -> arrayOf(SqlElFunctionCallExprReference(element)) diff --git a/src/test/kotlin/org/domaframework/doma/intellij/reference/SqlReferenceTestCase.kt b/src/test/kotlin/org/domaframework/doma/intellij/reference/SqlReferenceTestCase.kt index 4ca2746a..0279e44b 100644 --- a/src/test/kotlin/org/domaframework/doma/intellij/reference/SqlReferenceTestCase.kt +++ b/src/test/kotlin/org/domaframework/doma/intellij/reference/SqlReferenceTestCase.kt @@ -27,15 +27,15 @@ import org.domaframework.doma.intellij.psi.SqlTypes import org.jetbrains.kotlin.idea.core.util.toPsiFile class SqlReferenceTestCase : DomaSqlTest() { - val testPackage = "reference" - val testDaoName = "ReferenceTestDao" + private val testPackage = "reference" + private val testDaoName = "ReferenceTestDao" - val forItemResolve = "SqlElIdExprImpl(EL_ID_EXPR)" - val forItemFieldAccessResolve = "SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)" - val daoParameterResolve = "PsiParameter" - val fieldResolve = "PsiField" - val methodResolve = "PsiMethod" - val classResolve = "PsiClass" + private val forItemResolve = "SqlElIdExprImpl(EL_ID_EXPR)" + private val forItemFieldAccessResolve = "SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)" + private val daoParameterResolve = "PsiParameter" + private val fieldResolve = "PsiField" + private val methodResolve = "PsiMethod" + private val classResolve = "PsiClass" override fun setUp() { super.setUp() @@ -67,11 +67,15 @@ class SqlReferenceTestCase : DomaSqlTest() { mapOf( "detail" to listOf("$daoParameterResolve:detail"), "getFirstEmployee" to listOf("$methodResolve:getFirstEmployee"), + "getCustomNumber" to listOf("$methodResolve:getCustomNumber"), + "projectCategory" to listOf("$fieldResolve:projectCategory"), "projectNumber" to listOf("$fieldResolve:projectNumber"), "projects" to listOf("$daoParameterResolve:projects"), "project" to listOf(forItemResolve), "id" to listOf(null), + "null" to listOf(null), "employeeId" to listOf("$fieldResolve:employeeId"), + "isNotBlank" to listOf("$methodResolve:isNotBlank"), ), ) } @@ -85,7 +89,10 @@ class SqlReferenceTestCase : DomaSqlTest() { "projectCategory" to listOf("$fieldResolve:projectCategory"), "getTermNumber" to listOf("$methodResolve:getTermNumber"), "getFirstEmployee" to listOf("$methodResolve:getFirstEmployee"), + "getCustomNumber" to listOf("$methodResolve:getCustomNumber"), + "detail" to listOf("$daoParameterResolve:detail"), "employeeId" to listOf("$fieldResolve:employeeId"), + "toString" to listOf("$methodResolve:toString"), ), ) } diff --git a/src/test/testData/src/main/java/doma/example/dao/reference/ReferenceTestDao.java b/src/test/testData/src/main/java/doma/example/dao/reference/ReferenceTestDao.java index 704ccab2..055d619c 100644 --- a/src/test/testData/src/main/java/doma/example/dao/reference/ReferenceTestDao.java +++ b/src/test/testData/src/main/java/doma/example/dao/reference/ReferenceTestDao.java @@ -14,7 +14,7 @@ public interface ReferenceTestDao { Project referenceEntityProperty(List projects, ProjectDetail detail); @Select - ProjectDetail referenceStaticField(); + ProjectDetail referenceStaticField(ProjectDetail detail); @Select List referenceListFieldMethod(List employeesList); diff --git a/src/test/testData/src/main/java/doma/example/entity/ProjectDetail.java b/src/test/testData/src/main/java/doma/example/entity/ProjectDetail.java index 4547ab89..c766bead 100644 --- a/src/test/testData/src/main/java/doma/example/entity/ProjectDetail.java +++ b/src/test/testData/src/main/java/doma/example/entity/ProjectDetail.java @@ -17,6 +17,7 @@ public class ProjectDetail { // Accessible static fields public static Integr projectNumber; + private static String projectName; private static String projectCategory; private static Employee manager = new Employee(); @@ -39,4 +40,8 @@ public void addTermNumber(){ projectNumber++; } + public static String getCustomNumber(String prefix) { + return prefix + projectName; + } + } \ No newline at end of file diff --git a/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceEntityProperty.sql b/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceEntityProperty.sql index 06e70e91..348f95b7 100644 --- a/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceEntityProperty.sql +++ b/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceEntityProperty.sql @@ -1,7 +1,11 @@ SELECT * FROM project_detail WHERE detail_id = /* detail.getFirstEmployee().employeeId */0 + /*%if (detail != null && @isNotBlank(detail.projectCategory)) */ + AND detail_id = /* detail.getCustomNumber(detail.projectCategory) */'number' /*%for project : projects */ AND project_id = /* project.id */0 + AND detail_sub_id = /* detail.getCustomNumber(project.projectCategory) */'sub' /*%end*/ -OR number = /* detail.projectNumber */ \ No newline at end of file + /*%end*/ + OR number = /* detail.projectNumber */0 diff --git a/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceStaticField.sql b/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceStaticField.sql index 1309053a..6c7561a0 100644 --- a/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceStaticField.sql +++ b/src/test/testData/src/main/resources/META-INF/doma/example/dao/reference/ReferenceTestDao/referenceStaticField.sql @@ -1,4 +1,5 @@ SELECT * FROM project_detail WHERE category = /* @doma.example.entity.ProjectDetail@projectCategory */'category' - AND number = /* @doma.example.entity.Project@getFirstEmployee().employeeId */'9999' + AND number = /* @doma.example.entity.Project@getFirstEmployee().employeeId.toString() */'9999' + OR number = /* @doma.example.entity.ProjectDetail@getCustomNumber(detail.projectCategory) */'number'