Skip to content

Commit 88702a0

Browse files
committed
Fixed parent class search process
1 parent d564482 commit 88702a0

File tree

2 files changed

+27
-30
lines changed

2 files changed

+27
-30
lines changed

src/main/kotlin/org/domaframework/doma/intellij/action/sql/JumpToDeclarationFromSqlAction.kt

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ import org.domaframework.doma.intellij.extension.psi.getIterableClazz
4141
import org.domaframework.doma.intellij.extension.psi.isNotWhiteSpace
4242
import org.domaframework.doma.intellij.extension.psi.methodParameters
4343
import 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
4546
import 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
/**

src/main/kotlin/org/domaframework/doma/intellij/reference/SqlReference.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import org.domaframework.doma.intellij.psi.SqlElClass
3939
import org.domaframework.doma.intellij.psi.SqlElFieldAccessExpr
4040
import org.domaframework.doma.intellij.psi.SqlElForDirective
4141
import org.domaframework.doma.intellij.psi.SqlElIdExpr
42-
import org.domaframework.doma.intellij.psi.SqlElPrimaryExpr
4342
import org.domaframework.doma.intellij.psi.SqlElStaticFieldAccessExpr
4443
import org.domaframework.doma.intellij.psi.SqlTypes
4544

@@ -66,7 +65,7 @@ class SqlReference(
6665
val targetElement = getBlockCommentElements(element)
6766
if (targetElement.isEmpty()) return null
6867

69-
val topElm = targetElement.firstOrNull() as SqlElPrimaryExpr
68+
val topElm = targetElement.firstOrNull() as? PsiElement ?: return null
7069
findInForDirectiveBlock(topElm)
7170
?.let {
7271
PluginLoggerUtil.countLogging(
@@ -104,9 +103,8 @@ class SqlReference(
104103
if (staticDirection == null) return null
105104
val file: PsiFile = file ?: return null
106105
// Jump to class definition
107-
if (staticDirection is SqlElClass ||
108-
staticDirection.parent is SqlElClass
109-
) {
106+
val classParent = PsiTreeUtil.getParentOfType(staticDirection, SqlElClass::class.java)
107+
if (classParent != null) {
110108
val psiStaticElement = PsiStaticElement(staticDirection.text, file)
111109
PluginLoggerUtil.countLogging(
112110
this::class.java.simpleName,
@@ -155,11 +153,12 @@ class SqlReference(
155153
}
156154

157155
private fun getBlockCommentElements(element: PsiElement): List<PsiElement> {
156+
val fieldAccessExpr = PsiTreeUtil.getParentOfType(element, SqlElFieldAccessExpr::class.java)
158157
val nodeElm =
159-
if (element.parent is SqlElFieldAccessExpr) {
158+
if (fieldAccessExpr != null) {
160159
PsiTreeUtil
161160
.getChildrenOfType(
162-
element.parent,
161+
fieldAccessExpr,
163162
SqlElIdExpr::class.java,
164163
)?.filter { it.textOffset <= element.textOffset }
165164
} else {

0 commit comments

Comments
 (0)