Skip to content

Commit c4ba80e

Browse files
committed
Fix warning in mixins for (Object) this instanceof SubclassOfTarget
1 parent 27e09ff commit c4ba80e

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/main/kotlin/platform/mixin/inspection/suppress/MixinClassCastInspectionSuppressor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class MixinClassCastInspectionSuppressor : InspectionSuppressor {
5959
operand = PsiUtil.skipParenthesizedExprDown(operand.operand) ?: return false
6060
}
6161
val realType = getRealType(operand) ?: return false
62-
return isAssignable(castType, realType)
62+
return isAssignable(realType, castType)
6363
}
6464

6565
// check == and !=

src/main/kotlin/platform/mixin/util/Mixin.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,30 @@ fun isAssignable(left: PsiType, right: PsiType): Boolean {
168168
}
169169
val leftClass = left.resolve() ?: return false
170170
val rightClass = right.resolve() ?: return false
171-
if (rightClass.isMixin) {
172-
val isMixinAssignable = rightClass.mixinTargets.any {
173-
val stubClass = it.findStubClass(rightClass.project) ?: return@any false
174-
isClassAssignable(leftClass, stubClass)
171+
172+
val isLeftMixin = leftClass.isMixin
173+
val isRightMixin = rightClass.isMixin
174+
if (isLeftMixin || isRightMixin) {
175+
fun getClassesToTest(clazz: PsiClass, isMixin: Boolean) = if (isMixin) {
176+
clazz.mixinTargets.mapNotNull { it.findStubClass(clazz.project) }
177+
} else {
178+
listOf(clazz)
179+
}
180+
181+
val leftClassesToTest = getClassesToTest(leftClass, isLeftMixin)
182+
val rightClassesToTest = getClassesToTest(rightClass, isRightMixin)
183+
184+
val isMixinAssignable = leftClassesToTest.any { leftToTest ->
185+
rightClassesToTest.any { rightToTest ->
186+
isClassAssignable(leftToTest, rightToTest)
187+
}
175188
}
189+
176190
if (isMixinAssignable) {
177191
return true
178192
}
179193
}
194+
180195
val mixins = FindMixinsAction.findMixins(rightClass, rightClass.project) ?: return false
181196
return mixins.any { isClassAssignable(leftClass, it) }
182197
}

0 commit comments

Comments
 (0)