Skip to content

Commit 270c57f

Browse files
authored
Merge pull request #373 from domaframework/fix/ignore-specific-dao-method-parameters
Exclude Specific DAO Parameter Types from SQL Bind Variable Suggestions
2 parents 2b8e055 + 010a997 commit 270c57f

File tree

23 files changed

+380
-105
lines changed

23 files changed

+380
-105
lines changed

src/main/kotlin/org/domaframework/doma/intellij/common/util/TypeUtil.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ object TypeUtil {
4949
type: PsiType?,
5050
project: Project,
5151
): Boolean {
52-
val clazz = type?.canonicalText?.let { project.getJavaClazz(it) }
52+
val clazz = type?.let { project.getJavaClazz(type) }
5353
return clazz?.isEntity() == true
5454
}
5555

src/main/kotlin/org/domaframework/doma/intellij/extension/ProjectExtensions.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ import com.intellij.openapi.roots.ProjectRootManager
2222
import com.intellij.openapi.vfs.VirtualFile
2323
import com.intellij.psi.JavaPsiFacade
2424
import com.intellij.psi.PsiClass
25+
import com.intellij.psi.PsiClassType
2526
import com.intellij.psi.PsiFile
2627
import com.intellij.psi.PsiManager
28+
import com.intellij.psi.PsiType
2729
import com.intellij.psi.search.GlobalSearchScope
2830

2931
fun Project.getContentRoot(baseFile: VirtualFile): VirtualFile? =
@@ -40,15 +42,19 @@ fun Project.getModule(virtualFile: VirtualFile): Module? =
4042

4143
fun Project.findFile(file: VirtualFile): PsiFile? = PsiManager.getInstance(this).findFile(file)
4244

45+
fun Project.getJavaClazz(type: PsiType): PsiClass? {
46+
val topClassName = (type as? PsiClassType)?.rawType()?.canonicalText ?: type.canonicalText
47+
return getJavaClazz(topClassName)
48+
}
49+
4350
fun Project.getJavaClazz(fqdn: String): PsiClass? {
4451
val scope = GlobalSearchScope.allScope(this)
45-
val topClassName = fqdn.substringBefore("<")
4652
return JavaPsiFacade
4753
.getInstance(this)
48-
.findClasses(topClassName, scope)
54+
.findClasses(fqdn, scope)
4955
.firstOrNull()
5056
?: JavaPsiFacade.getInstance(this).findClass(
51-
topClassName,
57+
fqdn,
5258
GlobalSearchScope.allScope(this),
5359
)
5460
}

src/main/kotlin/org/domaframework/doma/intellij/extension/psi/PsiMethodExtension.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ fun PsiMethod.findParameter(searchName: String): PsiParameter? = this.methodPara
2323
val PsiMethod.methodParameters: List<PsiParameter>
2424
get() = this.parameterList.parameters.toList()
2525

26-
fun PsiMethod.searchParameter(searchName: String): List<PsiParameter> = this.methodParameters.filter { it.name.startsWith(searchName) }
26+
fun PsiMethod.searchParameter(searchName: String): List<PsiParameter> =
27+
this.methodParameters.filter {
28+
it.name.startsWith(searchName) &&
29+
!it.isIgnoreUsageCheck()
30+
}

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/TypeCheckerProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ abstract class TypeCheckerProcessor(
9999
val paramClassType = paramType as? PsiClassType ?: return false
100100
val optionalParam = paramClassType.parameters.firstOrNull()
101101
return optionalParam?.let {
102-
val optionalParamClass = project.getJavaClazz(it.canonicalText)
102+
val optionalParamClass = project.getJavaClazz(it)
103103
optionalParamClass?.isDomain() == true || optionalParamClass?.isDataType() == true || PsiTypeChecker.isBaseClassType(it)
104104
} == true
105105
}

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/cheker/ProcedureFunctionResultSetParamAnnotationTypeChecker.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class ProcedureFunctionResultSetParamAnnotationTypeChecker(
4444
val paramClassType = paramType as? PsiClassType ?: return false
4545
val optionalParam = paramClassType.parameters.firstOrNull()
4646
return optionalParam?.let {
47-
val optionalParamClass = project.getJavaClazz(it.canonicalText)
47+
val optionalParamClass = project.getJavaClazz(it)
4848
optionalParamClass?.isDomain() == true ||
4949
optionalParamClass?.isEntity() == true ||
5050
optionalParamClass?.isDataType() == true ||
@@ -54,7 +54,7 @@ class ProcedureFunctionResultSetParamAnnotationTypeChecker(
5454
} == true
5555
}
5656

57-
val paramClass = project.getJavaClazz(paramType.canonicalText)
57+
val paramClass = project.getJavaClazz(paramType)
5858
return paramClass?.isDomain() == true || paramClass?.isDataType() == true
5959
}
6060

@@ -101,7 +101,7 @@ class ProcedureFunctionResultSetParamAnnotationTypeChecker(
101101
return
102102
}
103103

104-
val paramClass = project.getJavaClazz(listParamType.canonicalText)
104+
val paramClass = project.getJavaClazz(listParamType)
105105

106106
if (checkParamType(listParamType) || paramClass?.isEntity() == true || paramClass?.isDataType() == true) return
107107
result.highlightElement(holder)

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/option/DaoAnnotationOptionParameterCheckProcessor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class DaoAnnotationOptionParameterCheckProcessor(
6262
}
6363
}
6464

65-
val entityClass = project.getJavaClazz(entityType.canonicalText) ?: return
65+
val entityClass = project.getJavaClazz(entityType) ?: return
6666
if (!entityClass.isEntity()) {
6767
return
6868
}
@@ -110,7 +110,7 @@ class DaoAnnotationOptionParameterCheckProcessor(
110110
?.find { property -> isOptionTargetProperty(property, field, project) }
111111
?.let { f ->
112112
preSearchParamClass = searchParamClass
113-
searchParamClass = project.getJavaClazz(f.type.canonicalText) ?: return@map
113+
searchParamClass = project.getJavaClazz(f.type) ?: return@map
114114
}
115115
?: run {
116116
ValidationAnnotationOptionParameterResult(

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/paramtype/BatchParamTypeCheckProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class BatchParamTypeCheckProcessor(
7272
shortName,
7373
)
7474

75-
project.getJavaClazz(param.type.canonicalText)?.let { paramClass ->
75+
project.getJavaClazz(param.type)?.let { paramClass ->
7676
val paramClassType = paramClass.psiClassType
7777
if (!PsiClassTypeUtil.isIterableType(
7878
paramClassType,

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/paramtype/MultiInsertParamTypeCheckProcessor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class MultiInsertParamTypeCheckProcessor(
7272
shortName,
7373
)
7474

75-
project.getJavaClazz(param.type.canonicalText)?.let { paramClass ->
75+
project.getJavaClazz(param.type)?.let { paramClass ->
7676
val paramClassType = paramClass.psiClassType
7777
if (!PsiClassTypeUtil.isIterableType(
7878
paramClassType,
@@ -87,7 +87,7 @@ class MultiInsertParamTypeCheckProcessor(
8787
val iterableClassType = param.type as? PsiClassType
8888
iterableClassType?.parameters?.firstOrNull()?.let { iterableParam ->
8989
project
90-
.getJavaClazz(iterableParam.canonicalText)
90+
.getJavaClazz(iterableParam)
9191
?.let {
9292
if (!it.isEntity()) {
9393
resultParamType.highlightElement(holder)

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/paramtype/SelectParamTypeCheckProcessor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ class SelectParamTypeCheckProcessor(
4747
val paramClassType = paramType as? PsiClassType ?: return false
4848
val optionalParam = paramClassType.parameters.firstOrNull()
4949
return optionalParam?.let {
50-
val optionalParamClass = project.getJavaClazz(it.canonicalText)
50+
val optionalParamClass = project.getJavaClazz(it)
5151
optionalParamClass?.isDomain() == true ||
5252
PsiTypeChecker.isBaseClassType(it) ||
5353
optionalParamClass?.isEntity() == true ||
5454
optionalParamClass?.isDataType() == true
5555
} == true
5656
}
5757

58-
val paramClass = project.getJavaClazz(paramType.canonicalText)
58+
val paramClass = project.getJavaClazz(paramType)
5959
return paramClass?.isDomain() == true || paramClass?.isEntity() == true || paramClass?.isDataType() == true
6060
}
6161

src/main/kotlin/org/domaframework/doma/intellij/inspection/dao/processor/returntype/UpdateReturnTypeCheckProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class UpdateReturnTypeCheckProcessor(
9090

9191
val checkReturnType =
9292
PsiClassTypeUtil.convertOptionalType(returnType, project)
93-
val returnTypeClass = project.getJavaClazz(checkReturnType.canonicalText)
93+
val returnTypeClass = project.getJavaClazz(checkReturnType)
9494

9595
return if (!validateReturnType(returnTypeClass, paramClass)) {
9696
ValidationReturnTypeUpdateReturningResult(

0 commit comments

Comments
 (0)