From d6b6dbc34ad566cb6a2c7d833244a62864bb1e19 Mon Sep 17 00:00:00 2001 From: xterao Date: Thu, 15 May 2025 10:57:22 +0900 Subject: [PATCH] Fix to not display Dao parameter information in the document for elements defined with the for directive. --- .../generator/DocumentDaoParameterGenerator.kt | 11 +++++++++++ .../intellij/document/SqlSymbolDocumentTestCase.kt | 8 ++++++++ .../doma/example/dao/document/DocumentTestDao.java | 3 +++ .../DocumentTestDao/documentForItemInvalidPrimary.sql | 8 ++++++++ 4 files changed, 30 insertions(+) create mode 100644 src/test/testData/src/main/resources/META-INF/doma/example/dao/document/DocumentTestDao/documentForItemInvalidPrimary.sql diff --git a/src/main/kotlin/org/domaframework/doma/intellij/document/generator/DocumentDaoParameterGenerator.kt b/src/main/kotlin/org/domaframework/doma/intellij/document/generator/DocumentDaoParameterGenerator.kt index 348c28b4..b17cb6bb 100644 --- a/src/main/kotlin/org/domaframework/doma/intellij/document/generator/DocumentDaoParameterGenerator.kt +++ b/src/main/kotlin/org/domaframework/doma/intellij/document/generator/DocumentDaoParameterGenerator.kt @@ -24,7 +24,9 @@ import org.domaframework.doma.intellij.common.psi.PsiParentClass import org.domaframework.doma.intellij.common.util.ForDirectiveUtil import org.domaframework.doma.intellij.extension.expr.accessElementsPrevOriginalElement import org.domaframework.doma.intellij.extension.psi.findParameter +import org.domaframework.doma.intellij.extension.psi.getForItem import org.domaframework.doma.intellij.psi.SqlElFieldAccessExpr +import org.domaframework.doma.intellij.psi.SqlElForDirective class DocumentDaoParameterGenerator( val originalElement: PsiElement, @@ -59,6 +61,15 @@ class DocumentDaoParameterGenerator( forItemClassType } } else { + val forDirectiveExpr = + PsiTreeUtil.getParentOfType( + searchElement, + SqlElForDirective::class.java, + ) + if (forDirectiveExpr != null && forDirectiveExpr.getForItem() == searchElement) { + // For elements defined with the for directive, Dao parameters are not searched. + return + } val daoMethod = findDaoMethod(originalElement.containingFile) ?: return val param = daoMethod.findParameter(originalElement.text) ?: return isBatchAnnotation = PsiDaoMethod(project, daoMethod).daoType.isBatchAnnotation() diff --git a/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt b/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt index 036b0f38..ffe43550 100644 --- a/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt +++ b/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt @@ -44,6 +44,7 @@ class SqlSymbolDocumentTestCase : DomaSqlTest() { addSqlFile("$testPackage/$testDaoName/documentForItemIndex.sql") addSqlFile("$testPackage/$testDaoName/documentForItemOptionalForItem.sql") addSqlFile("$testPackage/$testDaoName/documentForItemOptionalProperty.sql") + addSqlFile("$testPackage/$testDaoName/documentForItemInvalidPrimary.sql") } fun testDocumentForItemDaoParam() { @@ -145,6 +146,13 @@ class SqlSymbolDocumentTestCase : DomaSqlTest() { documentationFindTextTest(sqlName, "project", result) } + fun testDocumentForItemInvalidPrimary() { + val sqlName = "documentForItemInvalidPrimary" + val result = " item" + + documentationFindTextTest(sqlName, "item", result) + } + private fun documentationTest( sqlName: String, result: String?, diff --git a/src/test/testData/src/main/java/doma/example/dao/document/DocumentTestDao.java b/src/test/testData/src/main/java/doma/example/dao/document/DocumentTestDao.java index 1e65fa1e..65b51648 100644 --- a/src/test/testData/src/main/java/doma/example/dao/document/DocumentTestDao.java +++ b/src/test/testData/src/main/java/doma/example/dao/document/DocumentTestDao.java @@ -42,4 +42,7 @@ public interface DocumentTestDao { @Select Project documentForItemOptionalProperty(Optional>> optionalProjects); + @Select + int documentForItemInvalidPrimary(Principal item, Principal principal); + } \ No newline at end of file diff --git a/src/test/testData/src/main/resources/META-INF/doma/example/dao/document/DocumentTestDao/documentForItemInvalidPrimary.sql b/src/test/testData/src/main/resources/META-INF/doma/example/dao/document/DocumentTestDao/documentForItemInvalidPrimary.sql new file mode 100644 index 00000000..8fd6f3af --- /dev/null +++ b/src/test/testData/src/main/resources/META-INF/doma/example/dao/document/DocumentTestDao/documentForItemInvalidPrimary.sql @@ -0,0 +1,8 @@ +select count(*) from principal +where +/*%for item : principal */ +name = /* item.name */'name' + /*%if item_has_next */ +/*# "or" */ + /*%end */ +/*%end */ \ No newline at end of file