diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt index 793e08210a4..f34e9a34a7c 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/PsiBasedProjectEnvironment.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.load.java.JavaClassFinderImpl import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory +import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver import java.io.File class PsiBasedProjectFileSearchScope(val psiSearchScope: GlobalSearchScope) : AbstractProjectFileSearchScope { @@ -64,6 +65,9 @@ class PsiBasedProjectEnvironment( ): JavaSymbolProvider = JavaSymbolProvider(firSession, baseModuleData, project, fileSearchScope.asPsiSearchScope()) + override fun getJavaModuleResolver(): JavaModuleResolver = + JavaModuleResolver.getInstance(project) + override fun getPackagePartProvider(fileSearchScope: AbstractProjectFileSearchScope): PackagePartProvider = getPackagePartProviderFn(fileSearchScope.asPsiSearchScope()) diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ParametersAreNonnullByDefaultPackage.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ParametersAreNonnullByDefaultPackage.fir.txt index eb7b2b5c972..0e915c2fdea 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ParametersAreNonnullByDefaultPackage.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ParametersAreNonnullByDefaultPackage.fir.txt @@ -1,7 +1,7 @@ public open class A : R|kotlin/Any| { @R|javax/annotation/Nullable|() public open field field: R|kotlin/String?| - public open fun foo(q: R|ft|, @R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|ft| + public open fun foo(q: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/CheckForNull|() y: R|kotlin/CharSequence?|): R|ft| @R|javax/annotation/Nonnull|() public open fun bar(): R|@EnhancedNullability kotlin/String| diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt index 44181f7d316..5279f82490d 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt @@ -1,9 +1,9 @@ public open class A : R|kotlin/Any| { public open field field: R|ft| - public open fun foo(x: R|ft|, @R|spr/Nullable|() y: R|kotlin/CharSequence?|): R|ft| + public open fun foo(x: R|@EnhancedNullability kotlin/String|, @R|spr/Nullable|() y: R|kotlin/CharSequence?|): R|@EnhancedNullability kotlin/String| - public open fun bar(): R|ft| + public open fun bar(): R|@EnhancedNullability kotlin/String| @R|spr/Nullable|() public open fun baz(): R|ft>?, kotlin/collections/List>?>| diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 9b781296ac6..471ebe89001 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -21,8 +21,7 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionService import org.jetbrains.kotlin.fir.extensions.FirPredicateBasedProvider import org.jetbrains.kotlin.fir.extensions.FirRegisteredPluginAnnotations import org.jetbrains.kotlin.fir.java.FirJavaVisibilityChecker -import org.jetbrains.kotlin.fir.java.enhancement.FirJavaTypeEnhancementStateComponent -import org.jetbrains.kotlin.fir.java.enhancement.FirJsr305StateContainer +import org.jetbrains.kotlin.fir.java.enhancement.FirAnnotationTypeQualifierResolver import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider @@ -36,6 +35,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.plugin.GeneratedClassIndex import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider import org.jetbrains.kotlin.fir.types.FirCorrespondingSupertypesCache import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver // -------------------------- Required components -------------------------- @@ -62,9 +62,9 @@ fun FirSession.registerCliCompilerOnlyComponents() { } @OptIn(SessionConfiguration::class) -fun FirSession.registerCommonJavaComponents() { +fun FirSession.registerCommonJavaComponents(javaModuleResolver: JavaModuleResolver) { val jsr305State = languageVersionSettings.getFlag(JvmAnalysisFlags.javaTypeEnhancementState) - register(FirJavaTypeEnhancementStateComponent::class, FirJavaTypeEnhancementStateComponent(jsr305State)) + register(FirAnnotationTypeQualifierResolver::class, FirAnnotationTypeQualifierResolver(this, jsr305State, javaModuleResolver)) } // -------------------------- Resolve components -------------------------- @@ -100,7 +100,6 @@ fun FirSession.registerJavaSpecificResolveComponents() { register(ConeCallConflictResolverFactory::class, JvmCallConflictResolverFactory) register(FirPlatformClassMapper::class, FirJavaClassMapper(this)) register(FirSyntheticNamesProvider::class, FirJavaSyntheticNamesProvider) - register(FirJsr305StateContainer::class, FirJsr305StateContainer.Default) register(FirOverridesBackwardCompatibilityHelper::class, FirJvmOverridesBackwardCompatibilityHelper) } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt index 6d75d59142a..827e1f47a54 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirSessionFactory.kt @@ -136,7 +136,7 @@ object FirSessionFactory { registerModuleData(moduleData) registerCliCompilerOnlyComponents() registerCommonComponents(languageVersionSettings) - registerCommonJavaComponents() + registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver()) registerResolveComponents(lookupTracker) registerJavaSpecificResolveComponents() @@ -208,7 +208,7 @@ object FirSessionFactory { registerCliCompilerOnlyComponents() registerCommonComponents(languageVersionSettings) - registerCommonJavaComponents() + registerCommonJavaComponents(projectEnvironment.getJavaModuleResolver()) val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt index 3bcff73ef0a..0f8931101d6 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/environment/AbstractProjectEnvironment.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.load.java.JavaClassFinder import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.PackagePartProvider +import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver import java.io.File interface AbstractProjectFileSearchScope { @@ -50,6 +51,8 @@ interface AbstractProjectEnvironment { fileSearchScope: AbstractProjectFileSearchScope ): JavaSymbolProvider + fun getJavaModuleResolver(): JavaModuleResolver + fun getPackagePartProvider(fileSearchScope: AbstractProjectFileSearchScope): PackagePartProvider fun registerAsJavaElementFinder(firSession: FirSession) 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 7efb1de6513..61061220c16 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 @@ -42,6 +42,7 @@ import org.jetbrains.kotlin.load.java.JavaClassFinder import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.load.java.structure.impl.JavaElementImpl +import org.jetbrains.kotlin.load.java.structure.impl.JavaPackageImpl import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -214,6 +215,7 @@ class JavaSymbolProvider( modality = if (classKind == ClassKind.ANNOTATION_CLASS || classKind == ClassKind.ENUM_CLASS) Modality.FINAL else javaClass.modality this.isTopLevel = outerClassId == null isStatic = javaClass.isStatic + javaPackage = packageCache.getValue(classSymbol.classId.packageFqName) this.javaTypeParameterStack = javaTypeParameterStack existingNestedClassifierNames += javaClass.innerClassNames scopeProvider = this@JavaSymbolProvider.scopeProvider @@ -390,7 +392,7 @@ class JavaSymbolProvider( returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack) isVar = !javaField.isFinal isStatic = javaField.isStatic - annotationBuilder = { javaField.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } } + annotationBuilder = { javaField.convertAnnotationsToFir(session, javaTypeParameterStack) } initializer = convertJavaInitializerToFir(javaField.initializerValue) if (!javaField.isStatic) { @@ -432,7 +434,7 @@ class JavaSymbolProvider( this@JavaSymbolProvider.session, moduleData, index, javaTypeParameterStack, ) } - annotationBuilder = { javaMethod.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } } + annotationBuilder = { javaMethod.convertAnnotationsToFir(session, javaTypeParameterStack) } status = FirResolvedDeclarationStatusImpl( javaMethod.visibility, javaMethod.modality, @@ -508,7 +510,7 @@ class JavaSymbolProvider( if (javaConstructor != null) { this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack) - annotationBuilder = { javaConstructor.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } } + annotationBuilder = { javaConstructor.convertAnnotationsToFir(session, javaTypeParameterStack) } for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) { valueParameters += valueParameter.toFirValueParameter( this@JavaSymbolProvider.session, moduleData, index, javaTypeParameterStack, @@ -554,14 +556,14 @@ class JavaSymbolProvider( ) override fun getPackage(fqName: FqName): FqName? { - return packageCache.getValue(fqName) + return packageCache.getValue(fqName)?.fqName } - private fun findPackage(fqName: FqName): FqName? { + private fun findPackage(fqName: FqName): JavaPackage? { return try { val facade = KotlinJavaPsiFacade.getInstance(project) val javaPackage = facade.findPackage(fqName.asString(), searchScope) ?: return null - FqName(javaPackage.qualifiedName) + JavaPackageImpl(javaPackage, searchScope) } catch (e: ProcessCanceledException) { return null } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt index b163ed5c609..4d41134f88e 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt @@ -65,11 +65,7 @@ internal fun FirTypeRef.toConeKotlinTypeProbablyFlexible( internal fun JavaType.toFirJavaTypeRef(session: FirSession, javaTypeParameterStack: JavaTypeParameterStack): FirJavaTypeRef { return buildJavaTypeRef { - annotationBuilder = { - (this@toFirJavaTypeRef as? JavaClassifierType)?.annotations.orEmpty().map { - it.toFirAnnotationCall(session, javaTypeParameterStack) - } - } + annotationBuilder = { convertAnnotationsToFir(session, javaTypeParameterStack) } type = this@toFirJavaTypeRef } } @@ -89,13 +85,11 @@ private fun JavaType?.toConeKotlinTypeWithoutEnhancement( session: FirSession, javaTypeParameterStack: JavaTypeParameterStack, mode: FirJavaTypeConversionMode ): ConeKotlinType { - val attributes = if (this != null && annotations.isNotEmpty()) { - ConeAttributes.create( - listOf(CustomAnnotationTypeAttribute(annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) })) - ) - } else { + val attributes = if (this != null && annotations.isNotEmpty()) + ConeAttributes.create(listOf(CustomAnnotationTypeAttribute(convertAnnotationsToFir(session, javaTypeParameterStack)))) + else ConeAttributes.Empty - } + return when (this) { is JavaClassifierType -> toConeKotlinTypeWithoutEnhancement(session, javaTypeParameterStack, mode, attributes) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 21ceec402db..5b51dc7ce4a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -148,7 +148,23 @@ private fun buildArgumentMapping( return buildResolvedArgumentList(mapping) } -internal fun JavaAnnotation.toFirAnnotationCall( +internal fun Iterable.convertAnnotationsToFir( + session: FirSession, javaTypeParameterStack: JavaTypeParameterStack +): List = map { it.toFirAnnotationCall(session, javaTypeParameterStack) } + +internal fun JavaAnnotationOwner.convertAnnotationsToFir( + session: FirSession, javaTypeParameterStack: JavaTypeParameterStack +): List = annotations.convertAnnotationsToFir(session, javaTypeParameterStack) + +internal fun MutableList.addFromJava( + session: FirSession, + javaAnnotationOwner: JavaAnnotationOwner, + javaTypeParameterStack: JavaTypeParameterStack +) { + javaAnnotationOwner.annotations.mapTo(this) { it.toFirAnnotationCall(session, javaTypeParameterStack) } +} + +private fun JavaAnnotation.toFirAnnotationCall( session: FirSession, javaTypeParameterStack: JavaTypeParameterStack ): FirAnnotationCall { return buildAnnotationCall { @@ -187,14 +203,6 @@ internal fun JavaAnnotation.toFirAnnotationCall( } } -internal fun MutableList.addFromJava( - session: FirSession, - javaAnnotationOwner: JavaAnnotationOwner, - javaTypeParameterStack: JavaTypeParameterStack -) { - javaAnnotationOwner.annotations.mapTo(this) { it.toFirAnnotationCall(session, javaTypeParameterStack) } -} - internal fun JavaValueParameter.toFirValueParameter( session: FirSession, moduleData: FirModuleData, index: Int, javaTypeParameterStack: JavaTypeParameterStack ): FirValueParameter { @@ -204,7 +212,7 @@ internal fun JavaValueParameter.toFirValueParameter( name = this@toFirValueParameter.name ?: Name.identifier("p$index") returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack) isVararg = this@toFirValueParameter.isVararg - annotationBuilder = { annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }} + annotationBuilder = { convertAnnotationsToFir(session, javaTypeParameterStack) } } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt index 2bf1edc50b8..58670af3b7a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaClass.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.transformInplace import org.jetbrains.kotlin.fir.visitors.transformSingle +import org.jetbrains.kotlin.load.java.structure.JavaPackage import org.jetbrains.kotlin.name.Name import kotlin.properties.Delegates @@ -43,6 +44,7 @@ class FirJavaClass @FirImplementationDetail internal constructor( override val symbol: FirRegularClassSymbol, override val superTypeRefs: MutableList, override val typeParameters: MutableList, + internal val javaPackage: JavaPackage?, internal val javaTypeParameterStack: JavaTypeParameterStack, internal val existingNestedClassifierNames: List ) : FirRegularClass() { @@ -131,6 +133,7 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont var isTopLevel: Boolean by Delegates.notNull() var isStatic: Boolean by Delegates.notNull() var isNotSam: Boolean by Delegates.notNull() + var javaPackage: JavaPackage? = null lateinit var javaTypeParameterStack: JavaTypeParameterStack val existingNestedClassifierNames: MutableList = mutableListOf() @@ -157,6 +160,7 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont symbol, superTypeRefs, typeParameters, + javaPackage, javaTypeParameterStack, existingNestedClassifierNames ) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt index d9c244aadfe..2d901ce62a1 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt @@ -6,16 +6,28 @@ package org.jetbrains.kotlin.fir.java.enhancement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.FirSessionComponent +import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack +import org.jetbrains.kotlin.fir.java.convertAnnotationsToFir +import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass +import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.load.java.AbstractAnnotationTypeQualifierResolver +import org.jetbrains.kotlin.load.java.JavaModuleAnnotationsProvider +import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState +import org.jetbrains.kotlin.load.java.JavaTypeQualifiersByElementType import org.jetbrains.kotlin.load.java.JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME import org.jetbrains.kotlin.name.FqName @Suppress("EXTENSION_SHADOWED_BY_MEMBER") -class FirAnnotationTypeQualifierResolver(private val session: FirSession) : - AbstractAnnotationTypeQualifierResolver(session.javaTypeEnhancementState) -{ +class FirAnnotationTypeQualifierResolver( + private val session: FirSession, + javaTypeEnhancementState: JavaTypeEnhancementState, + private val javaModuleAnnotationsProvider: JavaModuleAnnotationsProvider, +) : AbstractAnnotationTypeQualifierResolver(javaTypeEnhancementState), FirSessionComponent { + override val FirAnnotationCall.annotations: Iterable get() = coneClassLikeType?.lookupTag?.toSymbol(session)?.fir?.annotations.orEmpty() @@ -38,4 +50,22 @@ class FirAnnotationTypeQualifierResolver(private val session: FirSession) : is FirArrayOfCall -> arguments.flatMap { it.toEnumNames() } else -> listOfNotNull(toResolvedCallableSymbol()?.callableId?.callableName?.asString()) } + + fun extractDefaultQualifiers(firClass: FirRegularClass): JavaTypeQualifiersByElementType? { + val classId = firClass.symbol.classId + val outerClassId = classId.outerClassId + val parentQualifiers = if (outerClassId != null) { + (session.symbolProvider.getClassLikeSymbolByFqName(outerClassId)?.fir as? FirRegularClass) + ?.let { extractDefaultQualifiers(it) } + } else { + val forModule = javaModuleAnnotationsProvider.getAnnotationsForModuleOwnerOfClass(classId) + ?.let { extractAndMergeDefaultQualifiers(null, it.convertAnnotationsToFir(session, JavaTypeParameterStack.EMPTY)) } + val forPackage = (firClass as? FirJavaClass)?.javaPackage + ?.let { extractAndMergeDefaultQualifiers(forModule, it.convertAnnotationsToFir(session, JavaTypeParameterStack.EMPTY)) } + forPackage ?: forModule + } + return extractAndMergeDefaultQualifiers(parentQualifiers, firClass.annotations) + } } + +val FirSession.javaAnnotationTypeQualifierResolver: FirAnnotationTypeQualifierResolver by FirSession.sessionComponentAccessor() diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt deleted file mode 100644 index 0b35dfc367b..00000000000 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirJsr305StateContainer.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir.java.enhancement - -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSessionComponent -import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState - -class FirJsr305StateContainer(val javaTypeEnhancementState: JavaTypeEnhancementState) : FirSessionComponent { - companion object { - val Default: FirJsr305StateContainer = FirJsr305StateContainer(JavaTypeEnhancementState.DEFAULT) - } -} - -val FirSession.jsr305StateContainer: FirJsr305StateContainer by FirSession.sessionComponentAccessor() diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/JavaTypeEnhancementStateContainer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/JavaTypeEnhancementStateContainer.kt deleted file mode 100644 index 0e9cb1bf9d3..00000000000 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/JavaTypeEnhancementStateContainer.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir.java.enhancement - -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSessionComponent -import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState - -class FirJavaTypeEnhancementStateComponent(val javaTypeEnhancementState: JavaTypeEnhancementState) : FirSessionComponent - -private val FirSession.javaTypeEnhancementStateComponent: FirJavaTypeEnhancementStateComponent by FirSession.sessionComponentAccessor() - -val FirSession.javaTypeEnhancementState: JavaTypeEnhancementState - get() = javaTypeEnhancementStateComponent.javaTypeEnhancementState diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index e4304a0de26..1cd9dd6faf3 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -62,10 +62,10 @@ class FirSignatureEnhancement( private val javaTypeParameterStack: JavaTypeParameterStack = if (owner is FirJavaClass) owner.javaTypeParameterStack else JavaTypeParameterStack.EMPTY - private val typeQualifierResolver = FirAnnotationTypeQualifierResolver(session) + private val typeQualifierResolver = session.javaAnnotationTypeQualifierResolver private val contextQualifiers: JavaTypeQualifiersByElementType? = - typeQualifierResolver.extractAndMergeDefaultQualifiers(null, owner.annotations) + typeQualifierResolver.extractDefaultQualifiers(owner) private val enhancements = mutableMapOf, FirCallableSymbol<*>>() diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleResolver.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleResolver.kt index 468c095ea63..9c6a20d9852 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleResolver.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/modules/JavaModuleResolver.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.resolve.jvm.modules import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile -import org.jetbrains.kotlin.load.java.lazy.JavaModuleAnnotationsProvider +import org.jetbrains.kotlin.load.java.JavaModuleAnnotationsProvider import org.jetbrains.kotlin.name.FqName interface JavaModuleResolver : JavaModuleAnnotationsProvider { diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.fir.kt deleted file mode 100644 index 460c9e5d66d..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.fir.kt +++ /dev/null @@ -1,25 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// FILE: sandbox/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -module sandbox { - requires java9_annotations; - exports test; -} - -// FILE: sandbox/test/Test.java -package test; - -public class Test { - public void foo(Integer x) {} -} - -// FILE: main.kt -import test.Test - -fun main(x: Test) { - x.foo(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.kt index b6c311fe27f..f92df8709bf 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/basic.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.fir.kt deleted file mode 100644 index 83606133e3c..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.fir.kt +++ /dev/null @@ -1,31 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// FILE: sandbox/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -module sandbox { - requires java9_annotations; - exports test; -} - -// FILE: sandbox/test/package-info.java -@NullMarked -package test; - -import org.jspecify.nullness.NullMarked; - -// FILE: sandbox/test/Test.java -package test; - -public class Test { - public void foo(Integer x) {} -} - -// FILE: main.kt -import test.Test - -fun main(x: Test) { - x.foo(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.kt index ad4f72503c4..9441aca3cbd 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/composeWithPackageDefaultAnnotation.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.fir.kt deleted file mode 100644 index 5036b778052..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.fir.kt +++ /dev/null @@ -1,30 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// MODULE: module1 -// FILE: module1/module-info.java -module module1 { -} - -// MODULE: module2(module1) -// FILE: module2/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -module module2 { - requires java9_annotations; - requires module1; - exports test2; -} - -// FILE: module2/test2/Test.java -package test2; - -public class Test { - public void foo(Integer x) {} -} - -// FILE: main.kt -fun main(y: test2.Test) { - y.foo(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.kt index 753583013cc..dba69d55fd8 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dependentModulesNullMarked.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.fir.kt deleted file mode 100644 index 259073d4fed..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.fir.kt +++ /dev/null @@ -1,25 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// FILE: my.sand.box/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -open module my.sand.box { - requires java9_annotations; - exports my.test; -} - -// FILE: my.sand.box/my/test/Test.java -package my.test; - -public class Test { - public void foo(Integer x) {} -} - -// FILE: main.kt -import my.test.Test - -fun main(x: Test) { - x.foo(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.kt index 120ade0ab3c..83e8d555711 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/dotNamedModule.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.fir.kt deleted file mode 100644 index e309e391e78..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.fir.kt +++ /dev/null @@ -1,45 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// MODULE: module1 -// FILE: module1/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -module module1 { - requires java9_annotations; - exports test1; -} - -// FILE: module1/test1/Test1.java -package test1; - -public class Test1 { - public void foo(Integer x) {} -} - -// MODULE: module2(module1) -// FILE: module2/module-info.java -module module2 { - requires module1; - exports test2; -} - -// FILE: module2/test2/Test2.java -package test2; - -import test1.Test1; - -public class Test2 extends Test1 { - public void foo2(Integer x) {} -} - -// FILE: main.kt -import test1.Test1 -import test2.Test2 - -fun main(x: Test1, y: Test2) { - x.foo(null) - y.foo(null) - y.foo2(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.kt index 5273fe99b22..32f805ed76e 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/inheritanceAcrossModules.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.fir.kt deleted file mode 100644 index c78c06369d3..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.fir.kt +++ /dev/null @@ -1,43 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// FILE: sandbox/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -module sandbox { - requires java9_annotations; - exports test; -} - -// FILE: sandbox/test/Test.java -package test; - -public class Test { - public static class Test2 { - public Integer foo(Integer x) { return 1; } - public static class Test4 { - public Integer foo(Integer x) { return 1; } - } - public class Test5 { - public Integer foo(Integer x) { return 1; } - } - } - public class Test3 { - public Integer foo(Integer x) { return 1; } - public class Test5 { - public Integer foo(Integer x) { return 1; } - } - } -} - -// FILE: main.kt -import test.Test - -fun main(x: Test) { - x.Test3().foo(null) - x.Test3().Test5().foo(null) - - Test.Test2().foo(null) - Test.Test2().Test5().foo(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.kt index fe5137bfa8d..d682d599047 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/nestedClasses.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.fir.kt deleted file mode 100644 index 9c082d07423..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.fir.kt +++ /dev/null @@ -1,39 +0,0 @@ -// ALLOW_KOTLIN_PACKAGE -// JSPECIFY_STATE: strict - -// MODULE: module1 -// FILE: module1/module-info.java -import org.jspecify.nullness.NullMarked; - -@NullMarked -module module1 { - requires java9_annotations; - exports test1; -} - -// FILE: module1/test1/Test.java -package test1; - -public class Test { - public void foo(Integer x) {} -} - -// MODULE: module2(module1) -// FILE: module2/module-info.java -module module2 { - requires module1; - exports test2; -} - -// FILE: module2/test2/Test.java -package test2; - -public class Test { - public void foo(Integer x) {} -} - -// FILE: main.kt -fun main(x: test1.Test, y: test2.Test) { - x.foo(null) - y.foo(null) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.kt index 5bead69eb46..245ddbfc41e 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/strict/severalModulesDifferentPackages.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ALLOW_KOTLIN_PACKAGE // JSPECIFY_STATE: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/basic.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/basic.fir.kt index 140f5cd7446..9faee915fa0 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/basic.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/basic.fir.kt @@ -21,5 +21,5 @@ public class Test { import test.Test fun main(x: Test) { - x.foo(null) + x.foo(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/composeWithPackageDefaultAnnotation.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/composeWithPackageDefaultAnnotation.fir.kt index a8c6dea1146..a38b728d613 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/composeWithPackageDefaultAnnotation.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/composeWithPackageDefaultAnnotation.fir.kt @@ -27,5 +27,5 @@ public class Test { import test.Test fun main(x: Test) { - x.foo(null) + x.foo(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dependentModulesNullMarked.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dependentModulesNullMarked.fir.kt index 5a18583c504..05c54c6a531 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dependentModulesNullMarked.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dependentModulesNullMarked.fir.kt @@ -26,5 +26,5 @@ public class Test { // FILE: main.kt fun main(y: test2.Test) { - y.foo(null) + y.foo(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dotNamedModule.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dotNamedModule.fir.kt index a6833e397c4..b94e06b2d0e 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dotNamedModule.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/dotNamedModule.fir.kt @@ -21,5 +21,5 @@ public class Test { import my.test.Test fun main(x: Test) { - x.foo(null) + x.foo(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/inheritanceAcrossModules.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/inheritanceAcrossModules.fir.kt index b3a6eb69c54..812190846f1 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/inheritanceAcrossModules.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/inheritanceAcrossModules.fir.kt @@ -39,7 +39,7 @@ import test1.Test1 import test2.Test2 fun main(x: Test1, y: Test2) { - x.foo(null) - y.foo(null) + x.foo(null) + y.foo(null) y.foo2(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/nestedClasses.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/nestedClasses.fir.kt index 1e674e3e15a..33d9b2d0d83 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/nestedClasses.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/nestedClasses.fir.kt @@ -35,9 +35,9 @@ public class Test { import test.Test fun main(x: Test) { - x.Test3().foo(null) - x.Test3().Test5().foo(null) + x.Test3().foo(null) + x.Test3().Test5().foo(null) - Test.Test2().foo(null) - Test.Test2().Test5().foo(null) + Test.Test2().foo(null) + Test.Test2().Test5().foo(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/severalModulesDifferentPackages.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/severalModulesDifferentPackages.fir.kt index 5e99d57f9fe..be6f1e6cf8e 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/severalModulesDifferentPackages.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java9Tests/jspecify/moduleAnnotations/warn/severalModulesDifferentPackages.fir.kt @@ -34,6 +34,6 @@ public class Test { // FILE: main.kt fun main(x: test1.Test, y: test2.Test) { - x.foo(null) + x.foo(null) y.foo(null) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/overridingDefaultQualifier.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/overridingDefaultQualifier.fir.kt index abb4678b68d..e08a5e81d7c 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/overridingDefaultQualifier.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/overridingDefaultQualifier.fir.kt @@ -162,15 +162,15 @@ fun main(a: A, b: A.B, c: A.C) { b.baz()!!.get(0)?.get(0) // c - c.foo("", null)?.length + c.foo("", null)?.length c.foo("", null).length - c.foo(null, "").length + c.foo(null, "").length c.foobar(null, "").length c.foobar("", null)?.length c.bar().length - c.bar()!!.length + c.bar()!!.length c.field?.length c.field.length diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt index 945094b559b..62ec7608a96 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt @@ -48,7 +48,7 @@ import test2.A2 fun main(a: A, a2: A2) { a.foo("", "", null)?.length a.foo("", "", null).length - a.foo(null, null, "").length + a.foo(null, null, "").length a.bar().length a.bar()!!.length diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/springNullablePackage.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/springNullablePackage.fir.kt index c900059bb65..89b1c13982b 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/springNullablePackage.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/nullabilityWarnings/typeQualifierDefault/springNullablePackage.fir.kt @@ -68,12 +68,12 @@ public class A { // FILE: main.kt fun main(a: test.A) { - a.foo("", null)?.length + a.foo("", null)?.length a.foo("", null).length - a.foo(null, "").length + a.foo(null, "").length a.bar().length - a.bar()!!.length + a.bar()!!.length a.field?.length a.field.length diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.fir.kt deleted file mode 100644 index f9edb22b0d9..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.fir.kt +++ /dev/null @@ -1,181 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: strict - -// FILE: NonNullApi.java -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierDefault; - -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Nonnull -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) -public @interface NonNullApi { -} - -// FILE: NullableApi.java -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.CheckForNull; -import javax.annotation.meta.TypeQualifierDefault; - -@Retention(RetentionPolicy.RUNTIME) -@Documented -@CheckForNull -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD}) -public @interface NullableApi { -} - -// FILE: FieldsAreNullable.java -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.CheckForNull; -import javax.annotation.meta.TypeQualifierDefault; - -@Retention(RetentionPolicy.RUNTIME) -@Documented -@CheckForNull -@TypeQualifierDefault({ElementType.FIELD}) -public @interface FieldsAreNullable { -} - -// FILE: A.java -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import javax.annotation.Nonnull; - -@NonNullApi -public class A { - public String field = null; - - public String foo(String x, @CheckForNull CharSequence y) { - return ""; - } - - @NullableApi - public String foobar(String x, @NonNullApi CharSequence y) { - return ""; - } - - public String bar() { - return ""; - } - - @Nullable - public java.util.List baz() { - return null; - } - - @NullableApi - public class B { - public String field = null; - - public String foo(String x, @Nonnull CharSequence y) { - return ""; - } - - @NonNullApi - public String foobar(String x, @NullableApi CharSequence y) { - return ""; - } - - public String bar() { - return ""; - } - - @Nullable - public java.util.List baz() { - return null; - } - } - - @FieldsAreNullable - public class C { - public String field = null; - - public String foo(String x, @Nullable CharSequence y) { - return ""; - } - - @NullableApi - public String foobar(String x, @Nullable CharSequence y) { - return ""; - } - - public String bar() { - return ""; - } - - @Nullable - public java.util.List baz() { - return null; - } - } -} - -// FILE: main.kt -fun main(a: A, b: A.B, c: A.C) { - a.foo("", null)?.length - a.foo("", null).length - a.foo(null, "").length - - a.foobar(null, "").length - a.foobar("", null)?.length - - a.bar().length - a.bar()!!.length - - a.field?.length - a.field.length - - a.baz().get(0) - a.baz()!!.get(0).get(0) - a.baz()!!.get(0)?.get(0) - - // b - b.foo("", null)?.length - b.foo("", null).length - b.foo(null, "").length - - b.foobar(null, "").length - b.foobar("", null)?.length - - b.bar().length - b.bar()!!.length - - b.field?.length - b.field.length - - b.baz().get(0) - b.baz()!!.get(0).get(0) - b.baz()!!.get(0)?.get(0) - - // c - c.foo("", null)?.length - c.foo("", null).length - c.foo(null, "").length - - c.foobar(null, "").length - c.foobar("", null)?.length - - c.bar().length - c.bar()!!.length - - c.field?.length - c.field.length - - c.baz().get(0) - c.baz()!!.get(0).get(0) - c.baz()!!.get(0)?.get(0) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.kt index 092271c0f01..998104a3ef7 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt deleted file mode 100644 index 0df5a9506be..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.fir.kt +++ /dev/null @@ -1,70 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: strict - -// RENDER_PACKAGE: test, test2 - -// FILE: test/package-info.java -@javax.annotation.ParametersAreNonnullByDefault() -package test; - -// FILE: test/A.java -package test; - -import javax.annotation.*; - -public class A { - @Nullable public String field = null; - - public String foo(String q, @Nonnull String x, @CheckForNull CharSequence y) { - return ""; - } - - @Nonnull - public String bar() { - return ""; - } -} - -// FILE: test2/A2.java -package test2; - -import javax.annotation.*; - -public class A2 { - @Nullable public String field = null; - - public String foo(String q, @Nonnull String x, @CheckForNull CharSequence y) { - return ""; - } - - @Nonnull - public String bar() { - return ""; - } -} - -// FILE: main.kt -import test.A -import test2.A2 - -fun main(a: A, a2: A2) { - a.foo("", "", null)?.length - a.foo("", "", null).length - a.foo(null, null, "").length - - a.bar().length - a.bar()!!.length - - a.field?.length - a.field.length - - a2.foo("", "", null)?.length - a2.foo("", "", null).length - a2.foo(null, null, "").length - - a2.bar().length - a2.bar()!!.length - - a2.field?.length - a2.field.length -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.kt index a1ec7f5e9c1..6a70118ab8a 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/parametersAreNonnullByDefaultPackage.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: strict diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.fir.kt deleted file mode 100644 index f5c8074b5ed..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.fir.kt +++ /dev/null @@ -1,85 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -// JSR305_GLOBAL_REPORT: strict -// RENDER_PACKAGE: test - -// FILE: spr/Nullable.java -package spr; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierNickname; -import javax.annotation.meta.When; - -@Target({ElementType.METHOD, ElementType.PARAMETER}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Nonnull(when = When.MAYBE) -@TypeQualifierNickname -public @interface Nullable { -} - -// FILE: spr/NonNullApi.java -package spr; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.Nonnull; -import javax.annotation.meta.TypeQualifierDefault; - -@Target(ElementType.PACKAGE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Nonnull -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER}) -public @interface NonNullApi { -} - -// FILE: test/package-info.java -@spr.NonNullApi() -package test; - -// FILE: test/A.java -package test; - -import spr.*; - -public class A { - public String field = null; - - public String foo(String x, @Nullable CharSequence y) { - return ""; - } - - public String bar() { - return ""; - } - - @Nullable - public java.util.List baz() { - return null; - } -} - -// FILE: main.kt -fun main(a: test.A) { - a.foo("", null)?.length - a.foo("", null).length - a.foo(null, "").length - - a.bar().length - a.bar()!!.length - - a.field?.length - a.field.length - - a.baz().get(0) - a.baz()!!.get(0).get(0) - a.baz()!!.get(0)?.get(0) -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.kt index 196b97c8a17..03d43aad519 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/tests/jsr305/typeQualifierDefault/springNullablePackage.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER // JSR305_GLOBAL_REPORT: strict // RENDER_PACKAGE: test diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/JavaModuleAnnotationsProvider.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JavaModuleAnnotationsProvider.kt similarity index 91% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/JavaModuleAnnotationsProvider.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JavaModuleAnnotationsProvider.kt index 23a358c1683..769f9b6b7ef 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/JavaModuleAnnotationsProvider.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/java/JavaModuleAnnotationsProvider.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.load.java.lazy +package org.jetbrains.kotlin.load.java import org.jetbrains.kotlin.load.java.structure.JavaAnnotation import org.jetbrains.kotlin.name.ClassId diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt index f90dfd61f7c..0c17d69ac2d 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/context.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.SupertypeLoopChecker import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.* +import org.jetbrains.kotlin.load.java.JavaModuleAnnotationsProvider import org.jetbrains.kotlin.load.java.components.JavaPropertyInitializerEvaluator import org.jetbrains.kotlin.load.java.components.JavaResolverCache import org.jetbrains.kotlin.load.java.components.SignaturePropagator diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt index 6918c45c4ed..ac88c331077 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializationComponentsForJava.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver import org.jetbrains.kotlin.load.java.JavaClassFinder import org.jetbrains.kotlin.load.java.JavaClassesTracker +import org.jetbrains.kotlin.load.java.JavaModuleAnnotationsProvider import org.jetbrains.kotlin.load.java.JavaTypeEnhancementState import org.jetbrains.kotlin.load.java.components.JavaPropertyInitializerEvaluator import org.jetbrains.kotlin.load.java.components.JavaResolverCache diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt index 95abe6ea0d1..b457d952d28 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/sessions/FirIdeSessionFactory.kt @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices @OptIn(PrivateSessionConstructor::class, SessionConfiguration::class) @@ -91,7 +92,7 @@ internal object FirIdeSessionFactory { registerIdeComponents(project) registerCommonComponents(languageVersionSettings) - registerCommonJavaComponents() + registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerResolveComponents() val provider = FirIdeProvider( @@ -193,7 +194,7 @@ internal object FirIdeSessionFactory { registerIdeComponents(project) register(FirPhaseManager::class, FirPhaseCheckingPhaseManager) registerCommonComponents(languageVersionSettings) - registerCommonJavaComponents() + registerCommonJavaComponents(JavaModuleResolver.getInstance(project)) registerJavaSpecificResolveComponents() val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped)