Skip to content

Commit cb8f87f

Browse files
authored
Merge pull request #286 from domaframework/fix/generate-sql-path-include-source-name
Ensure Correct SQL File Path Generation When Package Name Matches Source Directory
2 parents 9c2e839 + 29f78f0 commit cb8f87f

File tree

12 files changed

+244
-88
lines changed

12 files changed

+244
-88
lines changed

src/main/kotlin/org/domaframework/doma/intellij/common/dao/DaoMethodUtil.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,12 @@ fun getRelativeSqlFilePathFromDaoFilePath(
218218
val pathParams = CommonPathParameterUtil.getModulePaths(module)
219219
var relativeSqlFilePath =
220220
daoFile.path
221-
.replace(pathParams.moduleBasePath?.path ?: "", "")
221+
.replaceFirst(pathParams.moduleBasePath?.path ?: "", "")
222222
.replace(".$extension", "")
223223
val sources = CommonPathParameterUtil.getSources(module, daoFile)
224224
sources.forEach { source ->
225225
relativeSqlFilePath =
226-
relativeSqlFilePath.replace(
226+
relativeSqlFilePath.replaceFirst(
227227
"/" + source.nameWithoutExtension,
228228
RESOURCES_META_INF_PATH,
229229
)

src/test/kotlin/org/domaframework/doma/intellij/DomaSqlTest.kt

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,17 @@ open class DomaSqlTest : LightJavaCodeInsightFixtureTestCase() {
173173
packageName: String,
174174
fileName: String,
175175
) {
176-
val file = File("$testDataPath/$sourceRoot/$packagePath/$packageName/$fileName")
176+
val originalPackageName = "$packagePath/$packageName"
177+
addOtherPackageJavaFile(originalPackageName, fileName)
178+
}
179+
180+
protected fun addOtherPackageJavaFile(
181+
packageName: String,
182+
fileName: String,
183+
) {
184+
val file = File("$testDataPath/$sourceRoot/$packageName/$fileName")
177185
myFixture.addFileToProject(
178-
"main/$sourceRoot/$packagePath/$packageName/$fileName",
186+
"main/$sourceRoot/$packageName/$fileName",
179187
file.readText(),
180188
)
181189
}
@@ -199,26 +207,45 @@ open class DomaSqlTest : LightJavaCodeInsightFixtureTestCase() {
199207

200208
fun addSqlFile(vararg sqlNames: String) {
201209
for (sqlName in sqlNames) {
202-
val file = File("$testDataPath/$resourceRoot/$RESOURCES_META_INF_PATH/$packagePath/dao/$sqlName")
203-
myFixture.addFileToProject(
204-
"main/$resourceRoot/$RESOURCES_META_INF_PATH/$packagePath/dao/$sqlName",
205-
file.readText(),
206-
)
210+
addOtherPackageSqlFile("$packagePath/dao", sqlName)
207211
}
208212
}
209213

210-
fun findSqlFile(sqlName: String): VirtualFile? {
214+
fun addOtherPackageSqlFile(
215+
packageName: String,
216+
sqlName: String,
217+
) {
218+
val sqlPath = "$resourceRoot/$RESOURCES_META_INF_PATH/$packageName/$sqlName"
219+
val file = File("$testDataPath/$sqlPath")
220+
myFixture.addFileToProject(
221+
"main/$sqlPath",
222+
file.readText(),
223+
)
224+
}
225+
226+
fun findSqlFile(sqlName: String): VirtualFile? = findSqlFile(packagePath, sqlName)
227+
228+
fun findSqlFile(
229+
packageName: String,
230+
sqlName: String,
231+
): VirtualFile? {
211232
val module = myFixture.module
233+
val sqlFileName = "$RESOURCES_META_INF_PATH/$packageName/dao/$sqlName"
212234
return module?.getResourcesSQLFile(
213-
"$RESOURCES_META_INF_PATH/$packagePath/dao/$sqlName",
235+
sqlFileName,
214236
false,
215237
)
216238
}
217239

218-
fun findDaoClass(testDaoName: String): PsiClass {
219-
val daoName = testDaoName.replace("/", ".")
220-
val dao = myFixture.findClass("doma.example.dao.$daoName")
221-
assertNotNull("Not Found [$testDaoName]", dao)
240+
fun findDaoClass(testDaoName: String): PsiClass = findDaoClass("doma.example.dao", testDaoName)
241+
242+
fun findDaoClass(
243+
packageName: String,
244+
testDaoName: String,
245+
): PsiClass {
246+
val daoName = "$packageName.$testDaoName".replace("/", ".")
247+
val dao = myFixture.findClass(daoName)
248+
assertNotNull("Not Found [$daoName]", dao)
222249
return dao
223250
}
224251

src/test/kotlin/org/domaframework/doma/intellij/gutteraction/dao/DaoGutterActionTest.kt

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.daemon.GutterMark
2020
import com.intellij.codeInsight.daemon.LineMarkerInfo
2121
import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo
2222
import com.intellij.openapi.fileEditor.FileEditorManager
23+
import com.intellij.psi.PsiClass
2324
import com.intellij.psi.PsiElement
2425
import org.domaframework.doma.intellij.DomaSqlTest
2526
import org.domaframework.doma.intellij.bundle.MessageBundle
@@ -72,76 +73,86 @@ class DaoGutterActionTest : DomaSqlTest() {
7273
"$packageName/BatchUpdateGutterTestDao/existsSQLFile3.sql",
7374
"$packageName/BatchDeleteGutterTestDao/existsSQLFile3.sql",
7475
)
76+
77+
addOtherPackageJavaFile("doma/java/dao", "SourceNameDao.java")
78+
addOtherPackageSqlFile("doma/java/dao", "SourceNameDao/existsSQLFile1.sql")
7579
}
7680

7781
fun testSelectDisplayGutter() {
7882
val daoName = "$packageName.SelectGutterTestDao"
7983
val total = 2
80-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
84+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
8185
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
8286
}
8387

8488
fun testInsertDisplayGutter() {
8589
val daoName = "$packageName.InsertGutterTestDao"
8690
val total = 2
87-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
91+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
8892
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
8993
}
9094

9195
fun testUpdateDisplayGutter() {
9296
val daoName = "$packageName.UpdateGutterTestDao"
9397
val total = 2
94-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
98+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
9599
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
96100
}
97101

98102
fun testDeleteDisplayGutter() {
99103
val daoName = "$packageName.DeleteGutterTestDao"
100104
val total = 1
101-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
105+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
102106
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
103107
}
104108

105109
fun testBatchInsertDisplayGutter() {
106110
val daoName = "$packageName.BatchInsertGutterTestDao"
107111
val total = 3
108-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
112+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
109113
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
110114
}
111115

112116
fun testBatchUpdateDisplayGutter() {
113117
val daoName = "$packageName.BatchUpdateGutterTestDao"
114118
val total = 3
115-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
119+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
116120
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
117121
}
118122

119123
fun testBatchDeleteDisplayGutter() {
120124
val daoName = "$packageName.BatchDeleteGutterTestDao"
121125
val total = 2
122-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
126+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
123127
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
124128
}
125129

126130
fun testScriptDisplayGutter() {
127131
val daoName = "$packageName.ScriptGutterTestDao"
128132
val total = 2
129-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
133+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
130134
gutterIconNavigation("existsSQLFile1.script", targetGutter)
131135
}
132136

133137
fun testSqlProcessorDisplayGutter() {
134138
val daoName = "$packageName.SqlProcessorGutterTestDao"
135139
val total = 2
136-
val targetGutter = gutterIconsDisplayedTest(daoName, total)
140+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(daoName), total)
141+
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
142+
}
143+
144+
fun testSourceDirectoryDisplayGutter() {
145+
val originalPackageName = "doma.java.dao"
146+
val daoName = "SourceNameDao"
147+
val total = 1
148+
val targetGutter = gutterIconsDisplayedTest(findDaoClass(originalPackageName, daoName), total)
137149
gutterIconNavigation("existsSQLFile1.sql", targetGutter)
138150
}
139151

140152
private fun gutterIconsDisplayedTest(
141-
daoName: String,
153+
dao: PsiClass,
142154
total: Int,
143155
): LineMarkerInfo<*>? {
144-
val dao = findDaoClass(daoName)
145156
val targetElementNames = listOf("existsSQLFile1", "existsSQLFile2", "existsSQLFile3")
146157

147158
myFixture.configureFromExistingVirtualFile(dao.containingFile.virtualFile)

src/test/kotlin/org/domaframework/doma/intellij/gutteraction/dao/DaoJumpActionTest.kt

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent
2424
import com.intellij.openapi.actionSystem.CommonDataKeys
2525
import com.intellij.openapi.actionSystem.DataContext
2626
import com.intellij.openapi.fileEditor.FileEditorManager
27+
import com.intellij.psi.PsiClass
2728
import org.domaframework.doma.intellij.DomaSqlTest
2829
import java.awt.event.InputEvent
2930
import java.awt.event.MouseEvent
@@ -83,152 +84,162 @@ class DaoJumpActionTest : DomaSqlTest() {
8384
"$packageName/ScriptGutterTestDao/existsSQLFile2.script",
8485
"$packageName/SqlProcessorGutterTestDao/existsSQLFile2.sql",
8586
)
87+
88+
addOtherPackageJavaFile("doma/java/dao", "SourceNameDao.java")
89+
addOtherPackageSqlFile("doma/java/dao", "SourceNameDao/jumpToDaoFile.sql")
8690
}
8791

8892
fun testSelectJumpToSqlAction() {
8993
val daoName = "$packageName.SelectGutterTestDao"
9094
val sqlFileName = "existsSQLFile1.sql"
91-
val action: AnAction = getActionTest(daoName)
95+
val action: AnAction = getActionTest(findDaoClass(daoName))
9296
isDisplayedActionTest(action)
9397
jumpToSqlTest(action, sqlFileName)
9498
}
9599

96100
fun testInsertJumpToSqlAction() {
97101
val daoName = "$packageName.InsertGutterTestDao"
98102
val sqlFileName = "existsSQLFile2.sql"
99-
val action: AnAction = getActionTest(daoName)
103+
val action: AnAction = getActionTest(findDaoClass(daoName))
100104
isDisplayedActionTest(action)
101105
jumpToSqlTest(action, sqlFileName)
102106
}
103107

104108
fun testUpdateJumpToSqlAction() {
105109
val daoName = "$packageName.UpdateGutterTestDao"
106110
val sqlFileName = "existsSQLFile1.sql"
107-
val action: AnAction = getActionTest(daoName)
111+
val action: AnAction = getActionTest(findDaoClass(daoName))
108112
isDisplayedActionTest(action)
109113
jumpToSqlTest(action, sqlFileName)
110114
}
111115

112116
fun testDeleteJumpToSqlAction() {
113117
val daoName = "$packageName.DeleteGutterTestDao"
114118
val sqlFileName = "existsSQLFile1.sql"
115-
val action: AnAction = getActionTest(daoName)
119+
val action: AnAction = getActionTest(findDaoClass(daoName))
116120
isDisplayedActionTest(action)
117121
jumpToSqlTest(action, sqlFileName)
118122
}
119123

120124
fun testBatchInsertJumpToSqlAction() {
121125
val daoName = "$packageName.BatchInsertGutterTestDao"
122126
val sqlFileName = "existsSQLFile2.sql"
123-
val action: AnAction = getActionTest(daoName)
127+
val action: AnAction = getActionTest(findDaoClass(daoName))
124128
isDisplayedActionTest(action)
125129
jumpToSqlTest(action, sqlFileName)
126130
}
127131

128132
fun testBatchUpdateJumpToSqlAction() {
129133
val daoName = "$packageName.BatchUpdateGutterTestDao"
130134
val sqlFileName = "existsSQLFile2.sql"
131-
val action: AnAction = getActionTest(daoName)
135+
val action: AnAction = getActionTest(findDaoClass(daoName))
132136
isDisplayedActionTest(action)
133137
jumpToSqlTest(action, sqlFileName)
134138
}
135139

136140
fun testBatchDeleteJumpToSqlAction() {
137141
val daoName = "$packageName.BatchDeleteGutterTestDao"
138142
val sqlFileName = "existsSQLFile2.sql"
139-
val action: AnAction = getActionTest(daoName)
143+
val action: AnAction = getActionTest(findDaoClass(daoName))
140144
isDisplayedActionTest(action)
141145
jumpToSqlTest(action, sqlFileName)
142146
}
143147

144148
fun testScriptJumpToSqlAction() {
145149
val daoName = "$packageName.ScriptGutterTestDao"
146150
val sqlFileName = "existsSQLFile2.script"
147-
val action: AnAction = getActionTest(daoName)
151+
val action: AnAction = getActionTest(findDaoClass(daoName))
148152
isDisplayedActionTest(action)
149153
jumpToSqlTest(action, sqlFileName)
150154
}
151155

152156
fun testSqlProcessorJumpToSqlAction() {
153157
val daoName = "$packageName.SqlProcessorGutterTestDao"
154158
val sqlFileName = "existsSQLFile1.sql"
155-
val action: AnAction = getActionTest(daoName)
159+
val action: AnAction = getActionTest(findDaoClass(daoName))
160+
isDisplayedActionTest(action)
161+
jumpToSqlTest(action, sqlFileName)
162+
}
163+
164+
fun testSourceNameJumpToSql() {
165+
val daoName = "SourceNameDao"
166+
val sqlFileName = "jumpToDaoFile.sql"
167+
val action: AnAction = getActionTest(findDaoClass("doma.java.dao", daoName))
156168
isDisplayedActionTest(action)
157169
jumpToSqlTest(action, sqlFileName)
158170
}
159171

160172
fun testSelectNotDisplayJumpToSql() {
161173
val daoName = "$packageName.SelectInvalidCaretTestDao"
162-
val action: AnAction = getActionTest(daoName)
174+
val action: AnAction = getActionTest(findDaoClass(daoName))
163175
isNotDisplayedActionTest(action)
164176
canSqlTest(action, "nonExistSQLFile.sql")
165177
}
166178

167179
fun testInsertNotDisplayJumpToSql() {
168180
val daoName = "$packageName.InsertInvalidCaretTestDao"
169-
val action: AnAction = getActionTest(daoName)
181+
val action: AnAction = getActionTest(findDaoClass(daoName))
170182
isNotDisplayedActionTest(action)
171183
canSqlTest(action, "nonExistSQLFileAndTemplateIncludedList.sql")
172184
}
173185

174186
fun testUpdateNotDisplayJumpToSql() {
175187
val daoName = "$packageName.UpdateInvalidCaretTestDao"
176-
val action: AnAction = getActionTest(daoName)
188+
val action: AnAction = getActionTest(findDaoClass(daoName))
177189
isNotDisplayedActionTest(action)
178190
canSqlTest(action, "nonRequireSQLFile.sql")
179191
}
180192

181193
fun testDeleteNotDisplayJumpToSql() {
182194
val daoName = "$packageName.DeleteInvalidCaretTestDao"
183-
val action: AnAction = getActionTest(daoName)
195+
val action: AnAction = getActionTest(findDaoClass(daoName))
184196
isNotDisplayedActionTest(action)
185197
canSqlTest(action, "nonRequireSQLFile.sql")
186198
}
187199

188200
fun testBatchInsertNotDisplayJumpToSql() {
189201
val daoName = "$packageName.BatchInsertInvalidCaretTestDao"
190-
val action: AnAction = getActionTest(daoName)
202+
val action: AnAction = getActionTest(findDaoClass(daoName))
191203
isNotDisplayedActionTest(action)
192204
canSqlTest(action, "nonExistSQLFileError.sql")
193205
}
194206

195207
fun testBatchUpdateNotDisplayJumpToSql() {
196208
val daoName = "$packageName.BatchUpdateInvalidCaretTestDao"
197-
val action: AnAction = getActionTest(daoName)
209+
val action: AnAction = getActionTest(findDaoClass(daoName))
198210
isNotDisplayedActionTest(action)
199211
canSqlTest(action, "nonExistSQLFileAndTemplateIncludedList.sql")
200212
}
201213

202214
fun testBatchDeleteNotDisplayJumpToSql() {
203215
val daoName = "$packageName.BatchDeleteInvalidCaretTestDao"
204-
val action: AnAction = getActionTest(daoName)
216+
val action: AnAction = getActionTest(findDaoClass(daoName))
205217
isNotDisplayedActionTest(action)
206218
canSqlTest(action, "nonRequireSQLFile.sql")
207219
}
208220

209221
fun testScriptNotDisplayJumpToSql() {
210222
val daoName = "$packageName.ScriptInvalidCaretTestDao"
211-
val action: AnAction = getActionTest(daoName)
223+
val action: AnAction = getActionTest(findDaoClass(daoName))
212224
isNotDisplayedActionTest(action)
213225
canSqlTest(action, "nonExistSQLFileAndTemplateIncludedList.script")
214226
}
215227

216228
fun testSqlProcessorNotDisplayJumpToSql() {
217229
val daoName = "$packageName.SqlProcessorInvalidCaretTestDao"
218-
val action: AnAction = getActionTest(daoName)
230+
val action: AnAction = getActionTest(findDaoClass(daoName))
219231
isNotDisplayedActionTest(action)
220232
canSqlTest(action, "nonExistSQLFile.sql")
221233
}
222234

223235
fun testSqlNotDisplayJumpToSql() {
224236
val daoName = "$packageName.InvalidCaretTestDao"
225-
val action: AnAction = getActionTest(daoName)
237+
val action: AnAction = getActionTest(findDaoClass(daoName))
226238
isNotDisplayedActionTest(action)
227239
canSqlTest(action, "nonExistSQLFile.sql")
228240
}
229241

230-
private fun getActionTest(daoName: String): AnAction {
231-
val dao = findDaoClass(daoName)
242+
private fun getActionTest(dao: PsiClass): AnAction {
232243
myFixture.configureFromExistingVirtualFile(dao.containingFile.virtualFile)
233244

234245
val action: AnAction = ActionManager.getInstance().getAction(actionId)

0 commit comments

Comments
 (0)