diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt index a7e9b6d7c8e..66401c2c315 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/FirSessionConstructionUtils.kt @@ -219,14 +219,12 @@ fun prepareCommonSessions( FirCommonSessionFactory.createModuleBasedSession( moduleData, sessionProvider, - librariesScope, projectEnvironment, incrementalCompilationContext = createProviderAndScopeForIncrementalCompilation(moduleFiles), extensionRegistrars, configuration.languageVersionSettings, lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER), enumWhenTracker = configuration.get(CommonConfigurationKeys.ENUM_WHEN_TRACKER), - needRegisterJavaElementFinder = true, registerExtraComponents = {}, init = sessionConfigurator ) 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 ce715722f93..66ec8be95a5 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 @@ -15,11 +15,13 @@ import org.jetbrains.kotlin.name.StandardClassIds fun FirBasedSymbol.isCompiledToJvmDefault( session: FirSession, - jvmDefaultMode: JvmDefaultMode + jvmDefaultMode: JvmDefaultMode? ): Boolean where D : FirAnnotationContainer, D : FirDeclaration { // TODO: Fix support for all cases if (getAnnotationByClassId(StandardClassIds.Annotations.JvmDefault, session) != null) return true - return jvmDefaultMode.forAllMethodsWithBody + // jvmDefaultMode is null only on common metadata compilation + // TODO: it's unclear what should be returned here if jvmDefaultMode is null, KT-57079 + return jvmDefaultMode?.forAllMethodsWithBody ?: true } diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmConflictsChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmConflictsChecker.kt index 95584a76814..7d94df0e3ed 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmConflictsChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmConflictsChecker.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.java.javaSymbolProvider object FirJvmConflictsChecker : FirRegularClassChecker() { override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { - val javaSymbol = context.session.javaSymbolProvider.getClassLikeSymbolByClassId(declaration.classId) ?: return + val javaSymbol = context.session.javaSymbolProvider?.getClassLikeSymbolByClassId(declaration.classId) ?: return reporter.reportOn( declaration.source, FirErrors.PACKAGE_OR_CLASSIFIER_REDECLARATION, listOf(declaration.symbol, javaSymbol), context ) diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmDefaultChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmDefaultChecker.kt index ee253cd3263..6aa52a3bc35 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmDefaultChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmDefaultChecker.kt @@ -47,7 +47,7 @@ object FirJvmDefaultChecker : FirBasicDeclarationChecker() { reporter.reportOn(source, FirJvmErrors.JVM_DEFAULT_IN_JVM6_TARGET, "JvmDefault", context) return } - !jvmDefaultMode.isEnabled -> { + jvmDefaultMode?.isEnabled != true -> { reporter.reportOn(source, FirJvmErrors.JVM_DEFAULT_IN_DECLARATION, "JvmDefault", context) return } @@ -66,7 +66,7 @@ object FirJvmDefaultChecker : FirBasicDeclarationChecker() { ) return } - !jvmDefaultMode.isEnabled -> { + jvmDefaultMode?.isEnabled != true -> { reporter.reportOn( source, FirJvmErrors.JVM_DEFAULT_IN_DECLARATION, @@ -107,12 +107,12 @@ object FirJvmDefaultChecker : FirBasicDeclarationChecker() { private fun checkNonJvmDefaultOverridesJavaDefault( defaultAnnotation: FirAnnotation?, - jvmDefaultMode: JvmDefaultMode, + jvmDefaultMode: JvmDefaultMode?, declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter ) { - if (defaultAnnotation != null || jvmDefaultMode.forAllMethodsWithBody) return + if (defaultAnnotation != null || jvmDefaultMode?.forAllMethodsWithBody == true) return val member = declaration as? FirSimpleFunction ?: return val containingDeclaration = context.findClosest() @@ -123,7 +123,7 @@ object FirJvmDefaultChecker : FirBasicDeclarationChecker() { if (overriddenFunctions.any { it.getAnnotationByClassId(JVM_DEFAULT_CLASS_ID, context.session) != null }) { reporter.reportOn(declaration.source, FirJvmErrors.JVM_DEFAULT_REQUIRED_FOR_OVERRIDE, context) - } else if (jvmDefaultMode.isEnabled) { + } else if (jvmDefaultMode?.isEnabled != false) { for (overriddenFunction in overriddenFunctions) { val overriddenDeclarations = overriddenFunction.getOverriddenDeclarations() for (overriddenDeclaration in overriddenDeclarations) { diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeCallConflictResolverFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/DefaultCallConflictResolverFactory.kt similarity index 95% rename from compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeCallConflictResolverFactory.kt rename to compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/DefaultCallConflictResolverFactory.kt index 0b5d0b4ae93..bb0cbddf9b5 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/NativeCallConflictResolverFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/DefaultCallConflictResolverFactory.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.jvm.ConeEquivalentCallConflictReso import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator -object NativeCallConflictResolverFactory : ConeCallConflictResolverFactory() { +object DefaultCallConflictResolverFactory : ConeCallConflictResolverFactory() { override fun create( typeSpecificityComparator: TypeSpecificityComparator, components: InferenceComponents, diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt index 63959d16ddc..674a14548d3 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirCommonSessionFactory.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.SessionConfiguration import org.jetbrains.kotlin.fir.checkers.registerJsCheckers import org.jetbrains.kotlin.fir.checkers.registerJvmCheckers import org.jetbrains.kotlin.fir.checkers.registerNativeCheckers @@ -18,11 +17,10 @@ import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.SingleModuleDataProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider -import org.jetbrains.kotlin.fir.java.JavaSymbolProvider -import org.jetbrains.kotlin.fir.java.deserialization.OptionalAnnotationClassesProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultExtraComponentsForModuleBased import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.incremental.components.EnumWhenTracker @@ -48,7 +46,6 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { moduleDataProvider, languageVersionSettings, registerExtraComponents = { - it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver()) registerExtraComponents(it) }, createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } }, @@ -63,24 +60,20 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { ), FirBuiltinSymbolProvider(session, builtinsModuleData, kotlinScopeProvider), FirCloneableSymbolProvider(session, builtinsModuleData, kotlinScopeProvider), - OptionalAnnotationClassesProvider(session, moduleDataProvider, kotlinScopeProvider, packageAndMetadataPartProvider) ) } ) } - @OptIn(SessionConfiguration::class) fun createModuleBasedSession( moduleData: FirModuleData, sessionProvider: FirProjectSessionProvider, - javaSourcesScope: AbstractProjectFileSearchScope, projectEnvironment: AbstractProjectEnvironment, incrementalCompilationContext: IncrementalCompilationContext?, extensionRegistrars: List, languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, lookupTracker: LookupTracker? = null, enumWhenTracker: EnumWhenTracker? = null, - needRegisterJavaElementFinder: Boolean, registerExtraComponents: ((FirSession) -> Unit) = {}, init: FirSessionConfigurator.() -> Unit = {} ): FirSession { @@ -93,8 +86,7 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { enumWhenTracker, init, registerExtraComponents = { - it.registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver()) - it.registerJavaSpecificResolveComponents() + it.registerDefaultExtraComponentsForModuleBased() registerExtraComponents(it) }, registerExtraCheckers = { @@ -105,7 +97,6 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _ -> declaredMemberScope } }, createProviders = { session, kotlinScopeProvider, symbolProvider, syntheticFunctionalInterfaceProvider, generatedSymbolsProvider, dependencies -> var symbolProviderForBinariesFromIncrementalCompilation: MetadataSymbolProvider? = null - var optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation: OptionalAnnotationClassesProvider? = null incrementalCompilationContext?.let { val precompiledBinariesPackagePartProvider = it.precompiledBinariesPackagePartProvider if (precompiledBinariesPackagePartProvider != null && it.precompiledBinariesFileScope != null) { @@ -119,36 +110,18 @@ object FirCommonSessionFactory : FirAbstractSessionFactory() { projectEnvironment.getKotlinClassFinder(it.precompiledBinariesFileScope) as KotlinMetadataFinder, defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled ) - optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation = - OptionalAnnotationClassesProvider( - session, - moduleDataProvider, - kotlinScopeProvider, - precompiledBinariesPackagePartProvider, - defaultDeserializationOrigin = FirDeclarationOrigin.Precompiled - ) } } - val javaSymbolProvider = - JavaSymbolProvider(session, projectEnvironment.getFirJavaFacade(session, moduleData, javaSourcesScope)) - session.register(JavaSymbolProvider::class, javaSymbolProvider) - listOfNotNull( symbolProvider, *(incrementalCompilationContext?.previousFirSessionsSymbolProviders?.toTypedArray() ?: emptyArray()), symbolProviderForBinariesFromIncrementalCompilation, generatedSymbolsProvider, syntheticFunctionalInterfaceProvider, - javaSymbolProvider, *dependencies.toTypedArray(), - optionalAnnotationClassesProviderForBinariesFromIncrementalCompilation, ) } - ).also { - if (needRegisterJavaElementFinder) { - projectEnvironment.registerAsJavaElementFinder(it) - } - } + ) } } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt index 84876d768fe..8a32b374a7a 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirNativeSessionFactory.kt @@ -6,19 +6,18 @@ package org.jetbrains.kotlin.fir.session import org.jetbrains.kotlin.config.LanguageVersionSettings -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper +import org.jetbrains.kotlin.fir.BinaryModuleData +import org.jetbrains.kotlin.fir.FirModuleData +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.checkers.registerNativeCheckers import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider -import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.impl.FirExtensionSyntheticFunctionInterfaceProvider import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper -import org.jetbrains.kotlin.fir.scopes.impl.FirEnumEntriesSupport +import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultExtraComponentsForModuleBased import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary import org.jetbrains.kotlin.name.Name @@ -73,7 +72,7 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { null, init, registerExtraComponents = { session -> - session.registerExtraComponentsForModuleBased() + session.registerDefaultExtraComponentsForModuleBased() registerExtraComponents(session) }, registerExtraCheckers = { it.registerNativeCheckers() }, @@ -88,13 +87,4 @@ object FirNativeSessionFactory : FirAbstractSessionFactory() { } ) } - - @OptIn(SessionConfiguration::class) - fun FirSession.registerExtraComponentsForModuleBased() { - register(FirVisibilityChecker::class, FirVisibilityChecker.Default) - register(ConeCallConflictResolverFactory::class, NativeCallConflictResolverFactory) - register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) - register(FirOverridesBackwardCompatibilityHelper::class, FirOverridesBackwardCompatibilityHelper.Default()) - register(FirEnumEntriesSupport::class, FirEnumEntriesSupport(this)) - } } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt index 801ecd2b4e1..e84422bd399 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactoryHelper.kt @@ -8,8 +8,12 @@ package org.jetbrains.kotlin.fir.session import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.analysis.FirOverridesBackwardCompatibilityHelper import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider +import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory +import org.jetbrains.kotlin.fir.scopes.FirPlatformClassMapper +import org.jetbrains.kotlin.fir.scopes.impl.FirEnumEntriesSupport import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope import org.jetbrains.kotlin.incremental.components.EnumWhenTracker @@ -116,4 +120,13 @@ object FirSessionFactoryHelper { )) } } + + @OptIn(SessionConfiguration::class) + fun FirSession.registerDefaultExtraComponentsForModuleBased() { + register(FirVisibilityChecker::class, FirVisibilityChecker.Default) + register(ConeCallConflictResolverFactory::class, DefaultCallConflictResolverFactory) + register(FirPlatformClassMapper::class, FirPlatformClassMapper.Default) + register(FirOverridesBackwardCompatibilityHelper::class, FirOverridesBackwardCompatibilityHelper.Default()) + register(FirEnumEntriesSupport::class, FirEnumEntriesSupport(this)) + } } \ No newline at end of file diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/MetadataSymbolProvider.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/MetadataSymbolProvider.kt index 944f29aec87..1d9e4dbc57b 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/MetadataSymbolProvider.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/MetadataSymbolProvider.kt @@ -7,6 +7,9 @@ package org.jetbrains.kotlin.fir.session import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.ThreadSafeMutableState +import org.jetbrains.kotlin.fir.caches.createCache +import org.jetbrains.kotlin.fir.caches.firCachesFactory +import org.jetbrains.kotlin.fir.caches.getValue import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.deserialization.* import org.jetbrains.kotlin.fir.java.deserialization.KotlinBuiltins @@ -20,6 +23,7 @@ import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder import org.jetbrains.kotlin.serialization.deserialization.MetadataClassDataFinder import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.serialization.deserialization.readProto +import org.jetbrains.kotlin.utils.addToStdlib.runIf @ThreadSafeMutableState class MetadataSymbolProvider( @@ -38,6 +42,8 @@ class MetadataSymbolProvider( private val constDeserializer = FirConstDeserializer(session, BuiltInSerializerProtocol) + private val metadataTopLevelClassesInPackageCache = session.firCachesFactory.createCache(::findMetadataTopLevelClassesInPackage) + override fun computePackagePartsInfos(packageFqName: FqName): List { return packageAndMetadataPartProvider.findMetadataPackageParts(packageFqName.asString()).mapNotNull { partName -> if (partName in KotlinBuiltins) return@mapNotNull null @@ -62,7 +68,7 @@ class MetadataSymbolProvider( override fun computePackageSetWithNonClassDeclarations() = packageAndMetadataPartProvider.computePackageSetWithNonClassDeclarations() - override fun knownTopLevelClassesInPackage(packageFqName: FqName) = kotlinClassFinder.findMetadataTopLevelClassesInPackage(packageFqName) + override fun knownTopLevelClassesInPackage(packageFqName: FqName) = metadataTopLevelClassesInPackageCache.getValue(packageFqName) override fun extractClassMetadata(classId: ClassId, parentContext: FirDeserializationContext?): ClassMetadataFindResult? { val classData = classDataFinder.findClassData(classId) ?: return null @@ -78,5 +84,9 @@ class MetadataSymbolProvider( override fun isNewPlaceForBodyGeneration(classProto: ProtoBuf.Class) = false - override fun getPackage(fqName: FqName) = null + override fun getPackage(fqName: FqName) = + runIf(metadataTopLevelClassesInPackageCache.getValue(fqName)?.isNotEmpty() == true) { fqName } + + private fun findMetadataTopLevelClassesInPackage(packageFqName: FqName) = + kotlinClassFinder.findMetadataTopLevelClassesInPackage(packageFqName) } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 3563d16b7c8..f13b28632c4 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -64,5 +64,5 @@ class JavaSymbolProvider( override fun getTopLevelPropertySymbolsTo(destination: MutableList, packageFqName: FqName, name: Name) {} } -val FirSession.javaSymbolProvider: JavaSymbolProvider by FirSession.sessionComponentAccessor() +val FirSession.javaSymbolProvider: JavaSymbolProvider? by FirSession.nullableSessionComponentAccessor() diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmDefaultModeContainer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmDefaultModeContainer.kt index 5975a3010ac..d131d368e72 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmDefaultModeContainer.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JvmDefaultModeContainer.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSessionComponent class FirJvmDefaultModeComponent(val jvmDefaultMode: JvmDefaultMode) : FirSessionComponent -private val FirSession.jvmDefaultModeComponent: FirJvmDefaultModeComponent by FirSession.sessionComponentAccessor() +private val FirSession.jvmDefaultModeComponent: FirJvmDefaultModeComponent? by FirSession.nullableSessionComponentAccessor() -val FirSession.jvmDefaultModeState: JvmDefaultMode - get() = jvmDefaultModeComponent.jvmDefaultMode +val FirSession.jvmDefaultModeState: JvmDefaultMode? + get() = jvmDefaultModeComponent?.jvmDefaultMode diff --git a/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.args b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.args new file mode 100644 index 00000000000..a2395f81276 --- /dev/null +++ b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.args @@ -0,0 +1,5 @@ +$TESTDATA_DIR$/optionalAnnotationsFromMetadata.kt +-d +$TEMP_DIR$ +-cp +$TESTDATA_DIR$/../../../../dist/common/kotlin-stdlib-common.jar diff --git a/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.kt b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.kt new file mode 100644 index 00000000000..29531d7d137 --- /dev/null +++ b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.kt @@ -0,0 +1,10 @@ +import kotlin.math.* +import kotlin.js.* +import kotlin.Result.Companion.success + +fun f(x: Int) = abs(x) + +@JsName("test") +public class C + +fun g() = success(true) \ No newline at end of file diff --git a/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.out b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.out new file mode 100644 index 00000000000..a0aba9318ad --- /dev/null +++ b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.out @@ -0,0 +1 @@ +OK \ No newline at end of file diff --git a/compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.args b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.args new file mode 100644 index 00000000000..a17bb96ac11 --- /dev/null +++ b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.args @@ -0,0 +1,7 @@ +$TESTDATA_DIR$/optionalAnnotationsFromMetadata.kt +-d +$TEMP_DIR$ +-cp +$TESTDATA_DIR$/../../../../dist/common/kotlin-stdlib-common.jar +-language-version +2.0 \ No newline at end of file diff --git a/compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.out b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.out new file mode 100644 index 00000000000..86ca0241885 --- /dev/null +++ b/compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.out @@ -0,0 +1,2 @@ +warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features +OK diff --git a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java index db6032c2f16..2dde6515d8b 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -1629,6 +1629,16 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/metadata/moduleNameWithFir.args"); } + @TestMetadata("optionalAnnotationsFromMetadata.args") + public void testOptionalAnnotationsFromMetadata() throws Exception { + runTest("compiler/testData/cli/metadata/optionalAnnotationsFromMetadata.args"); + } + + @TestMetadata("optionalAnnotationsFromMetadataWithFir.args") + public void testOptionalAnnotationsFromMetadataWithFir() throws Exception { + runTest("compiler/testData/cli/metadata/optionalAnnotationsFromMetadataWithFir.args"); + } + @TestMetadata("optionalExpectationUsage.args") public void testOptionalExpectationUsage() throws Exception { runTest("compiler/testData/cli/metadata/optionalExpectationUsage.args");