diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationHelper.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationHelper.kt index 1a490860edf..c27f309a036 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationHelper.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/FirJvmAnnotationHelper.kt @@ -8,16 +8,25 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers import org.jetbrains.kotlin.config.JvmDefaultMode import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId +import org.jetbrains.kotlin.fir.isNewPlaceForBodyGeneration import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.SymbolInternals +import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.name.StandardClassIds fun FirBasedSymbol.isCompiledToJvmDefault( session: FirSession, - jvmDefaultMode: JvmDefaultMode + jvmDefaultMode: JvmDefaultMode, ): Boolean where D : FirAnnotationContainer, D : FirDeclaration { if (getAnnotationByClassId(StandardClassIds.Annotations.JvmDefault, session) != null) return true - return jvmDefaultMode.forAllMethodsWithBody -} + val container = getContainingClassSymbol(session) + if (container !is FirRegularClassSymbol || container.origin.fromSource) return jvmDefaultMode.forAllMethodsWithBody + + // Opt-in is fine here because this flag is only possible for deserialized declarations, and it's set during deserialization. + @OptIn(SymbolInternals::class) + return container.fir.isNewPlaceForBodyGeneration == true +}