@@ -20,7 +20,9 @@ import com.intellij.psi.PsiComment
2020import com.intellij.psi.PsiElement
2121import com.intellij.psi.PsiFile
2222import com.intellij.psi.PsiLiteralExpression
23+ import com.intellij.psi.PsiWhiteSpace
2324import com.intellij.psi.util.PsiTreeUtil
25+ import com.intellij.psi.util.nextLeafs
2426import org.domaframework.doma.intellij.common.isInjectionSqlFile
2527import org.domaframework.doma.intellij.common.isJavaOrKotlinFileType
2628import org.domaframework.doma.intellij.common.sql.validator.result.ValidationTestDataResult
@@ -54,6 +56,7 @@ class SqlTestDataAfterBlockCommentVisitor(
5456
5557 val nextElement = element.nextSibling ? : return
5658 if (isSqlLiteral(nextElement)) return
59+ if (isMatchListTestData(element)) return
5760
5861 val result = ValidationTestDataResult (element, shortName)
5962 result.highlightElement(holder)
@@ -67,25 +70,36 @@ class SqlTestDataAfterBlockCommentVisitor(
6770 PsiTreeUtil .getChildOfType(element, SqlElForDirective ::class .java)
6871 ? : PsiTreeUtil .getChildOfType(element, SqlElIfDirective ::class .java)
6972 ? : PsiTreeUtil .getChildOfType(element, SqlElElseifDirective ::class .java)
70- val endDirective =
73+ val otherDirective =
7174 PsiTreeUtil
7275 .getChildrenOfType(element, PsiElement ::class .java)
7376 ?.find {
7477 it.elementType == SqlTypes .EL_END ||
7578 it.elementType == SqlTypes .HASH ||
76- it.elementType == SqlTypes .EL_POPULATE
79+ it.elementType == SqlTypes .EL_POPULATE ||
80+ it.elementType == SqlTypes .EL_ELSE
7781 }
78- if (directive != null || endDirective != null ) return true
82+ if (directive != null || otherDirective != null ) return true
7983
8084 val content = PsiTreeUtil .getChildOfType(element, PsiComment ::class .java)
8185 return content != null
8286 }
8387
8488 private fun isSqlLiteral (element : PsiElement ): Boolean =
8589 element.elementType == SqlTypes .STRING ||
86- element.elementType == SqlTypes .BOOLEAN ||
87- element.elementType == SqlTypes .NUMBER ||
88- element.elementType == SqlTypes .NULL ||
8990 listOf (" true" , " false" , " null" ).contains(element.text) ||
9091 element.text.matches(Regex (" ^\\ d+$" ))
92+
93+ private fun isMatchListTestData (element : PsiElement ): Boolean {
94+ val parenthesesListPattern =
95+ Regex (
96+ """ ^\(\s*(?:(?:"[^"]*"|'[^']*'|\d+|true|false|null)\s*(?:,\s*(?:"[^"]*"|'[^']*'|\d+|true|false|null)\s*)*)?\)$""" ,
97+ )
98+ val testDataText =
99+ element.nextLeafs
100+ .takeWhile { it !is PsiWhiteSpace }
101+ .toList()
102+ .joinToString(" " ) { it.text }
103+ return testDataText.matches(parenthesesListPattern)
104+ }
91105}
0 commit comments