Skip to content

Commit 65b1f8e

Browse files
committed
Fix FIR reporting error for classes to mock that accept enum as a parameter in the constructor
1 parent 66f91d0 commit 65b1f8e

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

mokkery-plugin/src/main/kotlin/dev/mokkery/plugin/diagnostics/MocksCreationChecker.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
2222
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker
2323
import org.jetbrains.kotlin.fir.analysis.checkers.isSubtypeOfThrowable
2424
import org.jetbrains.kotlin.fir.declarations.constructors
25+
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
2526
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
2627
import org.jetbrains.kotlin.fir.declarations.utils.isInline
2728
import org.jetbrains.kotlin.fir.declarations.utils.isInlineOrValue
@@ -297,7 +298,6 @@ class MocksCreationChecker(
297298
val cls = type
298299
.toRegularClassSymbol()
299300
?: return listOf(type to StubError.NoAccessibleConstructors)
300-
if (cls.isInlineOrValue) return emptyList()
301301
val constructors = cls
302302
.constructors(context.session)
303303
.filter { it.isAccessible() }
@@ -339,7 +339,8 @@ class MocksCreationChecker(
339339
|| isSomeFunctionType(context.session)
340340
|| toRegularClassSymbol()?.let { cls ->
341341
val fqName = cls.packageFqName()
342-
cls.isInterface()
342+
cls.isRegularInterface()
343+
|| cls.isEnumClass
343344
|| cls.isInlineClass()
344345
|| fqName.isSubpackageOf(Kotlin.kotlin_collections)
345346
|| fqName.isSubpackageOf(Kotlin.kotlin_ranges)
@@ -349,7 +350,7 @@ class MocksCreationChecker(
349350

350351
}
351352

352-
private fun FirRegularClassSymbol?.isInterface(): Boolean = this?.classKind == ClassKind.INTERFACE && !this.isSealed
353+
private fun FirRegularClassSymbol?.isRegularInterface(): Boolean = this?.classKind == ClassKind.INTERFACE && !this.isSealed
353354

354355
private fun FirRegularClassSymbol?.isInlineClass(): Boolean = this?.isInlineOrValue == true
355356

test-mokkery/src/commonTest/kotlin/dev/mokkery/test/types/StubsTest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ class StubsTest {
2020
}
2121
}
2222

23+
private enum class EnumToStub {
24+
A, B, C
25+
}
26+
2327
@Suppress("ArrayInDataClass")
2428
private data class DataClassToStub<T : Number>(
2529
val short: Short,
@@ -50,6 +54,7 @@ private data class DataClassToStub<T : Number>(
5054
val range: IntRange,
5155
val throwable: Throwable,
5256
val sequence: Sequence<T>,
57+
val enumToStub: EnumToStub,
5358
) {
5459
init {
5560
func(1)

0 commit comments

Comments
 (0)