@@ -41,9 +41,9 @@ import org.domaframework.doma.intellij.extension.psi.getIterableClazz
4141import org.domaframework.doma.intellij.extension.psi.isNotWhiteSpace
4242import org.domaframework.doma.intellij.extension.psi.methodParameters
4343import org.domaframework.doma.intellij.psi.SqlElClass
44- import org.domaframework.doma.intellij.psi.SqlElPrimaryExpr
44+ import org.domaframework.doma.intellij.psi.SqlElFieldAccessExpr
45+ import org.domaframework.doma.intellij.psi.SqlElIdExpr
4546import org.domaframework.doma.intellij.psi.SqlElStaticFieldAccessExpr
46- import org.domaframework.doma.intellij.psi.SqlTypes
4747
4848/* *
4949 * Action to jump from SQL bind variable to Dao method argument and Entity class
@@ -80,8 +80,7 @@ class JumpToDeclarationFromSqlAction : AnAction() {
8080
8181 val elm = element ? : return
8282 val elementText = elm.text ? : " "
83- val staticDirection = elm.parent
84- val staticDirective = getStaticDirective(staticDirection, elementText)
83+ val staticDirective = getStaticDirective(elm, elementText)
8584 if (staticDirective != null ) {
8685 e.presentation.isEnabledAndVisible = true
8786 return
@@ -124,8 +123,7 @@ class JumpToDeclarationFromSqlAction : AnAction() {
124123 val file = currentFile ? : return
125124
126125 val startTime = System .nanoTime()
127- val staticDirection = elm.parent
128- val staticDirective = getStaticDirective(staticDirection, elementText)
126+ val staticDirective = getStaticDirective(elm, elementText)
129127 if (staticDirective != null ) {
130128 BindVariableElement (staticDirective).jumpToEntity()
131129 PluginLoggerUtil .countLoggingByAction(
@@ -166,16 +164,15 @@ class JumpToDeclarationFromSqlAction : AnAction() {
166164 if (staticDirection == null ) return null
167165 val file: PsiFile = currentFile ? : return null
168166 // Jump to class definition
169- if (staticDirection is SqlElClass ) {
167+ val classParent = PsiTreeUtil .getParentOfType(staticDirection, SqlElClass ::class .java)
168+ if (classParent != null ) {
170169 val psiStaticElement = PsiStaticElement (staticDirection.text, file)
171170 return psiStaticElement.getRefClazz()
172171 }
173172
174173 // Jump from field or method to definition (assuming the top element is static)
175- val staticAccessParent = staticDirection.parent
176- if (staticDirection is SqlElStaticFieldAccessExpr ||
177- staticAccessParent is SqlElStaticFieldAccessExpr
178- ) {
174+ val staticAccessParent = PsiTreeUtil .getParentOfType(staticDirection, SqlElStaticFieldAccessExpr ::class .java)
175+ if (staticAccessParent != null ) {
179176 val firstChildText =
180177 staticAccessParent.children
181178 .firstOrNull()
@@ -204,8 +201,7 @@ class JumpToDeclarationFromSqlAction : AnAction() {
204201 private fun isNotBindVariable (it : PsiElement ) =
205202 (
206203 it.parent?.elementType is IFileElementType &&
207- it.elementType != SqlTypes .EL_IDENTIFIER &&
208- it !is SqlElPrimaryExpr &&
204+ it !is SqlElIdExpr &&
209205 ! it.isNotWhiteSpace()
210206 )
211207
@@ -258,18 +254,20 @@ class JumpToDeclarationFromSqlAction : AnAction() {
258254 }
259255
260256 private fun getBlockCommentElements (element : PsiElement ): List <PsiElement > {
257+ val fieldAccessExpr = PsiTreeUtil .getParentOfType(element, SqlElFieldAccessExpr ::class .java)
261258 val nodeElm =
262- PsiTreeUtil
263- .getChildrenOfType(element.parent, PsiElement ::class .java)
264- ?.filter {
265- (
266- it.elementType == SqlTypes .EL_IDENTIFIER ||
267- it is SqlElPrimaryExpr
268- ) &&
269- it.textOffset <= element.textOffset
270- }?.toList()
271- ?.sortedBy { it.textOffset } ? : emptyList()
259+ if (fieldAccessExpr != null ) {
260+ PsiTreeUtil
261+ .getChildrenOfType(
262+ fieldAccessExpr,
263+ SqlElIdExpr ::class .java,
264+ )?.filter { it.textOffset <= element.textOffset }
265+ } else {
266+ listOf (element)
267+ }
272268 return nodeElm
269+ ?.toList()
270+ ?.sortedBy { it.textOffset } ? : emptyList()
273271 }
274272
275273 /* *
0 commit comments