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 78806c5adff..82d5c6e6cf3 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 @@ -421,6 +421,7 @@ class JavaSymbolProvider( defaultValue = buildExpressionStub() } isVararg = returnType is JavaArrayType && methodName == VALUE_METHOD_NAME + annotationBuilder = { emptyList() } } if (methodName == VALUE_METHOD_NAME) { valueParametersForAnnotationConstructor.valueParameterForValue = parameterForAnnotationConstructor 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 bfcb65d1548..34590214bac 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 @@ -581,7 +581,7 @@ internal fun JavaValueParameter.toFirValueParameter( name = this@toFirValueParameter.name ?: Name.identifier("p$index") returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack) isVararg = this@toFirValueParameter.isVararg - addAnnotationsFrom(session, this@toFirValueParameter, javaTypeParameterStack) + annotationBuilder = { annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }} } } 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 ae2033e7631..abc2d4d2de3 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 @@ -9,52 +9,150 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.builder.FirBuilderDsl -import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes -import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.declarations.builder.FirValueParameterBuilder -import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.Name @OptIn(FirImplementationDetail::class) class FirJavaValueParameter @FirImplementationDetail constructor( - source: FirSourceElement?, - session: FirSession, - resolvePhase: FirResolvePhase, - attributes: FirDeclarationAttributes, - returnTypeRef: FirTypeRef, - name: Name, - symbol: FirVariableSymbol, - annotations: MutableList, - defaultValue: FirExpression?, - isCrossinline: Boolean, - isNoinline: Boolean, - isVararg: Boolean, -) : FirValueParameterImpl( - source, - session, - resolvePhase, - FirDeclarationOrigin.Java, - attributes, - returnTypeRef, - name, - symbol, - annotations, - defaultValue, - isCrossinline, - isNoinline, - isVararg, -) + override val source: FirSourceElement?, + override val session: FirSession, + override var resolvePhase: FirResolvePhase, + override val attributes: FirDeclarationAttributes, + override var returnTypeRef: FirTypeRef, + override val name: Name, + override val symbol: FirVariableSymbol, + annotationBuilder: () -> List, + override var defaultValue: FirExpression?, + override val isVararg: Boolean, +) : FirValueParameter() { + init { + symbol.bind(this) + } + + override val isCrossinline: Boolean + get() = false + + override val isNoinline: Boolean + get() = false + + override val isVal: Boolean + get() = true + + override val isVar: Boolean + get() = false + + override val annotations: List by lazy { annotationBuilder() } + + override val origin: FirDeclarationOrigin + get() = FirDeclarationOrigin.Java + + override val receiverTypeRef: FirTypeRef? + get() = null + + override val initializer: FirExpression? + get() = null + + override val delegate: FirExpression? + get() = null + + override val delegateFieldSymbol: FirDelegateFieldSymbol? + get() = null + + override val getter: FirPropertyAccessor? + get() = null + + override val setter: FirPropertyAccessor? + get() = null + + override val controlFlowGraphReference: FirControlFlowGraphReference? + get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + defaultValue?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirValueParameter { + transformReturnTypeRef(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirValueParameter { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirValueParameter { + return this + } + + override fun transformInitializer(transformer: FirTransformer, data: D): FirValueParameter { + return this + } + + override fun transformDelegate(transformer: FirTransformer, data: D): FirValueParameter { + return this + } + + override fun transformGetter(transformer: FirTransformer, data: D): FirValueParameter { + return this + } + + override fun transformSetter(transformer: FirTransformer, data: D): FirValueParameter { + return this + } + + override fun transformAnnotations(transformer: FirTransformer, data: D): FirValueParameter { + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirValueParameter { + defaultValue = defaultValue?.transformSingle(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) { + returnTypeRef = newReturnTypeRef + } + + override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) { + } + + override fun replaceInitializer(newInitializer: FirExpression?) { + } + + override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) { + } +} @FirBuilderDsl -class FirJavaValueParameterBuilder : FirValueParameterBuilder() { +class FirJavaValueParameterBuilder { + var source: FirSourceElement? = null + lateinit var session: FirSession + var attributes: FirDeclarationAttributes = FirDeclarationAttributes() + lateinit var returnTypeRef: FirTypeRef + lateinit var name: Name + lateinit var annotationBuilder: () -> List + var defaultValue: FirExpression? = null + var isVararg: Boolean by kotlin.properties.Delegates.notNull() + @OptIn(FirImplementationDetail::class) - override fun build(): FirJavaValueParameter { + fun build(): FirJavaValueParameter { return FirJavaValueParameter( source, session, @@ -63,48 +161,11 @@ class FirJavaValueParameterBuilder : FirValueParameterBuilder() { returnTypeRef, name, symbol = FirVariableSymbol(name), - annotations, + annotationBuilder, defaultValue, - isCrossinline = false, - isNoinline = false, isVararg, ) } - - @Deprecated("Modification of 'resolvePhase' has no impact for FirJavaValueParameterBuilder", level = DeprecationLevel.HIDDEN) - override var resolvePhase: FirResolvePhase - get() = throw IllegalStateException() - set(@Suppress("UNUSED_PARAMETER") value) { - throw IllegalStateException() - } - - @Deprecated("Modification of '' has no impact for FirJavaValueParameterBuilder", level = DeprecationLevel.HIDDEN) - override var symbol: FirVariableSymbol - get() = throw IllegalStateException() - set(@Suppress("UNUSED_PARAMETER") value) { - throw IllegalStateException() - } - - @Deprecated("Modification of 'isCrossinline' has no impact for FirJavaValueParameterBuilder", level = DeprecationLevel.HIDDEN) - override var isCrossinline: Boolean - get() = throw IllegalStateException() - set(@Suppress("UNUSED_PARAMETER") value) { - throw IllegalStateException() - } - - @Deprecated("Modification of 'isNoinline' has no impact for FirJavaValueParameterBuilder", level = DeprecationLevel.HIDDEN) - override var isNoinline: Boolean - get() = throw IllegalStateException() - set(@Suppress("UNUSED_PARAMETER") value) { - throw IllegalStateException() - } - - @Deprecated("Modification of 'origin' has no impact for FirJavaValueParameterBuilder", level = DeprecationLevel.HIDDEN) - override var origin: FirDeclarationOrigin - get() = throw IllegalStateException() - set(@Suppress("UNUSED_PARAMETER") value) { - throw IllegalStateException() - } } inline fun buildJavaValueParameter(init: FirJavaValueParameterBuilder.() -> Unit): FirJavaValueParameter { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt index bd059d3da02..2c7fe43fc43 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.declarations.builder import kotlin.contracts.* -import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder @@ -47,7 +46,6 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder { open var isNoinline: Boolean by kotlin.properties.Delegates.notNull() open var isVararg: Boolean by kotlin.properties.Delegates.notNull() - @OptIn(FirImplementationDetail::class) override fun build(): FirValueParameter { return FirValueParameterImpl( source, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt index ea6ba94573c..760da4f6c9d 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.fir.declarations.impl -import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes @@ -27,7 +26,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -open class FirValueParameterImpl @FirImplementationDetail constructor( +internal class FirValueParameterImpl( override val source: FirSourceElement?, override val session: FirSession, override var resolvePhase: FirResolvePhase, diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index 634ec2f9339..12becc42cf6 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -440,7 +440,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() } impl(valueParameter) { - kind = OpenClass defaultTrue("isVal", withGetter = true) defaultFalse("isVar", withGetter = true) defaultNull("getter", "setter", "initializer", "delegate", "receiverTypeRef", "delegateFieldSymbol", withGetter = true) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt index 3cd8fbc80e1..2055c6a1dd9 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirAnonymousFunctionSymbol.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.frontend.api.ValidityToken @@ -35,7 +34,6 @@ internal class KtFirAnonymousFunctionSymbol( override val valueParameters: List by firRef.withFirAndCache { fir -> fir.valueParameters.map { valueParameter -> - check(valueParameter is FirValueParameterImpl) builder.buildParameterSymbol(valueParameter) } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt index dae71f29763..db40b54f59c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirConstructorSymbol.kt @@ -9,7 +9,6 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.containingClass import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.frontend.api.ValidityToken @@ -45,7 +44,6 @@ internal class KtFirConstructorSymbol( override val valueParameters: List by firRef.withFirAndCache { fir -> fir.valueParameters.map { valueParameter -> - check(valueParameter is FirValueParameterImpl) builder.buildFirConstructorParameter(valueParameter) } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt index b16c5851632..84a2e519c7f 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirFunctionSymbol.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.containingClass import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.frontend.api.ValidityToken @@ -39,7 +38,6 @@ internal class KtFirFunctionSymbol( } override val valueParameters: List by firRef.withFirAndCache { fir -> fir.valueParameters.map { valueParameter -> - check(valueParameter is FirValueParameterImpl) builder.buildParameterSymbol(valueParameter) } }