User: joe Date: 09 Sep 23 05:37 Revision: c4ba80eaac4b24fca6f1c442ebaac0e7a16947e5 Summary: Fix warning in mixins for (Object) this instanceof SubclassOfTarget TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=8711&personal=false Index: src/main/kotlin/platform/mixin/inspection/suppress/MixinClassCastInspectionSuppressor.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/suppress/MixinClassCastInspectionSuppressor.kt (revision 27e09fffa883a1128d0c7e36d5362d2ce6fdacb1) +++ src/main/kotlin/platform/mixin/inspection/suppress/MixinClassCastInspectionSuppressor.kt (revision c4ba80eaac4b24fca6f1c442ebaac0e7a16947e5) @@ -59,7 +59,7 @@ operand = PsiUtil.skipParenthesizedExprDown(operand.operand) ?: return false } val realType = getRealType(operand) ?: return false - return isAssignable(castType, realType) + return isAssignable(realType, castType) } // check == and != Index: src/main/kotlin/platform/mixin/util/Mixin.kt =================================================================== --- src/main/kotlin/platform/mixin/util/Mixin.kt (revision 27e09fffa883a1128d0c7e36d5362d2ce6fdacb1) +++ src/main/kotlin/platform/mixin/util/Mixin.kt (revision c4ba80eaac4b24fca6f1c442ebaac0e7a16947e5) @@ -168,15 +168,30 @@ } val leftClass = left.resolve() ?: return false val rightClass = right.resolve() ?: return false - if (rightClass.isMixin) { - val isMixinAssignable = rightClass.mixinTargets.any { - val stubClass = it.findStubClass(rightClass.project) ?: return@any false - isClassAssignable(leftClass, stubClass) + + val isLeftMixin = leftClass.isMixin + val isRightMixin = rightClass.isMixin + if (isLeftMixin || isRightMixin) { + fun getClassesToTest(clazz: PsiClass, isMixin: Boolean) = if (isMixin) { + clazz.mixinTargets.mapNotNull { it.findStubClass(clazz.project) } + } else { + listOf(clazz) } + + val leftClassesToTest = getClassesToTest(leftClass, isLeftMixin) + val rightClassesToTest = getClassesToTest(rightClass, isRightMixin) + + val isMixinAssignable = leftClassesToTest.any { leftToTest -> + rightClassesToTest.any { rightToTest -> + isClassAssignable(leftToTest, rightToTest) + } + } + if (isMixinAssignable) { return true } } + val mixins = FindMixinsAction.findMixins(rightClass, rightClass.project) ?: return false return mixins.any { isClassAssignable(leftClass, it) } }