Skip to content

Commit 4e1fc4b

Browse files
committed
Fix: Support generic params in WrongOperationParametersInspection.
Also fix incorrect primitive conversion errors.
1 parent d8f2597 commit 4e1fc4b

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/main/kotlin/platform/mixin/inspection/mixinextras/WrongOperationParametersInspection.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.demonwav.mcdev.platform.mixin.inspection.MixinInspection
2424
import com.demonwav.mcdev.platform.mixin.util.MixinConstants
2525
import com.demonwav.mcdev.platform.mixin.util.isAssignable
2626
import com.demonwav.mcdev.util.McdevDfaUtil
27+
import com.demonwav.mcdev.util.toObjectType
2728
import com.intellij.codeInsight.intention.FileModifier.SafeFieldForPreview
2829
import com.intellij.codeInspection.LocalQuickFixOnPsiElement
2930
import com.intellij.codeInspection.ProblemsHolder
@@ -52,6 +53,7 @@ class WrongOperationParametersInspection : MixinInspection() {
5253
if (expression.resolveMethod()?.containingClass?.qualifiedName != MixinConstants.MixinExtras.OPERATION) {
5354
return
5455
}
56+
val project = expression.project
5557

5658
val containingMethod = PsiTreeUtil.getParentOfType(
5759
expression,
@@ -85,7 +87,7 @@ class WrongOperationParametersInspection : MixinInspection() {
8587
if (expression.argumentList.expressionCount == expectedParamTypes.size) {
8688
val allValid = expression.argumentList.expressions.zip(expectedParamTypes).all { (expr, expectedType) ->
8789
val exprType = McdevDfaUtil.getDataflowType(expr) ?: return@all true
88-
isAssignable(expectedType, exprType, false)
90+
isAssignable(expectedType.toObjectType(project), exprType.toObjectType(project))
8991
}
9092
if (allValid) {
9193
return

src/main/kotlin/util/psi-utils.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.intellij.openapi.editor.Document
3131
import com.intellij.openapi.module.Module
3232
import com.intellij.openapi.module.ModuleManager
3333
import com.intellij.openapi.module.ModuleUtilCore
34+
import com.intellij.openapi.project.Project
3435
import com.intellij.openapi.roots.LibraryOrderEntry
3536
import com.intellij.openapi.roots.ModuleRootManager
3637
import com.intellij.openapi.roots.ProjectFileIndex
@@ -53,6 +54,7 @@ import com.intellij.psi.PsiExpression
5354
import com.intellij.psi.PsiFile
5455
import com.intellij.psi.PsiKeyword
5556
import com.intellij.psi.PsiLanguageInjectionHost
57+
import com.intellij.psi.PsiManager
5658
import com.intellij.psi.PsiMember
5759
import com.intellij.psi.PsiMethod
5860
import com.intellij.psi.PsiMethodReferenceExpression
@@ -62,11 +64,13 @@ import com.intellij.psi.PsiModifierList
6264
import com.intellij.psi.PsiNameValuePair
6365
import com.intellij.psi.PsiParameter
6466
import com.intellij.psi.PsiParameterList
67+
import com.intellij.psi.PsiPrimitiveType
6568
import com.intellij.psi.PsiReference
6669
import com.intellij.psi.PsiReferenceExpression
6770
import com.intellij.psi.PsiType
6871
import com.intellij.psi.ResolveResult
6972
import com.intellij.psi.filters.ElementFilter
73+
import com.intellij.psi.search.GlobalSearchScope
7074
import com.intellij.psi.util.CachedValue
7175
import com.intellij.psi.util.CachedValueProvider
7276
import com.intellij.psi.util.CachedValuesManager
@@ -277,6 +281,14 @@ fun PsiType.normalize(): PsiType {
277281
return normalized
278282
}
279283

284+
fun PsiType.toObjectType(project: Project): PsiType =
285+
when (val normalized = normalize()) {
286+
is PsiPrimitiveType ->
287+
normalized.getBoxedType(PsiManager.getInstance(project), GlobalSearchScope.allScope(project))
288+
?: normalized
289+
else -> normalized
290+
}
291+
280292
val PsiMethod.nameAndParameterTypes: String
281293
get() = "$name(${parameterList.parameters.joinToString(", ") { it.type.presentableText }})"
282294

0 commit comments

Comments
 (0)