diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt index ca28956c29f..1ba391bb411 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirSymbol.kt @@ -50,7 +50,7 @@ internal tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (ori } FirDeclarationOrigin.Precompiled -> KtSymbolOrigin.SOURCE FirDeclarationOrigin.Library, FirDeclarationOrigin.BuiltIns -> KtSymbolOrigin.LIBRARY - FirDeclarationOrigin.Java -> KtSymbolOrigin.JAVA + is FirDeclarationOrigin.Java -> KtSymbolOrigin.JAVA FirDeclarationOrigin.SamConstructor -> KtSymbolOrigin.SAM_CONSTRUCTOR FirDeclarationOrigin.Enhancement -> KtSymbolOrigin.JAVA FirDeclarationOrigin.IntersectionOverride -> KtSymbolOrigin.INTERSECTION_OVERRIDE diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt index c2c692266e1..de221b1fb9d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/utils/firUtils.kt @@ -82,7 +82,7 @@ internal fun FirCallableSymbol<*>.computeImportableName(useSiteSession: FirSessi val containingClass = getContainingClassSymbol(useSiteSession) ?: return null // Java static members, enums, and object members can be imported - val canBeImported = containingClass.origin == FirDeclarationOrigin.Java || + val canBeImported = containingClass.origin is FirDeclarationOrigin.Java || containingClass.classKind == ClassKind.ENUM_CLASS || containingClass.classKind == ClassKind.OBJECT diff --git a/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt b/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt index 8301b4ac7dc..1e9e288f2b6 100644 --- a/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt +++ b/compiler/fir/analysis-tests/testData/resolve/scopes/explicitOverrideOfTwoMembers_java.overrides.txt @@ -1,13 +1,13 @@ C: - [Java]: public open field x: R|kotlin/Int| from Java enhancement scope for /C [id: 0] - [Java]: private open field y: R|kotlin/Int| from Java enhancement scope for /C [id: 0] + [Java(Source)]: public open field x: R|kotlin/Int| from Java enhancement scope for /C [id: 0] + [Java(Source)]: private open field y: R|kotlin/Int| from Java enhancement scope for /C [id: 0] D: - [Java]: public open field x: R|kotlin/Int| from Java enhancement scope for /D [id: 0] + [Java(Source)]: public open field x: R|kotlin/Int| from Java enhancement scope for /D [id: 0] [IntersectionOverride]: public abstract val x: R|kotlin/Int| from Java enhancement scope for /D [id: 0] [Source]: public abstract val x: R|kotlin/Int| from Use site scope of /A [id: 1] [Source]: public abstract val x: R|kotlin/String| from Use site scope of /B [id: 2] - [Java]: private open field y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] + [Java(Source)]: private open field y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] [Synthetic]: public abstract val y: R|kotlin/Int| from Java enhancement scope for /D [id: 0] [Source]: public abstract val y: R|kotlin/Int| from Use site scope of /A [id: 1] [Source]: public abstract val y: R|kotlin/Int| from Use site scope of /B [id: 2] diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirInterfaceDefaultMethodCallChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirInterfaceDefaultMethodCallChecker.kt index c59d984356b..4790f0a1acd 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirInterfaceDefaultMethodCallChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirInterfaceDefaultMethodCallChecker.kt @@ -39,7 +39,7 @@ object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecke var typeSymbol: FirRegularClassSymbol? = null if (!supportsDefaults && symbol.isStatic) { typeSymbol = getTypeSymbol() ?: return - if (typeSymbol.isInterface && typeSymbol.origin == FirDeclarationOrigin.Java) { + if (typeSymbol.isInterface && typeSymbol.origin is FirDeclarationOrigin.Java) { reporter.reportOn(expression.source, FirJvmErrors.INTERFACE_STATIC_METHOD_CALL_FROM_JAVA6_TARGET, context) } } @@ -55,7 +55,7 @@ object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecke if (typeSymbol == null) typeSymbol = getTypeSymbol() ?: return val jvmDefaultMode = context.session.jvmDefaultModeState - if (typeSymbol.isInterface && (typeSymbol.origin == FirDeclarationOrigin.Java || symbol.isCompiledToJvmDefault(jvmDefaultMode))) { + if (typeSymbol.isInterface && (typeSymbol.origin is FirDeclarationOrigin.Java || symbol.isCompiledToJvmDefault(jvmDefaultMode))) { if (containingDeclaration.isInterface) { val containingMember = context.findContainingMember()?.symbol if (containingMember?.isCompiledToJvmDefault(jvmDefaultMode) == false) { diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt index 368087a6e3d..66d8e0065fb 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt @@ -35,7 +35,7 @@ object FirJavaAnnotationsChecker : FirAnnotationChecker() { override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) { if (context.containingDeclarations.lastOrNull()?.source?.kind != KtRealSourceElementKind) return val callableSymbol = expression.annotationTypeRef.toRegularClassSymbol(context.session) - if (callableSymbol?.origin != FirDeclarationOrigin.Java) return + if (callableSymbol?.origin !is FirDeclarationOrigin.Java) return val lookupTag = expression.annotationTypeRef.coneTypeSafe()?.lookupTag ?: return javaToKotlinNameMap[lookupTag.classId]?.let { betterName -> diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt index e94d9f61f17..e9ac71fc34e 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt @@ -127,7 +127,7 @@ fun FirClassLikeSymbol<*>.containsRepeatableAnnotation(session: FirSession): Boo getAnnotationByClassId(StandardClassIds.Annotations.JvmRepeatable) != null ) { return session.languageVersionSettings.supportsFeature(LanguageFeature.RepeatableAnnotations) || - getAnnotationRetention() == AnnotationRetention.SOURCE && origin == FirDeclarationOrigin.Java + getAnnotationRetention() == AnnotationRetention.SOURCE && origin is FirDeclarationOrigin.Java } return false } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt index 4df266a81bd..111729e30ab 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedSupertypeChecker.kt @@ -43,7 +43,7 @@ object FirSealedSupertypeChecker : FirClassChecker() { val superClass = context.session.symbolProvider.getClassLikeSymbolByClassId(superClassId) as? FirRegularClassSymbol ?: continue if (!superClass.isSealed) continue - if (superClass.origin == FirDeclarationOrigin.Java) { + if (superClass.origin is FirDeclarationOrigin.Java) { reporter.reportOn(superTypeRef.source, FirErrors.CLASS_INHERITS_JAVA_SEALED_CLASS, context) continue } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt index f00bb85d803..847e792a62a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyClass.kt @@ -171,7 +171,7 @@ class Fir2IrLazyClass( // TODO we also come here for all deserialized / enhanced static enum members (with declaration.source == null). // For such members we currently can't tell whether they are compiler-generated methods or not. // Note: we must drop declarations from Java here to avoid FirJavaTypeRefs inside - if (declaration.source == null && declaration.origin != FirDeclarationOrigin.Java || + if (declaration.source == null && declaration.origin !is FirDeclarationOrigin.Java || declaration.source?.kind == KtFakeSourceElementKind.EnumGeneratedDeclaration ) { result += declarationStorage.getIrFunctionSymbol(declaration.symbol, forceTopLevelPrivate = isTopLevelPrivate).owner diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt index 4af81ffc2c1..5bb63b9fd77 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt @@ -109,7 +109,7 @@ abstract class FirJavaFacade( ): FirTypeParameter { return buildTypeParameter { this.moduleData = moduleData - origin = FirDeclarationOrigin.Java + origin = javaOrigin(isFromSource) resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES name = this@toFirTypeParameter.name symbol = FirTypeParameterSymbol() @@ -240,6 +240,7 @@ abstract class FirJavaFacade( this.moduleData = moduleData symbol = classSymbol name = javaClass.name + isFromSource = javaClass.isFromSource val visibility = javaClass.visibility this@buildJavaClass.visibility = visibility classKind = javaClass.classKind @@ -356,7 +357,7 @@ abstract class FirJavaFacade( if (classIsAnnotation) { declarations += buildConstructorForAnnotationClass( - classSource = (javaClass as? JavaElementImpl<*>)?.psi?.toKtPsiSourceElement(KtFakeSourceElementKind.ImplicitConstructor) as? KtFakeSourceElement, + javaClass, constructorId = constructorId, ownerClassBuilder = this, valueParametersForAnnotationConstructor = valueParametersForAnnotationConstructor, @@ -412,7 +413,7 @@ abstract class FirJavaFacade( } returnTypeRef = returnType.toFirJavaTypeRef(session, javaTypeParameterStack) resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES - origin = FirDeclarationOrigin.Java + origin = javaOrigin(javaField.isFromSource) // TODO: check if this works properly with annotations that take the enum class as an argument annotations.addFromJava(session, javaField, javaTypeParameterStack) }.apply { @@ -423,6 +424,7 @@ abstract class FirJavaFacade( this.moduleData = moduleData symbol = FirFieldSymbol(fieldId) name = fieldName + isFromSource = javaField.isFromSource status = FirResolvedDeclarationStatusImpl( javaField.visibility, javaField.modality, @@ -473,6 +475,7 @@ abstract class FirJavaFacade( source = (javaMethod as? JavaElementImpl<*>)?.psi?.toKtPsiSourceElement() symbol = methodSymbol name = methodName + isFromSource = javaMethod.isFromSource returnTypeRef = returnType.toFirJavaTypeRef(session, javaTypeParameterStack) isStatic = javaMethod.isStatic typeParameters += javaMethod.typeParameters.convertTypeParameters(javaTypeParameterStack, methodSymbol, moduleData) @@ -518,6 +521,7 @@ abstract class FirJavaFacade( source = (javaMethod as? JavaElementImpl<*>)?.psi ?.toKtPsiSourceElement(KtFakeSourceElementKind.ImplicitJavaAnnotationConstructor) this.moduleData = moduleData + isFromSource = javaMethod.isFromSource returnTypeRef = firJavaMethod.returnTypeRef name = javaMethod.name isVararg = javaMethod.returnType is JavaArrayType && javaMethod.name == VALUE_METHOD_NAME @@ -538,6 +542,7 @@ abstract class FirJavaFacade( return buildJavaConstructor { source = (javaConstructor as? JavaElementImpl<*>)?.psi?.toKtPsiSourceElement() this.moduleData = moduleData + isFromSource = javaClass.isFromSource symbol = constructorSymbol isInner = javaClass.outerClass != null && !javaClass.isStatic val isThisInner = this.isInner @@ -575,15 +580,18 @@ abstract class FirJavaFacade( } private fun buildConstructorForAnnotationClass( - classSource: KtFakeSourceElement?, + javaClass: JavaClass, constructorId: CallableId, ownerClassBuilder: FirJavaClassBuilder, valueParametersForAnnotationConstructor: ValueParametersForAnnotationConstructor, moduleData: FirModuleData, ): FirJavaConstructor { return buildJavaConstructor { - source = classSource + source = (javaClass as? JavaElementImpl<*>) + ?.psi + ?.toKtPsiSourceElement(KtFakeSourceElementKind.ImplicitConstructor) as? KtFakeSourceElement this.moduleData = moduleData + isFromSource = javaClass.isFromSource symbol = FirConstructorSymbol(constructorId) status = FirResolvedDeclarationStatusImpl(Visibilities.Public, Modality.FINAL, EffectiveVisibility.Public) returnTypeRef = buildResolvedTypeRef { 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 62d27bff828..9a3bcbd3ee7 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 @@ -29,13 +29,13 @@ import org.jetbrains.kotlin.load.java.structure.JavaPackage import org.jetbrains.kotlin.name.Name import kotlin.properties.Delegates -@OptIn(FirImplementationDetail::class) class FirJavaClass @FirImplementationDetail internal constructor( override val source: KtSourceElement?, override val moduleData: FirModuleData, @Volatile override var resolvePhase: FirResolvePhase, override val name: Name, + override val origin: FirDeclarationOrigin.Java, override val annotations: MutableList, override var status: FirDeclarationStatus, override val classKind: ClassKind, @@ -59,9 +59,6 @@ class FirJavaClass @FirImplementationDetail internal constructor( symbol.bind(this) } - override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Java - override val attributes: FirDeclarationAttributes = FirDeclarationAttributes() override fun replaceSuperTypeRefs(newSuperTypeRefs: List) { @@ -131,6 +128,7 @@ class FirJavaClass @FirImplementationDetail internal constructor( internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationContainerBuilder { lateinit var visibility: Visibility var modality: Modality? = null + var isFromSource: Boolean by Delegates.notNull() var isTopLevel: Boolean by Delegates.notNull() var isStatic: Boolean by Delegates.notNull() var isNotSam: Boolean by Delegates.notNull() @@ -153,6 +151,7 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont moduleData, resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES, name, + origin = javaOrigin(isFromSource), annotations, status, classKind, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index 6b49a704aed..ca1c5a77eb0 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -31,6 +31,7 @@ class FirJavaConstructor @FirImplementationDetail constructor( override val source: KtSourceElement?, override val moduleData: FirModuleData, override val symbol: FirConstructorSymbol, + override val origin: FirDeclarationOrigin.Java, override val isPrimary: Boolean, override var returnTypeRef: FirTypeRef, override val valueParameters: MutableList, @@ -54,9 +55,6 @@ class FirJavaConstructor @FirImplementationDetail constructor( override val body: FirBlock? get() = null - override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Java - override val attributes: FirDeclarationAttributes = FirDeclarationAttributes() override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null @@ -156,6 +154,7 @@ class FirJavaConstructorBuilder : FirConstructorBuilder() { lateinit var visibility: Visibility var isInner: Boolean by Delegates.notNull() var isPrimary: Boolean by Delegates.notNull() + var isFromSource: Boolean by Delegates.notNull() lateinit var annotationBuilder: () -> List @OptIn(FirImplementationDetail::class) @@ -164,6 +163,7 @@ class FirJavaConstructorBuilder : FirConstructorBuilder() { source, moduleData, symbol, + origin = javaOrigin(isFromSource), isPrimary, returnTypeRef, valueParameters, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt index 14aa02b27f1..5897a40f838 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt @@ -31,10 +31,10 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract import kotlin.properties.Delegates -@OptIn(FirImplementationDetail::class) class FirJavaField @FirImplementationDetail constructor( override val source: KtSourceElement?, override val moduleData: FirModuleData, + override val origin: FirDeclarationOrigin.Java, override val symbol: FirFieldSymbol, override val name: Name, @Volatile @@ -58,8 +58,6 @@ class FirJavaField @FirImplementationDetail constructor( override val setter: FirPropertyAccessor? get() = null override val backingField: FirBackingField? = null override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null - override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Java override val annotations: List by lazy { annotationBuilder() } @@ -170,6 +168,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() { var modality: Modality? = null lateinit var visibility: Visibility var isStatic: Boolean by Delegates.notNull() + var isFromSource: Boolean by Delegates.notNull() lateinit var annotationBuilder: () -> List override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES @@ -179,6 +178,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() { return FirJavaField( source, moduleData, + origin = javaOrigin(isFromSource), symbol, name, resolvePhase, diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt index 59b2cf578e5..0067bf99e4e 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt @@ -46,10 +46,10 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract import kotlin.properties.Delegates -@OptIn(FirImplementationDetail::class) class FirJavaMethod @FirImplementationDetail constructor( override val source: KtSourceElement?, override val moduleData: FirModuleData, + override val origin: FirDeclarationOrigin.Java, @Volatile override var resolvePhase: FirResolvePhase, override val attributes: FirDeclarationAttributes, @@ -75,9 +75,6 @@ class FirJavaMethod @FirImplementationDetail constructor( override val containerSource: DeserializedContainerSource? get() = null - override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Java - override val contractDescription: FirContractDescription get() = FirEmptyContractDescription @@ -207,6 +204,7 @@ class FirJavaMethodBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder, override val typeParameters: MutableList = mutableListOf() var isStatic: Boolean by Delegates.notNull() override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES + var isFromSource: Boolean by Delegates.notNull() lateinit var annotationBuilder: () -> List @Deprecated("Modification of 'deprecation' has no impact for FirJavaFunctionBuilder", level = DeprecationLevel.HIDDEN) @@ -239,6 +237,7 @@ class FirJavaMethodBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder, return FirJavaMethod( source, moduleData, + origin = javaOrigin(isFromSource), resolvePhase, attributes, returnTypeRef as FirJavaTypeRef, @@ -274,6 +273,7 @@ inline fun buildJavaMethodCopy(original: FirSimpleFunction, init: FirJavaMethodB copyBuilder.dispatchReceiverType = original.dispatchReceiverType copyBuilder.name = original.name copyBuilder.symbol = original.symbol + copyBuilder.isFromSource = original.origin.fromSource copyBuilder.annotations.addAll(original.annotations) copyBuilder.typeParameters.addAll(original.typeParameters) val annotations = original.annotations diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt index 3f500dce3a0..5a41bb30850 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt @@ -25,11 +25,13 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract +import kotlin.properties.Delegates @OptIn(FirImplementationDetail::class) class FirJavaValueParameter @FirImplementationDetail constructor( override val source: KtSourceElement?, override val moduleData: FirModuleData, + override val origin: FirDeclarationOrigin.Java, @Volatile override var resolvePhase: FirResolvePhase, override val attributes: FirDeclarationAttributes, @@ -58,9 +60,6 @@ class FirJavaValueParameter @FirImplementationDetail constructor( override val annotations: List by lazy { annotationBuilder() } - override val origin: FirDeclarationOrigin - get() = FirDeclarationOrigin.Java - override val receiverTypeRef: FirTypeRef? get() = null @@ -199,13 +198,15 @@ class FirJavaValueParameterBuilder { lateinit var name: Name lateinit var annotationBuilder: () -> List var defaultValue: FirExpression? = null - var isVararg: Boolean by kotlin.properties.Delegates.notNull() + var isVararg: Boolean by Delegates.notNull() + var isFromSource: Boolean by Delegates.notNull() @OptIn(FirImplementationDetail::class) fun build(): FirJavaValueParameter { return FirJavaValueParameter( source, moduleData, + origin = javaOrigin(isFromSource), resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES, attributes, returnTypeRef, @@ -231,6 +232,7 @@ inline fun buildJavaValueParameterCopy(original: FirValueParameter, init: FirJav copyBuilder.source = original.source copyBuilder.moduleData = original.moduleData copyBuilder.attributes = original.attributes.copy() + copyBuilder.isFromSource = original.origin.fromSource copyBuilder.returnTypeRef = original.returnTypeRef copyBuilder.name = original.name val annotations = original.annotations diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/utils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/utils.kt new file mode 100644 index 00000000000..f915c5d3ee6 --- /dev/null +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/utils.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2022 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. + */ + +/* + * Copyright 2010-2022 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.declarations + +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin + +internal fun javaOrigin(isFromSource: Boolean): FirDeclarationOrigin.Java { + return if (isFromSource) FirDeclarationOrigin.Java.Source else FirDeclarationOrigin.Java.Library +} 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 4fe19bf536a..62e59369156 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 @@ -127,6 +127,7 @@ class FirSignatureEnhancement( this.symbol = symbol this.name = name returnTypeRef = newReturnTypeRef + isFromSource = original.origin.fromSource // TODO: Use some kind of copy mechanism visibility = firElement.visibility @@ -550,7 +551,7 @@ private class EnhancementSignatureParts( override fun KotlinTypeMarker.isArrayOrPrimitiveArray(): Boolean = (this as ConeKotlinType).isArrayOrPrimitiveArray override val TypeParameterMarker.isFromJava: Boolean - get() = (this as ConeTypeParameterLookupTag).symbol.fir.origin == FirDeclarationOrigin.Java + get() = (this as ConeTypeParameterLookupTag).symbol.fir.origin is FirDeclarationOrigin.Java } class FirEnhancedSymbolsStorage(val session: FirSession) : FirSessionComponent { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt index 2758efa1bcd..77a78db2f8d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt @@ -56,6 +56,7 @@ internal fun JavaValueParameter.toFirValueParameter( ): FirValueParameter { return buildJavaValueParameter { source = (this@toFirValueParameter as? JavaElementImpl<*>)?.psi?.toKtPsiSourceElement() + isFromSource = this@toFirValueParameter.isFromSource this.moduleData = moduleData name = this@toFirValueParameter.name ?: Name.identifier("p$index") returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 964b0a65ffb..8866b2c24b5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -510,7 +510,7 @@ fun FirFunction.getAsForbiddenNamedArgumentsTarget(session: FirSession): Forbidd // (org.jetbrains.kotlin.resolve.OverridingUtil#selectMostSpecificMember), from which the `hasStableParameterNames` status is // copied. FirDeclarationOrigin.IntersectionOverride -> originalForIntersectionOverrideAttr?.getAsForbiddenNamedArgumentsTarget(session) - FirDeclarationOrigin.Java, FirDeclarationOrigin.Enhancement -> ForbiddenNamedArgumentsTarget.NON_KOTLIN_FUNCTION + is FirDeclarationOrigin.Java, FirDeclarationOrigin.Enhancement -> ForbiddenNamedArgumentsTarget.NON_KOTLIN_FUNCTION FirDeclarationOrigin.SamConstructor -> null FirDeclarationOrigin.SubstitutionOverride -> originalForSubstitutionOverrideAttr?.getAsForbiddenNamedArgumentsTarget(session) // referenced function of a Kotlin function type diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index cde40ecb852..254b2ae3fe7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -30,7 +30,6 @@ import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.toSymbol import org.jetbrains.kotlin.fir.visitors.transformSingle -@OptIn(AdapterForResolveProcessor::class) class FirStatusResolveProcessor( session: FirSession, scopeSession: ScopeSession @@ -392,9 +391,8 @@ abstract class AbstractFirStatusResolveTransformer( } } - @OptIn(ExperimentalStdlibApi::class) private fun forceResolveStatusesOfClass(regularClass: FirRegularClass) { - if (regularClass.origin == FirDeclarationOrigin.Java || regularClass.origin == FirDeclarationOrigin.Precompiled) { + if (regularClass.origin is FirDeclarationOrigin.Java || regularClass.origin == FirDeclarationOrigin.Precompiled) { /* * If regular class has no corresponding file then it is platform class, * so we need to resolve supertypes of this class because they could diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt index 5d3b1867e37..1ac1fb43110 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt @@ -5,12 +5,21 @@ package org.jetbrains.kotlin.fir.declarations -sealed class FirDeclarationOrigin(private val displayName: String? = null, val fromSupertypes: Boolean = false, val generated: Boolean = false) { - object Source : FirDeclarationOrigin() +sealed class FirDeclarationOrigin( + private val displayName: String? = null, + val fromSupertypes: Boolean = false, + val generated: Boolean = false, + val fromSource: Boolean = false +) { + object Source : FirDeclarationOrigin(fromSource = true) object Library : FirDeclarationOrigin() object Precompiled : FirDeclarationOrigin() // currently used for incremental compilation object BuiltIns : FirDeclarationOrigin() - object Java : FirDeclarationOrigin() + sealed class Java(displayName: String, fromSource: Boolean = false) : FirDeclarationOrigin(displayName, fromSource = fromSource) { + object Source : Java("Java(Source)", fromSource = true) + object Library : Java("Java(Library)") + } + object Synthetic : FirDeclarationOrigin() object DynamicScope : FirDeclarationOrigin() object SamConstructor : FirDeclarationOrigin() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt index dc1b2aaef72..055b227bd60 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt @@ -47,16 +47,18 @@ val FirQualifiedAccess.referredPropertySymbol: FirPropertySymbol? } inline val FirDeclaration.isJava: Boolean - get() = origin == FirDeclarationOrigin.Java + get() = origin is FirDeclarationOrigin.Java +inline val FirDeclaration.isJavaSource: Boolean + get() = origin == FirDeclarationOrigin.Java.Source inline val FirDeclaration.isFromLibrary: Boolean - get() = origin == FirDeclarationOrigin.Library + get() = origin == FirDeclarationOrigin.Library || origin == FirDeclarationOrigin.Java.Library inline val FirDeclaration.isPrecompiled: Boolean get() = origin == FirDeclarationOrigin.Precompiled inline val FirDeclaration.isSynthetic: Boolean get() = origin == FirDeclarationOrigin.Synthetic inline val FirDeclaration.isJavaOrEnhancement: Boolean - get() = origin == FirDeclarationOrigin.Java || origin == FirDeclarationOrigin.Enhancement + get() = origin is FirDeclarationOrigin.Java || origin == FirDeclarationOrigin.Enhancement inline val FirBasedSymbol<*>.isJavaOrEnhancement: Boolean - get() = origin == FirDeclarationOrigin.Java || origin == FirDeclarationOrigin.Enhancement + get() = origin is FirDeclarationOrigin.Java || origin == FirDeclarationOrigin.Enhancement