Skip to content

Commit 9896af3

Browse files
committed
Fix issue where grouped conditions in block comments were recognized as bind variables
1 parent b03aac0 commit 9896af3

File tree

7 files changed

+310
-277
lines changed

7 files changed

+310
-277
lines changed

src/main/java/org/domaframework/doma/intellij/Sql.bnf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ el_and_expr ::= el_expr "&&" el_expr
136136
el_or_expr ::= el_expr "||" el_expr
137137

138138
// term
139-
el_term_expr ::= el_comparison_expr_group | el_arithmetic_expr_group | el_factor_expr
139+
el_term_expr ::= el_comparison_expr_group | el_arithmetic_expr_group | el_factor_expr | el_paren_expr
140140
private el_comparison_expr_group ::= el_eq_expr | el_ne_expr | el_lt_expr | el_le_expr | el_gt_expr | el_ge_expr
141141
private el_arithmetic_expr_group ::= el_add_expr | el_subtract_expr | el_multiply_expr | el_divide_expr | el_mod_expr
142142
el_eq_expr ::= el_factor_expr "==" el_factor_expr
@@ -165,7 +165,7 @@ el_class ::= el_id_expr ("." el_id_expr)*
165165
el_parameters ::= "(" (el_expr ("," el_expr)*)? ")" {pin=1}
166166

167167
// primary
168-
el_primary_expr ::= el_literal_expr | el_id_expr | el_paren_expr
168+
el_primary_expr ::= el_literal_expr | el_id_expr //| el_paren_expr
169169
private el_literal_expr ::= EL_NULL | BOOLEAN | (EL_PLUS | EL_MINUS)? EL_NUMBER | EL_STRING | EL_CHAR
170170
el_id_expr ::= EL_IDENTIFIER
171171
{

src/main/java/org/domaframework/doma/intellij/psi/SqlCustomExprImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
import com.intellij.lang.ASTNode;
2020
import com.intellij.psi.PsiReference;
2121
import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
22+
import com.intellij.psi.util.PsiTreeUtil;
2223
import org.jetbrains.annotations.NotNull;
24+
import org.jetbrains.annotations.Nullable;
2325

24-
public class SqlCustomExprImpl extends ASTWrapperPsiElement implements SqlCustomElExpr {
26+
public class SqlCustomExprImpl extends ASTWrapperPsiElement
27+
implements SqlCustomElExpr, SqlElTermExpr {
2528

2629
public SqlCustomExprImpl(@NotNull ASTNode node) {
2730
super(node);
@@ -31,4 +34,9 @@ public SqlCustomExprImpl(@NotNull ASTNode node) {
3134
public PsiReference @NotNull [] getReferences() {
3235
return ReferenceProvidersRegistry.getReferencesFromProviders(this);
3336
}
37+
38+
@Override
39+
public @Nullable SqlElExpr getElExpr() {
40+
return PsiTreeUtil.getChildOfAnyType(this, SqlElExpr.class);
41+
}
3442
}

src/main/kotlin/org/domaframework/doma/intellij/extension/expr/SqlElExtensions.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ val SqlElStaticFieldAccessExpr.accessElements: List<SqlElIdExpr>
3434

3535
val SqlElFieldAccessExpr.accessElements: List<SqlElIdExpr?>
3636
get() =
37-
this.elExprList
37+
this
38+
.getElPrimaryExprList()
3839
.mapNotNull { it as SqlElIdExpr }
3940
.sortedBy { it.textOffset }
4041
.toList()

src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package org.domaframework.doma.intellij.document
1818
import com.intellij.openapi.vfs.VirtualFile
1919
import com.intellij.psi.PsiElement
2020
import org.domaframework.doma.intellij.DomaSqlTest
21+
import org.domaframework.doma.intellij.extension.expr.accessElements
2122
import org.domaframework.doma.intellij.psi.SqlBlockComment
2223
import org.domaframework.doma.intellij.psi.SqlElFieldAccessExpr
2324
import org.domaframework.doma.intellij.psi.SqlElForDirective
@@ -196,6 +197,6 @@ class SqlSymbolDocumentTestCase : DomaSqlTest() {
196197
return forDirective.elExprList.firstOrNull { it.text == searchElementName }
197198
}
198199

199-
return fieldAccessExpr.elExprList.firstOrNull { it.text == searchElementName }
200+
return fieldAccessExpr.accessElements.firstOrNull { it?.text == searchElementName }
200201
}
201202
}

src/test/testData/sql/parser/SQLParser.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ SELECT e.employee_id
1414
WHERE e.user_id = /* user.userId */0
1515
AND e.employee_id = /* employee.employeeId */0
1616
AND e.join_date <= /* referenceDate + 1 */'2099/12/31'
17-
/*%if @isNotBlank(employee.departmentId) */
17+
/*%if @isNotBlank(employee.departmentId) && (employee.departmentId > 100) */
1818
/*%if employee.departmentId.startsWith("200") */ 
1919
AND e.department_id = /* employee.departmentId + 1 */'dept'
20-
/*%elseif employee.numberOfProjects >= 3 */
20+
/*%elseif (employee.numberOfProjects >= 3) */
2121
AND pe.start_date <= CURRENT_DATE
2222
AND pe.end_date >= CURRENT_DATE
2323
/*%end*/

0 commit comments

Comments
 (0)