From b3e5c6e0796dbeae6e8bcaa79eb9db583f041234 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Sun, 20 Jun 2021 11:42:52 +0300 Subject: [PATCH] [FIR] Add symbol to all declarations. Get rid of FirSymbolOwner --- .../kotlin/fir/java/JavaClassRendering.kt | 2 +- .../kotlin/fir/checkers/generator/Main.kt | 6 +- .../diagnostics/FirDiagnosticsList.kt | 36 +++--- .../jvm/checkers/JvmDeclarationCheckers.kt | 3 +- .../FirJvmExternalDeclarationChecker.kt | 2 +- .../FirDeclarationCheckerAliases.kt | 6 +- .../fir/analysis/diagnostics/FirErrors.kt | 44 +++---- .../analysis/FirCheckersResolveProcessor.kt | 5 +- .../checkers/CommonDeclarationCheckers.kt | 2 +- .../checkers/ExtendedDeclarationCheckers.kt | 5 +- .../analysis/checkers/FirAnnotationHelpers.kt | 4 +- .../fir/analysis/checkers/FirConstChecks.kt | 9 +- .../checkers/FirDeclarationInspector.kt | 14 +-- .../fir/analysis/checkers/FirHelpers.kt | 20 ++-- .../checkers/FirSinceKotlinHelpers.kt | 8 +- .../checkers/context/CheckerContext.kt | 4 +- .../context/PersistentCheckerContext.kt | 4 +- .../declaration/FirAnnotationChecker.kt | 12 +- .../FirAnnotationClassDeclarationChecker.kt | 7 +- .../declaration/FirClassVarianceChecker.kt | 5 +- .../declaration/FirConflictsChecker.kt | 43 +++---- .../declaration/FirCyclicTypeBoundsChecker.kt | 2 +- .../declaration/FirDeclarationChecker.kt | 4 +- .../declaration/FirDeclarationCheckerUtils.kt | 12 +- .../FirExposedVisibilityDeclarationChecker.kt | 8 +- .../checkers/declaration/FirImportsChecker.kt | 4 +- .../FirInfixFunctionDeclarationChecker.kt | 2 +- .../FirInlineDeclarationChecker.kt | 4 +- .../declaration/FirModifierChecker.kt | 8 +- .../declaration/FirOverrideChecker.kt | 36 +++--- .../FirProjectionRelationChecker.kt | 2 +- .../declaration/FirSealedSupertypeChecker.kt | 2 +- .../FirThrowableSubclassChecker.kt | 4 +- .../declaration/FirTypeAliasChecker.kt | 4 +- .../declaration/FirTypeConstraintsChecker.kt | 2 +- .../FirTypeParameterBoundsChecker.kt | 6 +- ...FirUpperBoundViolatedDeclarationChecker.kt | 4 +- .../expression/FirCallableReferenceChecker.kt | 2 +- .../FirExpressionAnnotationChecker.kt | 4 +- .../FirReservedUnderscoreCheckers.kt | 4 +- .../expression/FirUninitializedEnumChecker.kt | 3 +- .../extended/RedundantExplicitTypeChecker.kt | 4 +- .../RedundantModalityModifierSyntaxChecker.kt | 6 +- .../RedundantSetterParameterTypeChecker.kt | 2 +- ...edundantVisibilityModifierSyntaxChecker.kt | 12 +- .../checkers/extended/UnusedChecker.kt | 3 +- .../checkers/syntax/FirSyntaxChecker.kt | 2 +- .../collectors/AbstractDiagnosticCollector.kt | 16 ++- .../AbstractDiagnosticCollectorVisitor.kt | 12 +- .../DeclarationCheckersDiagnosticComponent.kt | 3 +- .../diagnostics/FirDiagnosticRenderers.kt | 4 +- .../jetbrains/kotlin/fir/dump/HtmlFirDump.kt | 16 +-- .../session/FirJvmModuleVisibilityChecker.kt | 2 +- .../deserialization/ClassDeserialization.kt | 6 +- .../fir/serialization/FirElementSerializer.kt | 10 +- .../fir/backend/jvm/FirJvmKotlinMangler.kt | 20 ++-- .../fir/backend/jvm/FirJvmMangleComputer.kt | 20 ++-- .../kotlin/fir/backend/Fir2IrConverter.kt | 6 +- .../fir/backend/Fir2IrDeclarationStorage.kt | 6 +- .../fir/backend/Fir2IrSignatureComposer.kt | 2 +- .../kotlin/fir/backend/Fir2IrVisitor.kt | 2 +- .../kotlin/fir/backend/FirMetadataSource.kt | 2 +- .../backend/generators/AdapterGenerator.kt | 13 ++- .../generators/DataClassMembersGenerator.kt | 8 +- .../generators/FakeOverrideGenerator.kt | 8 +- .../fir/lazy/AbstractFir2IrLazyDeclaration.kt | 7 +- .../fir/lazy/AbstractFir2IrLazyFunction.kt | 2 +- .../fir/lazy/Fir2IrLazyPropertyAccessor.kt | 14 ++- .../signaturer/FirBasedSignatureComposer.kt | 2 +- .../kotlin/fir/signaturer/FirMangler.kt | 4 +- .../fir/java/FirJavaVisibilityChecker.kt | 2 +- .../kotlin/fir/java/JavaSymbolProvider.kt | 2 +- .../fir/java/declarations/FirJavaClass.kt | 4 +- .../converter/DeclarationsConverter.kt | 18 +-- .../kotlin/fir/builder/RawFirBuilder.kt | 8 +- .../RawFirBuilderTotalKotlinTestCase.kt | 2 +- .../jetbrains/kotlin/fir/FirCallResolver.kt | 2 +- .../kotlin/fir/FirVisibilityChecker.kt | 26 ++--- .../fir/declarations/FirAnnotationUtils.kt | 2 +- .../FirVersionRequirementsTableKey.kt | 2 +- .../FirDeclarationGenerationExtension.kt | 12 +- .../extensions/FirPredicateBasedProvider.kt | 76 ++++++------ .../FirStatusTransformerExtension.kt | 4 +- .../fir/resolve/BodyResolveComponents.kt | 6 +- .../kotlin/fir/resolve/ResolveUtils.kt | 8 +- .../calls/CallableReferenceResolution.kt | 4 +- .../kotlin/fir/resolve/calls/Candidate.kt | 2 +- .../calls/ConeOverloadConflictResolver.kt | 4 +- .../fir/resolve/calls/ResolutionStages.kt | 9 +- .../jetbrains/kotlin/fir/resolve/dfa/Stack.kt | 8 +- .../fir/resolve/dfa/cfg/ControlFlowGraph.kt | 2 +- .../dfa/cfg/ControlFlowGraphBuilder.kt | 11 +- .../jetbrains/kotlin/fir/resolve/dfa/util.kt | 4 +- .../inference/FirBuilderInferenceSession.kt | 2 +- .../fir/resolve/providers/FirProvider.kt | 4 +- .../resolve/providers/FirSymbolProvider.kt | 2 +- .../impl/FirLibrarySessionProvider.kt | 6 +- .../resolve/providers/impl/FirProviderImpl.kt | 8 +- .../FirAbstractPhaseTransformer.kt | 5 +- ...irAbstractTreeTransformerWithSuperTypes.kt | 7 +- ...rCallCompletionResultsWriterTransformer.kt | 24 ++-- .../FirPhaseCheckingPhaseManager.kt | 3 +- .../FirSealedClassInheritorsProcessor.kt | 6 +- .../FirStatusResolveTransformer.kt | 62 +++++----- .../resolve/transformers/FirStatusResolver.kt | 12 +- .../transformers/FirSupertypesResolution.kt | 14 +-- .../transformers/FirTypeResolveTransformer.kt | 19 ++- .../fir/resolve/transformers/PhaseUtils.kt | 6 +- .../transformers/ReturnTypeCalculator.kt | 6 +- .../resolve/transformers/TransformUtils.kt | 2 +- .../body/resolve/BodyResolveContext.kt | 12 +- .../FirAbstractBodyResolveTransformer.kt | 8 +- .../body/resolve/FirBodyResolveTransformer.kt | 16 +-- .../FirDeclarationsResolveTransformer.kt | 35 +++--- .../body/resolve/FirImplicitBodyResolve.kt | 11 +- .../resolve/FirTowerDataContextCollector.kt | 4 +- .../body/resolve/LocalClassesNavigation.kt | 7 +- .../contracts/ConeEffectExtractor.kt | 4 +- .../FirContractResolveTransformer.kt | 10 +- .../FirContractResolveTransformerAdapter.kt | 3 +- ...FirAbstractAnnotationResolveTransformer.kt | 30 ++--- .../FirAnnotationArgumentsResolveProcessor.kt | 5 +- ...irAnnotationArgumentsResolveTransformer.kt | 6 +- .../FirGlobalClassGenerationProcessor.kt | 11 +- .../FirGlobalExtensionStatusProcessor.kt | 16 +-- .../FirPluginAnnotationsResolveTransformer.kt | 19 +-- .../plugin/GeneratedClassIndex.kt | 6 +- .../fir/scopes/FakeOverrideTypeCalculator.kt | 6 +- .../scopes/impl/FirAbstractImportingScope.kt | 2 +- .../impl/FirMemberTypeParameterScope.kt | 2 +- .../FirScopeWithFakeOverrideTypeCalculator.kt | 2 +- .../scopes/impl/FirTypeIntersectionScope.kt | 10 +- .../jetbrains/kotlin/fir/FirSymbolOwner.kt | 26 ----- .../declarations/FirAnnotatedDeclaration.kt | 6 +- .../declarations/FirAnonymousInitializer.kt | 3 +- .../fir/declarations/FirAnonymousObject.kt | 2 +- .../declarations/FirCallableDeclaration.kt | 11 +- .../FirCallableMemberDeclaration.kt | 14 +-- .../kotlin/fir/declarations/FirClass.kt | 14 +-- .../declarations/FirClassLikeDeclaration.kt | 7 +- .../kotlin/fir/declarations/FirDeclaration.kt | 4 +- .../kotlin/fir/declarations/FirFile.kt | 6 +- .../kotlin/fir/declarations/FirFunction.kt | 16 +-- .../fir/declarations/FirMemberDeclaration.kt | 10 +- .../fir/declarations/FirRegularClass.kt | 4 +- .../kotlin/fir/declarations/FirTypeAlias.kt | 2 +- .../fir/declarations/FirTypeParameter.kt | 3 +- .../fir/declarations/FirTypedDeclaration.kt | 8 +- .../kotlin/fir/declarations/FirVariable.kt | 22 ++-- .../builder/FirAnonymousObjectBuilder.kt | 2 +- .../declarations/builder/FirClassBuilder.kt | 2 +- .../builder/FirDeclarationBuilder.kt | 2 +- .../declarations/builder/FirFileBuilder.kt | 3 +- .../builder/FirRegularClassBuilder.kt | 2 +- .../impl/FirAnonymousObjectImpl.kt | 2 +- .../fir/declarations/impl/FirFileImpl.kt | 9 +- .../declarations/impl/FirRegularClassImpl.kt | 2 +- .../kotlin/fir/visitors/FirTransformer.kt | 89 +++++++------- .../kotlin/fir/visitors/FirVisitor.kt | 23 ++-- .../kotlin/fir/visitors/FirVisitorVoid.kt | 49 ++++---- .../org/jetbrains/kotlin/fir/FirRenderer.kt | 28 ++--- .../declarations/FirDeclarationAttributes.kt | 6 +- .../fir/declarations/FirDeclarationUtil.kt | 61 +++++----- .../FirMemberDeclarationComparator.kt | 12 +- .../fir/declarations/danglingConstraints.kt | 4 +- .../scopes/FirUnstableSmartcastTypeScope.kt | 4 +- .../kotlin/fir/symbols/FirBasedSymbol.kt | 3 +- .../fir/symbols/impl/FirCallableSymbol.kt | 2 +- .../fir/symbols/impl/FirClassLikeSymbol.kt | 5 +- .../fir/symbols/impl/FirClassifierSymbol.kt | 6 +- .../kotlin/fir/symbols/impl/FirFileSymbol.kt | 11 ++ .../fir/symbols/impl/FirVariableSymbol.kt | 2 +- .../fir/tree/generator/BuilderConfigurator.kt | 2 +- .../kotlin/fir/tree/generator/FieldSets.kt | 57 +++++---- .../fir/tree/generator/FirTreeBuilder.kt | 9 +- .../generator/ImplementationConfigurator.kt | 4 + .../fir/tree/generator/NodeConfigurator.kt | 109 ++++++++++-------- .../kotlin/fir/tree/generator/Types.kt | 1 + .../fir/tree/generator/model/Element.kt | 3 +- .../fir/tree/generator/model/ElementUtils.kt | 4 +- .../kotlin/fir/tree/generator/model/Field.kt | 2 +- .../util/BaseTransformerTypeFinder.kt | 3 +- .../compiler/visualizer/FirVisualizer.kt | 6 +- .../fir/low/level/api/FirDesignationState.kt | 8 +- .../api/FirModuleResolveStateDepended.kt | 10 +- .../level/api/FirModuleResolveStateImpl.kt | 27 +++-- .../level/api/api/DeclarationCopyBuilder.kt | 4 +- .../api/api/FirDeclarationDesignation.kt | 32 ++--- .../level/api/api/FirModuleResolveState.kt | 14 +-- .../low/level/api/api/LowLevelFirApiFacade.kt | 20 ++-- .../LowLevelFirApiFacadeForResolveOnAir.kt | 2 +- ...eforeElementDiagnosticCollectionHandler.kt | 2 +- ...FileStructureElementDiagnosticRetriever.kt | 10 +- ...ileStructureElementDiagnosticsCollector.kt | 2 +- .../diagnostics/FirIdeDiagnosticVisitor.kt | 4 +- ...extCollectingDiagnosticCollectorVisitor.kt | 13 ++- ...solveTransformerForReturnTypeCalculator.kt | 11 +- .../builder/FirTowerDataContextCollector.kt | 2 +- .../level/api/file/builder/ModuleFileCache.kt | 13 +-- .../api/file/structure/FileElementFactory.kt | 4 +- .../file/structure/FileStructureElement.kt | 4 +- .../api/file/structure/FileStructureUtil.kt | 5 +- .../lazy/resolve/FirLazyBodiesCalculator.kt | 20 ++-- .../FirLazyDeclarationResolveToType.kt | 9 +- .../resolve/FirLazyDeclarationResolver.kt | 4 +- .../lazy/resolve/NonLocalDeclarationUtils.kt | 2 +- .../RawFirNonLocalDeclarationBuilder.kt | 8 +- ...rIdeBuiltinsAndCloneableSessionProvider.kt | 6 +- .../FirIdeLibrariesSessionProvider.kt | 4 +- .../low/level/api/providers/FirIdeProvider.kt | 4 +- ...rDesignatedBodyResolveTransformerForIDE.kt | 11 +- ...gnatedContractsResolveTransformerForIDE.kt | 9 +- ...esignatedImplicitTypesTransformerForIDE.kt | 6 +- ...esignatedStatusResolveTransformerForIDE.kt | 8 +- ...natedSupertypeResolverTransformerForIDE.kt | 14 +-- ...DesignatedTypeResolverTransformerForIDE.kt | 9 +- .../FirFileAnnotationsResolveTransformer.kt | 8 +- .../transformers/FirLazyTransformerForIDE.kt | 14 +-- .../transformers/IDEDeclarationTransformer.kt | 30 +++-- .../level/api/util/contrainingFileUtils.kt | 5 +- .../low/level/api/util/declarationUtils.kt | 23 ++-- .../util/firDeclarationDesignationUtils.kt | 6 +- .../idea/fir/low/level/api/util/utils.kt | 4 +- .../AbstractFirLazyDeclarationResolveTest.kt | 13 ++- .../AbstractPartialRawFirBuilderTestCase.kt | 4 +- .../AbstractDiagnosticTraversalCounterTest.kt | 2 +- .../AbstractFirContextCollectionTest.kt | 12 +- .../idea/fir/low/level/api/firTestUtils.kt | 10 +- .../fir/generator/HLDiagnosticConverter.kt | 2 +- .../kotlin/idea/asJava/firLightUtils.kt | 8 +- ...deDeserializedDeclarationSourceProvider.kt | 4 +- .../FirCompileTimeConstantEvaluator.kt | 4 +- .../frontend/api/fir/KtSymbolByFirBuilder.kt | 17 +-- .../KtFirCompletionCandidateChecker.kt | 2 +- ...KtFirSymbolDeclarationOverridesProvider.kt | 13 +-- .../fir/components/KtFirVisibilityChecker.kt | 3 +- .../diagnostics/KtFirDataClassConverters.kt | 50 ++++---- .../api/fir/renderer/ConeTypeIdeRenderer.kt | 11 +- .../api/fir/renderer/FirIdeRenderer.kt | 32 ++--- .../frontend/api/fir/symbols/KtFirSymbol.kt | 10 +- .../fir/symbols/KtFirTypeAndAnnotations.kt | 12 +- .../annotations/KtFirAnnotationCall.kt | 7 +- .../symbols/annotations/firAnnotationUtils.kt | 11 +- .../api/fir/symbols/firSymbolUtils.kt | 15 +-- .../api/fir/symbols/pointers/pointerUtils.kt | 6 +- .../api/fir/utils/FirRefWithValidityCheck.kt | 6 +- .../KtAnalysisSessionFe10BindingHolder.kt | 4 +- .../fir/plugin/AllOpenStatusTransformer.kt | 9 +- .../plugin/AllOpenVisibilityTransformer.kt | 8 +- .../fir/plugin/checkers/DummyNameChecker.kt | 6 +- .../generators/AllOpenMemberGenerator.kt | 10 +- .../generators/AllOpenNestedClassGenerator.kt | 10 +- .../AllOpenRecursiveNestedClassGenerator.kt | 10 +- .../AllOpenTopLevelDeclarationsGenerator.kt | 10 +- 254 files changed, 1305 insertions(+), 1297 deletions(-) delete mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/FirSymbolOwner.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFileSymbol.kt diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests/org/jetbrains/kotlin/fir/java/JavaClassRendering.kt b/compiler/fir/analysis-tests/legacy-fir-tests/tests/org/jetbrains/kotlin/fir/java/JavaClassRendering.kt index c8684c2d4aa..93fbd430619 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests/org/jetbrains/kotlin/fir/java/JavaClassRendering.kt +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests/org/jetbrains/kotlin/fir/java/JavaClassRendering.kt @@ -26,7 +26,7 @@ fun renderJavaClass(renderer: FirRenderer, javaClass: FirJavaClass, session: Fir renderer.visitMemberDeclaration(javaClass) renderer.renderSupertypes(javaClass) renderer.renderInBraces { - val renderedDeclarations = mutableListOf() + val renderedDeclarations = mutableListOf>() fun renderAndCache(symbol: FirCallableSymbol<*>) { val enhanced = symbol.fir diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt index 239ab23714f..42e644da39f 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt @@ -51,8 +51,8 @@ fun main(args: Array) { val declarationPackage = "$basePackage.checkers.declaration" generateCheckersComponents(generationPath, declarationPackage, "FirDeclarationChecker") { - alias("BasicDeclarationChecker") - alias("MemberDeclarationChecker") + alias>("BasicDeclarationChecker") + alias>("MemberDeclarationChecker") alias>("FunctionChecker") alias("SimpleFunctionChecker") alias("PropertyChecker") @@ -61,7 +61,7 @@ fun main(args: Array) { alias("ConstructorChecker") alias("FileChecker") alias("FirTypeParameterChecker") - alias("FirAnnotatedDeclarationChecker") + alias>("FirAnnotatedDeclarationChecker") additional( fieldName = "controlFlowAnalyserCheckers", diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 26d33dafead..90794f3cc88 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -482,7 +482,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error { parameter("typeParameterName") - parameter("typeParametersOwner") + parameter>("typeParametersOwner") } val BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED by error() @@ -554,7 +554,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val OVERRIDES by object : DiagnosticGroup("overrides") { val NOTHING_TO_OVERRIDE by error(PositioningStrategy.OVERRIDE_MODIFIER) { - parameter("declaration") + parameter>("declaration") } val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error(PositioningStrategy.VISIBILITY_MODIFIER) { @@ -607,25 +607,25 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { } val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error(PositioningStrategy.DECLARATION_RETURN_TYPE) { - parameter("function") - parameter("superFunction") + parameter>("function") + parameter>("superFunction") } val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error(PositioningStrategy.DECLARATION_RETURN_TYPE) { - parameter("property") - parameter("superProperty") + parameter>("property") + parameter>("superProperty") } val VAR_TYPE_MISMATCH_ON_OVERRIDE by error(PositioningStrategy.DECLARATION_RETURN_TYPE) { - parameter("variable") - parameter("superVariable") + parameter>("variable") + parameter>("superVariable") } val VAR_OVERRIDDEN_BY_VAL by error(PositioningStrategy.VAL_OR_VAR_NODE) { - parameter("overridingDeclaration") - parameter("overriddenDeclaration") + parameter>("overridingDeclaration") + parameter>("overriddenDeclaration") } val NON_FINAL_MEMBER_IN_FINAL_CLASS by warning(PositioningStrategy.OPEN_MODIFIER) val NON_FINAL_MEMBER_IN_OBJECT by warning(PositioningStrategy.OPEN_MODIFIER) val VIRTUAL_MEMBER_HIDDEN by error(PositioningStrategy.DECLARATION_NAME) { - parameter("declared") + parameter>("declared") parameter("overriddenContainer") } } @@ -652,21 +652,21 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val FUNCTIONS by object : DiagnosticGroup("Functions") { val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error(PositioningStrategy.MODALITY_MODIFIER) { - parameter("function") + parameter>("function") parameter>("containingClass") } val ABSTRACT_FUNCTION_WITH_BODY by error(PositioningStrategy.MODALITY_MODIFIER) { - parameter("function") + parameter>("function") } val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error(PositioningStrategy.DECLARATION_SIGNATURE) { - parameter("function") + parameter>("function") } val PRIVATE_FUNCTION_WITH_NO_BODY by error(PositioningStrategy.VISIBILITY_MODIFIER) { - parameter("function") + parameter>("function") } val NON_MEMBER_FUNCTION_NO_BODY by error(PositioningStrategy.DECLARATION_SIGNATURE) { - parameter("function") + parameter>("function") } val FUNCTION_DECLARATION_WITH_NO_NAME by error(PositioningStrategy.DECLARATION_SIGNATURE) @@ -696,7 +696,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val PROPERTIES_AND_ACCESSORS by object : DiagnosticGroup("Properties & accessors") { val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error(PositioningStrategy.MODALITY_MODIFIER) { - parameter("property") + parameter>("property") parameter>("containingClass") } val PRIVATE_PROPERTY_IN_INTERFACE by error(PositioningStrategy.VISIBILITY_MODIFIER) @@ -1032,7 +1032,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { private val exposedVisibilityDiagnosticInit: DiagnosticBuilder.() -> Unit = { parameter("elementVisibility") - parameter("restrictingDeclaration") + parameter>("restrictingDeclaration") parameter("restrictingVisibility") } diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmDeclarationCheckers.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmDeclarationCheckers.kt index d754bdd67ec..91dafe50531 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmDeclarationCheckers.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmDeclarationCheckers.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers -import org.jetbrains.kotlin.fir.analysis.checkers.declaration.* +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker import org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration.FirJvmExternalDeclarationChecker object JvmDeclarationCheckers : DeclarationCheckers() { diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt index b25068a0809..abf9d8071c8 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.lexer.KtTokens object FirJvmExternalDeclarationChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (!declaration.isExternal) return val source = declaration.source ?: return if (source.kind is FirFakeSourceElementKind) return diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt index e57ac3f7c05..967228c686c 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt @@ -22,8 +22,8 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirTypeParameter -typealias FirBasicDeclarationChecker = FirDeclarationChecker -typealias FirMemberDeclarationChecker = FirDeclarationChecker +typealias FirBasicDeclarationChecker = FirDeclarationChecker> +typealias FirMemberDeclarationChecker = FirDeclarationChecker> typealias FirFunctionChecker = FirDeclarationChecker> typealias FirSimpleFunctionChecker = FirDeclarationChecker typealias FirPropertyChecker = FirDeclarationChecker @@ -32,4 +32,4 @@ typealias FirRegularClassChecker = FirDeclarationChecker typealias FirConstructorChecker = FirDeclarationChecker typealias FirFileChecker = FirDeclarationChecker typealias FirTypeParameterChecker = FirDeclarationChecker -typealias FirAnnotatedDeclarationChecker = FirDeclarationChecker +typealias FirAnnotatedDeclarationChecker = FirDeclarationChecker> diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 4bcf012fcfe..3ca83f95351 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -218,15 +218,15 @@ object FirErrors { val EXPERIMENTAL_ANNOTATION_WITH_WRONG_RETENTION by error0() // Exposed visibility - val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3(SourceElementPositioningStrategies.DECLARATION_NAME) - val EXPOSED_FUNCTION_RETURN_TYPE by error3(SourceElementPositioningStrategies.DECLARATION_NAME) - val EXPOSED_RECEIVER_TYPE by error3() - val EXPOSED_PROPERTY_TYPE by error3(SourceElementPositioningStrategies.DECLARATION_NAME) - val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by warning3(SourceElementPositioningStrategies.DECLARATION_NAME) - val EXPOSED_PARAMETER_TYPE by error3() - val EXPOSED_SUPER_INTERFACE by error3() - val EXPOSED_SUPER_CLASS by error3() - val EXPOSED_TYPE_PARAMETER_BOUND by error3() + val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) + val EXPOSED_FUNCTION_RETURN_TYPE by error3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) + val EXPOSED_RECEIVER_TYPE by error3, EffectiveVisibility>() + val EXPOSED_PROPERTY_TYPE by error3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) + val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by warning3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) + val EXPOSED_PARAMETER_TYPE by error3, EffectiveVisibility>() + val EXPOSED_SUPER_INTERFACE by error3, EffectiveVisibility>() + val EXPOSED_SUPER_CLASS by error3, EffectiveVisibility>() + val EXPOSED_TYPE_PARAMETER_BOUND by error3, EffectiveVisibility>() // Modifiers val INAPPLICABLE_INFIX_MODIFIER by error0() @@ -313,7 +313,7 @@ object FirErrors { val ONLY_ONE_CLASS_BOUND_ALLOWED by error0() val REPEATED_BOUND by error0() val CONFLICTING_UPPER_BOUNDS by error1() - val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error2() + val NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER by error2>() val BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED by error0() val REIFIED_TYPE_PARAMETER_NO_INLINE by error0(SourceElementPositioningStrategies.REIFIED_MODIFIER) val TYPE_PARAMETERS_NOT_ALLOWED by error0(SourceElementPositioningStrategies.TYPE_PARAMETERS_LIST) @@ -338,7 +338,7 @@ object FirErrors { val EXPRESSION_OF_NULLABLE_TYPE_IN_CLASS_LITERAL_LHS by error1() // overrides - val NOTHING_TO_OVERRIDE by error1(SourceElementPositioningStrategies.OVERRIDE_MODIFIER) + val NOTHING_TO_OVERRIDE by error1>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER) val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val OVERRIDING_FINAL_MEMBER by error2, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER) @@ -350,13 +350,13 @@ object FirErrors { val MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED by error2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) val OVERRIDING_FINAL_MEMBER_BY_DELEGATION by error2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) val DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE by warning2, FirCallableDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_NAME) - val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) - val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) - val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) - val VAR_OVERRIDDEN_BY_VAL by error2(SourceElementPositioningStrategies.VAL_OR_VAR_NODE) + val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) + val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) + val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.DECLARATION_RETURN_TYPE) + val VAR_OVERRIDDEN_BY_VAL by error2, FirMemberDeclaration<*>>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE) val NON_FINAL_MEMBER_IN_FINAL_CLASS by warning0(SourceElementPositioningStrategies.OPEN_MODIFIER) val NON_FINAL_MEMBER_IN_OBJECT by warning0(SourceElementPositioningStrategies.OPEN_MODIFIER) - val VIRTUAL_MEMBER_HIDDEN by error2(SourceElementPositioningStrategies.DECLARATION_NAME) + val VIRTUAL_MEMBER_HIDDEN by error2, FirRegularClass>(SourceElementPositioningStrategies.DECLARATION_NAME) // Redeclarations val MANY_COMPANION_OBJECTS by error0(SourceElementPositioningStrategies.COMPANION_OBJECT) @@ -369,11 +369,11 @@ object FirErrors { val LOCAL_INTERFACE_NOT_ALLOWED by error1(SourceElementPositioningStrategies.DECLARATION_NAME) // Functions - val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2>(SourceElementPositioningStrategies.MODALITY_MODIFIER) - val ABSTRACT_FUNCTION_WITH_BODY by error1(SourceElementPositioningStrategies.MODALITY_MODIFIER) - val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) - val PRIVATE_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) - val NON_MEMBER_FUNCTION_NO_BODY by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) + val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val ABSTRACT_FUNCTION_WITH_BODY by error1>(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) + val PRIVATE_FUNCTION_WITH_NO_BODY by error1>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) + val NON_MEMBER_FUNCTION_NO_BODY by error1>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val FUNCTION_DECLARATION_WITH_NO_NAME by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val ANONYMOUS_FUNCTION_WITH_NAME by error0() val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE) @@ -392,7 +392,7 @@ object FirErrors { val FUN_INTERFACE_WITH_SUSPEND_FUNCTION by error0(SourceElementPositioningStrategies.FUN_INTERFACE) // Properties & accessors - val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2>(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val PRIVATE_PROPERTY_IN_INTERFACE by error0(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0() val PROPERTY_INITIALIZER_IN_INTERFACE by error0() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirCheckersResolveProcessor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirCheckersResolveProcessor.kt index 431ffc4df6f..ae5f3142c02 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirCheckersResolveProcessor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/FirCheckersResolveProcessor.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporterFactory -import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor @@ -30,9 +29,9 @@ class FirCheckersRunnerTransformer(private val diagnosticCollector: AbstractDiag return element } - override fun transformFile(file: FirFile, data: Nothing?): FirDeclaration { + override fun transformFile(file: FirFile, data: Nothing?): FirFile { val reporter = DiagnosticReporterFactory.createReporter() diagnosticCollector.collectDiagnostics(file, reporter) return file } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt index f33f1e76ea7..120c15cfbc8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt @@ -11,10 +11,10 @@ import org.jetbrains.kotlin.fir.analysis.cfa.FirPropertyInitializationAnalyzer import org.jetbrains.kotlin.fir.analysis.cfa.FirReturnsImpliesAnalyzer import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker import org.jetbrains.kotlin.fir.analysis.checkers.declaration.* +import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirReservedUnderscoreDeclarationChecker import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirDelegationInInterfaceSyntaxChecker import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirFunctionTypeParametersSyntaxChecker import org.jetbrains.kotlin.fir.analysis.checkers.syntax.FirTypeParameterSyntaxChecker -import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirReservedUnderscoreDeclarationChecker object CommonDeclarationCheckers : DeclarationCheckers() { override val basicDeclarationCheckers: Set diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt index 6283689ecad..990171e4774 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/ExtendedDeclarationCheckers.kt @@ -7,7 +7,10 @@ package org.jetbrains.kotlin.fir.analysis.checkers import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker -import org.jetbrains.kotlin.fir.analysis.checkers.declaration.* +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirSimpleFunctionChecker import org.jetbrains.kotlin.fir.analysis.checkers.extended.* object ExtendedDeclarationCheckers : DeclarationCheckers() { 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 108128ef4e7..8d4af689430 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 @@ -60,11 +60,11 @@ fun FirRegularClass.getAllowedAnnotationTargets(): Set { } } -fun FirAnnotatedDeclaration.getRetentionAnnotation(): FirAnnotationCall? { +fun FirAnnotatedDeclaration<*>.getRetentionAnnotation(): FirAnnotationCall? { return getAnnotationByFqName(StandardNames.FqNames.retention) } -fun FirAnnotatedDeclaration.getTargetAnnotation(): FirAnnotationCall? { +fun FirAnnotatedDeclaration<*>.getTargetAnnotation(): FirAnnotationCall? { return getAnnotationByFqName(StandardNames.FqNames.target) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt index b6199fab329..99ffb6a78ea 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirConstChecks.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.analysis.checkers import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirErrorNamedReference @@ -39,7 +38,7 @@ internal fun checkConstantArguments( } expression is FirConstExpression<*> || expressionSymbol is FirEnumEntry - || (expressionSymbol as? FirMemberDeclaration)?.isConst == true + || (expressionSymbol as? FirMemberDeclaration<*>)?.isConst == true || expressionSymbol is FirConstructor && classKindOfParent == ClassKind.ANNOTATION_CLASS -> { //DO NOTHING } @@ -84,8 +83,8 @@ internal fun checkConstantArguments( expressionSymbol is FirField -> { //TODO: fix checking of Java fields initializer if ( - !(expressionSymbol as FirMemberDeclaration).status.isStatic - || (expressionSymbol as FirMemberDeclaration).status.modality != Modality.FINAL + !(expressionSymbol as FirMemberDeclaration<*>).status.isStatic + || (expressionSymbol as FirMemberDeclaration<*>).status.modality != Modality.FINAL ) return ConstantArgumentKind.NOT_CONST } @@ -189,7 +188,7 @@ internal fun checkConstantArguments( return null } -private fun FirTypedDeclaration?.getReferencedClass(session: FirSession): FirSymbolOwner<*>? = +private fun FirTypedDeclaration<*>?.getReferencedClass(session: FirSession): FirDeclaration<*>? = this?.returnTypeRef ?.coneTypeSafe() ?.lookupTag diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirDeclarationInspector.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirDeclarationInspector.kt index 9006621e920..56e12647dec 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirDeclarationInspector.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirDeclarationInspector.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name @@ -218,7 +218,7 @@ private val NO_NAME_PROVIDED = Name.special("") // explicitly. // - see tests with `fun () {}`. // you can't redeclare something that has no name. -private fun FirDeclaration.isCollectable() = when (this) { +private fun FirDeclaration<*>.isCollectable() = when (this) { is FirSimpleFunction -> source?.kind !is FirFakeSourceElementKind && name != NO_NAME_PROVIDED is FirRegularClass -> name != NO_NAME_PROVIDED else -> true @@ -230,10 +230,10 @@ private fun FirDeclaration.isCollectable() = when (this) { open class FirDeclarationInspector( protected val presenter: FirDeclarationPresenter = FirDefaultDeclarationPresenter() ) { - val otherDeclarations = mutableMapOf>() + val otherDeclarations = mutableMapOf>>() val functionDeclarations = mutableMapOf>() - fun collect(declaration: FirDeclaration) { + fun collect(declaration: FirDeclaration<*>) { when { !declaration.isCollectable() -> {} declaration is FirSimpleFunction -> collectFunction(presenter.represent(declaration), declaration) @@ -243,7 +243,7 @@ open class FirDeclarationInspector( } } - protected open fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration): MutableList = + protected open fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration<*>): MutableList> = otherDeclarations.getOrPut(key) { mutableListOf() }.also { @@ -257,11 +257,11 @@ open class FirDeclarationInspector( it.add(declaration) } - fun contains(declaration: FirDeclaration) = when (declaration) { + fun contains(declaration: FirDeclaration<*>) = when (declaration) { is FirSimpleFunction -> presenter.represent(declaration) in functionDeclarations is FirRegularClass -> presenter.represent(declaration) in otherDeclarations is FirTypeAlias -> presenter.represent(declaration) in otherDeclarations is FirProperty -> presenter.represent(declaration) in otherDeclarations else -> false } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index d3e4e60ecd0..1f7614f0fcd 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -12,9 +12,6 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.* -import org.jetbrains.kotlin.fir.analysis.diagnostics.modalityModifier -import org.jetbrains.kotlin.fir.analysis.diagnostics.overrideModifier -import org.jetbrains.kotlin.fir.analysis.diagnostics.visibilityModifier import org.jetbrains.kotlin.fir.analysis.getChild import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -35,7 +32,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.name.* +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.KtModifierList import org.jetbrains.kotlin.psi.KtParameter.VAL_VAR_TOKEN_SET import org.jetbrains.kotlin.psi.psiUtil.visibilityModifierType @@ -134,7 +134,7 @@ inline fun FirQualifiedAccessExpression.getDeclaration(): T? { * Returns the ClassLikeDeclaration where the Fir object has been defined * or null if no proper declaration has been found. */ -fun FirSymbolOwner<*>.getContainingClass(context: CheckerContext): FirClassLikeDeclaration<*>? = +fun FirDeclaration<*>.getContainingClass(context: CheckerContext): FirClassLikeDeclaration<*>? = this.safeAs>()?.containingClass()?.toSymbol(context.session)?.fir fun FirClassLikeSymbol<*>.outerClass(context: CheckerContext): FirClassLikeSymbol<*>? { @@ -232,9 +232,9 @@ fun FirClass<*>.modality(): Modality? { } /** - * returns implicit modality by FirMemberDeclaration + * returns implicit modality by FirMemberDeclaration<*> */ -fun FirMemberDeclaration.implicitModality(context: CheckerContext): Modality { +fun FirMemberDeclaration<*>.implicitModality(context: CheckerContext): Modality { if (this is FirRegularClass && (this.classKind == ClassKind.CLASS || this.classKind == ClassKind.OBJECT)) { if (this.classKind == ClassKind.INTERFACE) return Modality.ABSTRACT return Modality.FINAL @@ -263,7 +263,7 @@ fun FirMemberDeclaration.implicitModality(context: CheckerContext): Modality { return Modality.FINAL } -private fun FirDeclaration.hasBody(): Boolean = when (this) { +private fun FirDeclaration<*>.hasBody(): Boolean = when (this) { is FirSimpleFunction -> this.body != null && this.body !is FirEmptyExpressionBlock is FirProperty -> this.setter?.body !is FirEmptyExpressionBlock? || this.getter?.body !is FirEmptyExpressionBlock? else -> false @@ -379,7 +379,7 @@ private fun lowerThanBound(context: ConeInferenceContext, argument: ConeKotlinTy return false } -fun FirMemberDeclaration.isInlineOnly(): Boolean = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_CLASS_ID) +fun FirMemberDeclaration<*>.isInlineOnly(): Boolean = isInline && hasAnnotation(INLINE_ONLY_ANNOTATION_CLASS_ID) fun isSubtypeForTypeMismatch(context: ConeInferenceContext, subtype: ConeKotlinType, supertype: ConeKotlinType): Boolean { val subtypeFullyExpanded = subtype.fullyExpandedType(context.session) @@ -508,7 +508,7 @@ private val FirSimpleFunction.matchesDataClassSyntheticMemberSignatures: Boolean (this.name == HASHCODE_NAME && matchesHashCodeSignature) || (this.name == OperatorNameConventions.TO_STRING && matchesToStringSignature) -private fun FirSymbolOwner<*>.getContainingClass(sessionHolder: SessionHolder): FirClassLikeDeclaration<*>? = +private fun FirDeclaration<*>.getContainingClass(sessionHolder: SessionHolder): FirClassLikeDeclaration<*>? = this.safeAs>()?.containingClass()?.toSymbol(sessionHolder.session)?.fir // NB: we intentionally do not check return types diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt index 1c441dd275a..824517ca7e6 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt @@ -40,7 +40,7 @@ private data class FirSinceKotlinValue( val wasExperimentalMarkerClasses: List ) -fun FirAnnotatedDeclaration.checkSinceKotlinVersionAccessibility(context: CheckerContext): FirSinceKotlinAccessibility { +fun FirAnnotatedDeclaration<*>.checkSinceKotlinVersionAccessibility(context: CheckerContext): FirSinceKotlinAccessibility { val value = getOwnSinceKotlinVersion(context.session) val version = value?.apiVersion val languageVersionSettings = context.session.languageVersionSettings @@ -59,11 +59,11 @@ fun FirAnnotatedDeclaration.checkSinceKotlinVersionAccessibility(context: Checke return FirSinceKotlinAccessibility.NotAccessible(version) } -private fun FirAnnotatedDeclaration.getOwnSinceKotlinVersion(session: FirSession): FirSinceKotlinValue? { +private fun FirAnnotatedDeclaration<*>.getOwnSinceKotlinVersion(session: FirSession): FirSinceKotlinValue? { var result: FirSinceKotlinValue? = null // TODO: use-site targeted annotations - fun FirAnnotatedDeclaration.consider() { + fun FirAnnotatedDeclaration<*>.consider() { val sinceKotlinSingleArgument = getAnnotationByFqName(SINCE_KOTLIN_FQ_NAME)?.arguments?.singleOrNull() val apiVersion = ((sinceKotlinSingleArgument as? FirConstExpression<*>)?.value as? String)?.let(ApiVersion.Companion::parse) if (apiVersion != null) { @@ -90,7 +90,7 @@ private fun FirAnnotatedDeclaration.getOwnSinceKotlinVersion(session: FirSession return result } -private fun FirAnnotatedDeclaration.loadWasExperimentalMarkerClasses(): List { +private fun FirAnnotatedDeclaration<*>.loadWasExperimentalMarkerClasses(): List { val wasExperimental = getAnnotationByFqName(OptInNames.WAS_EXPERIMENTAL_FQ_NAME) ?: return emptyList() val annotationClasses = wasExperimental.findArgumentByName(OptInNames.WAS_EXPERIMENTAL_ANNOTATION_CLASS) ?: return emptyList() return annotationClasses.extractClassesFromArgument() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt index 11a6fb4656a..43ea49dc67b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt @@ -22,7 +22,7 @@ abstract class CheckerContext { // Context abstract val implicitReceiverStack: ImplicitReceiverStack - abstract val containingDeclarations: List + abstract val containingDeclarations: List> abstract val qualifiedAccessOrAnnotationCalls: List abstract val getClassCalls: List @@ -62,7 +62,7 @@ abstract class CheckerContext { * the closest setter, while we want to keep searching for a getter. */ -inline fun CheckerContext.findClosest(check: (T) -> Boolean = { true }): T? { +inline fun > CheckerContext.findClosest(check: (T) -> Boolean = { true }): T? { for (it in containingDeclarations.asReversed()) { return (it as? T)?.takeIf(check) ?: continue } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt index 79965372d36..e1908b50aaa 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.name.Name class PersistentCheckerContext private constructor( override val implicitReceiverStack: PersistentImplicitReceiverStack, - override val containingDeclarations: PersistentList, + override val containingDeclarations: PersistentList>, override val qualifiedAccessOrAnnotationCalls: PersistentList, override val getClassCalls: PersistentList, override val sessionHolder: SessionHolder, @@ -58,7 +58,7 @@ class PersistentCheckerContext private constructor( ) } - fun addDeclaration(declaration: FirDeclaration): PersistentCheckerContext { + fun addDeclaration(declaration: FirDeclaration<*>): PersistentCheckerContext { return PersistentCheckerContext( implicitReceiverStack, containingDeclarations.add(declaration), diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt index 585d4fc580e..bbd26d6e3cb 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt @@ -19,7 +19,9 @@ import org.jetbrains.kotlin.fir.expressions.argumentMapping import org.jetbrains.kotlin.fir.resolve.fqName import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds -import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.KtDestructuringDeclaration +import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry +import org.jetbrains.kotlin.psi.KtLambdaExpression import org.jetbrains.kotlin.resolve.AnnotationTargetList import org.jetbrains.kotlin.resolve.AnnotationTargetLists @@ -28,7 +30,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() { private val deprecatedSinceKotlinClassId = FqName("kotlin.DeprecatedSinceKotlin") override fun check( - declaration: FirAnnotatedDeclaration, + declaration: FirAnnotatedDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter ) { @@ -54,7 +56,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() { } private fun checkAnnotationTarget( - declaration: FirAnnotatedDeclaration, + declaration: FirAnnotatedDeclaration<*>, annotation: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter @@ -106,7 +108,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() { } private fun checkAnnotationUseSiteTarget( - annotated: FirAnnotatedDeclaration, + annotated: FirAnnotatedDeclaration<*>, annotation: FirAnnotationCall, target: AnnotationUseSiteTarget, context: CheckerContext, @@ -195,7 +197,7 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() { } } - private fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList { + private fun getActualTargetList(annotated: FirDeclaration<*>): AnnotationTargetList { return when (annotated) { is FirRegularClass -> { AnnotationTargetList( diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt index e60fbaeab0a..bae382dbbac 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt @@ -12,15 +12,14 @@ import org.jetbrains.kotlin.descriptors.ClassKind.ENUM_CLASS import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.* -import org.jetbrains.kotlin.fir.analysis.checkers.checkConstantArguments import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.toSymbol -import org.jetbrains.kotlin.name.StandardClassIds -import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.name.StandardClassIds.primitiveArrayTypeByElementType import org.jetbrains.kotlin.name.StandardClassIds.unsignedArrayTypeByElementType object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { @@ -44,7 +43,7 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { } } - private fun checkAnnotationClassMember(member: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + private fun checkAnnotationClassMember(member: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { when { member is FirConstructor && member.isPrimary -> { for (parameter in member.valueParameters) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt index 602facfd0d4..9ff0afd8ff8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt @@ -6,7 +6,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind +import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.extractArgumentTypeRefAndSource import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter @@ -28,7 +29,7 @@ object FirClassVarianceChecker : FirClassChecker() { } for (member in declaration.declarations) { - if (member is FirMemberDeclaration) { + if (member is FirMemberDeclaration<*>) { if (Visibilities.isPrivate(member.status.visibility)) { continue } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt index f08516c190f..0a7b2fa9184 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirConflictsChecker.kt @@ -28,9 +28,9 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { private class DeclarationInspector : FirDeclarationInspector() { - val declarationConflictingSymbols: HashMap>> = hashMapOf() + val declarationConflictingSymbols: HashMap, SmartSet>> = hashMapOf() - override fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration): MutableList = + override fun collectNonFunctionDeclaration(key: String, declaration: FirDeclaration<*>): MutableList> = super.collectNonFunctionDeclaration(key, declaration).also { collectLocalConflicts(declaration, it) } @@ -40,30 +40,26 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { collectLocalConflicts(declaration, it) } - private fun collectLocalConflicts(declaration: FirDeclaration, conflicting: List) { + private fun collectLocalConflicts(declaration: FirDeclaration<*>, conflicting: List>) { val localConflicts = SmartSet.create>() for (otherDeclaration in conflicting) { - if (otherDeclaration is FirSymbolOwner<*>) { - if (otherDeclaration != declaration && declaration is FirSymbolOwner<*> && - !isExpectAndActual(declaration, otherDeclaration) - ) { - localConflicts.add(otherDeclaration.symbol) - declarationConflictingSymbols.getOrPut(otherDeclaration) { SmartSet.create() }.add(declaration.symbol) - } + if (otherDeclaration != declaration && !isExpectAndActual(declaration, otherDeclaration)) { + localConflicts.add(otherDeclaration.symbol) + declarationConflictingSymbols.getOrPut(otherDeclaration) { SmartSet.create() }.add(declaration.symbol) } } declarationConflictingSymbols[declaration] = localConflicts } - private fun isExpectAndActual(declaration1: FirDeclaration, declaration2: FirDeclaration): Boolean { - if (declaration1 !is FirMemberDeclaration) return false - if (declaration2 !is FirMemberDeclaration) return false + private fun isExpectAndActual(declaration1: FirDeclaration<*>, declaration2: FirDeclaration<*>): Boolean { + if (declaration1 !is FirMemberDeclaration<*>) return false + if (declaration2 !is FirMemberDeclaration<*>) return false return (declaration1.status.isExpect && declaration2.status.isActual) || (declaration1.status.isActual && declaration2.status.isExpect) } private fun areCompatibleMainFunctions( - declaration1: FirDeclaration, file1: FirFile, declaration2: FirDeclaration, file2: FirFile? + declaration1: FirDeclaration<*>, file1: FirFile, declaration2: FirDeclaration<*>, file2: FirFile? ): Boolean { // TODO: proper main function detector if (declaration1 !is FirSimpleFunction || declaration2 !is FirSimpleFunction) return false @@ -72,7 +68,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { } private fun collectExternalConflict( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, declarationPresentation: String, containingFile: FirFile, conflictingSymbol: FirBasedSymbol<*>, @@ -93,16 +89,15 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { if (containingFile == actualConflictingFile) return // TODO: rewrite local decls checker to the same logic and then remove the check if (areCompatibleMainFunctions(declaration, containingFile, conflicting, actualConflictingFile)) return if (isExpectAndActual(declaration, conflicting)) return - if (conflicting is FirMemberDeclaration && !(conflicting is FirSymbolOwner<*> && - session.visibilityChecker.isVisible(conflicting, session, containingFile, emptyList(), null)) - ) { - return - } + if ( + conflicting is FirMemberDeclaration<*> && + !session.visibilityChecker.isVisible(conflicting, session, containingFile, emptyList(), null) + ) return declarationConflictingSymbols.getOrPut(declaration) { SmartSet.create() }.add(conflictingSymbol) } fun collectWithExternalConflicts( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, containingFile: FirFile, session: FirSession, packageMemberScope: FirPackageMemberScope @@ -205,7 +200,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { } } - override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { val inspector = DeclarationInspector() when (declaration) { @@ -243,7 +238,7 @@ object FirConflictsChecker : FirBasicDeclarationChecker() { } } -private fun FirDeclarationPresenter.represent(declaration: FirDeclaration): String? = +private fun FirDeclarationPresenter.represent(declaration: FirDeclaration<*>): String? = when (declaration) { is FirSimpleFunction -> represent(declaration) is FirRegularClass -> represent(declaration) @@ -272,7 +267,7 @@ class FirNameConflictsTracker : FirNameConflictsTrackerComponent() { } } -private fun FirDeclaration.onConstructors(action: (ctor: FirConstructor) -> Unit) { +private fun FirDeclaration<*>.onConstructors(action: (ctor: FirConstructor) -> Unit) { class ClassConstructorVisitor : FirVisitorVoid() { override fun visitElement(element: FirElement) {} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCyclicTypeBoundsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCyclicTypeBoundsChecker.kt index f919b34a63f..4ece5683487 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCyclicTypeBoundsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirCyclicTypeBoundsChecker.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs object FirCyclicTypeBoundsChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirConstructor || declaration is FirTypeAlias) return val processed = mutableSetOf() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationChecker.kt index d784af5a5d9..c01f1e3bc0f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationChecker.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirDeclaration -abstract class FirDeclarationChecker { +abstract class FirDeclarationChecker> { abstract fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerUtils.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerUtils.kt index 580f512beae..748bd671056 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerUtils.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerUtils.kt @@ -42,7 +42,7 @@ private inline fun isInsideSpecificClass( context.containingDeclarations.asReversed().any { it is FirRegularClass && predicate.invoke(it) } } -internal fun FirMemberDeclaration.isEffectivelyExpect( +internal fun FirMemberDeclaration<*>.isEffectivelyExpect( containingClass: FirRegularClass?, context: CheckerContext, ): Boolean { @@ -51,7 +51,7 @@ internal fun FirMemberDeclaration.isEffectivelyExpect( return containingClass != null && isInsideExpectClass(containingClass, context) } -internal fun FirMemberDeclaration.isEffectivelyExternal( +internal fun FirMemberDeclaration<*>.isEffectivelyExternal( containingClass: FirRegularClass?, context: CheckerContext, ): Boolean { @@ -75,7 +75,7 @@ internal fun FirMemberDeclaration.isEffectivelyExternal( // TODO: check class too internal fun checkExpectDeclarationVisibilityAndBody( - declaration: FirMemberDeclaration, + declaration: FirMemberDeclaration<*>, source: FirSourceElement, reporter: DiagnosticReporter, context: CheckerContext @@ -191,14 +191,14 @@ internal fun FirRegularClass.isInlineOrValueClass(): Boolean { return isInline || hasModifier(KtTokens.VALUE_KEYWORD) } -internal val FirDeclaration.isEnumEntryInitializer: Boolean +internal val FirDeclaration<*>.isEnumEntryInitializer: Boolean get() { if (this !is FirConstructor || !this.isPrimary) return false return (containingClassAttr as? ConeClassLookupTagWithFixedSymbol)?.symbol?.fir?.classKind == ClassKind.ENUM_ENTRY } -// contract: returns(true) implies (this is FirMemberDeclaration) -internal val FirDeclaration.isLocalMember: Boolean +// contract: returns(true) implies (this is FirMemberDeclaration<*>) +internal val FirDeclaration<*>.isLocalMember: Boolean get() = when (this) { is FirProperty -> this.isLocal is FirRegularClass -> this.isLocal diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt index 02110e85f1d..7efcf7fa264 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs // TODO: check why coneTypeSafe is necessary at some points inside object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { when (declaration) { is FirTypeAlias -> checkTypeAlias(declaration, reporter, context) is FirProperty -> checkProperty(declaration, reporter, context) @@ -103,7 +103,7 @@ object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() { } private fun checkFunction(declaration: FirFunction<*>, reporter: DiagnosticReporter, context: CheckerContext) { - val functionVisibility = (declaration as FirMemberDeclaration).effectiveVisibility + val functionVisibility = (declaration as FirMemberDeclaration<*>).effectiveVisibility if (functionVisibility == EffectiveVisibility.Local) return if (declaration !is FirConstructor) { @@ -193,14 +193,14 @@ object FirExposedVisibilityDeclarationChecker : FirMemberDeclarationChecker() { private fun ConeKotlinType.findVisibilityExposure( context: CheckerContext, base: EffectiveVisibility - ): FirMemberDeclaration? { + ): FirMemberDeclaration<*>? { val type = this as? ConeClassLikeType ?: return null val fir = type.fullyExpandedType(context.session).lookupTag.toSymbol(context.session)?.let { firSymbol -> firSymbol.ensureResolved(FirResolvePhase.DECLARATIONS, context.session) firSymbol.fir } ?: return null - if (fir is FirMemberDeclaration) { + if (fir is FirMemberDeclaration<*>) { val effectiveVisibility = fir.effectiveVisibility when (effectiveVisibility.relation(base, context.session.typeContext)) { EffectiveVisibility.Permissiveness.LESS, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt index 05108a41d49..8996ad6fb57 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirImportsChecker.kt @@ -57,7 +57,7 @@ object FirImportsChecker : FirFileChecker() { if (classId != null) { val classFir = classId.resolveToClass(context) ?: return if (classFir.classKind.isSingleton) return - + if (!classFir.canBeImported(context, importedName)) { reporter.reportOn(import.source, FirErrors.CANNOT_BE_IMPORTED, importedName, context) } @@ -167,4 +167,4 @@ object FirImportsChecker : FirFileChecker() { return hasStatic || !hasIllegal } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInfixFunctionDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInfixFunctionDeclarationChecker.kt index d291b6d1494..e4178b01b4d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInfixFunctionDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInfixFunctionDeclarationChecker.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.isInfix object FirInfixFunctionDeclarationChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirSimpleFunction && declaration.isInfix) { if (declaration.valueParameters.size != 1 || !hasExtensionOrDispatchReceiver(declaration, context)) { reporter.reportOn(declaration.source, FirErrors.INAPPLICABLE_INFIX_MODIFIER, context) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt index 118c693915b..aa830d849af 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.util.OperatorNameConventions object FirInlineDeclarationChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (!declaration.isInline) return // local inline functions are prohibited if (declaration.isLocalMember) return @@ -283,7 +283,7 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() { private fun FirBasedSymbol<*>.isDefinedInInlineFunction(): Boolean { return when (val fir = this.fir) { is FirAnonymousFunction -> true - is FirMemberDeclaration -> fir.isLocalMember + is FirMemberDeclaration<*> -> fir.isLocalMember is FirAnonymousObject -> true is FirRegularClass -> fir.classId.isLocal else -> error("Unknown callable declaration type: ${fir.render()}") diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt index 0fb11bd9faa..4cf01c2a3d3 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt @@ -107,7 +107,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() { secondModifier: FirModifier<*>, reporter: DiagnosticReporter, reportedNodes: MutableSet>, - owner: FirDeclaration?, + owner: FirDeclaration<*>?, context: CheckerContext ) { val firstToken = firstModifier.token @@ -137,7 +137,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() { private fun checkModifiers( list: FirModifierList, - owner: FirDeclaration, + owner: FirDeclaration<*>, reporter: DiagnosticReporter, context: CheckerContext ) { @@ -156,7 +156,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() { } } - private fun isDeclarationMappedToSourceCorrectly(declaration: FirDeclaration, source: FirSourceElement): Boolean = + private fun isDeclarationMappedToSourceCorrectly(declaration: FirDeclaration<*>, source: FirSourceElement): Boolean = when (source.elementType) { KtNodeTypes.CLASS -> declaration is FirClass<*> KtNodeTypes.OBJECT_DECLARATION -> declaration is FirClass<*> @@ -166,7 +166,7 @@ object FirModifierChecker : FirBasicDeclarationChecker() { else -> true } - override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirFile) return val source = declaration.source ?: return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt index 4a08424e0ad..758a0c808c0 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt @@ -90,8 +90,8 @@ object FirOverrideChecker : FirClassChecker() { overriddenSymbols: List>, ): FirCallableDeclaration<*>? { for (overridden in overriddenSymbols) { - if (overridden.fir !is FirMemberDeclaration) continue - val modality = (overridden.fir as FirMemberDeclaration).status.modality + if (overridden.fir !is FirMemberDeclaration<*>) continue + val modality = (overridden.fir as FirMemberDeclaration<*>).status.modality val isEffectivelyFinal = modality == null || modality == Modality.FINAL if (isEffectivelyFinal) { return overridden.fir @@ -102,7 +102,7 @@ object FirOverrideChecker : FirClassChecker() { private fun FirProperty.checkMutability( overriddenSymbols: List>, - ): FirMemberDeclaration? { + ): FirMemberDeclaration<*>? { if (isVar) return null return overriddenSymbols.find { (it.fir as? FirProperty)?.isVar == true }?.fir?.safeAs() } @@ -113,8 +113,8 @@ object FirOverrideChecker : FirClassChecker() { context: CheckerContext ) { val visibilities = overriddenSymbols.mapNotNull { - if (it.fir !is FirMemberDeclaration) return@mapNotNull null - it to (it.fir as FirMemberDeclaration).visibility + if (it.fir !is FirMemberDeclaration<*>) return@mapNotNull null + it to (it.fir as FirMemberDeclaration<*>).visibility }.sortedBy { pair -> // Regard `null` compare as Int.MIN so that we can report CANNOT_CHANGE_... first deterministically Visibilities.compare(visibility, pair.second) ?: Int.MIN_VALUE @@ -137,7 +137,7 @@ object FirOverrideChecker : FirClassChecker() { overriddenSymbols: List>, typeCheckerContext: AbstractTypeCheckerContext, context: CheckerContext, - ): FirMemberDeclaration? { + ): FirMemberDeclaration<*>? { val overridingReturnType = returnTypeRef.coneType // Don't report *_ON_OVERRIDE diagnostics according to an error return type. That should be reported separately. @@ -232,13 +232,13 @@ object FirOverrideChecker : FirClassChecker() { } @Suppress("UNUSED_PARAMETER") // TODO: delete me after implementing body - private fun DiagnosticReporter.reportNothingToOverride(declaration: FirMemberDeclaration, context: CheckerContext) { + private fun DiagnosticReporter.reportNothingToOverride(declaration: FirMemberDeclaration<*>, context: CheckerContext) { // TODO: not ready yet, e.g., Collections // reportOn(declaration.source, FirErrors.NOTHING_TO_OVERRIDE, declaration, context) } private fun DiagnosticReporter.reportOverridingFinalMember( - overriding: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, overridden: FirCallableDeclaration<*>, context: CheckerContext ) { @@ -248,15 +248,15 @@ object FirOverrideChecker : FirClassChecker() { } private fun DiagnosticReporter.reportVarOverriddenByVal( - overriding: FirMemberDeclaration, - overridden: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, + overridden: FirMemberDeclaration<*>, context: CheckerContext ) { reportOn(overriding.source, FirErrors.VAR_OVERRIDDEN_BY_VAL, overriding, overridden, context) } private fun DiagnosticReporter.reportCannotWeakenAccessPrivilege( - overriding: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, overridden: FirCallableDeclaration<*>, context: CheckerContext ) { @@ -272,7 +272,7 @@ object FirOverrideChecker : FirClassChecker() { } private fun DiagnosticReporter.reportCannotChangeAccessPrivilege( - overriding: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, overridden: FirCallableDeclaration<*>, context: CheckerContext ) { @@ -288,24 +288,24 @@ object FirOverrideChecker : FirClassChecker() { } private fun DiagnosticReporter.reportReturnTypeMismatchOnFunction( - overriding: FirMemberDeclaration, - overridden: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, + overridden: FirMemberDeclaration<*>, context: CheckerContext ) { reportOn(overriding.source, FirErrors.RETURN_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context) } private fun DiagnosticReporter.reportTypeMismatchOnProperty( - overriding: FirMemberDeclaration, - overridden: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, + overridden: FirMemberDeclaration<*>, context: CheckerContext ) { reportOn(overriding.source, FirErrors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context) } private fun DiagnosticReporter.reportTypeMismatchOnVariable( - overriding: FirMemberDeclaration, - overridden: FirMemberDeclaration, + overriding: FirMemberDeclaration<*>, + overridden: FirMemberDeclaration<*>, context: CheckerContext ) { reportOn(overriding.source, FirErrors.VAR_TYPE_MISMATCH_ON_OVERRIDE, overriding, overridden, context) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirProjectionRelationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirProjectionRelationChecker.kt index 3f1cf86c401..95affa4c911 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirProjectionRelationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirProjectionRelationChecker.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.addToStdlib.safeAs object FirProjectionRelationChecker : FirBasicDeclarationChecker() { - override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirPropertyAccessor) { return } 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 2c6716a3c4f..a2a5a810e06 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 @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.utils.addToStdlib.safeAs object FirSealedSupertypeChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirClass<*>) { // only the file declaration is present if (declaration.classId.isLocal) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirThrowableSubclassChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirThrowableSubclassChecker.kt index 00f10c89a30..dd79c00e6bd 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirThrowableSubclassChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirThrowableSubclassChecker.kt @@ -38,6 +38,6 @@ object FirThrowableSubclassChecker : FirClassChecker() { private fun FirClass<*>.hasGenericOuterDeclaration(context: CheckerContext) = classId.isLocal && context.containingDeclarations.anyIsGeneric() - private fun Collection.anyIsGeneric() = + private fun Collection>.anyIsGeneric() = any { it is FirTypeParameterRefsOwner && it.typeParameters.isNotEmpty() } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeAliasChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeAliasChecker.kt index 881781224ac..fbf37cc194d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeAliasChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeAliasChecker.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.* object FirTypeAliasChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration !is FirTypeAlias) return if (context.containingDeclarations.lastOrNull() !is FirFile) { @@ -57,4 +57,4 @@ object FirTypeAliasChecker : FirMemberDeclarationChecker() { ) } } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeConstraintsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeConstraintsChecker.kt index cbef71d0cc1..928e95c20e8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeConstraintsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeConstraintsChecker.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.getDanglingTypeConstraintsOrEmpty object FirTypeConstraintsChecker : FirBasicDeclarationChecker() { - override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration !is FirTypeParameterRefsOwner) return //basically we transfer errors, which were discovered in ast parsers diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeParameterBoundsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeParameterBoundsChecker.kt index 9e51dfbc26f..31dda78654f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeParameterBoundsChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTypeParameterBoundsChecker.kt @@ -34,7 +34,7 @@ object FirTypeParameterBoundsChecker : FirTypeParameterChecker() { checkFinalUpperBounds(declaration, containingDeclaration, context, reporter) checkExtensionFunctionTypeBound(declaration, context, reporter) - if (containingDeclaration.safeAs()?.isInlineOnly() != true) { + if (containingDeclaration.safeAs>()?.isInlineOnly() != true) { checkOnlyOneTypeParameterBound(declaration, context, reporter) } @@ -47,7 +47,7 @@ object FirTypeParameterBoundsChecker : FirTypeParameterChecker() { private fun checkFinalUpperBounds( declaration: FirTypeParameter, - containingDeclaration: FirDeclaration, + containingDeclaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter ) { @@ -71,7 +71,7 @@ object FirTypeParameterBoundsChecker : FirTypeParameterChecker() { private fun checkTypeAliasBound( declaration: FirTypeParameter, - containingDeclaration: FirDeclaration, + containingDeclaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter ) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirUpperBoundViolatedDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirUpperBoundViolatedDeclarationChecker.kt index e9d9add0185..888751d12bb 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirUpperBoundViolatedDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirUpperBoundViolatedDeclarationChecker.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.* object FirUpperBoundViolatedDeclarationChecker : FirBasicDeclarationChecker() { - override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirClass<*>) { for (typeParameter in declaration.typeParameters) { if (typeParameter is FirTypeParameter) { @@ -36,4 +36,4 @@ object FirUpperBoundViolatedDeclarationChecker : FirBasicDeclarationChecker() { } } } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCallableReferenceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCallableReferenceChecker.kt index 178ac8f9783..71e771e7b97 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCallableReferenceChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCallableReferenceChecker.kt @@ -47,7 +47,7 @@ object FirCallableReferenceChecker : FirQualifiedAccessExpressionChecker() { reporter.reportOn(source, FirErrors.CALLABLE_REFERENCE_TO_ANNOTATION_CONSTRUCTOR, context) } if ((referredDeclaration as? FirCallableMemberDeclaration<*>)?.isExtensionMember == true && - (referredDeclaration as? FirMemberDeclaration)?.isLocalMember == false + (referredDeclaration as? FirMemberDeclaration<*>)?.isLocalMember == false ) { reporter.reportOn(source, FirErrors.EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED, referredDeclaration, context) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionAnnotationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionAnnotationChecker.kt index 2af4959074c..b5762f78e51 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionAnnotationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionAnnotationChecker.kt @@ -22,7 +22,7 @@ object FirExpressionAnnotationChecker : FirBasicExpressionChecker() { override fun check(expression: FirStatement, context: CheckerContext, reporter: DiagnosticReporter) { // Declarations are checked separately // See KT-33658 about annotations on non-expression statements - if (expression is FirDeclaration || + if (expression is FirDeclaration<*> || expression !is FirExpression || expression is FirBlock && expression.source?.kind == FirFakeSourceElementKind.DesugaredForLoop ) return @@ -34,4 +34,4 @@ object FirExpressionAnnotationChecker : FirBasicExpressionChecker() { } } } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReservedUnderscoreCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReservedUnderscoreCheckers.kt index db7bcda24ce..dfa67c230e7 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReservedUnderscoreCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReservedUnderscoreCheckers.kt @@ -112,7 +112,7 @@ object FirReservedUnderscoreExpressionChecker : FirBasicExpressionChecker() { } object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() { - override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if ( declaration is FirClass<*> || declaration is FirFunction<*> || @@ -141,7 +141,7 @@ object FirReservedUnderscoreDeclarationChecker : FirBasicDeclarationChecker() { } private fun reportIfUnderscore( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter, isSingleUnderscoreAllowed: Boolean = false diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt index 0b50f314022..a06e08454e3 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression import org.jetbrains.kotlin.fir.FirFakeSourceElementKind -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isEnumEntryInitializer import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClass @@ -98,7 +97,7 @@ object FirUninitializedEnumChecker : FirQualifiedAccessExpressionChecker() { // INSTANCE(EnumCompanion2.foo()) // } // find an accessed context within the same enum class. - (it as? FirSymbolOwner<*>)?.getContainingClass(context) == enumClass + it.getContainingClass(context) == enumClass } ?: return val enumMemberProperties = enumClass.declarations.filterIsInstance() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantExplicitTypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantExplicitTypeChecker.kt index acac1be1ded..d8ce6e61abd 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantExplicitTypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantExplicitTypeChecker.kt @@ -17,14 +17,14 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirTypeAlias import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirNamedReference -import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.types.ConstantValueKind object RedundantExplicitTypeChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration !is FirProperty) return if (!declaration.isLocal) return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantModalityModifierSyntaxChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantModalityModifierSyntaxChecker.kt index 95739e42427..6c10869cf0e 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantModalityModifierSyntaxChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantModalityModifierSyntaxChecker.kt @@ -21,13 +21,13 @@ import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.modality import org.jetbrains.kotlin.psi.KtDeclaration -object RedundantModalityModifierSyntaxChecker : FirDeclarationSyntaxChecker() { +object RedundantModalityModifierSyntaxChecker : FirDeclarationSyntaxChecker, KtDeclaration>() { - override fun isApplicable(element: FirMemberDeclaration, source: FirSourceElement): Boolean = + override fun isApplicable(element: FirMemberDeclaration<*>, source: FirSourceElement): Boolean = source.kind !is FirFakeSourceElementKind override fun checkLightTree( - element: FirMemberDeclaration, + element: FirMemberDeclaration<*>, source: FirSourceElement, context: CheckerContext, reporter: DiagnosticReporter diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantSetterParameterTypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantSetterParameterTypeChecker.kt index deacaeaec26..cb353200449 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantSetterParameterTypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantSetterParameterTypeChecker.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor object RedundantSetterParameterTypeChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration !is FirProperty) return val setter = declaration.setter ?: return if (setter is FirDefaultPropertyAccessor) return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt index 0758fe5c5d0..3aed74052b8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt @@ -22,10 +22,10 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.psi.KtDeclaration -object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker() { +object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker, KtDeclaration>() { override fun checkLightTree( - element: FirDeclaration, + element: FirDeclaration<*>, source: FirSourceElement, context: CheckerContext, reporter: DiagnosticReporter @@ -33,14 +33,14 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker && !(element is FirPropertyAccessor && element.visibility == context.containingPropertyVisibility) ) return val visibilityModifier = source.treeStructure.visibilityModifier(source.lighterASTNode) val explicitVisibility = (visibilityModifier?.tokenType as? KtModifierKeywordToken)?.toVisibilityOrNull() val implicitVisibility = element.implicitVisibility(context) - val containingMemberDeclaration = context.findClosest() + val containingMemberDeclaration = context.findClosest>() val redundantVisibility = when { explicitVisibility == implicitVisibility -> implicitVisibility @@ -59,7 +59,7 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker.implicitVisibility(context: CheckerContext): Visibility { return when { this is FirPropertyAccessor && isSetter && status.isOverride -> this.visibility @@ -105,7 +105,7 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker.visibility(): Visibility? { - (symbol.fir as? FirMemberDeclaration)?.visibility?.let { + (symbol.fir as? FirMemberDeclaration<*>)?.visibility?.let { return it } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt index 5bd383cf050..ff0649c330c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.analysis.cfa.* import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext @@ -32,7 +31,7 @@ import org.jetbrains.kotlin.fir.types.coneType object UnusedChecker : FirControlFlowChecker() { override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter, context: CheckerContext) { - if ((graph.declaration as? FirSymbolOwner<*>)?.getContainingClass(context)?.takeIf { + if (graph.declaration?.getContainingClass(context)?.takeIf { !it.symbol.classId.isLocal } != null ) return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirSyntaxChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirSyntaxChecker.kt index 4c91d96c6c1..80af19e4f55 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirSyntaxChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/syntax/FirSyntaxChecker.kt @@ -48,7 +48,7 @@ interface FirSyntaxChecker { fun checkLightTree(element: D, source: FirSourceElement, context: CheckerContext, reporter: DiagnosticReporter) } -abstract class FirDeclarationSyntaxChecker : +abstract class FirDeclarationSyntaxChecker, P : PsiElement> : FirDeclarationChecker(), FirSyntaxChecker { final override fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt index 4ede2ebb449..fec61ddc3b9 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt @@ -5,22 +5,26 @@ package org.jetbrains.kotlin.fir.analysis.collectors -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.analysis.collectors.components.* +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.expressions.FirConstExpression +import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression +import org.jetbrains.kotlin.fir.expressions.arguments import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.SessionHolder +import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.name.StandardClassIds -import org.jetbrains.kotlin.fir.types.* abstract class AbstractDiagnosticCollector( override val session: FirSession, override val scopeSession: ScopeSession = ScopeSession(), protected val createComponents: (DiagnosticReporter) -> List, ) : SessionHolder { - fun collectDiagnostics(firDeclaration: FirDeclaration, reporter: DiagnosticReporter) { + fun collectDiagnostics(firDeclaration: FirDeclaration<*>, reporter: DiagnosticReporter) { val components = createComponents(reporter) val visitor = createVisitor(components) firDeclaration.accept(visitor, null) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt index 3571573940b..8d6f20b3611 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt @@ -24,8 +24,8 @@ abstract class AbstractDiagnosticCollectorVisitor( @set:PrivateForInline var context: PersistentCheckerContext, ) : FirDefaultVisitor() { - protected open fun shouldVisitDeclaration(declaration: FirDeclaration) = true - protected open fun onDeclarationExit(declaration: FirDeclaration) {} + protected open fun shouldVisitDeclaration(declaration: FirDeclaration<*>) = true + protected open fun onDeclarationExit(declaration: FirDeclaration<*>) {} protected open fun visitNestedElements(element: FirElement) { element.acceptChildren(this, null) @@ -204,7 +204,7 @@ abstract class AbstractDiagnosticCollectorVisitor( } protected inline fun visitWithDeclaration( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, block: () -> Unit = { visitNestedElements(declaration) } ) { if (shouldVisitDeclaration(declaration)) { @@ -216,7 +216,7 @@ abstract class AbstractDiagnosticCollectorVisitor( } } - private fun visitWithDeclarationAndReceiver(declaration: FirDeclaration, labelName: Name?, receiverTypeRef: FirTypeRef?) { + private fun visitWithDeclarationAndReceiver(declaration: FirDeclaration<*>, labelName: Name?, receiverTypeRef: FirTypeRef?) { visitWithDeclaration(declaration) { withLabelAndReceiverType( labelName, @@ -265,7 +265,7 @@ abstract class AbstractDiagnosticCollectorVisitor( @OptIn(PrivateForInline::class) - inline fun withDeclaration(declaration: FirDeclaration, block: () -> R): R { + inline fun withDeclaration(declaration: FirDeclaration<*>, block: () -> R): R { val existingContext = context context = context.addDeclaration(declaration) try { @@ -279,7 +279,7 @@ abstract class AbstractDiagnosticCollectorVisitor( @OptIn(PrivateForInline::class) inline fun withLabelAndReceiverType( labelName: Name?, - owner: FirDeclaration, + owner: FirDeclaration<*>, type: ConeKotlinType?, block: () -> R ): R { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt index 366c9a39008..5815d5f6ad9 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirDeclarationChecker import org.jetbrains.kotlin.fir.analysis.checkersComponent -import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.* @@ -78,7 +77,7 @@ class DeclarationCheckersDiagnosticComponent( checkers.allBasicDeclarationCheckers.check(anonymousInitializer, data, reporter) } - private fun Collection>.check( + private fun > Collection>.check( declaration: D, context: CheckerContext, reporter: DiagnosticReporter diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt index 7a56da36b95..2e5f3486e93 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt @@ -58,7 +58,7 @@ object FirDiagnosticRenderers { val NAME = Renderer { element: FirElement -> when (element) { - is FirMemberDeclaration -> DECLARATION_NAME.render(element) + is FirMemberDeclaration<*> -> DECLARATION_NAME.render(element) is FirCallableDeclaration<*> -> element.symbol.callableId.callableName.asString() else -> "???" } @@ -68,7 +68,7 @@ object FirDiagnosticRenderers { visibility.externalDisplayName } - val DECLARATION_NAME = Renderer { declaration: FirMemberDeclaration -> + val DECLARATION_NAME = Renderer { declaration: FirMemberDeclaration<*> -> val name = when (declaration) { is FirProperty -> declaration.name is FirSimpleFunction -> declaration.name diff --git a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt index 717a4101f94..fc449ae4c9a 100644 --- a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt +++ b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt @@ -376,9 +376,9 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) { visitElement(regularClass) } - fun indexDeclaration(symbolOwner: FirSymbolOwner<*>) { - symbols[symbolOwner.symbol] = location - symbolIds[symbolOwner.symbol] = symbolCounter++ + fun indexDeclaration(declaration: FirDeclaration<*>) { + symbols[declaration.symbol] = location + symbolIds[declaration.symbol] = symbolCounter++ } override fun > visitVariable(variable: FirVariable) { @@ -912,7 +912,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver } } - private fun FlowContent.generate(memberDeclaration: FirMemberDeclaration) { + private fun FlowContent.generate(memberDeclaration: FirMemberDeclaration<*>) { when (memberDeclaration) { is FirEnumEntry -> generate(memberDeclaration) is FirRegularClass -> generate(memberDeclaration) @@ -1524,7 +1524,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver is FirConstExpression<*> -> generate(expression) is FirReturnExpression -> { span("return-label") { - symbolRef((expression.target.labeledElement as? FirSymbolOwner<*>)?.symbol) { + symbolRef(expression.target.labeledElement.symbol) { +"^" +(expression.target.labelName ?: "") } @@ -1682,7 +1682,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver } } - private fun FlowContent.generateDeclarations(declarations: List) { + private fun FlowContent.generateDeclarations(declarations: List>) { if (declarations.isNotEmpty()) { +" {" br @@ -1767,10 +1767,10 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver } } - private fun FlowContent.generate(declaration: FirDeclaration) { + private fun FlowContent.generate(declaration: FirDeclaration<*>) { when (declaration) { is FirAnonymousInitializer -> generate(declaration) - is FirMemberDeclaration -> generate(declaration) + is FirMemberDeclaration<*> -> generate(declaration) else -> unsupported(declaration) } } diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmModuleVisibilityChecker.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmModuleVisibilityChecker.kt index 35e24744e81..de9243e7494 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmModuleVisibilityChecker.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/FirJvmModuleVisibilityChecker.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.moduleData class FirJvmModuleVisibilityChecker(private val session: FirSession) : FirModuleVisibilityChecker { - override fun isInFriendModule(declaration: FirMemberDeclaration): Boolean { + override fun isInFriendModule(declaration: FirMemberDeclaration<*>): Boolean { val useSiteModuleData = session.moduleData val declarationModuleData = declaration.moduleData return useSiteModuleData == declarationModuleData || declarationModuleData in useSiteModuleData.friendDependencies diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index 5f9a05f3bba..5fbd4f93033 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -191,11 +191,11 @@ fun deserializeClassToSymbol( addCloneForArrayIfNeeded(classId, context.dispatchReceiver) addSerializableIfNeeded(classId) - declarations.sortWith(object : Comparator { - override fun compare(a: FirDeclaration, b: FirDeclaration): Int { + declarations.sortWith(object : Comparator> { + override fun compare(a: FirDeclaration<*>, b: FirDeclaration<*>): Int { // Reorder members based on their type and name only. // See FE 1.0's [DeserializedMemberScope#addMembers]. - if (a is FirMemberDeclaration && b is FirMemberDeclaration) { + if (a is FirMemberDeclaration<*> && b is FirMemberDeclaration<*>) { return FirMemberDeclarationComparator.TypeAndNameComparator.compare(a, b) } return 0 diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 01b954c575b..e8c2a196d88 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -58,7 +58,7 @@ import org.jetbrains.kotlin.types.TypeApproximatorConfiguration class FirElementSerializer private constructor( private val session: FirSession, private val scopeSession: ScopeSession, - private val containingDeclaration: FirDeclaration?, + private val containingDeclaration: FirDeclaration<*>?, private val typeParameters: Interner, private val extension: FirSerializerExtension, private val typeTable: MutableTypeTable, @@ -681,7 +681,7 @@ class FirElementSerializer private constructor( } is ConeTypeParameterType -> { val typeParameter = type.lookupTag.typeParameterSymbol.fir - if (typeParameter in (containingDeclaration as? FirMemberDeclaration)?.typeParameters ?: emptyList()) { + if (typeParameter in (containingDeclaration as? FirMemberDeclaration<*>)?.typeParameters ?: emptyList()) { builder.typeParameterName = getSimpleNameIndex(typeParameter.name) } else { builder.typeParameter = getTypeParameterId(typeParameter) @@ -820,7 +820,7 @@ class FirElementSerializer private constructor( ) } - private fun createChildSerializer(declaration: FirDeclaration): FirElementSerializer = + private fun createChildSerializer(declaration: FirDeclaration<*>): FirElementSerializer = FirElementSerializer( session, scopeSession, declaration, Interner(typeParameters), extension, typeTable, versionRequirementTable, serializeTypeTableToFunction = false, @@ -832,7 +832,7 @@ class FirElementSerializer private constructor( private fun useTypeTable(): Boolean = extension.shouldUseTypeTable() - private fun FirDeclaration.hasInlineClassTypesInSignature(): Boolean { + private fun FirDeclaration<*>.hasInlineClassTypesInSignature(): Boolean { // TODO return false } @@ -927,7 +927,7 @@ class FirElementSerializer private constructor( } - private fun normalizeVisibility(declaration: FirMemberDeclaration): Visibility { + private fun normalizeVisibility(declaration: FirMemberDeclaration<*>): Visibility { return declaration.visibility.normalize() } diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt index dc4621b2a2d..c597d05f5bc 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmKotlinMangler.kt @@ -12,28 +12,28 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.signaturer.FirMangler @NoMutableState -class FirJvmKotlinMangler(private val session: FirSession) : AbstractKotlinMangler(), FirMangler { +class FirJvmKotlinMangler(private val session: FirSession) : AbstractKotlinMangler>(), FirMangler { - override val FirDeclaration.mangleString: String + override val FirDeclaration<*>.mangleString: String get() = getMangleComputer(MangleMode.FULL).computeMangle(this) - override val FirDeclaration.signatureString: String + override val FirDeclaration<*>.signatureString: String get() = getMangleComputer(MangleMode.SIGNATURE).computeMangle(this) - override val FirDeclaration.fqnString: String + override val FirDeclaration<*>.fqnString: String get() = getMangleComputer(MangleMode.FQNAME).computeMangle(this) - override fun FirDeclaration.isExported(): Boolean = true + override fun FirDeclaration<*>.isExported(): Boolean = true - override fun getExportChecker(): KotlinExportChecker { - return object : KotlinExportChecker { - override fun check(declaration: FirDeclaration, type: SpecialDeclarationType): Boolean = true + override fun getExportChecker(): KotlinExportChecker> { + return object : KotlinExportChecker> { + override fun check(declaration: FirDeclaration<*>, type: SpecialDeclarationType): Boolean = true - override fun FirDeclaration.isPlatformSpecificExported(): Boolean = true + override fun FirDeclaration<*>.isPlatformSpecificExported(): Boolean = true } } - override fun getMangleComputer(mode: MangleMode): KotlinMangleComputer { + override fun getMangleComputer(mode: MangleMode): KotlinMangleComputer> { return FirJvmMangleComputer(StringBuilder(256), mode, session) } } diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt index a203a4ec1ae..25293799e74 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt @@ -12,8 +12,8 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangle import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.firProvider -import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.fullyExpandedType +import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -29,9 +29,9 @@ open class FirJvmMangleComputer( private val builder: StringBuilder, private val mode: MangleMode, private val session: FirSession -) : FirVisitor(), KotlinMangleComputer { +) : FirVisitor(), KotlinMangleComputer> { - private val typeParameterContainer = ArrayList(4) + private val typeParameterContainer = ArrayList>(4) private var isRealExpect = false @@ -79,7 +79,7 @@ open class FirJvmMangleComputer( } } - private fun FirDeclaration.visitParent() { + private fun FirDeclaration<*>.visitParent() { val (parentPackageFqName, parentClassId) = when (this) { is FirCallableMemberDeclaration<*> -> this.containingClass()?.classId?.let { it.packageFqName to it } ?: return is FirClassLikeDeclaration<*> -> this.symbol.classId.let { it.packageFqName to it.outerClassId } @@ -98,7 +98,7 @@ open class FirJvmMangleComputer( } } - private fun FirDeclaration.mangleSimpleDeclaration(name: String) { + private fun FirDeclaration<*>.mangleSimpleDeclaration(name: String) { val l = builder.length visitParent() @@ -109,11 +109,11 @@ open class FirJvmMangleComputer( builder.appendName(name) } - private fun FirFunction<*>.mangleFunction(isCtor: Boolean, isStatic: Boolean, container: FirDeclaration) { + private fun FirFunction<*>.mangleFunction(isCtor: Boolean, isStatic: Boolean, container: FirDeclaration<*>) { - isRealExpect = isRealExpect || (this as? FirMemberDeclaration)?.isExpect == true + isRealExpect = isRealExpect || (this as? FirMemberDeclaration<*>)?.isExpect == true - if (container is FirMemberDeclaration) { + if (container is FirMemberDeclaration<*>) { typeParameterContainer.add(container) } visitParent() @@ -164,7 +164,7 @@ open class FirJvmMangleComputer( } } - private fun FirTypeParameter.effectiveParent(): FirMemberDeclaration { + private fun FirTypeParameter.effectiveParent(): FirMemberDeclaration<*> { for (parent in typeParameterContainer) { if (this in parent.typeParameters) { return parent @@ -315,7 +315,7 @@ open class FirJvmMangleComputer( override fun visitConstructor(constructor: FirConstructor, data: Boolean) = constructor.mangleFunction(isCtor = true, isStatic = false, constructor) - override fun computeMangle(declaration: FirDeclaration): String { + override fun computeMangle(declaration: FirDeclaration<*>): String { declaration.accept(this, true) return builder.toString() } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 7053a587ada..547710e549b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -161,7 +161,7 @@ class Fir2IrConverter( return irClass } - private fun delegatedMembers(irClass: IrClass): List { + private fun delegatedMembers(irClass: IrClass): List> { return irClass.declarations.filter { it.origin == IrDeclarationOrigin.DELEGATED_MEMBER }.mapNotNull { @@ -172,7 +172,7 @@ class Fir2IrConverter( // Sort declarations so that all non-synthetic declarations are before synthetic ones. // This is needed because converting synthetic fields for implementation delegation needs to know // existing declarations in the class to avoid adding redundant delegated members. - private fun syntheticPropertiesLast(declarations: List): Iterable { + private fun syntheticPropertiesLast(declarations: List>): Iterable> { return declarations.sortedBy { it !is FirField && it.isSynthetic } } @@ -196,7 +196,7 @@ class Fir2IrConverter( } private fun processMemberDeclaration( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, containingClass: FirClass<*>?, parent: IrDeclarationParent ): IrDeclaration? { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 03f80703b2a..96b474d652b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -97,7 +97,7 @@ class Fir2IrDeclarationStorage( // For pure fields (from Java) only private val fieldToPropertyCache = ConcurrentHashMap, IrProperty>() - private val delegatedReverseCache = ConcurrentHashMap() + private val delegatedReverseCache = ConcurrentHashMap>() private val fieldCache = ConcurrentHashMap() @@ -411,7 +411,7 @@ class Fir2IrDeclarationStorage( delegatedReverseCache[irFunction] = function } - fun originalDeclarationForDelegated(irDeclaration: IrDeclaration): FirDeclaration? = delegatedReverseCache[irDeclaration] + fun originalDeclarationForDelegated(irDeclaration: IrDeclaration): FirDeclaration<*>? = delegatedReverseCache[irDeclaration] internal fun declareIrSimpleFunction( signature: IdSignature?, @@ -1266,7 +1266,7 @@ class Fir2IrDeclarationStorage( } private fun IrMutableAnnotationContainer.convertAnnotationsFromLibrary(firAnnotationContainer: FirAnnotationContainer) { - if ((firAnnotationContainer as? FirDeclaration)?.isFromLibrary == true || + if ((firAnnotationContainer as? FirDeclaration<*>)?.isFromLibrary == true || (firAnnotationContainer is FirCallableMemberDeclaration<*> && firAnnotationContainer.isSubstitutionOrIntersectionOverride) ) { annotationGenerator.generate(this, firAnnotationContainer) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt index 1e3789030a6..38148a3a322 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrSignatureComposer.kt @@ -11,6 +11,6 @@ import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.ir.util.IdSignature interface Fir2IrSignatureComposer { - fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag? = null): IdSignature? + fun composeSignature(declaration: FirDeclaration<*>, containingClass: ConeClassLikeLookupTag? = null): IdSignature? fun composeAccessorSignature(property: FirProperty, isSetter: Boolean, containingClass: ConeClassLikeLookupTag? = null): IdSignature? } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 398b18cc659..fc53c03e161 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -86,7 +86,7 @@ class Fir2IrVisitor( } } - private fun FirDeclaration.toIrDeclaration(): IrDeclaration = + private fun FirDeclaration<*>.toIrDeclaration(): IrDeclaration = accept(this@Fir2IrVisitor, null) as IrDeclaration // ================================================================================== diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt index 102961a22ed..036d2b29bf1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.MetadataSource import org.jetbrains.kotlin.name.Name sealed class FirMetadataSource : MetadataSource { - abstract val fir: FirDeclaration + abstract val fir: FirDeclaration<*> val declarationSiteSession: FirSession get() = fir.moduleData.session diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt index 37be5719559..d1541e984a5 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/AdapterGenerator.kt @@ -7,7 +7,9 @@ package org.jetbrains.kotlin.fir.backend.generators import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.fir.backend.* +import org.jetbrains.kotlin.fir.backend.Fir2IrComponents +import org.jetbrains.kotlin.fir.backend.Fir2IrConversionScope +import org.jetbrains.kotlin.fir.backend.FirMetadataSource import org.jetbrains.kotlin.fir.backend.convertWithOffsets import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* @@ -32,7 +34,10 @@ import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl -import org.jetbrains.kotlin.ir.types.* +import org.jetbrains.kotlin.ir.types.IrSimpleType +import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.types.isUnit +import org.jetbrains.kotlin.ir.types.typeOrNull import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.Name @@ -172,7 +177,7 @@ internal class AdapterGenerator( ): IrSimpleFunction { val returnType = type.arguments.last().typeOrNull!! val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! } - val firMemberAdaptee = firAdaptee as FirMemberDeclaration + val firMemberAdaptee = firAdaptee as FirMemberDeclaration<*> return irFactory.createFunction( startOffset, endOffset, IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE, @@ -292,7 +297,7 @@ internal class AdapterGenerator( boundDispatchReceiver != null -> irCall.dispatchReceiver = receiverValue boundExtensionReceiver != null -> irCall.extensionReceiver = receiverValue } - } else if (callableReferenceAccess.explicitReceiver is FirResolvedQualifier && ((firAdaptee as? FirMemberDeclaration)?.isStatic != true)) { + } else if (callableReferenceAccess.explicitReceiver is FirResolvedQualifier && ((firAdaptee as? FirMemberDeclaration<*>)?.isStatic != true)) { // Unbound callable reference 'A::foo' val adaptedReceiverParameter = adapterFunction.valueParameters[0] val adaptedReceiverValue = IrGetValueImpl( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index ee0aab161d6..5527ec1e21d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -58,10 +58,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions.TO_STRING @OptIn(ObsoleteDescriptorBasedAPI::class) class DataClassMembersGenerator(val components: Fir2IrComponents) { - fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List = + fun generateInlineClassMembers(klass: FirClass<*>, irClass: IrClass): List> = MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_INLINE_CLASS_MEMBER).generate(klass) - fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List = + fun generateDataClassMembers(klass: FirClass<*>, irClass: IrClass): List> = MyDataClassMethodsGenerator(irClass, klass.symbol.toLookupTag(), IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate(klass) fun generateDataClassComponentBody(irFunction: IrFunction, lookupTag: ConeClassLikeLookupTag) = @@ -175,14 +175,14 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) { (this.name == HASHCODE_NAME && matchesHashCodeSignature) || (this.name == TO_STRING && matchesToStringSignature) - fun generate(klass: FirClass<*>): List { + fun generate(klass: FirClass<*>): List> { val propertyParametersCount = irClass.primaryConstructor?.explicitParameters?.size ?: 0 val properties = irClass.properties.filter { it.backingField != null }.take(propertyParametersCount).toList() if (properties.isEmpty()) { return emptyList() } - val result = mutableListOf() + val result = mutableListOf>() val contributedFunctionsInThisType = klass.declarations.mapNotNull { if (it is FirSimpleFunction && it.matchesDataClassSyntheticMemberSignatures) { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index d9742b60a0f..37c79e01565 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -14,8 +14,8 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol @@ -59,18 +59,18 @@ class FakeOverrideGenerator( } } - fun IrClass.addFakeOverrides(klass: FirClass<*>, declarations: Collection) { + fun IrClass.addFakeOverrides(klass: FirClass<*>, declarations: Collection>) { this.declarations += getFakeOverrides( klass, declarations ) } - fun IrClass.getFakeOverrides(klass: FirClass<*>, realDeclarations: Collection): List { + fun IrClass.getFakeOverrides(klass: FirClass<*>, realDeclarations: Collection>): List { val result = mutableListOf() val useSiteMemberScope = klass.unsubstitutedScope(session, scopeSession, withForcedTypeCalculator = true) val superTypesCallableNames = useSiteMemberScope.getCallableNames() - val realDeclarationSymbols = realDeclarations.filterIsInstance>().mapTo(mutableSetOf(), FirSymbolOwner<*>::symbol) + val realDeclarationSymbols = realDeclarations.mapTo(mutableSetOf(), FirDeclaration<*>::symbol) for (name in superTypesCallableNames) { generateFakeOverridesForName(this, useSiteMemberScope, name, klass, result, realDeclarationSymbols) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt index dc07da65980..afae9f5c27d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyDeclaration.kt @@ -10,12 +10,15 @@ import org.jetbrains.kotlin.fir.backend.toIrType import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.symbols.Fir2IrBindableSymbol -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent +import org.jetbrains.kotlin.ir.declarations.IrFactory +import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import kotlin.properties.ReadWriteProperty -interface AbstractFir2IrLazyDeclaration : +interface AbstractFir2IrLazyDeclaration, D : IrDeclaration> : IrDeclaration, IrDeclarationParent, Fir2IrComponents { val fir: F diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt index 814e6d8e526..544b2d53540 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/AbstractFir2IrLazyFunction.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME import kotlin.properties.ReadWriteProperty -abstract class AbstractFir2IrLazyFunction( +abstract class AbstractFir2IrLazyFunction>( components: Fir2IrComponents, override val startOffset: Int, override val endOffset: Int, diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt index cef077969ae..a01a71fbd03 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/lazy/Fir2IrLazyPropertyAccessor.kt @@ -5,11 +5,17 @@ package org.jetbrains.kotlin.fir.lazy -import org.jetbrains.kotlin.fir.backend.* +import org.jetbrains.kotlin.fir.backend.ConversionTypeContext +import org.jetbrains.kotlin.fir.backend.Fir2IrComponents +import org.jetbrains.kotlin.fir.backend.generateOverriddenAccessorSymbols +import org.jetbrains.kotlin.fir.backend.toIrType import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor import org.jetbrains.kotlin.fir.symbols.Fir2IrSimpleFunctionSymbol -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.lazy.lazyVar import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -28,12 +34,12 @@ class Fir2IrLazyPropertyAccessor( firParentClass: FirRegularClass, symbol: Fir2IrSimpleFunctionSymbol, isFakeOverride: Boolean -) : AbstractFir2IrLazyFunction(components, startOffset, endOffset, origin, symbol, isFakeOverride) { +) : AbstractFir2IrLazyFunction>(components, startOffset, endOffset, origin, symbol, isFakeOverride) { init { symbol.bind(this) } - override val fir: FirMemberDeclaration + override val fir: FirMemberDeclaration<*> get() = firAccessor ?: firParentProperty // TODO: investigate why some deserialized properties are inline diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt index 5f6825eead9..bd5c704aa4c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt @@ -56,7 +56,7 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu } } - override fun composeSignature(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag?): IdSignature? { + override fun composeSignature(declaration: FirDeclaration<*>, containingClass: ConeClassLikeLookupTag?): IdSignature? { if (declaration is FirAnonymousObject || declaration is FirAnonymousFunction) return null if (declaration is FirRegularClass && declaration.classId.isLocal) return null if (declaration is FirCallableMemberDeclaration<*>) { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirMangler.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirMangler.kt index a69a36f9f70..881e34f25f2 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirMangler.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirMangler.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.signaturer import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.ir.util.KotlinMangler -interface FirMangler : KotlinMangler { +interface FirMangler : KotlinMangler> { override val manglerName: String get() = "Fir" -} \ No newline at end of file +} diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt index a2943697f1c..bc11a4607b4 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaVisibilityChecker.kt @@ -22,7 +22,7 @@ object FirJavaVisibilityChecker : FirVisibilityChecker() { declarationVisibility: Visibility, symbol: FirBasedSymbol<*>, useSiteFile: FirFile, - containingDeclarations: List, + containingDeclarations: List>, dispatchReceiver: ReceiverValue?, session: FirSession ): Boolean { 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 7cad9f70deb..bce54ce2920 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 @@ -371,7 +371,7 @@ class JavaSymbolProvider( classId: ClassId, javaTypeParameterStack: JavaTypeParameterStack, dispatchReceiver: ConeClassLikeType - ): FirDeclaration { + ): FirDeclaration<*> { val fieldName = javaField.name val fieldId = CallableId(classId.packageFqName, classId.relativeClassName, fieldName) val returnType = javaField.type 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 1d0916ddb91..79f78bf5d9d 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 @@ -37,7 +37,7 @@ class FirJavaClass @FirImplementationDetail internal constructor( override val annotations: MutableList, override var status: FirDeclarationStatus, override val classKind: ClassKind, - override val declarations: MutableList, + override val declarations: MutableList>, override val scopeProvider: FirScopeProvider, override val symbol: FirRegularClassSymbol, override val superTypeRefs: MutableList, @@ -132,7 +132,7 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR override val annotations: MutableList = mutableListOf() override val typeParameters: MutableList = mutableListOf() - override val declarations: MutableList = mutableListOf() + override val declarations: MutableList> = mutableListOf() override val superTypeRefs: MutableList = mutableListOf() diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index c3dd42aba9f..727e86ca188 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -87,7 +87,7 @@ class DeclarationsConverter( val fileAnnotationList = mutableListOf() val importList = mutableListOf() - val firDeclarationList = mutableListOf() + val firDeclarationList = mutableListOf>() context.packageFqName = FqName.ROOT file.forEachChildren { when (it.tokenType) { @@ -95,7 +95,7 @@ class DeclarationsConverter( PACKAGE_DIRECTIVE -> context.packageFqName = convertPackageName(it) IMPORT_LIST -> importList += convertImportDirectives(it) CLASS -> firDeclarationList += convertClass(it) - FUN -> firDeclarationList += convertFunctionDeclaration(it) as FirDeclaration + FUN -> firDeclarationList += convertFunctionDeclaration(it) as FirDeclaration<*> PROPERTY -> firDeclarationList += convertPropertyDeclaration(it) TYPEALIAS -> firDeclarationList += convertTypeAlias(it) OBJECT_DECLARATION -> firDeclarationList += convertClass(it) @@ -358,7 +358,7 @@ class DeclarationsConverter( /** * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject */ - private fun convertClass(classNode: LighterASTNode): FirDeclaration { + private fun convertClass(classNode: LighterASTNode): FirDeclaration<*> { var modifiers = Modifier() var classKind: ClassKind = ClassKind.CLASS //TODO var identifier: String? = null @@ -730,12 +730,12 @@ class DeclarationsConverter( * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody */ - private fun convertClassBody(classBody: LighterASTNode, classWrapper: ClassWrapper): List { + private fun convertClassBody(classBody: LighterASTNode, classWrapper: ClassWrapper): List> { return classBody.forEachChildrenReturnList { node, container -> when (node.tokenType) { ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper) CLASS -> container += convertClass(node) - FUN -> container += convertFunctionDeclaration(node, classWrapper) as FirDeclaration + FUN -> container += convertFunctionDeclaration(node, classWrapper) as FirDeclaration<*> PROPERTY -> container += convertPropertyDeclaration(node, classWrapper) TYPEALIAS -> container += convertTypeAlias(node) OBJECT_DECLARATION -> container += convertClass(node) @@ -826,7 +826,7 @@ class DeclarationsConverter( * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseMemberDeclarationRest * at INIT keyword */ - private fun convertAnonymousInitializer(anonymousInitializer: LighterASTNode): FirDeclaration { + private fun convertAnonymousInitializer(anonymousInitializer: LighterASTNode): FirDeclaration<*> { var firBlock: FirBlock? = null anonymousInitializer.forEachChildren { when (it.tokenType) { @@ -949,7 +949,7 @@ class DeclarationsConverter( /** * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeAlias */ - private fun convertTypeAlias(typeAlias: LighterASTNode): FirDeclaration { + private fun convertTypeAlias(typeAlias: LighterASTNode): FirDeclaration<*> { var modifiers = Modifier() var identifier: String? = null lateinit var firType: FirTypeRef @@ -985,7 +985,7 @@ class DeclarationsConverter( /** * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseProperty */ - fun convertPropertyDeclaration(property: LighterASTNode, classWrapper: ClassWrapper? = null): FirDeclaration { + fun convertPropertyDeclaration(property: LighterASTNode, classWrapper: ClassWrapper? = null): FirDeclaration<*> { var modifiers = Modifier() var identifier: String? = null val firTypeParameters = mutableListOf() @@ -1991,7 +1991,7 @@ class DeclarationsConverter( typeParameters: List, typeConstraints: List, to: T - ) where T : FirDeclaration, T : FirTypeParameterRefsOwner { + ) where T : FirDeclaration, T : FirTypeParameterRefsOwner { val typeParamNames = typeParameters.map { it.name }.toSet() val result = typeConstraints.mapNotNull { constraint -> val name = constraint.identifier.nameAsSafeName() diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 158cc9d6dcb..2679469b0ff 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -218,7 +218,7 @@ open class RawFirBuilder( owner: KtClassOrObject, ownerClassBuilder: FirClassBuilder, ownerTypeParameters: List - ): FirDeclaration { + ): FirDeclaration<*> { return when (this) { is KtSecondaryConstructor -> { disabledLazyMode { @@ -514,7 +514,7 @@ open class RawFirBuilder( } } - private fun KtTypeParameterListOwner.fillDanglingConstraintsTo(to: T) where T : FirDeclaration, T : FirTypeParameterRefsOwner { + private fun KtTypeParameterListOwner.fillDanglingConstraintsTo(to: T) where T : FirDeclaration, T : FirTypeParameterRefsOwner { val typeParamNames = typeParameters.mapNotNull { it.nameAsName }.toSet() val result = typeConstraints.mapNotNull { constraint -> constraint.subjectTypeParameterName?.getReferencedNameAsName()?.let { name -> @@ -730,7 +730,7 @@ open class RawFirBuilder( } } for (declaration in file.declarations) { - declarations += declaration.convert() + declarations += declaration.convert>() } } } @@ -738,7 +738,7 @@ open class RawFirBuilder( private fun KtEnumEntry.toFirEnumEntry( delegatedEnumSelfTypeRef: FirResolvedTypeRef, ownerClassHasDefaultConstructor: Boolean - ): FirDeclaration { + ): FirDeclaration<*> { val ktEnumEntry = this@toFirEnumEntry return buildEnumEntry { source = toFirSourceElement() diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt index a839cecc4fa..65eb73a6962 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt @@ -113,7 +113,7 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() { // errorDeclaration.psi?.let { println(it) } // } - override fun visitDeclaration(declaration: FirDeclaration) { + override fun > visitDeclaration(declaration: FirDeclaration) { normalDeclarations++ declaration.acceptChildren(this) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index af2b8323346..5109b125586 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -596,7 +596,7 @@ class FirCallResolver( createResolvedReferenceWithoutCandidateForLocalVariables && explicitReceiver?.typeRef?.coneTypeSafe() == null && coneSymbol is FirVariableSymbol && - (coneSymbol !is FirPropertySymbol || (coneSymbol.fir as FirMemberDeclaration).typeParameters.isEmpty()) + (coneSymbol !is FirPropertySymbol || (coneSymbol.fir as FirMemberDeclaration<*>).typeParameters.isEmpty()) ) { return buildResolvedNamedReference { this.source = source diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt index eecd6b8b20a..5c12b21e67f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirVisibilityChecker.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName interface FirModuleVisibilityChecker : FirSessionComponent { - fun isInFriendModule(declaration: FirMemberDeclaration): Boolean + fun isInFriendModule(declaration: FirMemberDeclaration<*>): Boolean } abstract class FirVisibilityChecker : FirSessionComponent { @@ -34,7 +34,7 @@ abstract class FirVisibilityChecker : FirSessionComponent { declarationVisibility: Visibility, symbol: FirBasedSymbol<*>, useSiteFile: FirFile, - containingDeclarations: List, + containingDeclarations: List>, dispatchReceiver: ReceiverValue?, session: FirSession ): Boolean { @@ -42,13 +42,13 @@ abstract class FirVisibilityChecker : FirSessionComponent { } } - fun isVisible( - declaration: T, + fun isVisible( + declaration: FirMemberDeclaration<*>, candidate: Candidate - ): Boolean where T : FirMemberDeclaration, T : FirSymbolOwner<*> { + ): Boolean { if (declaration is FirCallableDeclaration<*> && (declaration.isIntersectionOverride || declaration.isSubstitutionOverride)) { @Suppress("UNCHECKED_CAST") - return isVisible(declaration.originalIfFakeOverride() as T, candidate) + return isVisible(declaration.originalIfFakeOverride() as FirMemberDeclaration<*>, candidate) } val callInfo = candidate.callInfo @@ -59,13 +59,13 @@ abstract class FirVisibilityChecker : FirSessionComponent { return isVisible(declaration, session, useSiteFile, containingDeclarations, candidate.dispatchReceiverValue) } - fun isVisible( - declaration: T, + fun isVisible( + declaration: FirMemberDeclaration<*>, session: FirSession, useSiteFile: FirFile, - containingDeclarations: List, + containingDeclarations: List>, dispatchReceiver: ReceiverValue? - ): Boolean where T : FirMemberDeclaration, T : FirSymbolOwner<*> { + ): Boolean { val provider = session.firProvider val symbol = declaration.symbol return when (declaration.visibility) { @@ -124,13 +124,13 @@ abstract class FirVisibilityChecker : FirSessionComponent { declarationVisibility: Visibility, symbol: FirBasedSymbol<*>, useSiteFile: FirFile, - containingDeclarations: List, + containingDeclarations: List>, dispatchReceiver: ReceiverValue?, session: FirSession ): Boolean private fun canSeePrivateMemberOf( - containingDeclarationOfUseSite: List, + containingDeclarationOfUseSite: List>, ownerId: ClassId, session: FirSession ): Boolean { @@ -195,7 +195,7 @@ abstract class FirVisibilityChecker : FirSessionComponent { } protected fun canSeeProtectedMemberOf( - containingDeclarationOfUseSite: List, + containingDeclarationOfUseSite: List>, dispatchReceiver: ReceiverValue?, ownerId: ClassId, session: FirSession ): Boolean { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt index 2701eedf413..1e504d1d1af 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt @@ -85,6 +85,6 @@ private val USE_SITE_TARGET_NAME_MAP = mapOf( private val DEFAULT_USE_SITE_TARGETS: Set = USE_SITE_TARGET_NAME_MAP.values.fold(setOf()) { a, b -> a + b } - setOf(AnnotationUseSiteTarget.FILE) -fun FirAnnotatedDeclaration.hasAnnotation(classId: ClassId): Boolean { +fun FirAnnotatedDeclaration<*>.hasAnnotation(classId: ClassId): Boolean { return annotations.any { it.toAnnotationClassId() == classId } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirVersionRequirementsTableKey.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirVersionRequirementsTableKey.kt index b3742196f76..294e4df2621 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirVersionRequirementsTableKey.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirVersionRequirementsTableKey.kt @@ -9,4 +9,4 @@ import org.jetbrains.kotlin.metadata.deserialization.VersionRequirementTable object FirVersionRequirementsTableKey : FirDeclarationDataKey() -var FirDeclaration.versionRequirementsTable: VersionRequirementTable? by FirDeclarationDataRegistry.data(FirVersionRequirementsTableKey) +var FirDeclaration<*>.versionRequirementsTable: VersionRequirementTable? by FirDeclarationDataRegistry.data(FirVersionRequirementsTableKey) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt index b7e93f3d89c..3efab82dfd9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension.kt @@ -27,18 +27,18 @@ abstract class FirDeclarationGenerationExtension(session: FirSession) : FirPredi final override val extensionType: KClass = FirDeclarationGenerationExtension::class abstract fun generateClasses( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> - abstract fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List + abstract fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List> abstract fun generateMembers( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> - data class GeneratedDeclaration(val newDeclaration: T, val owner: FirAnnotatedDeclaration) + data class GeneratedDeclaration>(val newDeclaration: T, val owner: FirAnnotatedDeclaration<*>) fun interface Factory : FirExtension.Factory } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt index 2938013dfd5..f1e9389caf8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirPredicateBasedProvider.kt @@ -23,30 +23,30 @@ abstract class FirPredicateBasedProvider : FirSessionComponent { } } - abstract fun getSymbolsByPredicate(predicate: DeclarationPredicate): List + abstract fun getSymbolsByPredicate(predicate: DeclarationPredicate): List> abstract fun getSymbolsByPredicate( - declarations: Collection, + declarations: Collection>, predicate: DeclarationPredicate - ): List + ): List> abstract fun getSymbolsWithOwnersByPredicate( predicate: DeclarationPredicate - ): List>> + ): List, List>>> abstract fun getSymbolsWithOwnersByPredicate( - declarations: Collection, + declarations: Collection>, predicate: DeclarationPredicate - ): List>> + ): List, List>>> - abstract fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration): List? + abstract fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration<*>): List>? abstract fun fileHasPluginAnnotations(file: FirFile): Boolean - abstract fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList) - abstract fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration, owner: FirAnnotatedDeclaration) + abstract fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration<*>, owners: PersistentList>) + abstract fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration<*>, owner: FirAnnotatedDeclaration<*>) - abstract fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration): Boolean + abstract fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration<*>): Boolean } @NoMutableState @@ -54,7 +54,7 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F private val registeredPluginAnnotations = session.registeredPluginAnnotations private val cache = Cache() - override fun getSymbolsByPredicate(predicate: DeclarationPredicate): List { + override fun getSymbolsByPredicate(predicate: DeclarationPredicate): List> { val annotations = registeredPluginAnnotations.getAnnotationsForPredicate(predicate) if (annotations.isEmpty()) return emptyList() val declarations = annotations.flatMapTo(mutableSetOf()) { cache.declarationByAnnotation[it] + cache.declarationsUnderAnnotated[it] } @@ -62,24 +62,24 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F } override fun getSymbolsByPredicate( - declarations: Collection, + declarations: Collection>, predicate: DeclarationPredicate - ): List { + ): List> { return declarations.filter { matches(predicate, it) } } - override fun getSymbolsWithOwnersByPredicate(predicate: DeclarationPredicate): List>> { + override fun getSymbolsWithOwnersByPredicate(predicate: DeclarationPredicate): List, List>>> { return getSymbolsByPredicate(predicate).zipWithParents() } override fun getSymbolsWithOwnersByPredicate( - declarations: Collection, + declarations: Collection>, predicate: DeclarationPredicate - ): List>> { + ): List, List>>> { return getSymbolsByPredicate(declarations, predicate).zipWithParents() } - private fun List.zipWithParents(): List>> { + private fun List>.zipWithParents(): List, List>>> { return this.map { it to cache.ownersForDeclaration.getValue(it) } } @@ -87,7 +87,7 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F return file in cache.filesWithPluginAnnotations } - override fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration, owners: PersistentList) { + override fun registerAnnotatedDeclaration(declaration: FirAnnotatedDeclaration<*>, owners: PersistentList>) { cache.ownersForDeclaration[declaration] = owners registerOwnersDeclarations(declaration, owners) @@ -101,16 +101,16 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F cache.filesWithPluginAnnotations += file } - override fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration): List? { + override fun getOwnersOfDeclaration(declaration: FirAnnotatedDeclaration<*>): List>? { return cache.ownersForDeclaration[declaration] } - override fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration, owner: FirAnnotatedDeclaration) { + override fun registerGeneratedDeclaration(declaration: FirAnnotatedDeclaration<*>, owner: FirAnnotatedDeclaration<*>) { val owners = cache.ownersForDeclaration.getValue(owner).add(owner) registerAnnotatedDeclaration(declaration, owners) } - private fun registerOwnersDeclarations(declaration: FirAnnotatedDeclaration, owners: PersistentList) { + private fun registerOwnersDeclarations(declaration: FirAnnotatedDeclaration<*>, owners: PersistentList>) { val lastOwner = owners.lastOrNull() ?: return val annotationsFromLastOwner = cache.annotationsOfDeclaration[lastOwner] val annotationsFromPreviousOwners = cache.parentAnnotationsOfDeclaration[lastOwner] @@ -122,53 +122,53 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F // ---------------------------------- Matching ---------------------------------- - override fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration): Boolean { + override fun matches(predicate: DeclarationPredicate, declaration: FirAnnotatedDeclaration<*>): Boolean { return predicate.accept(matcher, declaration) } private val matcher = Matcher() - private inner class Matcher : DeclarationPredicateVisitor() { - override fun visitPredicate(predicate: DeclarationPredicate, data: FirAnnotatedDeclaration): Boolean { + private inner class Matcher : DeclarationPredicateVisitor>() { + override fun visitPredicate(predicate: DeclarationPredicate, data: FirAnnotatedDeclaration<*>): Boolean { throw IllegalStateException("Should not be there") } - override fun visitAny(predicate: DeclarationPredicate.Any, data: FirAnnotatedDeclaration): Boolean { + override fun visitAny(predicate: DeclarationPredicate.Any, data: FirAnnotatedDeclaration<*>): Boolean { return true } - override fun visitAnd(predicate: DeclarationPredicate.And, data: FirAnnotatedDeclaration): Boolean { + override fun visitAnd(predicate: DeclarationPredicate.And, data: FirAnnotatedDeclaration<*>): Boolean { return predicate.a.accept(this, data) && predicate.b.accept(this, data) } - override fun visitOr(predicate: DeclarationPredicate.Or, data: FirAnnotatedDeclaration): Boolean { + override fun visitOr(predicate: DeclarationPredicate.Or, data: FirAnnotatedDeclaration<*>): Boolean { return predicate.a.accept(this, data) || predicate.b.accept(this, data) } - override fun visitAnnotatedWith(predicate: AnnotatedWith, data: FirAnnotatedDeclaration): Boolean { + override fun visitAnnotatedWith(predicate: AnnotatedWith, data: FirAnnotatedDeclaration<*>): Boolean { return matchWith(data, predicate.annotations) } - override fun visitUnderAnnotatedWith(predicate: UnderAnnotatedWith, data: FirAnnotatedDeclaration): Boolean { + override fun visitUnderAnnotatedWith(predicate: UnderAnnotatedWith, data: FirAnnotatedDeclaration<*>): Boolean { return matchUnder(data, predicate.annotations) } - override fun visitAnnotatedWithMeta(predicate: AnnotatedWithMeta, data: FirAnnotatedDeclaration): Boolean { + override fun visitAnnotatedWithMeta(predicate: AnnotatedWithMeta, data: FirAnnotatedDeclaration<*>): Boolean { return matchWith(data, predicate.userDefinedAnnotations) } - override fun visitUnderMetaAnnotated(predicate: UnderMetaAnnotated, data: FirAnnotatedDeclaration): Boolean { + override fun visitUnderMetaAnnotated(predicate: UnderMetaAnnotated, data: FirAnnotatedDeclaration<*>): Boolean { return matchUnder(data, predicate.userDefinedAnnotations) } private val MetaAnnotated.userDefinedAnnotations: Set get() = metaAnnotations.flatMapTo(mutableSetOf()) { registeredPluginAnnotations.getAnnotationsWithMetaAnnotation(it) } - private fun matchWith(declaration: FirAnnotatedDeclaration, annotations: Set): Boolean { + private fun matchWith(declaration: FirAnnotatedDeclaration<*>, annotations: Set): Boolean { return cache.annotationsOfDeclaration[declaration].any { it in annotations } } - private fun matchUnder(declaration: FirAnnotatedDeclaration, annotations: Set): Boolean { + private fun matchUnder(declaration: FirAnnotatedDeclaration<*>, annotations: Set): Boolean { return cache.parentAnnotationsOfDeclaration[declaration].any { it in annotations } } } @@ -176,13 +176,13 @@ private class FirPredicateBasedProviderImpl(private val session: FirSession) : F // ---------------------------------- Cache ---------------------------------- private class Cache { - val declarationByAnnotation: Multimap = LinkedHashMultimap.create() - val annotationsOfDeclaration: LinkedHashMultimap = LinkedHashMultimap.create() + val declarationByAnnotation: Multimap> = LinkedHashMultimap.create() + val annotationsOfDeclaration: LinkedHashMultimap, AnnotationFqn> = LinkedHashMultimap.create() - val declarationsUnderAnnotated: Multimap = LinkedHashMultimap.create() - val parentAnnotationsOfDeclaration: LinkedHashMultimap = LinkedHashMultimap.create() + val declarationsUnderAnnotated: Multimap> = LinkedHashMultimap.create() + val parentAnnotationsOfDeclaration: LinkedHashMultimap, AnnotationFqn> = LinkedHashMultimap.create() - val ownersForDeclaration: MutableMap> = mutableMapOf() + val ownersForDeclaration: MutableMap, PersistentList>> = mutableMapOf() val filesWithPluginAnnotations: MutableSet = mutableSetOf() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt index 1630d77c9d3..9f5bb32b00a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/extensions/FirStatusTransformerExtension.kt @@ -25,8 +25,8 @@ abstract class FirStatusTransformerExtension(session: FirSession) : FirPredicate final override val extensionType: KClass = FirStatusTransformerExtension::class abstract fun transformStatus( - declaration: FirDeclaration, - owners: List, + declaration: FirDeclaration<*>, + owners: List>, status: FirDeclarationStatus ): FirDeclarationStatus diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt index ab35ec2b6bd..cc86d3f4d14 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/BodyResolveComponents.kt @@ -45,7 +45,7 @@ data class SessionHolderImpl(override val session: FirSession, override val scop abstract class BodyResolveComponents : SessionHolder { abstract val returnTypeCalculator: ReturnTypeCalculator abstract val implicitReceiverStack: ImplicitReceiverStack - abstract val containingDeclarations: List + abstract val containingDeclarations: List> abstract val fileImportsScope: List abstract val towerDataElements: List abstract val towerDataContext: FirTowerDataContext @@ -53,7 +53,7 @@ abstract class BodyResolveComponents : SessionHolder { abstract val noExpectedType: FirTypeRef abstract val symbolProvider: FirSymbolProvider abstract val file: FirFile - abstract val container: FirDeclaration + abstract val container: FirDeclaration<*> abstract val resolutionStageRunner: ResolutionStageRunner abstract val samResolver: FirSamResolver abstract val callResolver: FirCallResolver @@ -211,7 +211,7 @@ data class ImplicitReceivers( fun SessionHolder.collectImplicitReceivers( type: ConeKotlinType?, - owner: FirDeclaration + owner: FirDeclaration<*> ): ImplicitReceivers { if (type == null) return ImplicitReceivers(null, emptyList()) 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 f2930efa28c..ba8c23680eb 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 @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectData -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef @@ -59,7 +59,7 @@ fun FirFunction<*>.constructFunctionalTypeRef(isSuspend: Boolean = false): FirRe ) ) } - val rawReturnType = (this as FirTypedDeclaration).returnTypeRef.coneType + val rawReturnType = (this as FirTypedDeclaration<*>).returnTypeRef.coneType val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneType, rawReturnType, isSuspend = isSuspend) @@ -155,7 +155,7 @@ internal fun typeForReifiedParameterReference(parameterReferenceBuilder: FirReso return resultType.resolvedTypeFromPrototype(typeParameterSymbol.constructType(emptyArray(), false)) } -internal fun typeForQualifierByDeclaration(declaration: FirDeclaration, resultType: FirTypeRef, session: FirSession): FirTypeRef? { +internal fun typeForQualifierByDeclaration(declaration: FirDeclaration<*>, resultType: FirTypeRef, session: FirSession): FirTypeRef? { if (declaration is FirTypeAlias) { val expandedDeclaration = declaration.expandedConeType?.lookupTag?.toSymbol(session)?.fir ?: return null return typeForQualifierByDeclaration(expandedDeclaration, resultType, session) @@ -413,7 +413,7 @@ fun FirFunction<*>.getAsForbiddenNamedArgumentsTarget(session: FirSession): Forb } } } - if (this is FirMemberDeclaration && status.isExpect) { + if (this is FirMemberDeclaration<*> && status.isExpect) { return ForbiddenNamedArgumentsTarget.EXPECTED_CLASS_MEMBER } return when (origin) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt index 9d5653b5013..13fd723677f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt @@ -18,11 +18,11 @@ import org.jetbrains.kotlin.fir.resolve.createFunctionalType import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnsupportedCallableReferenceTarget import org.jetbrains.kotlin.fir.resolve.inference.extractInputOutputTypesFromCallableReferenceExpectedType import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType -import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.resolve.calls.components.SuspendConversionStrategy import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition @@ -407,6 +407,6 @@ private fun FirVariable<*>.canBeMutableReference(candidate: Candidate): Boolean if (this is FirField) return true val original = this.unwrapFakeOverrides() return original.source?.kind == FirFakeSourceElementKind.PropertyFromParameter || - (original.setter is FirMemberDeclaration && + (original.setter is FirMemberDeclaration<*> && candidate.callInfo.session.visibilityChecker.isVisible(original.setter!!, candidate)) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Candidate.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Candidate.kt index f1725de1062..98f7b149440 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Candidate.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Candidate.kt @@ -48,7 +48,7 @@ data class CallInfo( val typeArguments: List, val session: FirSession, val containingFile: FirFile, - val containingDeclarations: List, + val containingDeclarations: List>, val candidateForCommonInvokeReceiver: Candidate? = null, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeOverloadConflictResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeOverloadConflictResolver.kt index 31beea3070b..8ac996ea921 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeOverloadConflictResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeOverloadConflictResolver.kt @@ -10,8 +10,8 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.modality import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import org.jetbrains.kotlin.fir.resolve.inference.ConeTypeParameterBasedTypeVariable +import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.types.coneType @@ -102,7 +102,7 @@ class ConeOverloadConflictResolver( } if (discriminateAbstracts) { - val filtered = candidates.filterTo(mutableSetOf()) { (it.symbol.fir as? FirMemberDeclaration)?.modality != Modality.ABSTRACT } + val filtered = candidates.filterTo(mutableSetOf()) { (it.symbol.fir as? FirMemberDeclaration<*>)?.modality != Modality.ABSTRACT } when (filtered.size) { 1 -> return filtered 0, candidates.size -> { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt index 62ef3164425..2c50c9c49be 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.FirVisibilityChecker import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* @@ -101,7 +100,7 @@ object CheckDispatchReceiver : ResolutionStage() { override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) { val explicitReceiverExpression = callInfo.explicitReceiver if (explicitReceiverExpression.isSuperCall()) { - val status = candidate.symbol.fir as? FirMemberDeclaration + val status = candidate.symbol.fir as? FirMemberDeclaration<*> if (status?.modality == Modality.ABSTRACT) { sink.reportDiagnostic(ResolvedWithLowPriority) } @@ -197,7 +196,7 @@ internal object CheckVisibility : CheckerStage() { val visibilityChecker = callInfo.session.visibilityChecker val symbol = candidate.symbol val declaration = symbol.fir - if (declaration is FirMemberDeclaration) { + if (declaration is FirMemberDeclaration<*>) { if (!checkVisibility(declaration, sink, candidate, visibilityChecker)) { return } @@ -216,12 +215,12 @@ internal object CheckVisibility : CheckerStage() { } } - private suspend fun checkVisibility( + private suspend fun > checkVisibility( declaration: T, sink: CheckerSink, candidate: Candidate, visibilityChecker: FirVisibilityChecker - ): Boolean where T : FirMemberDeclaration, T : FirSymbolOwner<*> { + ): Boolean { if (!visibilityChecker.isVisible(declaration, candidate)) { sink.yieldDiagnostic(HiddenCandidate) return false diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/Stack.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/Stack.kt index 0c6e749643e..0a6dbcba7c3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/Stack.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/Stack.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.dfa import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSymbolOwner +import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol @@ -76,12 +76,12 @@ class SymbolBasedNodeStorage> : Stack() where T : FirElemen override fun top(): N = stack.top() override fun pop(): N = stack.pop().also { - map.remove((it.fir as FirSymbolOwner<*>).symbol) + map.remove((it.fir as FirDeclaration<*>).symbol) } override fun push(value: N) { stack.push(value) - map[(value.fir as FirSymbolOwner<*>).symbol] = value + map[(value.fir as FirDeclaration<*>).symbol] = value } operator fun get(key: FirBasedSymbol<*>): N? { @@ -92,4 +92,4 @@ class SymbolBasedNodeStorage> : Stack() where T : FirElemen stack.reset() map.clear() } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraph.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraph.kt index ed489e40eda..2cbd27fdc5a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraph.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraph.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.dfa.cfg import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -class ControlFlowGraph(val declaration: FirDeclaration?, val name: String, val kind: Kind) { +class ControlFlowGraph(val declaration: FirDeclaration<*>?, val name: String, val kind: Kind) { private var _nodes: MutableList> = mutableListOf() val nodes: List> diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt index 3e3f269eab9..dc51df073ff 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.resolve.dfa.cfg import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildAnonymousFunctionExpression @@ -413,13 +412,13 @@ class ControlFlowGraphBuilder { return popGraph() } - fun prepareForLocalClassMembers(members: Collection>) { + fun prepareForLocalClassMembers(members: Collection>) { members.forEachMember { enterToLocalClassesMembers[it.symbol] = lastNodes.topOrNull() } } - fun cleanAfterForLocalClassMembers(members: Collection>) { + fun cleanAfterForLocalClassMembers(members: Collection>) { members.forEachMember { enterToLocalClassesMembers.remove(it.symbol) } @@ -1362,7 +1361,7 @@ class ControlFlowGraphBuilder { // ----------------------------------- Utils ----------------------------------- - private inline fun Collection>.forEachMember(block: (FirSymbolOwner<*>) -> Unit) { + private inline fun Collection>.forEachMember(block: (FirDeclaration<*>) -> Unit) { for (member in this) { for (callableDeclaration in member.unwrap()) { block(callableDeclaration) @@ -1370,7 +1369,7 @@ class ControlFlowGraphBuilder { } } - private fun FirSymbolOwner<*>.unwrap(): List> = + private fun FirDeclaration<*>.unwrap(): List> = when (this) { is FirFunction<*>, is FirAnonymousInitializer -> listOf(this) is FirProperty -> listOfNotNull(this.getter, this.setter, this) @@ -1384,4 +1383,4 @@ class ControlFlowGraphBuilder { } -fun FirDeclaration?.isLocalClassOrAnonymousObject() = ((this as? FirRegularClass)?.isLocal == true) || this is FirAnonymousObject +fun FirDeclaration<*>?.isLocalClassOrAnonymousObject() = ((this as? FirRegularClass)?.isLocal == true) || this is FirAnonymousObject diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/util.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/util.kt index 7fb7da16dde..fe4cfe9b541 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/util.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/util.kt @@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.resolve.dfa import kotlinx.collections.immutable.PersistentMap import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.contracts.description.ConeBooleanConstantReference import org.jetbrains.kotlin.fir.contracts.description.ConeConstantReference +import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirThisReference @@ -95,7 +95,7 @@ internal val FirExpression.coneType: ConeKotlinType internal val FirElement.symbol: FirBasedSymbol<*>? get() = when (this) { is FirResolvable -> symbol - is FirSymbolOwner<*> -> symbol + is FirDeclaration<*> -> symbol is FirWhenSubjectExpression -> whenRef.value.subject?.symbol is FirSafeCallExpression -> regularQualifiedAccess.symbol else -> null diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession.kt index be0d8010fc9..43a7a2ce815 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirBuilderInferenceSession.kt @@ -273,4 +273,4 @@ class FirStubTypeTransformer( private val BUILDER_INFERENCE_ANNOTATION_CLASS_ID = ClassId.topLevel(BUILDER_INFERENCE_ANNOTATION_FQ_NAME) fun FirElement.hasBuilderInferenceAnnotation(): Boolean = - (this as? FirAnnotatedDeclaration)?.hasAnnotation(BUILDER_INFERENCE_ANNOTATION_CLASS_ID) == true + (this as? FirAnnotatedDeclaration<*>)?.hasAnnotation(BUILDER_INFERENCE_ANNOTATION_CLASS_ID) == true diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt index 4fb2e45eddc..bb6ed8ac2ad 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt @@ -41,10 +41,10 @@ abstract class FirProvider : FirSessionComponent { abstract fun getFirFilesByPackage(fqName: FqName): List @FirProviderInternals - abstract fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) + abstract fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) @FirProviderInternals - abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) + abstract fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) abstract fun getClassNamesInPackage(fqName: FqName): Set } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt index 17330e0369e..c78939fa1bc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/FirSymbolProvider.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors import org.jetbrains.kotlin.fir.scopes.getFunctions import org.jetbrains.kotlin.fir.scopes.getProperties import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType import org.jetbrains.kotlin.fir.types.FirTypeRef diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt index 078cb5cfb30..895734a8984 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt @@ -27,12 +27,12 @@ class FirLibrarySessionProvider( override fun getFirFilesByPackage(fqName: FqName): List = emptyList() @FirProviderInternals - override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) = shouldNotBeCalled() + override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) = shouldNotBeCalled() @FirProviderInternals - override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) = shouldNotBeCalled() + override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) = shouldNotBeCalled() override fun getClassNamesInPackage(fqName: FqName): Set = shouldNotBeCalled() private fun shouldNotBeCalled(): Nothing = error("Should not be called for FirLibrarySessionProvider") -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt index 2b6437baad6..d8bd47c5608 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt @@ -14,9 +14,9 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirProviderInternals import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider -import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor +import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -78,16 +78,16 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli } @FirProviderInternals - override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) { + override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) { klass.accept(FirRecorder, FirRecorderData(state, owner.file, session.nameConflictsTracker)) } @FirProviderInternals - override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) { + override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) { klass.accept(FirRecorder, FirRecorderData(state, owner.file, session.nameConflictsTracker)) } - private val FirAnnotatedDeclaration.file: FirFile + private val FirAnnotatedDeclaration<*>.file: FirFile get() = when (this) { is FirFile -> this is FirRegularClass -> getFirClassifierContainerFile(this.symbol.classId) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt index 0de9f9203b5..8a6127c53fb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt @@ -31,11 +31,10 @@ abstract class FirAbstractPhaseTransformer( file.replaceResolvePhase(transformerPhase) } - @Suppress("UNCHECKED_CAST") - return super.transformFile(file, data) as FirFile + return super.transformFile(file, data) } - override fun transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration { + override fun > transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration { if (declaration.resolvePhase < transformerPhase) { declaration.replaceResolvePhase(transformerPhase) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractTreeTransformerWithSuperTypes.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractTreeTransformerWithSuperTypes.kt index 60a5879b71b..68c4edaa38d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractTreeTransformerWithSuperTypes.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractTreeTransformerWithSuperTypes.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.expressions.FirStatement -import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor @@ -33,7 +32,7 @@ abstract class FirAbstractTreeTransformerWithSuperTypes( protected val scopes = mutableListOf() protected val towerScope = FirCompositeScope(scopes.asReversed()) - protected open fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = transformerPhase > firDeclaration.resolvePhase + protected open fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = transformerPhase > firDeclaration.resolvePhase protected inline fun withScopeCleanup(crossinline l: () -> T): T { val sizeBefore = scopes.size @@ -89,13 +88,13 @@ abstract class FirAbstractTreeTransformerWithSuperTypes( } } - protected fun FirMemberDeclaration.addTypeParametersScope() { + protected fun FirMemberDeclaration<*>.addTypeParametersScope() { if (typeParameters.isNotEmpty()) { scopes.add(FirMemberTypeParameterScope(this)) } } - open fun transformDeclarationContent(declaration: FirDeclaration, data: Any?): FirDeclaration { + open fun transformDeclarationContent(declaration: FirDeclaration<*>, data: Any?): FirDeclaration<*> { return transformElement(declaration, data) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt index 952484c15cf..e96f54b62db 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt @@ -15,13 +15,19 @@ import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedCallableReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference -import org.jetbrains.kotlin.fir.resolve.* -import org.jetbrains.kotlin.fir.resolve.calls.* +import org.jetbrains.kotlin.fir.resolve.calls.Candidate +import org.jetbrains.kotlin.fir.resolve.calls.FirErrorReferenceWithCandidate +import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate +import org.jetbrains.kotlin.fir.resolve.calls.varargElementType +import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef +import org.jetbrains.kotlin.fir.resolve.createFunctionalType import org.jetbrains.kotlin.fir.resolve.dfa.FirDataFlowAnalyzer import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeConstraintSystemHasContradiction import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeTypeParameterInQualifiedAccess +import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.inference.* +import org.jetbrains.kotlin.fir.resolve.propagateTypeFromQualifiedAccessAfterNullCheck import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirArrayOfCallTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.remapArgumentsWithVararg @@ -37,11 +43,15 @@ import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildStarProjection import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl -import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.resolve.calls.tower.isSuccess import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.addToStdlib.runIf +import kotlin.collections.component1 +import kotlin.collections.component2 class FirCallCompletionResultsWriterTransformer( override val session: FirSession, @@ -74,7 +84,7 @@ class FirCallCompletionResultsWriterTransformer( qualifiedAccessExpression: T, calleeReference: FirNamedReferenceWithCandidate ): T { val subCandidate = calleeReference.candidate - val declaration: FirDeclaration = subCandidate.symbol.fir as FirDeclaration + val declaration = subCandidate.symbol.fir val typeArguments = computeTypeArguments(qualifiedAccessExpression, subCandidate) val typeRef = if (declaration is FirTypedDeclaration) { val calculated = typeCalculator.tryCalculateReturnType(declaration) @@ -802,14 +812,14 @@ class FirDeclarationCompletionResultsWriter(private val finalSubstitutor: ConeSu return element } - override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): FirDeclaration { + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): FirStatement { simpleFunction.transformReturnTypeRef(this, data) simpleFunction.transformValueParameters(this, data) simpleFunction.transformReceiverTypeRef(this, data) return simpleFunction } - override fun transformProperty(property: FirProperty, data: Any?): FirDeclaration { + override fun transformProperty(property: FirProperty, data: Any?): FirStatement { property.transformGetter(this, data) property.transformSetter(this, data) property.transformReturnTypeRef(this, data) @@ -820,7 +830,7 @@ class FirDeclarationCompletionResultsWriter(private val finalSubstitutor: ConeSu override fun transformPropertyAccessor( propertyAccessor: FirPropertyAccessor, data: Any? - ): FirDeclaration { + ): FirStatement { propertyAccessor.transformReturnTypeRef(this, data) propertyAccessor.transformValueParameters(this, data) return propertyAccessor diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseCheckingPhaseManager.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseCheckingPhaseManager.kt index 011cd538b5d..c54ebded9d4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseCheckingPhaseManager.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirPhaseCheckingPhaseManager.kt @@ -6,14 +6,13 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirRenderer -import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol object FirPhaseCheckingPhaseManager : FirPhaseManager() { override fun ensureResolved(symbol: FirBasedSymbol<*>, requiredPhase: FirResolvePhase) { - val fir = symbol.fir as FirDeclaration + val fir = symbol.fir val availablePhase = fir.resolvePhase require(availablePhase >= requiredPhase) { "Expected at least $requiredPhase for $symbol but was $availablePhase\n{${fir.render(renderMode)}" diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSealedClassInheritorsProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSealedClassInheritorsProcessor.kt index 97bf9c24710..c602fbdfa9d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSealedClassInheritorsProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSealedClassInheritorsProcessor.kt @@ -20,7 +20,9 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.coneType -import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.ClassId class FirSealedClassInheritorsProcessor( @@ -78,7 +80,7 @@ class FirSealedClassInheritorsProcessor( return element } - override fun transformFile(file: FirFile, data: Any?): FirDeclaration { + override fun transformFile(file: FirFile, data: Any?): FirFile { return (file.transformChildren(this, data) as FirFile) } 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 f18533d4414..4630e715aa3 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 @@ -80,14 +80,14 @@ open class FirStatusResolveTransformer( designationMapForLocalClasses, scopeForLocalClass ) { - override fun FirDeclaration.needResolveMembers(): Boolean { + override fun FirDeclaration<*>.needResolveMembers(): Boolean { if (this is FirRegularClass) { return statusComputationSession[this] != StatusComputationSession.StatusComputationStatus.Computed } return true } - override fun FirDeclaration.needResolveNestedClassifiers(): Boolean { + override fun FirDeclaration<*>.needResolveNestedClassifiers(): Boolean { return true } @@ -112,7 +112,7 @@ open class FirStatusResolveTransformer( open class FirDesignatedStatusResolveTransformer( session: FirSession, scopeSession: ScopeSession, - private val designation: Iterator, + private val designation: Iterator>, private val targetClass: FirClassLikeDeclaration<*>, statusComputationSession: StatusComputationSession, designationMapForLocalClasses: Map, FirClassLikeDeclaration<*>?>, @@ -124,10 +124,10 @@ open class FirDesignatedStatusResolveTransformer( designationMapForLocalClasses, scopeForLocalClass ) { - private var currentElement: FirDeclaration? = null + private var currentElement: FirDeclaration<*>? = null private var classLocated = false - private fun shouldSkipClass(declaration: FirDeclaration): Boolean { + private fun shouldSkipClass(declaration: FirDeclaration<*>): Boolean { if (classLocated) return declaration != targetClass if (currentElement == null && designation.hasNext()) { currentElement = designation.next() @@ -142,11 +142,11 @@ open class FirDesignatedStatusResolveTransformer( return !result } - override fun FirDeclaration.needResolveMembers(): Boolean { + override fun FirDeclaration<*>.needResolveMembers(): Boolean { return classLocated } - override fun FirDeclaration.needResolveNestedClassifiers(): Boolean { + override fun FirDeclaration<*>.needResolveNestedClassifiers(): Boolean { return !classLocated } @@ -250,10 +250,10 @@ abstract class AbstractFirStatusResolveTransformer( protected val containingClass: FirClass<*>? get() = classes.lastOrNull() - protected abstract fun FirDeclaration.needResolveMembers(): Boolean - protected abstract fun FirDeclaration.needResolveNestedClassifiers(): Boolean + protected abstract fun FirDeclaration<*>.needResolveMembers(): Boolean + protected abstract fun FirDeclaration<*>.needResolveNestedClassifiers(): Boolean - protected open fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = transformerPhase > firDeclaration.resolvePhase + protected open fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = transformerPhase > firDeclaration.resolvePhase override fun transformFile(file: FirFile, data: FirResolvedDeclarationStatus?): FirFile { if (needReplacePhase(file)) { @@ -272,18 +272,18 @@ abstract class AbstractFirStatusResolveTransformer( protected inline fun storeClass( klass: FirClass<*>, - computeResult: () -> FirDeclaration - ): FirDeclaration { + computeResult: () -> FirDeclaration<*> + ): FirDeclaration<*> { classes += klass val result = computeResult() classes.removeAt(classes.lastIndex) return result } - override fun transformDeclaration( - declaration: FirDeclaration, + override fun > transformDeclaration( + declaration: FirDeclaration, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirDeclaration { if (needReplacePhase(declaration)) { declaration.replaceResolvePhase(transformerPhase) } @@ -307,10 +307,10 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformTypeAlias( typeAlias: FirTypeAlias, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirStatement { typeAlias.typeParameters.forEach { transformDeclaration(it, data) } typeAlias.transformStatus(this, statusResolver.resolveStatus(typeAlias, containingClass, isLocal = false)) - return transformDeclaration(typeAlias, data) + return transformDeclaration(typeAlias, data) as FirTypeAlias } abstract override fun transformRegularClass( @@ -327,9 +327,9 @@ abstract class AbstractFirStatusResolveTransformer( } open fun transformDeclarationContent( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirDeclaration<*> { val declarations = when (declaration) { is FirRegularClass -> declaration.declarations @@ -423,7 +423,7 @@ abstract class AbstractFirStatusResolveTransformer( klass = designationMapForLocalClasses[klass]?.takeIf { it !is FirAnonymousObject } ?: break } reverse() - } else buildList { + } else buildList> { val outerClasses = generateSequence(symbol.classId) { classId -> classId.outerClassId }.mapTo(mutableListOf()) { firProvider.getFirClassifierByFqName(it) } @@ -464,26 +464,26 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformConstructor( constructor: FirConstructor, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirStatement { constructor.transformStatus(this, statusResolver.resolveStatus(constructor, containingClass, isLocal = false)) - return transformDeclaration(constructor, data) + return transformDeclaration(constructor, data) as FirStatement } override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirStatement { if (needReplacePhase(simpleFunction)) { simpleFunction.replaceResolvePhase(transformerPhase) } simpleFunction.transformStatus(this, statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false)) - return transformDeclaration(simpleFunction, data) + return transformDeclaration(simpleFunction, data) as FirStatement } override fun transformProperty( property: FirProperty, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirStatement { if (needReplacePhase(property)) { property.replaceResolvePhase(transformerPhase) } @@ -498,17 +498,17 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformField( field: FirField, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirStatement { field.transformStatus(this, statusResolver.resolveStatus(field, containingClass, isLocal = false)) - return transformDeclaration(field, data) + return transformDeclaration(field, data) as FirField } override fun transformEnumEntry( enumEntry: FirEnumEntry, data: FirResolvedDeclarationStatus? - ): FirDeclaration { + ): FirStatement { enumEntry.transformStatus(this, statusResolver.resolveStatus(enumEntry, containingClass, isLocal = false)) - return transformDeclaration(enumEntry, data) + return transformDeclaration(enumEntry, data) as FirEnumEntry } override fun transformValueParameter( @@ -522,8 +522,8 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformTypeParameter( typeParameter: FirTypeParameter, data: FirResolvedDeclarationStatus? - ): FirDeclaration { - return transformDeclaration(typeParameter, data) + ): FirTypeParameterRef { + return transformDeclaration(typeParameter, data) as FirTypeParameter } override fun transformBlock(block: FirBlock, data: FirResolvedDeclarationStatus?): FirStatement { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt index c841015715b..6bb23812aa2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolver.kt @@ -38,7 +38,7 @@ class FirStatusResolver( } fun resolveStatus( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, containingClass: FirClass<*>?, containingProperty: FirProperty?, isLocal: Boolean @@ -130,7 +130,7 @@ class FirStatusResolver( } private inline fun resolveStatus( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, status: FirDeclarationStatus, containingClass: FirClass<*>?, containingProperty: FirProperty?, @@ -195,7 +195,7 @@ class FirStatusResolver( } private fun resolveVisibility( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, containingClass: FirClass<*>?, containingProperty: FirProperty?, overriddenStatuses: List @@ -219,7 +219,7 @@ class FirStatusResolver( } private fun resolveModality( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, containingClass: FirClass<*>?, ): Modality { return when (declaration) { @@ -255,7 +255,7 @@ private val > FirClass.modality: Modality? else -> error("Unknown kind of class: ${this::class}") } -private fun FirDeclaration.hasOwnBodyOrAccessorBody(): Boolean { +private fun FirDeclaration<*>.hasOwnBodyOrAccessorBody(): Boolean { return when (this) { is FirSimpleFunction -> this.body != null is FirProperty -> this.initializer != null || this.getter?.body != null || this.setter?.body != null @@ -264,4 +264,4 @@ private fun FirDeclaration.hasOwnBodyOrAccessorBody(): Boolean { } private object PublishedApiEffectiveVisibilityKey : FirDeclarationDataKey() -var FirDeclaration.publishedApiEffectiveVisibility: EffectiveVisibility? by FirDeclarationDataRegistry.data(PublishedApiEffectiveVisibilityKey) +var FirDeclaration<*>.publishedApiEffectiveVisibility: EffectiveVisibility? by FirDeclarationDataRegistry.data(PublishedApiEffectiveVisibilityKey) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index 5132baeb70d..c2e702d2c8a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -102,13 +102,13 @@ open class FirApplySupertypesTransformer( return element } - protected open fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = FirResolvePhase.SUPER_TYPES > firDeclaration.resolvePhase + protected open fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = FirResolvePhase.SUPER_TYPES > firDeclaration.resolvePhase - protected open fun transformDeclarationContent(declaration: FirDeclaration, data: Any?): FirDeclaration { - return declaration.transformChildren(this, null) as FirDeclaration + protected open fun transformDeclarationContent(declaration: FirDeclaration<*>, data: Any?): FirDeclaration<*> { + return declaration.transformChildren(this, null) as FirDeclaration<*> } - override fun transformFile(file: FirFile, data: Any?): FirDeclaration { + override fun transformFile(file: FirFile, data: Any?): FirFile { if (needReplacePhase(file)) { file.replaceResolvePhase(FirResolvePhase.SUPER_TYPES) } @@ -148,7 +148,7 @@ open class FirApplySupertypesTransformer( return status.supertypeRefs } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirDeclaration { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirStatement { if (typeAlias.expandedTypeRef is FirResolvedTypeRef) { if (needReplacePhase(typeAlias)) { typeAlias.replaceResolvePhase(FirResolvePhase.SUPER_TYPES) @@ -171,7 +171,7 @@ open class FirApplySupertypesTransformer( } private fun FirClassLikeDeclaration<*>.typeParametersScope(): FirScope? { - if (this !is FirMemberDeclaration || typeParameters.isEmpty()) return null + if (this !is FirMemberDeclaration<*> || typeParameters.isEmpty()) return null return FirMemberTypeParameterScope(this) } @@ -311,7 +311,7 @@ open class FirSupertypeResolverVisitor( return resolvedTypesRefs } - open fun visitDeclarationContent(declaration: FirDeclaration, data: Any?) { + open fun visitDeclarationContent(declaration: FirDeclaration<*>, data: Any?) { declaration.acceptChildren(this, null) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index 23b86517c1f..cc24b90b3ba 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirStatement -import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeCyclicTypeBound import org.jetbrains.kotlin.fir.scopes.FirScope @@ -79,21 +78,21 @@ open class FirTypeResolveTransformer( return resolveNestedClassesSupertypes(anonymousObject, data) } - override fun transformConstructor(constructor: FirConstructor, data: Any?): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: Any?): FirConstructor { return withScopeCleanup { constructor.addTypeParametersScope() transformDeclaration(constructor, data) - } + } as FirConstructor } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirDeclaration { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirTypeAlias { return withScopeCleanup { typeAlias.addTypeParametersScope() transformDeclaration(typeAlias, data) - } + } as FirTypeAlias } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Any?): FirDeclaration { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Any?): FirEnumEntry { if (needReplacePhase(enumEntry)) { enumEntry.replaceResolvePhase(FirResolvePhase.TYPES) } @@ -103,7 +102,7 @@ open class FirTypeResolveTransformer( return enumEntry } - override fun transformProperty(property: FirProperty, data: Any?): FirDeclaration { + override fun transformProperty(property: FirProperty, data: Any?): FirProperty { return withScopeCleanup { property.addTypeParametersScope() if (needReplacePhase(property)) { @@ -129,7 +128,7 @@ open class FirTypeResolveTransformer( } } - override fun transformField(field: FirField, data: Any?): FirDeclaration { + override fun transformField(field: FirField, data: Any?): FirField { return withScopeCleanup { if (needReplacePhase(field)) { field.replaceResolvePhase(FirResolvePhase.TYPES) @@ -139,13 +138,13 @@ open class FirTypeResolveTransformer( } } - override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): FirDeclaration { + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): FirSimpleFunction { return withScopeCleanup { simpleFunction.addTypeParametersScope() transformDeclaration(simpleFunction, data).also { unboundCyclesInTypeParametersSupertypes(it as FirTypeParametersOwner) } - } + } as FirSimpleFunction } private fun unboundCyclesInTypeParametersSupertypes(typeParametersOwner: FirTypeParameterRefsOwner) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt index 5e44b1e810d..53dc9ecfda0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.resolve.fullyExpandedType @@ -23,12 +22,12 @@ fun FirBasedSymbol<*>.ensureResolved( // TODO: Decide which one session should be used and probably get rid of the parameter if use-site session is not needed @Suppress("UNUSED_PARAMETER") useSiteSession: FirSession, ) { - val session = (fir as FirDeclaration).moduleData.session + val session = fir.moduleData.session val phaseManager = session.phaseManager phaseManager.ensureResolved(this, requiredPhase) } -fun FirSymbolOwner<*>.ensureResolved( +fun FirDeclaration<*>.ensureResolved( requiredPhase: FirResolvePhase, useSiteSession: FirSession, ) { @@ -38,7 +37,6 @@ fun FirSymbolOwner<*>.ensureResolved( fun FirBasedSymbol<*>.ensureResolvedForCalls( useSiteSession: FirSession, ) { - val fir = fir as FirDeclaration if (fir.resolvePhase >= FirResolvePhase.DECLARATIONS) return // val requiredPhase = when (fir) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt index 11d1b219126..d53196a57f2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt @@ -6,19 +6,19 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration -import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef interface ReturnTypeCalculator { - fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef + fun tryCalculateReturnType(declaration: FirTypedDeclaration<*>): FirResolvedTypeRef } class ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator { - override fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef { + override fun tryCalculateReturnType(declaration: FirTypedDeclaration<*>): FirResolvedTypeRef { val returnTypeRef = declaration.returnTypeRef if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef if (declaration.origin.fromSupertypes) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt index c5718751af9..5ca7533290c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt @@ -98,7 +98,7 @@ internal fun FirValueParameter.transformVarargTypeToArrayType() { } } -internal fun FirTypedDeclaration.transformTypeToArrayType() { +internal fun FirTypedDeclaration<*>.transformTypeToArrayType() { val returnTypeRef = this.returnTypeRef require(returnTypeRef is FirResolvedTypeRef) // If the delegated type is already resolved, it means we have already created a resolved array type for this vararg type declaration. diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt index adfe5bc437d..fb0ca2a2c16 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt @@ -5,8 +5,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.persistentListOf import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.PrivateForInline @@ -73,12 +71,12 @@ class BodyResolveContext( get() = towerDataContextsForClassParts.towerDataContextForCallableReferences @set:PrivateForInline - var containers: MutableList = mutableListOf() + var containers: MutableList> = mutableListOf() @set:PrivateForInline var containingClass: FirRegularClass? = null - val containerIfAny: FirDeclaration? + val containerIfAny: FirDeclaration<*>? get() = containers.lastOrNull() @set:PrivateForInline @@ -107,7 +105,7 @@ class BodyResolveContext( } @PrivateForInline - inline fun withContainer(declaration: FirDeclaration, f: () -> T): T { + inline fun withContainer(declaration: FirDeclaration<*>, f: () -> T): T { containers.add(declaration) return try { f() @@ -222,7 +220,7 @@ class BodyResolveContext( } @PrivateForInline - inline fun withTypeParametersOf(declaration: FirMemberDeclaration, l: () -> T): T { + inline fun withTypeParametersOf(declaration: FirMemberDeclaration<*>, l: () -> T): T { if (declaration.typeParameters.isEmpty()) return l() val scope = FirMemberTypeParameterScope(declaration) return withTowerDataCleanup { @@ -231,7 +229,7 @@ class BodyResolveContext( } } - private fun FirMemberDeclaration.typeParameterScope(): FirMemberTypeParameterScope? { + private fun FirMemberDeclaration<*>.typeParameterScope(): FirMemberTypeParameterScope? { if (typeParameters.isEmpty()) return null return FirMemberTypeParameterScope(this) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt index c686ceb4ccc..7f04dd6059e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirAbstractBodyResolveTransformer.kt @@ -43,9 +43,9 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb final override val session: FirSession get() = components.session - protected open fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = transformerPhase > firDeclaration.resolvePhase + protected open fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = transformerPhase > firDeclaration.resolvePhase - fun replaceDeclarationResolvePhaseIfNeeded(firDeclaration: FirDeclaration, newResolvePhase: FirResolvePhase) { + fun replaceDeclarationResolvePhaseIfNeeded(firDeclaration: FirDeclaration<*>, newResolvePhase: FirResolvePhase) { if (needReplacePhase(firDeclaration) && newResolvePhase > firDeclaration.resolvePhase) { firDeclaration.replaceResolvePhase(newResolvePhase) } @@ -100,9 +100,9 @@ abstract class FirAbstractBodyResolveTransformer(phase: FirResolvePhase) : FirAb override val file: FirFile get() = context.file override val implicitReceiverStack: ImplicitReceiverStack get() = context.implicitReceiverStack - override val containingDeclarations: List get() = context.containers + override val containingDeclarations: List> get() = context.containers override val returnTypeCalculator: ReturnTypeCalculator get() = context.returnTypeCalculator - override val container: FirDeclaration get() = context.containerIfAny!! + override val container: FirDeclaration<*> get() = context.containerIfAny!! override val noExpectedType: FirTypeRef = buildImplicitTypeRef() override val symbolProvider: FirSymbolProvider = session.symbolProvider diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt index f56c44d97a8..dda1d9a5527 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt @@ -231,13 +231,13 @@ open class FirBodyResolveTransformer( // ------------------------------------- Declarations ------------------------------------- - override fun transformDeclaration(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration { + override fun > transformDeclaration(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration { return declarationsTransformer.transformDeclaration(declaration, data) } open fun transformDeclarationContent( - declaration: FirDeclaration, data: ResolutionMode - ): FirDeclaration { + declaration: FirDeclaration<*>, data: ResolutionMode + ): FirDeclaration<*> { return transformElement(declaration, data) } @@ -248,7 +248,7 @@ open class FirBodyResolveTransformer( return declarationsTransformer.transformDeclarationStatus(declarationStatus, data) } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirDeclaration { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry { return declarationsTransformer.transformEnumEntry(enumEntry, data) } @@ -256,7 +256,7 @@ open class FirBodyResolveTransformer( return declarationsTransformer.transformProperty(property, data) } - override fun transformField(field: FirField, data: ResolutionMode): FirDeclaration { + override fun transformField(field: FirField, data: ResolutionMode): FirField { return declarationsTransformer.transformField(field, data) } @@ -292,14 +292,14 @@ open class FirBodyResolveTransformer( return declarationsTransformer.transformFunction(function, data) } - override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { return declarationsTransformer.transformConstructor(constructor, data) } override fun transformAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: ResolutionMode - ): FirDeclaration { + ): FirAnonymousInitializer { return declarationsTransformer.transformAnonymousInitializer(anonymousInitializer, data) } @@ -321,7 +321,7 @@ open class FirBodyResolveTransformer( return declarationsTransformer.transformValueParameter(valueParameter, data) } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirDeclaration { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias { return declarationsTransformer.transformTypeAlias(typeAlias, data) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index dc14eba2c0a..e2152682ac9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -19,14 +19,17 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildReturnExpression import org.jetbrains.kotlin.fir.expressions.builder.buildUnitExpression import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference -import org.jetbrains.kotlin.fir.resolve.* +import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate +import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef import org.jetbrains.kotlin.fir.resolve.dfa.FirControlFlowGraphReferenceImpl import org.jetbrains.kotlin.fir.resolve.dfa.unwrapSmartcastExpression import org.jetbrains.kotlin.fir.resolve.inference.extractLambdaInfoFromFunctionalType import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType +import org.jetbrains.kotlin.fir.resolve.mode import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.* +import org.jetbrains.kotlin.fir.resolve.withExpectedType import org.jetbrains.kotlin.fir.scopes.impl.FirMemberTypeParameterScope import org.jetbrains.kotlin.fir.symbols.constructStarProjectedType import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol @@ -35,14 +38,16 @@ import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef -import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.Name open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) : FirPartialBodyResolveTransformer(transformer) { private val statusResolver: FirStatusResolver = FirStatusResolver(session, scopeSession) - private fun FirDeclaration.visibilityForApproximation(): Visibility { - if (this !is FirMemberDeclaration) return Visibilities.Local + private fun FirDeclaration<*>.visibilityForApproximation(): Visibility { + if (this !is FirMemberDeclaration<*>) return Visibilities.Local val container = context.containers.getOrNull(context.containers.size - 2) val containerVisibility = if (container == null) Visibilities.Public @@ -61,9 +66,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } } - private fun transformDeclarationContent( - declaration: FirDeclaration, data: ResolutionMode - ): FirDeclaration { + private fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> { transformer.firTowerDataContextCollector?.addDeclarationContext(declaration, context.towerDataContext) transformer.replaceDeclarationResolvePhaseIfNeeded(declaration, transformerPhase) return transformer.transformDeclarationContent(declaration, data) @@ -87,20 +90,20 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } } - protected fun createTypeParameterScope(declaration: FirMemberDeclaration): FirMemberTypeParameterScope? { + protected fun createTypeParameterScope(declaration: FirMemberDeclaration<*>): FirMemberTypeParameterScope? { if (declaration.typeParameters.isEmpty()) return null doTransformTypeParameters(declaration) return FirMemberTypeParameterScope(declaration) } - private fun doTransformTypeParameters(declaration: FirMemberDeclaration) { + private fun doTransformTypeParameters(declaration: FirMemberDeclaration<*>) { for (typeParameter in declaration.typeParameters) { (typeParameter as? FirTypeParameter)?.let { transformer.replaceDeclarationResolvePhaseIfNeeded(it, FirResolvePhase.STATUS) } typeParameter.transformChildren(transformer, ResolutionMode.ContextIndependent) } } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirDeclaration { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry { if (enumEntry.resolvePhase == transformerPhase) return enumEntry transformer.replaceDeclarationResolvePhaseIfNeeded(enumEntry, transformerPhase) return context.forEnumEntry { @@ -109,7 +112,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } override fun transformProperty(property: FirProperty, data: ResolutionMode): FirProperty { - require(property !is FirSyntheticProperty) { "Synthetic properties should not be processed by body transfromers" } + require(property !is FirSyntheticProperty) { "Synthetic properties should not be processed by body transformers" } if (property.isLocal) { prepareSignatureForBodyResolve(property) @@ -156,7 +159,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } } - override fun transformField(field: FirField, data: ResolutionMode): FirDeclaration { + override fun transformField(field: FirField, data: ResolutionMode): FirField { val returnTypeRef = field.returnTypeRef if (implicitTypeOnly) return field if (field.resolvePhase == FirResolvePhase.BODY_RESOLVE || field.resolvePhase == transformerPhase) { @@ -336,7 +339,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } } - private fun FirDeclaration.resolveStatus( + private fun FirDeclaration<*>.resolveStatus( containingClass: FirClass<*>? = null, containingProperty: FirProperty? = null, ): FirDeclarationStatus { @@ -364,7 +367,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor return doTransformRegularClass(regularClass, data) } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirDeclaration { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias { if (typeAlias.isLocal && typeAlias !in context.targetedLocalClasses) { return typeAlias.runAllPhasesForLocalClass( transformer, @@ -546,7 +549,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } as FirStatement } - override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { if (implicitTypeOnly) return constructor val container = context.containerIfAny as? FirRegularClass if (constructor.isPrimary && container?.classKind == ClassKind.ANNOTATION_CLASS) { @@ -588,7 +591,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor override fun transformAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: ResolutionMode - ): FirDeclaration { + ): FirAnonymousInitializer { if (implicitTypeOnly) return anonymousInitializer dataFlowAnalyzer.enterInitBlock(anonymousInitializer) return context.withAnonymousInitializer(anonymousInitializer) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt index af14a3de2fb..83d471ec4d5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt @@ -13,7 +13,10 @@ import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.firProvider -import org.jetbrains.kotlin.fir.resolve.transformers.* +import org.jetbrains.kotlin.fir.resolve.transformers.AdapterForResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor +import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator +import org.jetbrains.kotlin.fir.resolve.transformers.TransformImplicitType import org.jetbrains.kotlin.fir.resolve.transformers.contracts.runContractResolveForLocalClass import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol @@ -198,7 +201,7 @@ private class ReturnTypeCalculatorWithJump( var outerBodyResolveContext: BodyResolveContext? = null - override fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef { + override fun tryCalculateReturnType(declaration: FirTypedDeclaration<*>): FirResolvedTypeRef { if (declaration is FirValueParameter && declaration.returnTypeRef is FirImplicitTypeRef) { // TODO? declaration.transformReturnTypeRef( @@ -305,9 +308,9 @@ open class FirDesignatedBodyResolveTransformerForReturnTypeCalculator( ) { var lastResult: FirElement? = null - override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration { + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> { if (designation.hasNext()) { - val result = designation.next().transform(this, data) + val result = designation.next().transform, ResolutionMode>(this, data) if (!designation.hasNext() && lastResult == null) { lastResult = result } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirTowerDataContextCollector.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirTowerDataContextCollector.kt index a421626154a..b2a617d55e7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirTowerDataContextCollector.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirTowerDataContextCollector.kt @@ -16,5 +16,5 @@ import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext interface FirTowerDataContextCollector { fun addFileContext(file: FirFile, context: FirTowerDataContext) fun addStatementContext(statement: FirStatement, context: FirTowerDataContext) - fun addDeclarationContext(declaration: FirDeclaration, context: FirTowerDataContext) -} \ No newline at end of file + fun addDeclarationContext(declaration: FirDeclaration<*>, context: FirTowerDataContext) +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt index 32a3a770148..e38f4fad0a9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/LocalClassesNavigation.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve -import kotlinx.collections.immutable.PersistentList -import kotlinx.collections.immutable.persistentListOf import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor @@ -17,7 +14,7 @@ import org.jetbrains.kotlin.utils.keysToMap class LocalClassesNavigationInfo( val parentForClass: Map, FirClassLikeDeclaration<*>?>, private val parentClassForFunction: Map, FirClassLikeDeclaration<*>>, - val allMembers: List> + val allMembers: List> ) { val designationMap: Map, List>> by lazy { parentClassForFunction.keys.keysToMap { @@ -48,7 +45,7 @@ fun FirClassLikeDeclaration<*>.collectLocalClassesNavigationInfo(): LocalClasses private class NavigationInfoVisitor : FirDefaultVisitor() { val resultingMap: MutableMap, FirClassLikeDeclaration<*>> = mutableMapOf() val parentForClass: MutableMap, FirClassLikeDeclaration<*>?> = mutableMapOf() - val allMembers: MutableList> = mutableListOf() + val allMembers: MutableList> = mutableListOf() private val currentPath: MutableList> = mutableListOf() override fun visitElement(element: FirElement, data: Any?) {} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/ConeEffectExtractor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/ConeEffectExtractor.kt index c90d8318c2c..f2a1242c32d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/ConeEffectExtractor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/ConeEffectExtractor.kt @@ -8,9 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.transformers.contracts import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.contracts.description.* import org.jetbrains.kotlin.fir.declarations.FirContractDescriptionOwner +import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.* @@ -150,7 +150,7 @@ class ConeEffectExtractor( } } - private fun FirContractDescriptionOwner.isAccessorOf(declaration: FirSymbolOwner<*>): Boolean { + private fun FirContractDescriptionOwner.isAccessorOf(declaration: FirDeclaration<*>): Boolean { return declaration is FirProperty && (declaration.getter == this || declaration.setter == this) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt index 1581d978edc..7a5c0876306 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt @@ -101,7 +101,7 @@ open class FirContractResolveTransformer( setter?.updatePhase() } - override fun transformField(field: FirField, data: ResolutionMode): FirDeclaration { + override fun transformField(field: FirField, data: ResolutionMode): FirField { field.updatePhase() return field } @@ -251,17 +251,17 @@ open class FirContractResolveTransformer( override fun transformAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: ResolutionMode - ): FirDeclaration { + ): FirAnonymousInitializer { anonymousInitializer.updatePhase() return anonymousInitializer } - override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { constructor.updatePhase() return constructor } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirDeclaration { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: ResolutionMode): FirEnumEntry { enumEntry.updatePhase() return enumEntry } @@ -275,7 +275,7 @@ open class FirContractResolveTransformer( private val FirContractDescriptionOwner.hasContractToResolve: Boolean get() = contractDescription is FirLegacyRawContractDescription || contractDescription is FirRawContractDescription - private fun FirDeclaration.updatePhase() { + private fun FirDeclaration<*>.updatePhase() { transformer.replaceDeclarationResolvePhaseIfNeeded(this, FirResolvePhase.CONTRACTS) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformerAdapter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformerAdapter.kt index 80b5dfddd95..8062e276b59 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformerAdapter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformerAdapter.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers.contracts import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration -import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession @@ -31,7 +30,7 @@ class FirContractResolveTransformerAdapter(session: FirSession, scopeSession: Sc return element } - override fun transformFile(file: FirFile, data: Any?): FirDeclaration { + override fun transformFile(file: FirFile, data: Any?): FirFile { return file.transform(transformer, ResolutionMode.ContextIndependent) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAbstractAnnotationResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAbstractAnnotationResolveTransformer.kt index 83561d224a2..509ba998354 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAbstractAnnotationResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAbstractAnnotationResolveTransformer.kt @@ -26,16 +26,16 @@ internal abstract class FirAbstractAnnotationResolveTransformer( protected lateinit var scope: FirScope - override fun transformFile(file: FirFile, data: D): FirDeclaration { + override fun transformFile(file: FirFile, data: D): FirFile { scope = FirCompositeScope(createImportingScopes(file, session, scopeSession, useCaching = false)) val state = beforeChildren(file) file.transformDeclarations(this, data) afterChildren(state) - return transformAnnotatedDeclaration(file, data) + return transformAnnotatedDeclaration(file, data) as FirFile } - override fun transformProperty(property: FirProperty, data: D): FirDeclaration { - return transformAnnotatedDeclaration(property, data) + override fun transformProperty(property: FirProperty, data: D): FirProperty { + return transformAnnotatedDeclaration(property, data) as FirProperty } override fun transformRegularClass( @@ -55,23 +55,23 @@ internal abstract class FirAbstractAnnotationResolveTransformer( override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, data: D - ): FirDeclaration { + ): FirSimpleFunction { return transformAnnotatedDeclaration(simpleFunction, data).also { val state = beforeChildren(simpleFunction) simpleFunction.transformValueParameters(this, data) afterChildren(state) - } + } as FirSimpleFunction } override fun transformConstructor( constructor: FirConstructor, data: D - ): FirDeclaration { + ): FirConstructor { return transformAnnotatedDeclaration(constructor, data).also { val state = beforeChildren(constructor) constructor.transformValueParameters(this, data) afterChildren(state) - } + } as FirConstructor } override fun transformValueParameter( @@ -82,8 +82,8 @@ internal abstract class FirAbstractAnnotationResolveTransformer( return transformAnnotatedDeclaration(valueParameter, data) as FirStatement } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): FirDeclaration { - return transformAnnotatedDeclaration(typeAlias, data) + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): FirTypeAlias { + return transformAnnotatedDeclaration(typeAlias, data) as FirTypeAlias } override fun transformTypeRef(typeRef: FirTypeRef, data: D): FirTypeRef { @@ -91,12 +91,12 @@ internal abstract class FirAbstractAnnotationResolveTransformer( return transformAnnotationContainer(typeRef, data) as FirTypeRef } - override fun transformAnnotatedDeclaration( - annotatedDeclaration: FirAnnotatedDeclaration, + override fun > transformAnnotatedDeclaration( + annotatedDeclaration: FirAnnotatedDeclaration, data: D - ): FirDeclaration { + ): FirAnnotatedDeclaration { @Suppress("UNCHECKED_CAST") - return transformAnnotationContainer(annotatedDeclaration, data) as FirDeclaration + return transformAnnotationContainer(annotatedDeclaration, data) as FirAnnotatedDeclaration } override fun transformAnnotationContainer( @@ -110,7 +110,7 @@ internal abstract class FirAbstractAnnotationResolveTransformer( return element } - protected open fun beforeChildren(declaration: FirAnnotatedDeclaration): S? { + protected open fun beforeChildren(declaration: FirAnnotatedDeclaration<*>): S? { return null } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveProcessor.kt index ce3cbaf3d1f..df19e9c7338 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveProcessor.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers.plugin import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider import org.jetbrains.kotlin.fir.extensions.registeredPluginAnnotations @@ -35,8 +34,8 @@ class FirAnnotationArgumentsResolveTransformerAdapter(session: FirSession, scope return element } - override fun transformFile(file: FirFile, data: Any?): FirDeclaration { + override fun transformFile(file: FirFile, data: Any?): FirFile { if (!hasAnnotations || !predicateBasedProvider.fileHasPluginAnnotations(file)) return file return file.transform(transformer, ResolutionMode.ContextIndependent) } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt index ef4537053e0..b1e00909511 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt @@ -56,7 +56,7 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations( override fun transformAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, data: ResolutionMode - ): FirDeclaration { + ): FirAnonymousInitializer { return anonymousInitializer } @@ -67,7 +67,7 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations( return simpleFunction.transformAnnotations(this, data) } - override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { return constructor.transformAnnotations(this, data) } @@ -85,7 +85,7 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations( override fun transformPropertyAccessor( propertyAccessor: FirPropertyAccessor, data: ResolutionMode - ): FirDeclaration { + ): FirPropertyAccessor { propertyAccessor.transformAnnotations(this, data) return propertyAccessor } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalClassGenerationProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalClassGenerationProcessor.kt index 0c17a548ff3..5d250a4eea5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalClassGenerationProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalClassGenerationProcessor.kt @@ -10,7 +10,10 @@ import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.addDeclaration -import org.jetbrains.kotlin.fir.extensions.* +import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension +import org.jetbrains.kotlin.fir.extensions.declarationGenerators +import org.jetbrains.kotlin.fir.extensions.extensionService +import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.providers.FirProviderInternals @@ -34,7 +37,7 @@ class FirGlobalClassGenerationProcessor( } private fun generateClasses( - declarations: List>>, + declarations: List, List>>>, extension: FirDeclarationGenerationExtension, ): List { val newClasses = mutableListOf() @@ -47,8 +50,8 @@ class FirGlobalClassGenerationProcessor( @OptIn(FirProviderInternals::class) private fun generateClass( extension: FirDeclarationGenerationExtension, - declaration: FirAnnotatedDeclaration, - owners: List, + declaration: FirAnnotatedDeclaration<*>, + owners: List>, newClasses: MutableList ) { val generatedClasses = extension.generateClasses(declaration, owners) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalExtensionStatusProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalExtensionStatusProcessor.kt index c0abbe894db..d247e6b6b4c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalExtensionStatusProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirGlobalExtensionStatusProcessor.kt @@ -30,7 +30,7 @@ class FirGlobalExtensionStatusProcessor( val declarations = provider.getSymbolsWithOwnersByPredicate(extension.predicate) for ((declaration, owners) in declarations) { // TODO: maybe replace with visitor? - if (declaration is FirMemberDeclaration) { + if (declaration is FirMemberDeclaration<*>) { val newStatus = extension.transformStatus(declaration, owners, declaration.status) declaration.transformStatus(ReplaceStatus, newStatus) } @@ -49,7 +49,7 @@ class FirTransformerBasedExtensionStatusProcessor( private val extensions = session.extensionService.statusTransformerExtensions private val predicateBasedProvider = session.predicateBasedProvider - private fun FirMemberDeclaration.updateStatus() { + private fun FirMemberDeclaration<*>.updateStatus() { if (extensions.isEmpty()) return val owners = predicateBasedProvider.getOwnersOfDeclaration(this) requireNotNull(owners) @@ -64,7 +64,7 @@ class FirTransformerBasedExtensionStatusProcessor( return element } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): FirDeclaration { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): FirTypeAlias { typeAlias.updateStatus() return typeAlias } @@ -75,29 +75,29 @@ class FirTransformerBasedExtensionStatusProcessor( return regularClass } - override fun transformConstructor(constructor: FirConstructor, data: Nothing?): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: Nothing?): FirConstructor { constructor.updateStatus() return constructor } - override fun transformProperty(property: FirProperty, data: Nothing?): FirDeclaration { + override fun transformProperty(property: FirProperty, data: Nothing?): FirProperty { property.updateStatus() property.transformGetter(this, data) property.transformSetter(this, data) return property } - override fun transformField(field: FirField, data: Nothing?): FirDeclaration { + override fun transformField(field: FirField, data: Nothing?): FirField { field.updateStatus() return field } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): FirDeclaration { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): FirEnumEntry { enumEntry.updateStatus() return enumEntry } - override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): FirDeclaration { + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): FirSimpleFunction { simpleFunction.updateStatus() return simpleFunction } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt index 66b57fb916e..ed92bcdf9da 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt @@ -12,7 +12,10 @@ import kotlinx.collections.immutable.persistentListOf import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.extensions.* @@ -82,22 +85,22 @@ private class FirPartialImportResolveTransformer( private class FirAnnotationResolveTransformer( session: FirSession, scopeSession: ScopeSession -) : FirAbstractAnnotationResolveTransformer, PersistentList>(session, scopeSession) { +) : FirAbstractAnnotationResolveTransformer, PersistentList>>(session, scopeSession) { var metaAnnotations: Set = emptySet() private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer( session, errorTypeAsResolved = false ) - private var owners: PersistentList = persistentListOf() + private var owners: PersistentList> = persistentListOf() - override fun beforeChildren(declaration: FirAnnotatedDeclaration): PersistentList? { + override fun beforeChildren(declaration: FirAnnotatedDeclaration<*>): PersistentList> { val current = owners owners = owners.add(declaration) return current } - override fun afterChildren(state: PersistentList?) { + override fun afterChildren(state: PersistentList>?) { requireNotNull(state) owners = state } @@ -123,10 +126,10 @@ private class FirAnnotationResolveTransformer( } } - override fun transformAnnotatedDeclaration( - annotatedDeclaration: FirAnnotatedDeclaration, + override fun > transformAnnotatedDeclaration( + annotatedDeclaration: FirAnnotatedDeclaration, data: Multimap - ): FirDeclaration { + ): FirAnnotatedDeclaration { return super.transformAnnotatedDeclaration(annotatedDeclaration, data).also { session.predicateBasedProvider.registerAnnotatedDeclaration(annotatedDeclaration, owners) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt index 5079609b074..12577023982 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/GeneratedClassIndex.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirPluginKey import org.jetbrains.kotlin.fir.declarations.FirRegularClass -data class GeneratedClass(val klass: FirRegularClass, val owner: FirAnnotatedDeclaration) +data class GeneratedClass(val klass: FirRegularClass, val owner: FirAnnotatedDeclaration<*>) abstract class GeneratedClassIndex : FirSessionComponent { companion object { @@ -23,7 +23,7 @@ abstract class GeneratedClassIndex : FirSessionComponent { } } - abstract fun registerClass(klass: FirRegularClass, owner: FirAnnotatedDeclaration) + abstract fun registerClass(klass: FirRegularClass, owner: FirAnnotatedDeclaration<*>) abstract operator fun get(key: FirPluginKey): List } @@ -33,7 +33,7 @@ val FirSession.generatedClassIndex: GeneratedClassIndex by FirSession.sessionCom private class GeneratedClassIndexImpl : GeneratedClassIndex() { private val index: ArrayListMultimap = ArrayListMultimap.create() - override fun registerClass(klass: FirRegularClass, owner: FirAnnotatedDeclaration) { + override fun registerClass(klass: FirRegularClass, owner: FirAnnotatedDeclaration<*>) { val key = (klass.origin as FirDeclarationOrigin.Plugin).key index.put(key, GeneratedClass(klass, owner)) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FakeOverrideTypeCalculator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FakeOverrideTypeCalculator.kt index 4e5e9bff7e1..098afdeba2b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FakeOverrideTypeCalculator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/FakeOverrideTypeCalculator.kt @@ -16,16 +16,16 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef abstract class FakeOverrideTypeCalculator { - abstract fun computeReturnType(declaration: FirTypedDeclaration): FirTypeRef + abstract fun computeReturnType(declaration: FirTypedDeclaration<*>): FirTypeRef object DoNothing : FakeOverrideTypeCalculator() { - override fun computeReturnType(declaration: FirTypedDeclaration): FirTypeRef { + override fun computeReturnType(declaration: FirTypedDeclaration<*>): FirTypeRef { return declaration.returnTypeRef } } object Forced : FakeOverrideTypeCalculator() { - override fun computeReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef { + override fun computeReturnType(declaration: FirTypedDeclaration<*>): FirResolvedTypeRef { (declaration.returnTypeRef as? FirResolvedTypeRef)?.let { return it } val (substitutor, baseSymbol) = declaration.attributes.fakeOverrideSubstitution ?: error("") val baseDeclaration = baseSymbol.fir as FirTypedDeclaration diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt index f24a06b31aa..87d3beb3b2f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt @@ -31,7 +31,7 @@ enum class FirImportingScopeFilter { fun check(symbol: FirClassLikeSymbol<*>, session: FirSession): Boolean { if (this == ALL) return true // TODO: also check DeprecationLevel.HIDDEN and required Kotlin version - val fir = symbol.fir as? FirMemberDeclaration ?: return false + val fir = symbol.fir as? FirMemberDeclaration<*> ?: return false val isVisible = when (fir.status.visibility) { // When importing from the same module, status may be unknown because the status resolver depends on super types // to determine visibility for functions, so it may not have finished yet. Since we only care about classes, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberTypeParameterScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberTypeParameterScope.kt index 4fb94857fb8..76c8fe7f7d7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberTypeParameterScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirMemberTypeParameterScope.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.scopes.FirTypeParameterScope import org.jetbrains.kotlin.name.Name -class FirMemberTypeParameterScope(callableMember: FirMemberDeclaration) : FirTypeParameterScope() { +class FirMemberTypeParameterScope(callableMember: FirMemberDeclaration<*>) : FirTypeParameterScope() { override val typeParameters: Map> = callableMember.typeParameters.filterIsInstance().groupBy { it.name } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirScopeWithFakeOverrideTypeCalculator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirScopeWithFakeOverrideTypeCalculator.kt index e7990f762e3..4f42f4736ed 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirScopeWithFakeOverrideTypeCalculator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirScopeWithFakeOverrideTypeCalculator.kt @@ -74,7 +74,7 @@ class FirScopeWithFakeOverrideTypeCalculator( return delegate.getClassifierNames() } - private fun updateReturnType(declaration: FirTypedDeclaration) { + private fun updateReturnType(declaration: FirTypedDeclaration<*>) { if (declaration !is FirCallableMemberDeclaration<*>) return if (declaration.isSubstitutionOverride || declaration.isIntersectionOverride) { fakeOverrideTypeCalculator.computeReturnType(declaration) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt index 47c25d39dd9..2827a2f88e3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTypeIntersectionScope.kt @@ -21,8 +21,6 @@ import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.AbstractTypeCheckerContext -import java.util.* -import kotlin.collections.HashSet class FirTypeIntersectionScope private constructor( session: FirSession, @@ -98,7 +96,7 @@ class FirTypeIntersectionScope private constructor( val maxByVisibility = findMemberWithMaxVisibility(allMembersWithScope) val extractBothWaysWithPrivate = extractBothWaysOverridable(maxByVisibility, allMembersWithScope) val extractedOverrides = extractBothWaysWithPrivate.filterNotTo(mutableListOf()) { - Visibilities.isPrivate((it.member.fir as FirMemberDeclaration).visibility) + Visibilities.isPrivate((it.member.fir as FirMemberDeclaration<*>).visibility) }.takeIf { it.isNotEmpty() } ?: extractBothWaysWithPrivate val baseMembersForIntersection = extractedOverrides.calcBaseMembersForIntersectionOverride() if (baseMembersForIntersection.size > 1) { @@ -189,7 +187,7 @@ class FirTypeIntersectionScope private constructor( var hasAbstract = false for ((member) in extractedOverridden) { - when ((member.fir as FirMemberDeclaration).modality) { + when ((member.fir as FirMemberDeclaration<*>).modality) { Modality.FINAL -> return Modality.FINAL Modality.SEALED -> { // Members should not be sealed. But, that will be reported as WRONG_MODIFIER_TARGET, and here we shouldn't raise an @@ -220,7 +218,7 @@ class FirTypeIntersectionScope private constructor( val realOverridden = extractedOverridden.flatMap { realOverridden(it.member, it.baseScope, processDirectOverridden) } val filteredOverridden = filterOutOverridden(realOverridden, processDirectOverridden) - return filteredOverridden.minOf { (it.member.fir as FirMemberDeclaration).modality ?: Modality.ABSTRACT } + return filteredOverridden.minOf { (it.member.fir as FirMemberDeclaration<*>).modality ?: Modality.ABSTRACT } } private fun > realOverridden( @@ -298,7 +296,7 @@ class FirTypeIntersectionScope private constructor( ): Visibility { var maxVisibility: Visibility = Visibilities.Private for ((override) in extractedOverrides) { - val visibility = (override.fir as FirMemberDeclaration).visibility + val visibility = (override.fir as FirMemberDeclaration<*>).visibility // TODO: There is more complex logic at org.jetbrains.kotlin.resolve.OverridingUtil.resolveUnknownVisibilityForMember // TODO: and org.jetbrains.kotlin.resolve.OverridingUtil.findMaxVisibility val compare = Visibilities.compare(visibility, maxVisibility) ?: return Visibilities.DEFAULT_VISIBILITY diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/FirSymbolOwner.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/FirSymbolOwner.kt deleted file mode 100644 index 032b2b46ffa..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/FirSymbolOwner.kt +++ /dev/null @@ -1,26 +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 - -import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.visitors.* - -/* - * This file was generated automatically - * DO NOT MODIFY IT MANUALLY - */ - -interface FirSymbolOwner : FirElement where E : FirSymbolOwner, E : FirDeclaration { - override val source: FirSourceElement? - val symbol: FirBasedSymbol - - override fun accept(visitor: FirVisitor, data: D): R = visitor.visitSymbolOwner(this, data) - - @Suppress("UNCHECKED_CAST") - override fun transform(transformer: FirTransformer, data: D): E = - transformer.transformSymbolOwner(this, data) as E -} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt index 3f08af2aa1d..718af64428c 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnnotatedDeclaration.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.visitors.* /* @@ -17,8 +18,9 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed interface FirAnnotatedDeclaration : FirDeclaration, FirAnnotationContainer { +sealed interface FirAnnotatedDeclaration> : FirDeclaration, FirAnnotationContainer { override val source: FirSourceElement? + override val symbol: FirBasedSymbol override val moduleData: FirModuleData override val resolvePhase: FirResolvePhase override val origin: FirDeclarationOrigin @@ -33,5 +35,5 @@ sealed interface FirAnnotatedDeclaration : FirDeclaration, FirAnnotationContaine override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) - override fun transformAnnotations(transformer: FirTransformer, data: D): FirAnnotatedDeclaration + override fun transformAnnotations(transformer: FirTransformer, data: D): FirAnnotatedDeclaration } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt index 3350b0aa4e1..87d0c6e290e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol @@ -20,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration, FirSymbolOwner, FirControlFlowGraphOwner { +abstract class FirAnonymousInitializer : FirPureAbstractElement(), FirDeclaration, FirControlFlowGraphOwner { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt index b16a2d2ff73..a58705c6d2d 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt @@ -30,7 +30,7 @@ abstract class FirAnonymousObject : FirClass(), FirControlFl abstract override val typeParameters: List abstract override val classKind: ClassKind abstract override val superTypeRefs: List - abstract override val declarations: List + abstract override val declarations: List> abstract override val annotations: List abstract override val scopeProvider: FirScopeProvider abstract override val controlFlowGraphReference: FirControlFlowGraphReference? diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt index 7a4a7105bb5..c3dec718c13 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -19,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed interface FirCallableDeclaration> : FirTypedDeclaration, FirSymbolOwner { +sealed interface FirCallableDeclaration> : FirTypedDeclaration { override val source: FirSourceElement? override val moduleData: FirModuleData override val resolvePhase: FirResolvePhase @@ -28,7 +27,7 @@ sealed interface FirCallableDeclaration> : FirType override val annotations: List override val returnTypeRef: FirTypeRef val receiverTypeRef: FirTypeRef? - override val symbol: FirCallableSymbol + override val symbol: FirCallableSymbol override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCallableDeclaration(this, data) @@ -42,9 +41,9 @@ sealed interface FirCallableDeclaration> : FirType fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) - override fun transformAnnotations(transformer: FirTransformer, data: D): FirCallableDeclaration + override fun transformAnnotations(transformer: FirTransformer, data: D): FirCallableDeclaration - override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirCallableDeclaration + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirCallableDeclaration - fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirCallableDeclaration + fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirCallableDeclaration } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt index 65287a1184d..15e270ce8f5 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed interface FirCallableMemberDeclaration> : FirCallableDeclaration, FirMemberDeclaration { +sealed interface FirCallableMemberDeclaration> : FirCallableDeclaration, FirMemberDeclaration { override val source: FirSourceElement? override val moduleData: FirModuleData override val resolvePhase: FirResolvePhase @@ -29,7 +29,7 @@ sealed interface FirCallableMemberDeclaration override val returnTypeRef: FirTypeRef override val receiverTypeRef: FirTypeRef? - override val symbol: FirCallableSymbol + override val symbol: FirCallableSymbol override val typeParameters: List override val status: FirDeclarationStatus val containerSource: DeserializedContainerSource? @@ -47,13 +47,13 @@ sealed interface FirCallableMemberDeclaration transformAnnotations(transformer: FirTransformer, data: D): FirCallableMemberDeclaration + override fun transformAnnotations(transformer: FirTransformer, data: D): FirCallableMemberDeclaration - override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirCallableMemberDeclaration + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirCallableMemberDeclaration - override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirCallableMemberDeclaration + override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirCallableMemberDeclaration - override fun transformTypeParameters(transformer: FirTransformer, data: D): FirCallableMemberDeclaration + override fun transformTypeParameters(transformer: FirTransformer, data: D): FirCallableMemberDeclaration - override fun transformStatus(transformer: FirTransformer, data: D): FirCallableMemberDeclaration + override fun transformStatus(transformer: FirTransformer, data: D): FirCallableMemberDeclaration } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt index 626593523cd..d3ad9836f0e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClass.kt @@ -21,17 +21,17 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed class FirClass> : FirClassLikeDeclaration(), FirStatement, FirTypeParameterRefsOwner { +sealed class FirClass> : FirClassLikeDeclaration(), FirStatement, FirTypeParameterRefsOwner { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase abstract override val origin: FirDeclarationOrigin abstract override val attributes: FirDeclarationAttributes abstract override val typeParameters: List - abstract override val symbol: FirClassSymbol + abstract override val symbol: FirClassSymbol abstract val classKind: ClassKind abstract val superTypeRefs: List - abstract val declarations: List + abstract val declarations: List> abstract override val annotations: List abstract val scopeProvider: FirScopeProvider @@ -45,11 +45,11 @@ sealed class FirClass> : FirClassLikeDeclaration(), FirStatem abstract fun replaceSuperTypeRefs(newSuperTypeRefs: List) - abstract override fun transformTypeParameters(transformer: FirTransformer, data: D): FirClass + abstract override fun transformTypeParameters(transformer: FirTransformer, data: D): FirClass - abstract fun transformSuperTypeRefs(transformer: FirTransformer, data: D): FirClass + abstract fun transformSuperTypeRefs(transformer: FirTransformer, data: D): FirClass - abstract fun transformDeclarations(transformer: FirTransformer, data: D): FirClass + abstract fun transformDeclarations(transformer: FirTransformer, data: D): FirClass - abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirClass + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirClass } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt index 637048bdc24..ab3a949f607 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol @@ -20,14 +19,14 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed class FirClassLikeDeclaration> : FirPureAbstractElement(), FirAnnotatedDeclaration, FirStatement, FirSymbolOwner { +sealed class FirClassLikeDeclaration> : FirPureAbstractElement(), FirAnnotatedDeclaration, FirStatement { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase abstract override val origin: FirDeclarationOrigin abstract override val attributes: FirDeclarationAttributes abstract override val annotations: List - abstract override val symbol: FirClassLikeSymbol + abstract override val symbol: FirClassLikeSymbol override fun accept(visitor: FirVisitor, data: D): R = visitor.visitClassLikeDeclaration(this, data) @@ -37,5 +36,5 @@ sealed class FirClassLikeDeclaration> : FirPureAb abstract override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) - abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirClassLikeDeclaration + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirClassLikeDeclaration } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt index 2c4f7f7aa8a..45aff80144e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.visitors.* /* @@ -15,8 +16,9 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed interface FirDeclaration : FirElement { +sealed interface FirDeclaration> : FirElement { override val source: FirSourceElement? + val symbol: FirBasedSymbol val moduleData: FirModuleData val resolvePhase: FirResolvePhase val origin: FirDeclarationOrigin diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFile.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFile.kt index 3e06f52bcb8..abbce90b19d 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFile.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFile.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.fir.visitors.* @@ -18,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirFile : FirPureAbstractElement(), FirAnnotatedDeclaration { +abstract class FirFile : FirPureAbstractElement(), FirAnnotatedDeclaration { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase @@ -26,9 +27,10 @@ abstract class FirFile : FirPureAbstractElement(), FirAnnotatedDeclaration { abstract override val attributes: FirDeclarationAttributes abstract override val annotations: List abstract val imports: List - abstract val declarations: List + abstract val declarations: List> abstract val name: String abstract val packageFqName: FqName + abstract override val symbol: FirFileSymbol override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFile(this, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt index 1e7069af180..2a6ee023226 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirFunction.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed class FirFunction> : FirPureAbstractElement(), FirCallableDeclaration, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement { +sealed class FirFunction> : FirPureAbstractElement(), FirCallableDeclaration, FirTargetElement, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirStatement { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase @@ -34,7 +34,7 @@ sealed class FirFunction> : FirPureAbstractElement(), FirCall abstract override val receiverTypeRef: FirTypeRef? abstract override val typeParameters: List abstract override val controlFlowGraphReference: FirControlFlowGraphReference? - abstract override val symbol: FirFunctionSymbol + abstract override val symbol: FirFunctionSymbol abstract val valueParameters: List abstract val body: FirBlock? @@ -56,15 +56,15 @@ sealed class FirFunction> : FirPureAbstractElement(), FirCall abstract fun replaceBody(newBody: FirBlock?) - abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirFunction + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirFunction - abstract override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirFunction + abstract override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirFunction - abstract override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirFunction + abstract override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirFunction - abstract override fun transformTypeParameters(transformer: FirTransformer, data: D): FirFunction + abstract override fun transformTypeParameters(transformer: FirTransformer, data: D): FirFunction - abstract fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction + abstract fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction - abstract fun transformBody(transformer: FirTransformer, data: D): FirFunction + abstract fun transformBody(transformer: FirTransformer, data: D): FirFunction } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt index 0f95413796c..60c00d0ab84 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.visitors.* /* @@ -16,8 +17,9 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed interface FirMemberDeclaration : FirAnnotatedDeclaration, FirTypeParameterRefsOwner { +sealed interface FirMemberDeclaration> : FirAnnotatedDeclaration, FirTypeParameterRefsOwner { override val source: FirSourceElement? + override val symbol: FirBasedSymbol override val moduleData: FirModuleData override val resolvePhase: FirResolvePhase override val origin: FirDeclarationOrigin @@ -34,9 +36,9 @@ sealed interface FirMemberDeclaration : FirAnnotatedDeclaration, FirTypeParamete override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) - override fun transformAnnotations(transformer: FirTransformer, data: D): FirMemberDeclaration + override fun transformAnnotations(transformer: FirTransformer, data: D): FirMemberDeclaration - override fun transformTypeParameters(transformer: FirTransformer, data: D): FirMemberDeclaration + override fun transformTypeParameters(transformer: FirTransformer, data: D): FirMemberDeclaration - fun transformStatus(transformer: FirTransformer, data: D): FirMemberDeclaration + fun transformStatus(transformer: FirTransformer, data: D): FirMemberDeclaration } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt index 075446dc3cb..65cbc92d30b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirRegularClass : FirMemberDeclaration, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirClass() { +abstract class FirRegularClass : FirMemberDeclaration, FirTypeParameterRefsOwner, FirControlFlowGraphOwner, FirClass() { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase @@ -33,7 +33,7 @@ abstract class FirRegularClass : FirMemberDeclaration, FirTypeParameterRefsOwner abstract override val status: FirDeclarationStatus abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract override val classKind: ClassKind - abstract override val declarations: List + abstract override val declarations: List> abstract override val scopeProvider: FirScopeProvider abstract val name: Name abstract override val symbol: FirRegularClassSymbol diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt index 3574f723b42..fe63768bb90 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirTypeAlias : FirClassLikeDeclaration(), FirMemberDeclaration, FirTypeParametersOwner { +abstract class FirTypeAlias : FirClassLikeDeclaration(), FirMemberDeclaration, FirTypeParametersOwner { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt index 9c5d454c74a..9ab758f1a96 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -22,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -abstract class FirTypeParameter : FirPureAbstractElement(), FirTypeParameterRef, FirAnnotatedDeclaration, FirSymbolOwner { +abstract class FirTypeParameter : FirPureAbstractElement(), FirTypeParameterRef, FirAnnotatedDeclaration { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt index 6284a31bb58..48c370093b8 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.* @@ -17,8 +18,9 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed interface FirTypedDeclaration : FirAnnotatedDeclaration { +sealed interface FirTypedDeclaration> : FirAnnotatedDeclaration { override val source: FirSourceElement? + override val symbol: FirBasedSymbol override val moduleData: FirModuleData override val resolvePhase: FirResolvePhase override val origin: FirDeclarationOrigin @@ -36,7 +38,7 @@ sealed interface FirTypedDeclaration : FirAnnotatedDeclaration { fun replaceReturnTypeRef(newReturnTypeRef: FirTypeRef) - override fun transformAnnotations(transformer: FirTransformer, data: D): FirTypedDeclaration + override fun transformAnnotations(transformer: FirTransformer, data: D): FirTypedDeclaration - fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirTypedDeclaration + fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirTypedDeclaration } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt index 49ce82e95b0..4204bda422a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirVariable.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -sealed class FirVariable> : FirPureAbstractElement(), FirCallableDeclaration, FirAnnotatedDeclaration, FirStatement { +sealed class FirVariable> : FirPureAbstractElement(), FirCallableDeclaration, FirAnnotatedDeclaration, FirStatement { abstract override val source: FirSourceElement? abstract override val moduleData: FirModuleData abstract override val resolvePhase: FirResolvePhase @@ -32,10 +32,10 @@ sealed class FirVariable> : FirPureAbstractElement(), FirCall abstract override val returnTypeRef: FirTypeRef abstract override val receiverTypeRef: FirTypeRef? abstract val name: Name - abstract override val symbol: FirVariableSymbol + abstract override val symbol: FirVariableSymbol abstract val initializer: FirExpression? abstract val delegate: FirExpression? - abstract val delegateFieldSymbol: FirDelegateFieldSymbol? + abstract val delegateFieldSymbol: FirDelegateFieldSymbol? abstract val isVar: Boolean abstract val isVal: Boolean abstract val getter: FirPropertyAccessor? @@ -56,19 +56,19 @@ sealed class FirVariable> : FirPureAbstractElement(), FirCall abstract fun replaceInitializer(newInitializer: FirExpression?) - abstract override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirVariable + abstract override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirVariable - abstract override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirVariable + abstract override fun transformReceiverTypeRef(transformer: FirTransformer, data: D): FirVariable - abstract fun transformInitializer(transformer: FirTransformer, data: D): FirVariable + abstract fun transformInitializer(transformer: FirTransformer, data: D): FirVariable - abstract fun transformDelegate(transformer: FirTransformer, data: D): FirVariable + abstract fun transformDelegate(transformer: FirTransformer, data: D): FirVariable - abstract fun transformGetter(transformer: FirTransformer, data: D): FirVariable + abstract fun transformGetter(transformer: FirTransformer, data: D): FirVariable - abstract fun transformSetter(transformer: FirTransformer, data: D): FirVariable + abstract fun transformSetter(transformer: FirTransformer, data: D): FirVariable - abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirVariable + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirVariable - abstract fun transformOtherChildren(transformer: FirTransformer, data: D): FirVariable + abstract fun transformOtherChildren(transformer: FirTransformer, data: D): FirVariable } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousObjectBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousObjectBuilder.kt index 86ed6346613..9cb52c578a0 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousObjectBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousObjectBuilder.kt @@ -42,7 +42,7 @@ class FirAnonymousObjectBuilder : FirDeclarationBuilder, FirClassBuilder, FirAnn override val typeParameters: MutableList = mutableListOf() override lateinit var classKind: ClassKind override val superTypeRefs: MutableList = mutableListOf() - override val declarations: MutableList = mutableListOf() + override val declarations: MutableList> = mutableListOf() override val annotations: MutableList = mutableListOf() override lateinit var scopeProvider: FirScopeProvider lateinit var symbol: FirAnonymousObjectSymbol diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirClassBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirClassBuilder.kt index 8828da01901..574361a8a6e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirClassBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirClassBuilder.kt @@ -38,7 +38,7 @@ interface FirClassBuilder : FirDeclarationBuilder, FirAnnotationContainerBuilder abstract val typeParameters: MutableList abstract var classKind: ClassKind abstract val superTypeRefs: MutableList - abstract val declarations: MutableList + abstract val declarations: MutableList> abstract var scopeProvider: FirScopeProvider override fun build(): FirClass<*> } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDeclarationBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDeclarationBuilder.kt index 5805b59a3ed..27bdce9a7b1 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDeclarationBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDeclarationBuilder.kt @@ -26,5 +26,5 @@ interface FirDeclarationBuilder { abstract var resolvePhase: FirResolvePhase abstract var origin: FirDeclarationOrigin abstract var attributes: FirDeclarationAttributes - fun build(): FirDeclaration + fun build(): FirDeclaration<*> } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirFileBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirFileBuilder.kt index e36ec4bdc37..e1800431404 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirFileBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirFileBuilder.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.name.FqName @@ -35,7 +36,7 @@ class FirFileBuilder : FirAnnotationContainerBuilder { var attributes: FirDeclarationAttributes = FirDeclarationAttributes() override val annotations: MutableList = mutableListOf() val imports: MutableList = mutableListOf() - val declarations: MutableList = mutableListOf() + val declarations: MutableList> = mutableListOf() lateinit var name: String lateinit var packageFqName: FqName diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirRegularClassBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirRegularClassBuilder.kt index 8ce911e23f6..c618fd3236b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirRegularClassBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirRegularClassBuilder.kt @@ -45,7 +45,7 @@ open class FirRegularClassBuilder : FirClassBuilder, FirTypeParameterRefsOwnerBu override val typeParameters: MutableList = mutableListOf() open lateinit var status: FirDeclarationStatus override lateinit var classKind: ClassKind - override val declarations: MutableList = mutableListOf() + override val declarations: MutableList> = mutableListOf() override lateinit var scopeProvider: FirScopeProvider open lateinit var name: Name open lateinit var symbol: FirRegularClassSymbol diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt index 77f6d58676c..14f9883376c 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt @@ -35,7 +35,7 @@ internal class FirAnonymousObjectImpl( override val typeParameters: MutableList, override val classKind: ClassKind, override val superTypeRefs: MutableList, - override val declarations: MutableList, + override val declarations: MutableList>, override val annotations: MutableList, override val scopeProvider: FirScopeProvider, override val symbol: FirAnonymousObjectSymbol, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt index 7e2564f43f9..e90b5b39136 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.fir.visitors.* @@ -30,10 +31,16 @@ internal class FirFileImpl( override val attributes: FirDeclarationAttributes, override val annotations: MutableList, override val imports: MutableList, - override val declarations: MutableList, + override val declarations: MutableList>, override val name: String, override val packageFqName: FqName, ) : FirFile() { + override val symbol: FirFileSymbol = FirFileSymbol() + + init { + symbol.bind(this) + } + override fun acceptChildren(visitor: FirVisitor, data: D) { annotations.forEach { it.accept(visitor, data) } imports.forEach { it.accept(visitor, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt index 37956af0031..983bbfd4cee 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirRegularClassImpl.kt @@ -38,7 +38,7 @@ internal class FirRegularClassImpl( override val typeParameters: MutableList, override var status: FirDeclarationStatus, override val classKind: ClassKind, - override val declarations: MutableList, + override val declarations: MutableList>, override val scopeProvider: FirScopeProvider, override val name: Name, override val symbol: FirRegularClassSymbol, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index b72d1816113..9cbde856aa6 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.FirLabel -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus @@ -160,10 +159,6 @@ abstract class FirTransformer : FirVisitor() { return transformElement(label, data) } - open fun transformSymbolOwner(symbolOwner: FirSymbolOwner, data: D): FirSymbolOwner where E : FirSymbolOwner, E : FirDeclaration { - return transformElement(symbolOwner, data) - } - open fun transformResolvable(resolvable: FirResolvable, data: D): FirResolvable { return transformElement(resolvable, data) } @@ -192,23 +187,23 @@ abstract class FirTransformer : FirVisitor() { return transformElement(expression, data) } - open fun transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration { + open fun > transformDeclaration(declaration: FirDeclaration, data: D): FirDeclaration { return transformElement(declaration, data) } - open fun transformAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): FirDeclaration { + open fun > transformAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): FirAnnotatedDeclaration { return transformElement(annotatedDeclaration, data) } - open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): FirDeclaration { + open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): FirAnonymousInitializer { return transformElement(anonymousInitializer, data) } - open fun transformTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): FirDeclaration { + open fun > transformTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): FirTypedDeclaration { return transformElement(typedDeclaration, data) } - open fun > transformCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): FirDeclaration { + open fun > transformCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): FirCallableDeclaration { return transformElement(callableDeclaration, data) } @@ -216,7 +211,7 @@ abstract class FirTransformer : FirVisitor() { return transformElement(typeParameterRef, data) } - open fun transformTypeParameter(typeParameter: FirTypeParameter, data: D): FirDeclaration { + open fun transformTypeParameter(typeParameter: FirTypeParameter, data: D): FirTypeParameterRef { return transformElement(typeParameter, data) } @@ -228,15 +223,15 @@ abstract class FirTransformer : FirVisitor() { return transformElement(typeParametersOwner, data) } - open fun transformMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): FirDeclaration { + open fun > transformMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): FirMemberDeclaration { return transformElement(memberDeclaration, data) } - open fun > transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): FirDeclaration { + open fun > transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): FirCallableMemberDeclaration { return transformElement(callableMemberDeclaration, data) } - open fun > transformVariable(variable: FirVariable, data: D): FirStatement { + open fun > transformVariable(variable: FirVariable, data: D): FirStatement { return transformElement(variable, data) } @@ -244,23 +239,23 @@ abstract class FirTransformer : FirVisitor() { return transformElement(valueParameter, data) } - open fun transformProperty(property: FirProperty, data: D): FirDeclaration { + open fun transformProperty(property: FirProperty, data: D): FirStatement { return transformElement(property, data) } - open fun transformField(field: FirField, data: D): FirDeclaration { + open fun transformField(field: FirField, data: D): FirStatement { return transformElement(field, data) } - open fun transformEnumEntry(enumEntry: FirEnumEntry, data: D): FirDeclaration { + open fun transformEnumEntry(enumEntry: FirEnumEntry, data: D): FirStatement { return transformElement(enumEntry, data) } - open fun > transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): FirStatement { + open fun > transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): FirStatement { return transformElement(classLikeDeclaration, data) } - open fun > transformClass(klass: FirClass, data: D): FirStatement { + open fun > transformClass(klass: FirClass, data: D): FirStatement { return transformElement(klass, data) } @@ -268,11 +263,11 @@ abstract class FirTransformer : FirVisitor() { return transformElement(regularClass, data) } - open fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): FirDeclaration { + open fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): FirStatement { return transformElement(typeAlias, data) } - open fun > transformFunction(function: FirFunction, data: D): FirStatement { + open fun > transformFunction(function: FirFunction, data: D): FirStatement { return transformElement(function, data) } @@ -280,19 +275,19 @@ abstract class FirTransformer : FirVisitor() { return transformElement(contractDescriptionOwner, data) } - open fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: D): FirDeclaration { + open fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: D): FirStatement { return transformElement(simpleFunction, data) } - open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): FirDeclaration { + open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): FirStatement { return transformElement(propertyAccessor, data) } - open fun transformConstructor(constructor: FirConstructor, data: D): FirDeclaration { + open fun transformConstructor(constructor: FirConstructor, data: D): FirStatement { return transformElement(constructor, data) } - open fun transformFile(file: FirFile, data: D): FirDeclaration { + open fun transformFile(file: FirFile, data: D): FirFile { return transformElement(file, data) } @@ -676,10 +671,6 @@ abstract class FirTransformer : FirVisitor() { return transformLabel(label, data) } - final override fun visitSymbolOwner(symbolOwner: FirSymbolOwner, data: D): FirSymbolOwner where E : FirSymbolOwner, E : FirDeclaration { - return transformSymbolOwner(symbolOwner, data) - } - final override fun visitResolvable(resolvable: FirResolvable, data: D): FirResolvable { return transformResolvable(resolvable, data) } @@ -708,23 +699,23 @@ abstract class FirTransformer : FirVisitor() { return transformExpression(expression, data) } - final override fun visitDeclaration(declaration: FirDeclaration, data: D): FirDeclaration { + final override fun > visitDeclaration(declaration: FirDeclaration, data: D): FirDeclaration { return transformDeclaration(declaration, data) } - final override fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): FirDeclaration { + final override fun > visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): FirAnnotatedDeclaration { return transformAnnotatedDeclaration(annotatedDeclaration, data) } - final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): FirDeclaration { + final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): FirAnonymousInitializer { return transformAnonymousInitializer(anonymousInitializer, data) } - final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): FirDeclaration { + final override fun > visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): FirTypedDeclaration { return transformTypedDeclaration(typedDeclaration, data) } - final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): FirDeclaration { + final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): FirCallableDeclaration { return transformCallableDeclaration(callableDeclaration, data) } @@ -732,7 +723,7 @@ abstract class FirTransformer : FirVisitor() { return transformTypeParameterRef(typeParameterRef, data) } - final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): FirDeclaration { + final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): FirTypeParameterRef { return transformTypeParameter(typeParameter, data) } @@ -744,15 +735,15 @@ abstract class FirTransformer : FirVisitor() { return transformTypeParametersOwner(typeParametersOwner, data) } - final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): FirDeclaration { + final override fun > visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): FirMemberDeclaration { return transformMemberDeclaration(memberDeclaration, data) } - final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): FirDeclaration { + final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): FirCallableMemberDeclaration { return transformCallableMemberDeclaration(callableMemberDeclaration, data) } - final override fun > visitVariable(variable: FirVariable, data: D): FirStatement { + final override fun > visitVariable(variable: FirVariable, data: D): FirStatement { return transformVariable(variable, data) } @@ -760,23 +751,23 @@ abstract class FirTransformer : FirVisitor() { return transformValueParameter(valueParameter, data) } - final override fun visitProperty(property: FirProperty, data: D): FirDeclaration { + final override fun visitProperty(property: FirProperty, data: D): FirStatement { return transformProperty(property, data) } - final override fun visitField(field: FirField, data: D): FirDeclaration { + final override fun visitField(field: FirField, data: D): FirStatement { return transformField(field, data) } - final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): FirDeclaration { + final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): FirStatement { return transformEnumEntry(enumEntry, data) } - final override fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): FirStatement { + final override fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): FirStatement { return transformClassLikeDeclaration(classLikeDeclaration, data) } - final override fun > visitClass(klass: FirClass, data: D): FirStatement { + final override fun > visitClass(klass: FirClass, data: D): FirStatement { return transformClass(klass, data) } @@ -784,11 +775,11 @@ abstract class FirTransformer : FirVisitor() { return transformRegularClass(regularClass, data) } - final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): FirDeclaration { + final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): FirStatement { return transformTypeAlias(typeAlias, data) } - final override fun > visitFunction(function: FirFunction, data: D): FirStatement { + final override fun > visitFunction(function: FirFunction, data: D): FirStatement { return transformFunction(function, data) } @@ -796,19 +787,19 @@ abstract class FirTransformer : FirVisitor() { return transformContractDescriptionOwner(contractDescriptionOwner, data) } - final override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: D): FirDeclaration { + final override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: D): FirStatement { return transformSimpleFunction(simpleFunction, data) } - final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): FirDeclaration { + final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): FirStatement { return transformPropertyAccessor(propertyAccessor, data) } - final override fun visitConstructor(constructor: FirConstructor, data: D): FirDeclaration { + final override fun visitConstructor(constructor: FirConstructor, data: D): FirStatement { return transformConstructor(constructor, data) } - final override fun visitFile(file: FirFile, data: D): FirDeclaration { + final override fun visitFile(file: FirFile, data: D): FirFile { return transformFile(file, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index 52f4ffaef4c..388129ccf56 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.FirLabel -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus @@ -151,8 +150,6 @@ abstract class FirVisitor { open fun visitLabel(label: FirLabel, data: D): R = visitElement(label, data) - open fun visitSymbolOwner(symbolOwner: FirSymbolOwner, data: D): R where E : FirSymbolOwner, E : FirDeclaration = visitElement(symbolOwner, data) - open fun visitResolvable(resolvable: FirResolvable, data: D): R = visitElement(resolvable, data) open fun visitTargetElement(targetElement: FirTargetElement, data: D): R = visitElement(targetElement, data) @@ -167,15 +164,15 @@ abstract class FirVisitor { open fun visitExpression(expression: FirExpression, data: D): R = visitElement(expression, data) - open fun visitDeclaration(declaration: FirDeclaration, data: D): R = visitElement(declaration, data) + open fun > visitDeclaration(declaration: FirDeclaration, data: D): R = visitElement(declaration, data) - open fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): R = visitElement(annotatedDeclaration, data) + open fun > visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: D): R = visitElement(annotatedDeclaration, data) open fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): R = visitElement(anonymousInitializer, data) - open fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): R = visitElement(typedDeclaration, data) + open fun > visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): R = visitElement(typedDeclaration, data) - open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R = visitElement(callableDeclaration, data) + open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R = visitElement(callableDeclaration, data) open fun visitTypeParameterRef(typeParameterRef: FirTypeParameterRef, data: D): R = visitElement(typeParameterRef, data) @@ -185,11 +182,11 @@ abstract class FirVisitor { open fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: D): R = visitElement(typeParametersOwner, data) - open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): R = visitElement(memberDeclaration, data) + open fun > visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): R = visitElement(memberDeclaration, data) - open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R = visitElement(callableMemberDeclaration, data) + open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R = visitElement(callableMemberDeclaration, data) - open fun > visitVariable(variable: FirVariable, data: D): R = visitElement(variable, data) + open fun > visitVariable(variable: FirVariable, data: D): R = visitElement(variable, data) open fun visitValueParameter(valueParameter: FirValueParameter, data: D): R = visitElement(valueParameter, data) @@ -199,15 +196,15 @@ abstract class FirVisitor { open fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitElement(enumEntry, data) - open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R = visitElement(classLikeDeclaration, data) + open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R = visitElement(classLikeDeclaration, data) - open fun > visitClass(klass: FirClass, data: D): R = visitElement(klass, data) + open fun > visitClass(klass: FirClass, data: D): R = visitElement(klass, data) open fun visitRegularClass(regularClass: FirRegularClass, data: D): R = visitElement(regularClass, data) open fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): R = visitElement(typeAlias, data) - open fun > visitFunction(function: FirFunction, data: D): R = visitElement(function, data) + open fun > visitFunction(function: FirFunction, data: D): R = visitElement(function, data) open fun visitContractDescriptionOwner(contractDescriptionOwner: FirContractDescriptionOwner, data: D): R = visitElement(contractDescriptionOwner, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index 2fa827bf21f..15d3d158d4c 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.FirLabel -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus @@ -159,10 +158,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(label) } - open fun visitSymbolOwner(symbolOwner: FirSymbolOwner) where E : FirSymbolOwner, E : FirDeclaration { - visitElement(symbolOwner) - } - open fun visitResolvable(resolvable: FirResolvable) { visitElement(resolvable) } @@ -191,11 +186,11 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(expression) } - open fun visitDeclaration(declaration: FirDeclaration) { + open fun > visitDeclaration(declaration: FirDeclaration) { visitElement(declaration) } - open fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration) { + open fun > visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration) { visitElement(annotatedDeclaration) } @@ -203,11 +198,11 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(anonymousInitializer) } - open fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration) { + open fun > visitTypedDeclaration(typedDeclaration: FirTypedDeclaration) { visitElement(typedDeclaration) } - open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) { + open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) { visitElement(callableDeclaration) } @@ -227,15 +222,15 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(typeParametersOwner) } - open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { + open fun > visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { visitElement(memberDeclaration) } - open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) { + open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) { visitElement(callableMemberDeclaration) } - open fun > visitVariable(variable: FirVariable) { + open fun > visitVariable(variable: FirVariable) { visitElement(variable) } @@ -255,11 +250,11 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(enumEntry) } - open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) { + open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) { visitElement(classLikeDeclaration) } - open fun > visitClass(klass: FirClass) { + open fun > visitClass(klass: FirClass) { visitElement(klass) } @@ -271,7 +266,7 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(typeAlias) } - open fun > visitFunction(function: FirFunction) { + open fun > visitFunction(function: FirFunction) { visitElement(function) } @@ -675,10 +670,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitLabel(label) } - final override fun visitSymbolOwner(symbolOwner: FirSymbolOwner, data: Nothing?) where E : FirSymbolOwner, E : FirDeclaration { - visitSymbolOwner(symbolOwner) - } - final override fun visitResolvable(resolvable: FirResolvable, data: Nothing?) { visitResolvable(resolvable) } @@ -707,11 +698,11 @@ abstract class FirVisitorVoid : FirVisitor() { visitExpression(expression) } - final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) { + final override fun > visitDeclaration(declaration: FirDeclaration, data: Nothing?) { visitDeclaration(declaration) } - final override fun visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: Nothing?) { + final override fun > visitAnnotatedDeclaration(annotatedDeclaration: FirAnnotatedDeclaration, data: Nothing?) { visitAnnotatedDeclaration(annotatedDeclaration) } @@ -719,11 +710,11 @@ abstract class FirVisitorVoid : FirVisitor() { visitAnonymousInitializer(anonymousInitializer) } - final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: Nothing?) { + final override fun > visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: Nothing?) { visitTypedDeclaration(typedDeclaration) } - final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: Nothing?) { + final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: Nothing?) { visitCallableDeclaration(callableDeclaration) } @@ -743,15 +734,15 @@ abstract class FirVisitorVoid : FirVisitor() { visitTypeParametersOwner(typeParametersOwner) } - final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) { + final override fun > visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) { visitMemberDeclaration(memberDeclaration) } - final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: Nothing?) { + final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: Nothing?) { visitCallableMemberDeclaration(callableMemberDeclaration) } - final override fun > visitVariable(variable: FirVariable, data: Nothing?) { + final override fun > visitVariable(variable: FirVariable, data: Nothing?) { visitVariable(variable) } @@ -771,11 +762,11 @@ abstract class FirVisitorVoid : FirVisitor() { visitEnumEntry(enumEntry) } - final override fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: Nothing?) { + final override fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: Nothing?) { visitClassLikeDeclaration(classLikeDeclaration) } - final override fun > visitClass(klass: FirClass, data: Nothing?) { + final override fun > visitClass(klass: FirClass, data: Nothing?) { visitClass(klass) } @@ -787,7 +778,7 @@ abstract class FirVisitorVoid : FirVisitor() { visitTypeAlias(typeAlias) } - final override fun > visitFunction(function: FirFunction, data: Nothing?) { + final override fun > visitFunction(function: FirFunction, data: Nothing?) { visitFunction(function) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index cc096392b29..5dc4b8dc272 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -17,9 +17,8 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* import org.jetbrains.kotlin.fir.references.* -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag -import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol @@ -27,6 +26,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.SpecialNames +import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.Printer @@ -211,7 +211,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) { - if (callableDeclaration is FirMemberDeclaration) { + if (callableDeclaration is FirMemberDeclaration<*>) { visitMemberDeclaration(callableDeclaration) } else { callableDeclaration.annotations.renderAnnotations() @@ -248,7 +248,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM callableDeclaration.renderContractDescription() } - private fun FirDeclaration.renderContractDescription() { + private fun FirDeclaration<*>.renderContractDescription() { val contractDescription = (this as? FirContractDescriptionOwner)?.contractDescription ?: return pushIndent() contractDescription.accept(this@FirRenderer) @@ -268,7 +268,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM return itself + "[${effectiveVisibility.name}]" } - private fun FirMemberDeclaration.modalityAsString(): String { + private fun FirMemberDeclaration<*>.modalityAsString(): String { return modality?.name?.toLowerCaseAsciiOnly() ?: run { if (this is FirCallableMemberDeclaration<*> && this.isOverride) { "open?" @@ -298,7 +298,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM typeParameterRef.symbol.fir.accept(this) } - override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { + override fun > visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { memberDeclaration.annotations.renderAnnotations() if (memberDeclaration !is FirProperty || !memberDeclaration.isLocal) { // we can't access session.effectiveVisibilityResolver from here! @@ -384,7 +384,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } } - override fun visitDeclaration(declaration: FirDeclaration) { + override fun > visitDeclaration(declaration: FirDeclaration) { declaration.renderDeclarationData() print( when (declaration) { @@ -402,19 +402,19 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM ) } - private fun FirDeclaration.renderDeclarationData() { + private fun FirDeclaration<*>.renderDeclarationData() { renderDeclarationResolvePhaseIfNeeded() renderDeclarationAttributesIfNeeded() renderDeclarationOriginIfNeeded() } - private fun FirDeclaration.renderDeclarationResolvePhaseIfNeeded() { + private fun FirDeclaration<*>.renderDeclarationResolvePhaseIfNeeded() { if (mode.renderDeclarationResolvePhase) { print("[${resolvePhase}] ") } } - private fun FirDeclaration.renderDeclarationAttributesIfNeeded() { + private fun FirDeclaration<*>.renderDeclarationAttributesIfNeeded() { if (mode.renderDeclarationAttributes && attributes.isNotEmpty()) { val attributes = getAttributesWithValues().mapNotNull { (klass, value) -> value?.let { klass.simpleName to value.renderAsDeclarationAttributeValue() } @@ -423,13 +423,13 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } } - private fun FirDeclaration.renderDeclarationOriginIfNeeded() { + private fun FirDeclaration<*>.renderDeclarationOriginIfNeeded() { if (mode.renderDeclarationOrigin) { print("[$origin] ") } } - private fun FirDeclaration.getAttributesWithValues(): List, Any?>> { + private fun FirDeclaration<*>.getAttributesWithValues(): List, Any?>> { val attributesMap = FirDeclarationDataRegistry.allValuesThreadUnsafeForRendering() return attributesMap.entries.sortedBy { it.key.simpleName }.map { (klass, index) -> klass to attributes[index] } } @@ -441,7 +441,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } - private fun List.renderDeclarations() { + private fun List>.renderDeclarations() { renderInBraces { for (declaration in this) { declaration.accept(this@FirRenderer) @@ -681,7 +681,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM print("\$subj\$") } - override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration) { + override fun > visitTypedDeclaration(typedDeclaration: FirTypedDeclaration) { visitDeclaration(typedDeclaration) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt index 08db07b21fb..c26baae0f44 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationAttributes.kt @@ -37,7 +37,7 @@ class FirDeclarationAttributes : AttributeArrayOwner * Example of adding new attribute for declaration: * * object SomeKey : FirDeclarationDataKey() - * var FirDeclaration.someString: String? by FirDeclarationDataRegistry.data(SomeKey) + * var FirDeclaration<*>.someString: String? by FirDeclarationDataRegistry.data(SomeKey) */ object FirDeclarationDataRegistry : TypeRegistry() { fun data(key: K): DeclarationDataAccessor { @@ -54,12 +54,12 @@ object FirDeclarationDataRegistry : TypeRegistry() { private val dataAccessor: NullableArrayMapAccessor, val key: KClass ) { - operator fun getValue(thisRef: FirDeclaration, property: KProperty<*>): V? { + operator fun getValue(thisRef: FirDeclaration<*>, property: KProperty<*>): V? { @Suppress("UNCHECKED_CAST") return dataAccessor.getValue(thisRef.attributes, property) as? V } - operator fun setValue(thisRef: FirDeclaration, property: KProperty<*>, value: V?) { + operator fun setValue(thisRef: FirDeclaration<*>, property: KProperty<*>, value: V?) { thisRef.attributes[key] = value } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt index 3fae2fd4efa..5ce8c173679 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt @@ -53,39 +53,40 @@ inline val FirRegularClass.isData get() = status.isData inline val FirRegularClass.canHaveAbstractDeclaration: Boolean get() = isAbstract || isSealed || isEnumClass -inline val FirMemberDeclaration.modality get() = status.modality -inline val FirMemberDeclaration.isAbstract get() = status.modality == Modality.ABSTRACT -inline val FirMemberDeclaration.isOpen get() = status.modality == Modality.OPEN -inline val FirMemberDeclaration.isFinal: Boolean +inline val FirMemberDeclaration<*>.modality get() = status.modality +inline val FirMemberDeclaration<*>.isAbstract get() = status.modality == Modality.ABSTRACT +inline val FirMemberDeclaration<*>.isOpen get() = status.modality == Modality.OPEN +inline val FirMemberDeclaration<*>.isFinal: Boolean get() { // member with unspecified modality is final val modality = status.modality ?: return true return modality == Modality.FINAL } -inline val FirMemberDeclaration.visibility: Visibility get() = status.visibility -inline val FirMemberDeclaration.effectiveVisibility: EffectiveVisibility +inline val FirMemberDeclaration<*>.visibility: Visibility get() = status.visibility +inline val FirMemberDeclaration<*>.effectiveVisibility: EffectiveVisibility get() = (status as? FirResolvedDeclarationStatus)?.effectiveVisibility ?: error("Effective visibility for ${render(FirRenderer.RenderMode.NoBodies)} must be resolved") -inline val FirMemberDeclaration.allowsToHaveFakeOverride: Boolean +inline val FirMemberDeclaration<*>.allowsToHaveFakeOverride: Boolean get() = !Visibilities.isPrivate(visibility) && visibility != Visibilities.InvisibleFake -inline val FirMemberDeclaration.isActual get() = status.isActual -inline val FirMemberDeclaration.isExpect get() = status.isExpect -inline val FirMemberDeclaration.isInner get() = status.isInner -inline val FirMemberDeclaration.isStatic get() = status.isStatic -inline val FirMemberDeclaration.isOverride: Boolean get() = status.isOverride -inline val FirMemberDeclaration.isOperator: Boolean get() = status.isOperator -inline val FirMemberDeclaration.isInfix: Boolean get() = status.isInfix -inline val FirMemberDeclaration.isInline: Boolean get() = status.isInline -inline val FirMemberDeclaration.isTailRec: Boolean get() = status.isTailRec -inline val FirMemberDeclaration.isExternal: Boolean get() = status.isExternal -inline val FirMemberDeclaration.isSuspend: Boolean get() = status.isSuspend -inline val FirMemberDeclaration.isConst: Boolean get() = status.isConst -inline val FirMemberDeclaration.isLateInit: Boolean get() = status.isLateInit -inline val FirMemberDeclaration.isFromSealedClass: Boolean get() = status.isFromSealedClass -inline val FirMemberDeclaration.isFromEnumClass: Boolean get() = status.isFromEnumClass +inline val FirMemberDeclaration<*>.isActual get() = status.isActual +inline val FirMemberDeclaration<*>.isExpect get() = status.isExpect +inline val FirMemberDeclaration<*>.isInner get() = status.isInner +inline val FirMemberDeclaration<*>.isStatic get() = status.isStatic +inline val FirMemberDeclaration<*>.isOverride: Boolean get() = status.isOverride +inline val FirMemberDeclaration<*>.isOperator: Boolean get() = status.isOperator +inline val FirMemberDeclaration<*>.isInfix: Boolean get() = status.isInfix +inline val FirMemberDeclaration<*>.isInline: Boolean get() = status.isInline +inline val FirMemberDeclaration<*>.isTailRec: Boolean get() = status.isTailRec +inline val FirMemberDeclaration<*>.isExternal: Boolean get() = status.isExternal +inline val FirMemberDeclaration<*>.isSuspend: Boolean get() = status.isSuspend +inline val FirMemberDeclaration<*>.isConst: Boolean get() = status.isConst +inline val FirMemberDeclaration<*>.isLateInit: Boolean get() = status.isLateInit +inline val FirMemberDeclaration<*>.isFromSealedClass: Boolean get() = status.isFromSealedClass +inline val FirMemberDeclaration<*>.isFromEnumClass: Boolean get() = status.isFromEnumClass +inline val FirMemberDeclaration<*>.isFun: Boolean get() = status.isFun inline val FirFunction<*>.hasBody get() = body != null @@ -103,14 +104,14 @@ inline val FirPropertyAccessor.allowsToHaveFakeOverride: Boolean inline val FirClassLikeDeclaration<*>.isLocal get() = symbol.classId.isLocal inline val FirCallableMemberDeclaration<*>.isLocal get() = status.visibility == Visibilities.Local -fun FirRegularClassBuilder.addDeclaration(declaration: FirDeclaration) { +fun FirRegularClassBuilder.addDeclaration(declaration: FirDeclaration<*>) { declarations += declaration if (companionObject == null && declaration is FirRegularClass && declaration.isCompanion) { companionObject = declaration } } -fun FirRegularClassBuilder.addDeclarations(declarations: Collection) { +fun FirRegularClassBuilder.addDeclarations(declarations: Collection>) { declarations.forEach(this::addDeclaration) } @@ -166,12 +167,12 @@ fun FirRegularClass.collectEnumEntries(): Collection { return declarations.filterIsInstance() } -fun FirFile.addDeclaration(declaration: FirDeclaration) { +fun FirFile.addDeclaration(declaration: FirDeclaration<*>) { require(this is FirFileImpl) declarations += declaration } -fun FirRegularClass.addDeclaration(declaration: FirDeclaration) { +fun FirRegularClass.addDeclaration(declaration: FirDeclaration<*>) { @Suppress("LiftReturnOrAssignment") when (this) { is FirRegularClassImpl -> declarations += declaration @@ -189,7 +190,7 @@ var FirRegularClass.moduleName: String? by FirDeclarationDataRegistry.data(Modul var FirTypeAlias.sourceElement: SourceElement? by FirDeclarationDataRegistry.data(SourceElementKey) -val FirMemberDeclaration.containerSource: SourceElement? +val FirMemberDeclaration<*>.containerSource: SourceElement? get() = when (this) { is FirCallableMemberDeclaration<*> -> containerSource is FirRegularClass -> sourceElement @@ -230,9 +231,9 @@ val FirQualifiedAccess.referredPropertySymbol: FirPropertySymbol? return reference.resolvedSymbol as? FirPropertySymbol } -inline val FirDeclaration.isJava: Boolean +inline val FirDeclaration<*>.isJava: Boolean get() = origin == FirDeclarationOrigin.Java -inline val FirDeclaration.isFromLibrary: Boolean +inline val FirDeclaration<*>.isFromLibrary: Boolean get() = origin == FirDeclarationOrigin.Library -inline val FirDeclaration.isSynthetic: Boolean +inline val FirDeclaration<*>.isSynthetic: Boolean get() = origin == FirDeclarationOrigin.Synthetic diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt index d9826335116..cf5fc9387ce 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclarationComparator.kt @@ -9,10 +9,10 @@ import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.types.FirTypeRefComparator import org.jetbrains.kotlin.name.Name -object FirMemberDeclarationComparator : Comparator { +object FirMemberDeclarationComparator : Comparator> { // Comparing different kinds of callable members by assigning distinct priorities to those members. - object TypeAndNameComparator : Comparator { - private val FirMemberDeclaration.priority: Int + object TypeAndNameComparator : Comparator> { + private val FirMemberDeclaration<*>.priority: Int get() = when (this) { is FirEnumEntry -> 7 is FirConstructor -> 6 @@ -23,7 +23,7 @@ object FirMemberDeclarationComparator : Comparator { is FirTypeAlias -> 1 } - private val FirMemberDeclaration.name: Name + private val FirMemberDeclaration<*>.name: Name get() = when (this) { is FirCallableMemberDeclaration<*> -> this.symbol.callableId.callableName @@ -33,7 +33,7 @@ object FirMemberDeclarationComparator : Comparator { this.name } - override fun compare(a: FirMemberDeclaration, b: FirMemberDeclaration): Int { + override fun compare(a: FirMemberDeclaration<*>, b: FirMemberDeclaration<*>): Int { val priorityDiff = a.priority - b.priority if (priorityDiff != 0) { return priorityDiff @@ -50,7 +50,7 @@ object FirMemberDeclarationComparator : Comparator { } } - override fun compare(a: FirMemberDeclaration, b: FirMemberDeclaration): Int { + override fun compare(a: FirMemberDeclaration<*>, b: FirMemberDeclaration<*>): Int { if (a is FirCallableMemberDeclaration<*> && b is FirCallableMemberDeclaration<*>) { return FirCallableMemberDeclarationComparator.compare(a, b) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/danglingConstraints.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/danglingConstraints.kt index 1456801e147..faad295805a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/danglingConstraints.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/danglingConstraints.kt @@ -16,10 +16,10 @@ data class DanglingTypeConstraint(val name: Name, val source: FirSourceElement) private object DanglingTypeConstraintsKey : FirDeclarationDataKey() var T.danglingTypeConstraints: List? - where T : FirDeclaration, T : FirTypeParameterRefsOwner + where T : FirDeclaration, T : FirTypeParameterRefsOwner by FirDeclarationDataRegistry.data(DanglingTypeConstraintsKey) -fun FirDeclaration.getDanglingTypeConstraintsOrEmpty(): List { +fun FirDeclaration<*>.getDanglingTypeConstraintsOrEmpty(): List { val res = when (this) { is FirRegularClass -> danglingTypeConstraints is FirSimpleFunction -> danglingTypeConstraints diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirUnstableSmartcastTypeScope.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirUnstableSmartcastTypeScope.kt index 45a2a46dc24..c5eca3c72d8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirUnstableSmartcastTypeScope.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/scopes/FirUnstableSmartcastTypeScope.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.scopes import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.name.Name @@ -81,7 +81,7 @@ class FirUnstableSmartcastTypeScope( return ProcessorAction.NEXT } - fun isSymbolFromUnstableSmartcast(symbol: AbstractFirBasedSymbol<*>) = symbol in symbolsFromUnstableSmartcast + fun isSymbolFromUnstableSmartcast(symbol: FirBasedSymbol<*>) = symbol in symbolsFromUnstableSmartcast fun markSymbolFromUnstableSmartcast(symbol: FirCallableSymbol<*>) { symbolsFromUnstableSmartcast += symbol diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirBasedSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirBasedSymbol.kt index 1104f5a9f14..f9fdeab8bfc 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirBasedSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirBasedSymbol.kt @@ -5,10 +5,9 @@ package org.jetbrains.kotlin.fir.symbols -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration -abstract class FirBasedSymbol where E : FirSymbolOwner, E : FirDeclaration { +abstract class FirBasedSymbol> { private var _fir: E? = null val fir: E diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt index 644aab01735..8119a190940 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt @@ -18,7 +18,7 @@ abstract class FirCallableSymbol> : FirBasedSymbol override fun toString(): String = "${this::class.simpleName} $callableId" } -val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration)?.status?.isStatic == true +val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration<*>)?.status?.isStatic == true val FirCallableSymbol<*>.isExtension: Boolean get() = when (fir) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt index 1270706b1ff..a6d47af0e73 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol.kt @@ -5,16 +5,15 @@ package org.jetbrains.kotlin.fir.symbols.impl -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -sealed class FirClassLikeSymbol( +sealed class FirClassLikeSymbol>( val classId: ClassId -) : FirClassifierSymbol() where D : FirClassLikeDeclaration, D : FirSymbolOwner { +) : FirClassifierSymbol() { abstract override fun toLookupTag(): ConeClassLikeLookupTag override fun toString(): String = "${this::class.simpleName} ${classId.asString()}" diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassifierSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassifierSymbol.kt index 9427447369d..f9eb2374575 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassifierSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirClassifierSymbol.kt @@ -5,12 +5,10 @@ package org.jetbrains.kotlin.fir.symbols.impl -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -sealed class FirClassifierSymbol : FirBasedSymbol() - where E : FirSymbolOwner, E : FirDeclaration { +sealed class FirClassifierSymbol> : FirBasedSymbol() { abstract fun toLookupTag(): ConeClassifierLookupTag } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFileSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFileSymbol.kt new file mode 100644 index 00000000000..95e09778066 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFileSymbol.kt @@ -0,0 +1,11 @@ +/* + * 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.symbols.impl + +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol + +class FirFileSymbol : FirBasedSymbol() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt index 6842b7098f2..c21fb9b166b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirVariableSymbol.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -open class FirVariableSymbol>(override val callableId: CallableId) : FirCallableSymbol() { +open class FirVariableSymbol>(override val callableId: CallableId) : FirCallableSymbol() { constructor(name: Name) : this(CallableId(name)) // TODO? } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt index 4846b92d1d9..50ef0e53568 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.tree.generator.util.traverseParents object BuilderConfigurator : AbstractBuilderConfigurator(FirTreeBuilder) { fun configureBuilders() = with(firTreeBuilder) { val declarationBuilder by builder { - fields from declaration + fields from declaration without "symbol" } val annotationContainerBuilder by builder { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt index 77eae4678df..1e62cefe130 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt @@ -21,24 +21,23 @@ import org.jetbrains.kotlin.fir.tree.generator.context.type import org.jetbrains.kotlin.fir.tree.generator.model.* object FieldSets { - val calleeReference = field("calleeReference", reference, withReplace = true) + val calleeReference by lazy { field("calleeReference", reference, withReplace = true) } - val receivers = fieldSet( - field("explicitReceiver", expression, nullable = true, withReplace = true).withTransform(), - field("dispatchReceiver", expression).withTransform(), - field("extensionReceiver", expression).withTransform() - ) + val receivers by lazy { + fieldSet( + field("explicitReceiver", expression, nullable = true, withReplace = true).withTransform(), + field("dispatchReceiver", expression).withTransform(), + field("extensionReceiver", expression).withTransform() + ) + } - val typeArguments = - fieldList("typeArguments", typeProjection, withReplace = true) + val typeArguments by lazy { fieldList("typeArguments", typeProjection, withReplace = true) } - val arguments = - fieldList("arguments", expression) + val arguments by lazy { fieldList("arguments", expression) } - val declarations = fieldList(declaration) + val declarations by lazy { fieldList(declaration.withArgs("E" to "*")) } - val annotations = - fieldList("annotations", annotationCall).withTransform(needTransformInOtherChildren = true) + val annotations by lazy { fieldList("annotations", annotationCall).withTransform(needTransformInOtherChildren = true) } fun symbolWithPackage(packageName: String?, symbolClassName: String, argument: String? = null): Field { return field("symbol", type(packageName, symbolClassName), argument) @@ -50,39 +49,37 @@ object FieldSets { fun body(nullable: Boolean = false, withReplace: Boolean = false) = field("body", block, nullable, withReplace = withReplace) - val returnTypeRef = - field("returnTypeRef", typeRef) + val returnTypeRef =field("returnTypeRef", typeRef) - val typeRefField = - field(typeRef, withReplace = true) + val typeRefField = field(typeRef, withReplace = true) fun receiverTypeRef(nullable: Boolean = false) = field("receiverTypeRef", typeRef, nullable) - val valueParameters = fieldList(valueParameter) + val valueParameters by lazy { fieldList(valueParameter) } - val typeParameters = fieldList("typeParameters", typeParameter) + val typeParameters by lazy { fieldList("typeParameters", typeParameter) } - val typeParameterRefs = fieldList("typeParameters", typeParameterRef) + val typeParameterRefs by lazy { fieldList("typeParameters", typeParameterRef) } - val name = field(nameType) + val name by lazy { field(nameType) } - val initializer = field("initializer", expression, nullable = true) + val initializer by lazy { field("initializer", expression, nullable = true) } fun superTypeRefs(withReplace: Boolean = false) = fieldList("superTypeRefs", typeRef, withReplace) - val classKind = field(classKindType) + val classKind by lazy { field(classKindType) } - val status = field("status", declarationStatus) + val status by lazy { field("status", declarationStatus) } - val controlFlowGraphReferenceField = field("controlFlowGraphReference", controlFlowGraphReference, withReplace = true, nullable = true) + val controlFlowGraphReferenceField by lazy { field("controlFlowGraphReference", controlFlowGraphReference, withReplace = true, nullable = true) } - val visibility = field(visibilityType) + val visibility by lazy { field(visibilityType) } - val effectiveVisibility = field("effectiveVisibility", effectiveVisibilityType) + val effectiveVisibility by lazy { field("effectiveVisibility", effectiveVisibilityType) } - val modality = field(modalityType, nullable = true) + val modality by lazy { field(modalityType, nullable = true) } - val scopeProvider = field("scopeProvider", firScopeProviderType) + val scopeProvider by lazy { field("scopeProvider", firScopeProviderType) } - val smartcastStability = field(smartcastStabilityType) + val smartcastStability by lazy { field(smartcastStabilityType) } } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index 27cbfa68e54..35df2d45bf7 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -15,7 +15,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val reference = element("Reference", Reference) val label = element("Label", Other) - val symbolOwner = element("SymbolOwner", Other) val resolvable = sealedElement("Resolvable", Expression) val targetElement = element("TargetElement", Other) @@ -29,11 +28,11 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val expression = element("Expression", Expression, statement) val declaration = sealedElement("Declaration", Declaration) val annotatedDeclaration = sealedElement("AnnotatedDeclaration", Declaration, declaration, annotationContainer) - val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner, controlFlowGraphOwner) + val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, controlFlowGraphOwner) val typedDeclaration = sealedElement("TypedDeclaration", Declaration, annotatedDeclaration) - val callableDeclaration = sealedElement("CallableDeclaration", Declaration, typedDeclaration, symbolOwner) + val callableDeclaration = sealedElement("CallableDeclaration", Declaration, typedDeclaration) val typeParameterRef = element("TypeParameterRef", Declaration) - val typeParameter = element("TypeParameter", Declaration, typeParameterRef, annotatedDeclaration, symbolOwner) + val typeParameter = element("TypeParameter", Declaration, typeParameterRef, annotatedDeclaration) val typeParameterRefsOwner = sealedElement("TypeParameterRefsOwner", Declaration) val typeParametersOwner = sealedElement("TypeParametersOwner", Declaration, typeParameterRefsOwner) val memberDeclaration = sealedElement("MemberDeclaration", Declaration, annotatedDeclaration, typeParameterRefsOwner) @@ -45,7 +44,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val field = element("Field", Declaration, variable, typeParametersOwner, callableMemberDeclaration) val enumEntry = element("EnumEntry", Declaration, variable, callableMemberDeclaration) - val classLikeDeclaration = sealedElement("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement, symbolOwner) + val classLikeDeclaration = sealedElement("ClassLikeDeclaration", Declaration, annotatedDeclaration, statement) val klass = sealedElement("Class", Declaration, classLikeDeclaration, statement, typeParameterRefsOwner) val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParameterRefsOwner, controlFlowGraphOwner, klass) val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner) 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 9041b3e4ab0..7ca673510eb 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 @@ -495,6 +495,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() noImpl(userTypeRef) + impl(file) { + default("symbol", "FirFileSymbol()") + } + noImpl(argumentList) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 25d029ad26d..6c31c262252 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -46,10 +46,10 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +annotations } - symbolOwner.configure { - withArg("E", symbolOwner, declaration) - +symbolWithPackage("fir.symbols", "FirBasedSymbol", "E") - } +// symbolOwner.configure { +// withArg("DE, symbolOwner, declaration) +// +symbolWithPackage("fir.symbols", "FirBasedSymbol", "DE) +// } typeParameterRef.configure { +symbol(typeParameterSymbolType.type) @@ -76,45 +76,57 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } declaration.configure { + withArg("E", declaration) + +symbolWithPackage("fir.symbols", "FirBasedSymbol", "E") +field("moduleData", firModuleDataType) +field("resolvePhase", resolvePhaseType, withReplace = true).apply { isMutable = true } +field("origin", declarationOriginType) +field("attributes", declarationAttributesType) } + annotatedDeclaration.configure { + withArg("E", annotatedDeclaration) + parentArg(declaration, "E", "E") + } + typedDeclaration.configure { + withArg("E", typedDeclaration) + parentArg(annotatedDeclaration, "E", "E") +field("returnTypeRef", typeRef, withReplace = true).withTransform() } callableDeclaration.configure { - withArg("F", "FirCallableDeclaration") - parentArg(symbolOwner, "E", "F") + withArg("E", "FirCallableDeclaration") + parentArg(typedDeclaration, "E", "E") +field("receiverTypeRef", typeRef, nullable = true, withReplace = true).withTransform() - +symbol("FirCallableSymbol", "F") + +symbol("FirCallableSymbol", "E") } callableMemberDeclaration.configure { - withArg("F", "FirCallableMemberDeclaration") - parentArg(callableDeclaration, "F", "F") + withArg("E", "FirCallableMemberDeclaration") + parentArg(callableDeclaration, "E", "E") + parentArg(memberDeclaration, "E", "E") +field("containerSource", type(DeserializedContainerSource::class), nullable = true) +field("dispatchReceiverType", coneKotlinTypeType, nullable = true) } function.configure { - withArg("F", "FirFunction") - parentArg(callableDeclaration, "F", "F") - +symbol("FirFunctionSymbol", "F") + withArg("E", "FirFunction") + parentArg(callableDeclaration, "E", "E") + +symbol("FirFunctionSymbol", "E") +fieldList(valueParameter, withReplace = true).withTransform() +body(nullable = true, withReplace = true).withTransform() } errorFunction.configure { - parentArg(function, "F", errorFunction) + parentArg(function, "E", errorFunction) +symbol("FirErrorFunctionSymbol") +typeParameters } memberDeclaration.configure { + withArg("E", "FirMemberDeclaration") + parentArg(annotatedDeclaration, "E", "E") +typeParameterRefs +status.withTransform() } @@ -155,7 +167,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } returnExpression.configure { - parentArg(jump, "E", function.withArgs("F" to "*")) + parentArg(jump, "E", function.withArgs("E" to "*")) +field("result", expression).withTransform() needTransformOtherChildren() } @@ -239,15 +251,15 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } classLikeDeclaration.configure { - withArg("F", "FirClassLikeDeclaration") - parentArg(symbolOwner, "F", "F") - +symbol("FirClassLikeSymbol", "F") + withArg("E", "FirClassLikeDeclaration") + parentArg(annotatedDeclaration, "E", "E") + +symbol("FirClassLikeSymbol", "E") } klass.configure { - withArg("F", "FirClass") - parentArg(classLikeDeclaration, "F", "F") - +symbol("FirClassSymbol", "F") + withArg("E", "FirClass") + parentArg(classLikeDeclaration, "E", "E") + +symbol("FirClassSymbol", "E") +classKind +superTypeRefs(withReplace = true).withTransform() +declarations.withTransform() @@ -256,7 +268,8 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } regularClass.configure { - parentArg(klass, "F", regularClass) + parentArg(klass, "E", regularClass) + parentArg(memberDeclaration, "E", regularClass) +name +symbol("FirRegularClassSymbol") +field("companionObject", regularClass, nullable = true).withTransform() @@ -265,7 +278,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } anonymousObject.configure { - parentArg(klass, "F", anonymousObject) + parentArg(klass, "E", anonymousObject) +symbol("FirAnonymousObjectSymbol") } @@ -275,7 +288,8 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild typeAlias.configure { +typeParameters - parentArg(classLikeDeclaration, "F", typeAlias) + parentArg(classLikeDeclaration, "E", typeAlias) + parentArg(memberDeclaration, "E", typeAlias) +name +symbol("FirTypeAliasSymbol") +field("expandedTypeRef", typeRef, withReplace = true).withTransform() @@ -283,7 +297,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } anonymousFunction.configure { - parentArg(function, "F", anonymousFunction) + parentArg(function, "E", anonymousFunction) +symbol("FirAnonymousFunctionSymbol") +field(label, nullable = true) +field("invocationKind", eventOccurrencesRangeType, nullable = true, withReplace = true).apply { @@ -302,7 +316,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } typeParameter.configure { - parentArg(symbolOwner, "F", typeParameter) + parentArg(annotatedDeclaration, "E", typeParameter) +name +symbol("FirTypeParameterSymbol") +field(varianceType) @@ -312,8 +326,8 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } simpleFunction.configure { - parentArg(function, "F", simpleFunction) - parentArg(callableMemberDeclaration, "F", simpleFunction) + parentArg(function, "E", simpleFunction) + parentArg(callableMemberDeclaration, "E", simpleFunction) +name +symbol("FirNamedFunctionSymbol") +annotations @@ -325,8 +339,8 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } property.configure { - parentArg(variable, "F", property) - parentArg(callableMemberDeclaration, "F", property) + parentArg(variable, "E", property) + parentArg(callableMemberDeclaration, "E", property) +symbol("FirPropertySymbol") +field("backingFieldSymbol", backingFieldSymbolType) +booleanField("isLocal") @@ -334,8 +348,8 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } propertyAccessor.configure { - parentArg(function, "F", propertyAccessor) - parentArg(callableMemberDeclaration, "F", propertyAccessor) + parentArg(function, "E", propertyAccessor) + parentArg(callableMemberDeclaration, "E", propertyAccessor) +symbol("FirPropertyAccessorSymbol") +booleanField("isGetter") +booleanField("isSetter") @@ -359,8 +373,8 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } constructor.configure { - parentArg(function, "F", constructor) - parentArg(callableMemberDeclaration, "F", constructor) + parentArg(function, "E", constructor) + parentArg(callableMemberDeclaration, "E", constructor) +annotations +symbol("FirConstructorSymbol") +field("delegatedConstructor", delegatedConstructorCall, nullable = true).withTransform() @@ -376,19 +390,20 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } valueParameter.configure { - parentArg(variable, "F", valueParameter) + parentArg(variable, "E", valueParameter) +field("defaultValue", expression, nullable = true) generateBooleanFields("crossinline", "noinline", "vararg") } variable.configure { - withArg("F", variable) - parentArg(callableDeclaration, "F", "F") + withArg("E", variable) + parentArg(callableDeclaration, "E", "E") + parentArg(annotatedDeclaration, "E", "E") +name - +symbol("FirVariableSymbol", "F") + +symbol("FirVariableSymbol", "E") +initializer.withTransform().withReplace() +field("delegate", expression, nullable = true).withTransform() - +field("delegateFieldSymbol", delegateFieldSymbolType, "F", nullable = true) + +field("delegateFieldSymbol", delegateFieldSymbolType, "E", nullable = true) generateBooleanFields("var", "val") +field("getter", propertyAccessor, nullable = true).withTransform() +field("setter", propertyAccessor, nullable = true).withTransform() @@ -397,31 +412,33 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } errorProperty.configure { - parentArg(variable, "F", errorProperty) + parentArg(variable, "E", errorProperty) +symbol("FirErrorPropertySymbol") } enumEntry.configure { - parentArg(variable, "F", enumEntry) - parentArg(callableMemberDeclaration, "F", enumEntry) + parentArg(variable, "E", enumEntry) + parentArg(callableMemberDeclaration, "E", enumEntry) } field.configure { - parentArg(variable, "F", field) - parentArg(callableMemberDeclaration, "F", field) + parentArg(variable, "E", field) + parentArg(callableMemberDeclaration, "E", field) } anonymousInitializer.configure { - parentArg(symbolOwner, "E", anonymousInitializer) + parentArg(declaration, "E", anonymousInitializer) +body(nullable = true) +symbol(anonymousInitializerSymbolType.type) } file.configure { + parentArg(annotatedDeclaration, "E", file) +fieldList(import).withTransform() +declarations.withTransform() +stringField("name") +field("packageFqName", fqNameType) + +symbol(fileSymbolType.type) } import.configure { @@ -621,7 +638,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild whenExpression.configure { +field("subject", expression, nullable = true).withTransform() - +field("subjectVariable", variable.withArgs("F" to "*"), nullable = true) + +field("subjectVariable", variable.withArgs("E" to "*"), nullable = true) +fieldList("branches", whenBranch).withTransform() +field("exhaustivenessStatus", exhaustivenessStatusType, nullable = true, withReplace = true) +booleanField("usedAsExpression") @@ -652,7 +669,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } } -private fun Element.withArgs(vararg replacements: Pair): AbstractElement { +fun Element.withArgs(vararg replacements: Pair): AbstractElement { val replaceMap = replacements.toMap() val newArguments = typeArguments.map { replaceMap[it.name]?.let { SimpleTypeArgument(it, null) } ?: it } return ElementWithArguments(this, newArguments) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt index b152876faab..8483247ff46 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt @@ -72,6 +72,7 @@ val typeParameterSymbolType = type("fir.symbols.impl", "FirTypeParameterSymbol") val emptyArgumentListType = type("fir.expressions", "FirEmptyArgumentList") val firScopeProviderType = type("fir.scopes", "FirScopeProvider") val anonymousInitializerSymbolType = type("fir.symbols.impl", "FirAnonymousInitializerSymbol") +val fileSymbolType = type("fir.symbols.impl", "FirFileSymbol") val pureAbstractElementType = generatedType("FirPureAbstractElement") val coneEffectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration") diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt index 8b3fc0f4337..51116d9ec49 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt @@ -20,6 +20,7 @@ interface FieldContainer { } interface AbstractElement : FieldContainer, KindOwner { + val name: String val fields: Set val parents: List val typeArguments: List @@ -41,7 +42,7 @@ interface AbstractElement : FieldContainer, KindOwner { override val allParents: List get() = parents } -class Element(val name: String, kind: Kind) : AbstractElement { +class Element(override val name: String, kind: Kind) : AbstractElement { companion object { private val allowedKinds = setOf( Implementation.Kind.Interface, diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt index 6176e44215a..8520604dbe5 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/ElementUtils.kt @@ -66,7 +66,7 @@ fun fieldList(name: String, type: Importable, withReplace: Boolean = false): Fie return FieldList(name, type, withReplace) } -fun fieldList(element: Element, withReplace: Boolean = false): Field { +fun fieldList(element: AbstractElement, withReplace: Boolean = false): Field { return FieldList(element.name.replaceFirstChar(Char::lowercaseChar) + "s", element, withReplace) } @@ -96,4 +96,4 @@ fun Field.withReplace(): Field = copy().apply { withReplace = true } -fun FieldSet.withTransform(): FieldSet = this.map { it.withTransform() } \ No newline at end of file +fun FieldSet.withTransform(): FieldSet = this.map { it.withTransform() } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt index febe6ac596c..ddaee6f454c 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt @@ -205,5 +205,5 @@ class FieldList( ) } - override val isFirType: Boolean = baseType is Element + override val isFirType: Boolean = baseType is AbstractElement } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt index 004c66accce..26c5b4910c8 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/util/BaseTransformerTypeFinder.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.tree.generator.util import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder import org.jetbrains.kotlin.fir.tree.generator.model.AbstractElement -import org.jetbrains.kotlin.fir.tree.generator.model.Element import org.jetbrains.kotlin.fir.tree.generator.model.FieldList import org.jetbrains.kotlin.fir.tree.generator.model.FirField @@ -17,7 +16,7 @@ fun detectBaseTransformerTypes(builder: AbstractFirTreeBuilder) { for (field in element.allFirFields) { val fieldElement = when (field) { is FirField -> field.element - is FieldList -> field.baseType as Element + is FieldList -> field.baseType as AbstractElement else -> throw IllegalArgumentException() } usedAsFieldType[fieldElement] = true diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index 3ad75a74fa1..523de3f2a67 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -13,7 +13,9 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.references.* -import org.jetbrains.kotlin.fir.resolve.* +import org.jetbrains.kotlin.fir.resolve.defaultType +import org.jetbrains.kotlin.fir.resolve.fullyExpandedType +import org.jetbrains.kotlin.fir.resolve.toFirRegularClass import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol @@ -160,7 +162,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { stack.push((function.name ?: ANONYMOUS_NAME)) if (function.equalsToken != null) { function.bodyExpression!!.firstOfTypeWithRender(function.equalsToken) { this.result.typeRef } - ?: function.firstOfTypeWithRender(function.equalsToken) { this.returnTypeRef } + ?: function.firstOfTypeWithRender>(function.equalsToken) { this.returnTypeRef } } super.visitNamedFunction(function) stack.pop() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirDesignationState.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirDesignationState.kt index 41bd958c8bb..19c3065bc75 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirDesignationState.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirDesignationState.kt @@ -13,7 +13,7 @@ abstract class ContextByDesignationCollector(private val designation: F private val designationState = FirDesignationState(designation) protected abstract fun getCurrentContext(): C - protected abstract fun goToNestedDeclaration(declaration: FirDeclaration) + protected abstract fun goToNestedDeclaration(declaration: FirDeclaration<*>) fun getCollectedContext(): C { return context @@ -47,14 +47,14 @@ private class FirDesignationState(val designation: FirDeclarationDesignation) { fun canGoNext(): Boolean = currentIndex < designation.path.size - val currentDeclarationIfPresent: FirDeclaration? + val currentDeclarationIfPresent: FirDeclaration<*>? get() = when (currentIndex) { in designation.path.indices -> designation.path[currentIndex] designation.path.size -> designation.declaration else -> null } - val currentDeclaration: FirDeclaration + val currentDeclaration: FirDeclaration<*> get() = currentDeclarationIfPresent ?: error("Went inside target declaration") @@ -73,4 +73,4 @@ private class FirDesignationState(val designation: FirDeclarationDesignation) { throw IndexOutOfBoundsException() } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt index 2bbc33ae248..3890c6cec68 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt @@ -59,13 +59,13 @@ internal class FirModuleResolveStateDepended( override fun getOrBuildFirFile(ktFile: KtFile): FirFile = originalState.getOrBuildFirFile(ktFile) - override fun resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D = + override fun > resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D = originalState.resolveFirToPhase(declaration, toPhase) - override fun resolveFirToResolveType(declaration: D, type: ResolveType): D = + override fun > resolveFirToResolveType(declaration: D, type: ResolveType): D = originalState.resolveFirToResolveType(declaration, type) - override fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile? { + override fun tryGetCachedFirFile(declaration: FirDeclaration<*>, cache: ModuleFileCache): FirFile? { val ktFile = declaration.containingKtFileIfAny ?: return null cache.getCachedFirFile(ktFile)?.let { return it } ktFile.originalKtFile?.let(cache::getCachedFirFile)?.let { return it } @@ -79,11 +79,11 @@ internal class FirModuleResolveStateDepended( TODO("Diagnostics are not implemented for depended state") @OptIn(InternalForInline::class) - override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration = + override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration<*> = originalState.findSourceFirDeclaration(ktDeclaration) @OptIn(InternalForInline::class) - override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration = + override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration<*> = originalState.findSourceFirDeclaration(ktDeclaration) @OptIn(InternalForInline::class) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt index 79312598d12..47e6f57120f 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateImpl.kt @@ -11,10 +11,12 @@ import org.jetbrains.kotlin.analyzer.ModuleSourceInfoBase import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.realPsi -import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.InternalForInline import org.jetbrains.kotlin.idea.fir.low.level.api.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState @@ -31,8 +33,10 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.lazyResolveDecla import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSessionProvider import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSourcesSession -import org.jetbrains.kotlin.idea.fir.low.level.api.util.* +import org.jetbrains.kotlin.idea.fir.low.level.api.util.FirDeclarationForCompiledElementSearcher +import org.jetbrains.kotlin.idea.fir.low.level.api.util.FirElementFinder import org.jetbrains.kotlin.idea.fir.low.level.api.util.findSourceNonLocalFirDeclaration +import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext import org.jetbrains.kotlin.psi.* internal class FirModuleResolveStateImpl( @@ -70,7 +74,7 @@ internal class FirModuleResolveStateImpl( override fun getOrBuildFirFile(ktFile: KtFile): FirFile = firFileBuilder.buildRawFirFileWithCaching(ktFile, rootModuleSession.cache, preferLazyBodies = false) - override fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile? = + override fun tryGetCachedFirFile(declaration: FirDeclaration<*>, cache: ModuleFileCache): FirFile? = cache.getContainerFirFile(declaration) override fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List = @@ -80,21 +84,20 @@ internal class FirModuleResolveStateImpl( diagnosticsCollector.collectDiagnosticsForFile(ktFile, filter) @OptIn(InternalForInline::class) - override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration = + override fun findSourceFirDeclaration(ktDeclaration: KtDeclaration): FirDeclaration<*> = findSourceFirDeclarationByExpression(ktDeclaration) @OptIn(InternalForInline::class) - override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration = + override fun findSourceFirDeclaration(ktDeclaration: KtLambdaExpression): FirDeclaration<*> = findSourceFirDeclarationByExpression(ktDeclaration) /** * [ktDeclaration] should be either [KtDeclaration] or [KtLambdaExpression] */ - private fun findSourceFirDeclarationByExpression(ktDeclaration: KtExpression): FirDeclaration { + private fun findSourceFirDeclarationByExpression(ktDeclaration: KtExpression): FirDeclaration<*> { require(ktDeclaration.getModuleInfo() is ModuleSourceInfoBase) { "Declaration should have ModuleSourceInfo, instead it had ${ktDeclaration.getModuleInfo()}" } - val nonLocalNamedDeclaration = ktDeclaration.getNonLocalContainingOrThisDeclaration() ?: error("Declaration should have non-local container${ktDeclaration.getElementTextInContext()}") @@ -113,7 +116,7 @@ internal class FirModuleResolveStateImpl( toPhase = FirResolvePhase.BODY_RESOLVE, checkPCE = false, /*TODO*/ ) - val firDeclaration = FirElementFinder.findElementIn(nonLocalFirForNamedDeclaration) { firDeclaration -> + val firDeclaration = FirElementFinder.findElementIn>(nonLocalFirForNamedDeclaration) { firDeclaration -> when (val realPsi = firDeclaration.realPsi) { is KtObjectLiteralExpression -> realPsi.objectDeclaration == ktDeclaration is KtFunctionLiteral -> realPsi.parent == ktDeclaration @@ -125,7 +128,7 @@ internal class FirModuleResolveStateImpl( } @OptIn(InternalForInline::class) - override fun findSourceFirCompiledDeclaration(ktDeclaration: KtDeclaration): FirDeclaration { + override fun findSourceFirCompiledDeclaration(ktDeclaration: KtDeclaration): FirDeclaration<*> { require(ktDeclaration.containingKtFile.isCompiled) { "This method will only work on compiled declarations, but this declaration is not compiled: ${ktDeclaration.getElementTextInContext()}" } @@ -142,7 +145,7 @@ internal class FirModuleResolveStateImpl( } } - override fun resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D { + override fun > resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D { if (toPhase == FirResolvePhase.RAW_FIR) return declaration val fileCache = when (val session = declaration.moduleData.session) { is FirIdeSourcesSession -> session.cache @@ -158,7 +161,7 @@ internal class FirModuleResolveStateImpl( return declaration } - override fun resolveFirToResolveType(declaration: D, type: ResolveType): D { + override fun > resolveFirToResolveType(declaration: D, type: ResolveType): D { if (type == ResolveType.NoResolve) return declaration val fileCache = when (val session = declaration.moduleData.session) { is FirIdeSourcesSession -> session.cache diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt index de95f6642d9..bdc8d9015c5 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt @@ -65,8 +65,8 @@ internal object DeclarationCopyBuilder { } private fun FirDeclarationBuilder.initDeclaration( - originalDeclaration: FirDeclaration, - builtDeclaration: FirDeclaration, + originalDeclaration: FirDeclaration<*>, + builtDeclaration: FirDeclaration<*>, ) { resolvePhase = minOf(originalDeclaration.resolvePhase, FirResolvePhase.DECLARATIONS) source = builtDeclaration.source diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt index 11db5f84afd..a32723a1807 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt @@ -15,14 +15,14 @@ import org.jetbrains.kotlin.fir.resolve.toFirRegularClass import org.jetbrains.kotlin.idea.fir.low.level.api.util.getContainingFile class FirDeclarationDesignationWithFile( - path: List, - declaration: FirDeclaration, + path: List>, + declaration: FirDeclaration<*>, val firFile: FirFile ) : FirDeclarationDesignation( path, declaration, ) { - fun toSequenceWithFile(includeTarget: Boolean): Sequence = sequence { + fun toSequenceWithFile(includeTarget: Boolean): Sequence> = sequence { yield(firFile) yieldAll(path) if (includeTarget) yield(declaration) @@ -30,20 +30,20 @@ class FirDeclarationDesignationWithFile( } open class FirDeclarationDesignation( - val path: List, - val declaration: FirDeclaration, + val path: List>, + val declaration: FirDeclaration<*>, ) { - fun toSequence(includeTarget: Boolean): Sequence = sequence { + fun toSequence(includeTarget: Boolean): Sequence> = sequence { yieldAll(path) if (includeTarget) yield(declaration) } } -private fun FirRegularClass.collectForNonLocal(): List { +private fun FirRegularClass.collectForNonLocal(): List> { require(!isLocal) val firProvider = moduleData.session.firProvider var containingClassId = classId.outerClassId - val designation = mutableListOf(this) + val designation = mutableListOf>(this) while (containingClassId != null) { val currentClass = firProvider.getFirClassifierByFqName(containingClassId) ?: break designation.add(currentClass) @@ -52,7 +52,7 @@ private fun FirRegularClass.collectForNonLocal(): List { return designation } -private fun collectDesignationPath(declaration: FirDeclaration): List? { +private fun collectDesignationPath(declaration: FirDeclaration<*>): List>? { val containingClass = when (declaration) { is FirCallableDeclaration<*> -> { if (declaration.symbol.callableId.isLocal) return null @@ -79,27 +79,27 @@ private fun collectDesignationPath(declaration: FirDeclaration): List.collectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile = tryCollectDesignation(firFile) ?: error("No designation of local declaration ${this.render()}") -fun FirDeclaration.collectDesignation(): FirDeclarationDesignation = +fun FirDeclaration<*>.collectDesignation(): FirDeclarationDesignation = tryCollectDesignation() ?: error("No designation of local declaration ${this.render()}") -fun FirDeclaration.collectDesignationWithFile(): FirDeclarationDesignationWithFile = +fun FirDeclaration<*>.collectDesignationWithFile(): FirDeclarationDesignationWithFile = tryCollectDesignationWithFile() ?: error("No designation of local declaration ${this.render()}") -fun FirDeclaration.tryCollectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile? = +fun FirDeclaration<*>.tryCollectDesignation(firFile: FirFile): FirDeclarationDesignationWithFile? = collectDesignationPath(this)?.let { FirDeclarationDesignationWithFile(it, this, firFile) } -fun FirDeclaration.tryCollectDesignation(): FirDeclarationDesignation? = +fun FirDeclaration<*>.tryCollectDesignation(): FirDeclarationDesignation? = collectDesignationPath(this)?.let { FirDeclarationDesignation(it, this) } -fun FirDeclaration.tryCollectDesignationWithFile(): FirDeclarationDesignationWithFile? { +fun FirDeclaration<*>.tryCollectDesignationWithFile(): FirDeclarationDesignationWithFile? { val path = collectDesignationPath(this) ?: return null val firFile = getContainingFile() ?: return null return FirDeclarationDesignationWithFile(path, this, firFile) -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveState.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveState.kt index 73911da2ce2..1739601b286 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveState.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirModuleResolveState.kt @@ -44,13 +44,13 @@ abstract class FirModuleResolveState { /** * Try get [FirFile] from the cache in undefined phase */ - internal abstract fun tryGetCachedFirFile(declaration: FirDeclaration, cache: ModuleFileCache): FirFile? + internal abstract fun tryGetCachedFirFile(declaration: FirDeclaration<*>, cache: ModuleFileCache): FirFile? internal abstract fun getDiagnostics(element: KtElement, filter: DiagnosticCheckerFilter): List internal abstract fun collectDiagnosticsForFile(ktFile: KtFile, filter: DiagnosticCheckerFilter): Collection - internal inline fun withLock(declaration: D, declarationLockType: DeclarationLockType, action: (D) -> R): R { + internal inline fun , R> withLock(declaration: D, declarationLockType: DeclarationLockType, action: (D) -> R): R { val originalDeclaration = (declaration as? FirCallableDeclaration<*>)?.unwrapFakeOverrides() ?: declaration val session = originalDeclaration.moduleData.session return when { @@ -67,12 +67,12 @@ abstract class FirModuleResolveState { @InternalForInline abstract fun findSourceFirDeclaration( ktDeclaration: KtDeclaration, - ): FirDeclaration + ): FirDeclaration<*> @InternalForInline abstract fun findSourceFirDeclaration( ktDeclaration: KtLambdaExpression, - ): FirDeclaration + ): FirDeclaration<*> /** * Looks for compiled non-local [ktDeclaration] declaration by querying its classId/callableId from the SymbolProvider. @@ -82,10 +82,10 @@ abstract class FirModuleResolveState { @InternalForInline abstract fun findSourceFirCompiledDeclaration( ktDeclaration: KtDeclaration - ): FirDeclaration + ): FirDeclaration<*> - internal abstract fun resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D + internal abstract fun > resolveFirToPhase(declaration: D, toPhase: FirResolvePhase): D - internal abstract fun resolveFirToResolveType(declaration: D, type: ResolveType): D + internal abstract fun > resolveFirToResolveType(declaration: D, type: ResolveType): D } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacade.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacade.kt index cd5a3745283..c93c75f4bd1 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacade.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacade.kt @@ -43,7 +43,7 @@ fun ModuleInfo.getResolveState(project: Project): FirModuleResolveState = inline fun KtDeclaration.withFirDeclaration( resolveState: FirModuleResolveState, phase: FirResolvePhase = FirResolvePhase.RAW_FIR, - action: (FirDeclaration) -> R + action: (FirDeclaration<*>) -> R ): R { val firDeclaration = if (containingKtFile.isCompiled) { resolveState.findSourceFirCompiledDeclaration(this) @@ -71,7 +71,7 @@ inline fun KtDeclaration.withFirDeclaration( inline fun KtDeclaration.withFirDeclaration( resolveState: FirModuleResolveState, resolveType: ResolveType = ResolveType.NoResolve, - action: (FirDeclaration) -> R + action: (FirDeclaration<*>) -> R ): R { val firDeclaration = resolveState.findSourceFirDeclaration(this) firDeclaration.resolvedFirToType(resolveType, resolveState) @@ -88,7 +88,7 @@ inline fun KtDeclaration.withFirDeclaration( * Otherwise, some threading problems may arise, */ @OptIn(InternalForInline::class) -inline fun KtDeclaration.withFirDeclarationOfType( +inline fun , R> KtDeclaration.withFirDeclarationOfType( resolveState: FirModuleResolveState, phase: FirResolvePhase = FirResolvePhase.RAW_FIR, action: (F) -> R @@ -106,7 +106,7 @@ inline fun KtDeclaration.withFirDeclarationOfTyp * Otherwise, some threading problems may arise, */ @OptIn(InternalForInline::class) -inline fun KtLambdaExpression.withFirDeclarationOfType( +inline fun , R> KtLambdaExpression.withFirDeclarationOfType( resolveState: FirModuleResolveState, action: (F) -> R ): R { @@ -119,7 +119,7 @@ inline fun KtLambdaExpression.withFirDeclaration * Executes [action] with given [FirDeclaration] under read action, so resolve **is not possible** inside [action] * [FirDeclaration] passed to [action] will be resolved at least to [phase] when executing [action] on it */ -fun D.withFirDeclaration( +fun , R> D.withFirDeclaration( resolveState: FirModuleResolveState, phase: FirResolvePhase = FirResolvePhase.RAW_FIR, action: (D) -> R, @@ -132,7 +132,7 @@ fun D.withFirDeclaration( * Executes [action] with given [FirDeclaration] under read action, so resolve **is not possible** inside [action] * [FirDeclaration] passed to [action] will be resolved at least to [phase] when executing [action] on it */ -fun D.withFirDeclaration( +fun , R> D.withFirDeclaration( type: ResolveType, resolveState: FirModuleResolveState, action: (D) -> R, @@ -144,7 +144,7 @@ fun D.withFirDeclaration( /** * Executes [action] with given [FirDeclaration] under write lock, so resolve **is possible** inside [action] */ -fun D.withFirDeclarationInWriteLock( +fun , R> D.withFirDeclarationInWriteLock( resolveState: FirModuleResolveState, phase: FirResolvePhase = FirResolvePhase.RAW_FIR, action: (D) -> R, @@ -156,7 +156,7 @@ fun D.withFirDeclarationInWriteLock( /** * Executes [action] with given [FirDeclaration] under write lock, so resolve **is possible** inside [action] */ -fun D.withFirDeclarationInWriteLock( +fun , R> D.withFirDeclarationInWriteLock( resolveState: FirModuleResolveState, resolveType: ResolveType = ResolveType.BodyResolveWithChildren, action: (D) -> R, @@ -187,7 +187,7 @@ fun KtFile.collectDiagnosticsForFile( * * Should not be called form [withFirDeclaration], [withFirDeclarationOfType] functions, as it it may cause deadlock */ -fun D.resolvedFirToPhase( +fun > D.resolvedFirToPhase( phase: FirResolvePhase, resolveState: FirModuleResolveState ): D = @@ -198,7 +198,7 @@ fun D.resolvedFirToPhase( * * Should not be called form [withFirDeclaration], [withFirDeclarationOfType] functions, as it it may cause deadlock */ -fun D.resolvedFirToType( +fun > D.resolvedFirToType( type: ResolveType, resolveState: FirModuleResolveState ): D = diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt index 0dd57638f1e..8554fe5aa7f 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt @@ -235,7 +235,7 @@ object LowLevelFirApiFacadeForResolveOnAir { } val originalDeclaration = nonLocalDeclaration.getOrBuildFir(state) - check(originalDeclaration is FirDeclaration) { "Invalid original declaration type ${originalDeclaration::class.simpleName}" } + check(originalDeclaration is FirDeclaration<*>) { "Invalid original declaration type ${originalDeclaration::class.simpleName}" } val originalDesignation = originalDeclaration.collectDesignation() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/BeforeElementDiagnosticCollectionHandler.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/BeforeElementDiagnosticCollectionHandler.kt index 9e112782e7d..b7f29dfd82b 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/BeforeElementDiagnosticCollectionHandler.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/BeforeElementDiagnosticCollectionHandler.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration abstract class BeforeElementDiagnosticCollectionHandler: FirSessionComponent { open fun beforeCollectingForElement(element: FirElement) {} - open fun beforeGoingNestedDeclaration(declaration: FirDeclaration, context: PersistentCheckerContext) {} + open fun beforeGoingNestedDeclaration(declaration: FirDeclaration<*>, context: PersistentCheckerContext) {} } val FirSession.beforeElementDiagnosticCollectionHandler: BeforeElementDiagnosticCollectionHandler? by FirSession.nullableSessionComponentAccessor() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticRetriever.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticRetriever.kt index 4009146b0d3..b6019020d18 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticRetriever.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticRetriever.kt @@ -24,7 +24,7 @@ internal abstract class FileStructureElementDiagnosticRetriever { } internal class SingleNonLocalDeclarationDiagnosticRetriever( - private val structureElementDeclaration: FirDeclaration + private val structureElementDeclaration: FirDeclaration<*> ) : FileStructureElementDiagnosticRetriever() { override fun retrieve( firFile: FirFile, @@ -41,13 +41,13 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever( } private class Visitor( - private val structureElementDeclaration: FirDeclaration, + private val structureElementDeclaration: FirDeclaration<*>, context: PersistentCheckerContext, components: List ) : FirIdeDiagnosticVisitor(context, components) { private var insideAlwaysVisitableDeclarations = 0 - override fun shouldVisitDeclaration(declaration: FirDeclaration): Boolean { + override fun shouldVisitDeclaration(declaration: FirDeclaration<*>): Boolean { if (declaration.shouldVisitWithNestedDeclarations()) { insideAlwaysVisitableDeclarations++ } @@ -64,7 +64,7 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever( } } - private fun FirDeclaration.shouldVisitWithNestedDeclarations(): Boolean { + private fun FirDeclaration<*>.shouldVisitWithNestedDeclarations(): Boolean { if (shouldDiagnosticsAlwaysBeCheckedOn(this)) return true return when (this) { is FirAnonymousInitializer -> true @@ -75,7 +75,7 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever( } } - override fun onDeclarationExit(declaration: FirDeclaration) { + override fun onDeclarationExit(declaration: FirDeclaration<*>) { if (declaration.shouldVisitWithNestedDeclarations()) { insideAlwaysVisitableDeclarations-- } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticsCollector.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticsCollector.kt index 1e0e62ff0b9..bbe24a3aed3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticsCollector.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FileStructureElementDiagnosticsCollector.kt @@ -17,7 +17,7 @@ internal class FileStructureElementDiagnosticsCollector private constructor(priv } fun collectForStructureElement( - firDeclaration: FirDeclaration, + firDeclaration: FirDeclaration<*>, createVisitor: (components: List) -> CheckerRunningDiagnosticCollectorVisitor, ): FileStructureElementDiagnosticList { val reporter = FirIdeDiagnosticReporter() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FirIdeDiagnosticVisitor.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FirIdeDiagnosticVisitor.kt index dc95cd1ac4b..5d4af1c6035 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FirIdeDiagnosticVisitor.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/FirIdeDiagnosticVisitor.kt @@ -19,7 +19,7 @@ internal open class FirIdeDiagnosticVisitor( private val beforeElementDiagnosticCollectionHandler = context.session.beforeElementDiagnosticCollectionHandler override fun visitNestedElements(element: FirElement) { - if (element is FirDeclaration) { + if (element is FirDeclaration<*>) { beforeElementDiagnosticCollectionHandler?.beforeGoingNestedDeclaration(element, context) } super.visitNestedElements(element) @@ -32,4 +32,4 @@ internal open class FirIdeDiagnosticVisitor( element.accept(it, context) } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/fir/ContextCollectingDiagnosticCollectorVisitor.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/fir/ContextCollectingDiagnosticCollectorVisitor.kt index 84ba8e8fcc7..d7a0399b214 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/fir/ContextCollectingDiagnosticCollectorVisitor.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostics/fir/ContextCollectingDiagnosticCollectorVisitor.kt @@ -8,7 +8,10 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.fir import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.resolve.SessionHolder import org.jetbrains.kotlin.idea.fir.low.level.api.ContextByDesignationCollector @@ -24,13 +27,13 @@ private class ContextCollectingDiagnosticCollectorVisitor private constructor( private val contextCollector = object : ContextByDesignationCollector(designation) { override fun getCurrentContext(): PersistentCheckerContext = context - override fun goToNestedDeclaration(declaration: FirDeclaration) { + override fun goToNestedDeclaration(declaration: FirDeclaration<*>) { declaration.accept(this@ContextCollectingDiagnosticCollectorVisitor, null) } } override fun visitNestedElements(element: FirElement) { - if (element is FirDeclaration) { + if (element is FirDeclaration<*>) { contextCollector.nextStep() } else { element.accept(this, null) @@ -52,7 +55,7 @@ internal object PersistenceContextCollector { fun collectContext( sessionHolder: SessionHolder, firFile: FirFile, - declaration: FirDeclaration, + declaration: FirDeclaration<*>, ): PersistentCheckerContext { val isLocal = when (declaration) { is FirClassLikeDeclaration<*> -> declaration.symbol.classId.isLocal @@ -65,4 +68,4 @@ internal object PersistenceContextCollector { val designation = declaration.collectDesignation(firFile) return ContextCollectingDiagnosticCollectorVisitor.collect(sessionHolder, designation) } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt index 1f7f10f64be..5e3f0d9a9dd 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator.kt @@ -7,7 +7,10 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.element.builder import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator @@ -56,7 +59,7 @@ class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl( returnTypeCalculator, outerBodyResolveContext ) { - private val declarationDesignation = designation.filterIsInstance() + private val declarationDesignation = designation.filterIsInstance>() override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, @@ -67,7 +70,7 @@ class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl( return super.transformSimpleFunction(simpleFunction, data) } - override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirDeclaration { + override fun transformConstructor(constructor: FirConstructor, data: ResolutionMode): FirConstructor { val firDesignation = FirDeclarationDesignation(declarationDesignation, constructor) FirLazyBodiesCalculator.calculateLazyBodyForSecondaryConstructor(firDesignation) return super.transformConstructor(constructor, data) @@ -78,4 +81,4 @@ class FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculatorImpl( FirLazyBodiesCalculator.calculateLazyBodyForProperty(firDesignation) return super.transformProperty(property, data) } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt index 8e03e643271..540fde1a871 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirTowerDataContextCollector.kt @@ -40,7 +40,7 @@ internal class FirTowerDataContextAllElementsCollector : FirTowerDataContextColl elementsToContext[closestStatementInBlock] = context } - override fun addDeclarationContext(declaration: FirDeclaration, context: FirTowerDataContext) { + override fun addDeclarationContext(declaration: FirDeclaration<*>, context: FirTowerDataContext) { val psi = declaration.psi as? KtElement ?: return elementsToContext[psi] = context } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/ModuleFileCache.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/ModuleFileCache.kt index ec00020022c..10d1f158e7b 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/ModuleFileCache.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/builder/ModuleFileCache.kt @@ -12,16 +12,13 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.ThreadSafe +import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtFile import java.util.* import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.locks.ReentrantLock -import java.util.concurrent.locks.ReentrantReadWriteLock -import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.ThreadSafe -import kotlin.concurrent.withLock /** * Caches mapping [KtFile] -> [FirFile] of module [moduleInfo] @@ -48,13 +45,13 @@ internal abstract class ModuleFileCache { */ abstract fun fileCached(file: KtFile, createValue: () -> FirFile): FirFile - abstract fun getContainerFirFile(declaration: FirDeclaration): FirFile? + abstract fun getContainerFirFile(declaration: FirDeclaration<*>): FirFile? abstract fun getCachedFirFile(ktFile: KtFile): FirFile? abstract val firFileLockProvider: LockProvider - inline fun withReadLockOn(declaration: D, action: (D) -> R): R { + inline fun , R> withReadLockOn(declaration: D, action: (D) -> R): R { val file = getContainerFirFile(declaration) ?: error("No fir file found for\n${declaration.render()}") return firFileLockProvider.withReadLock(file) { action(declaration) } @@ -72,7 +69,7 @@ internal class ModuleFileCacheImpl(override val session: FirSession) : ModuleFil override fun getCachedFirFile(ktFile: KtFile): FirFile? = ktFileToFirFile[ktFile] - override fun getContainerFirFile(declaration: FirDeclaration): FirFile? { + override fun getContainerFirFile(declaration: FirDeclaration<*>): FirFile? { val ktFile = declaration.psi?.containingFile as? KtFile ?: return null return getCachedFirFile(ktFile) } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileElementFactory.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileElementFactory.kt index 03c0ab79477..40c80135a94 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileElementFactory.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileElementFactory.kt @@ -19,7 +19,7 @@ internal object FileElementFactory { * should be consistent with [isReanalyzableContainer] */ fun createFileStructureElement( - firDeclaration: FirDeclaration, + firDeclaration: FirDeclaration<*>, ktDeclaration: KtDeclaration, firFile: FirFile, firFileLockProvider: LockProvider, @@ -68,4 +68,4 @@ private fun KtProperty.isReanalyzableContainer() = name != null && typeReference != null private val KtNamedFunction.hasExplicitTypeOrUnit - get() = hasBlockBody() || typeReference != null \ No newline at end of file + get() = hasBlockBody() || typeReference != null diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt index c437e704c2a..2a9f5872e8c 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureElement.kt @@ -222,7 +222,7 @@ internal class ReanalyzablePropertyStructureElement( internal class NonReanalyzableDeclarationStructureElement( firFile: FirFile, - val fir: FirDeclaration, + val fir: FirDeclaration<*>, override val psi: KtDeclaration, lockProvider: LockProvider, ) : FileStructureElement(firFile, lockProvider) { @@ -263,7 +263,7 @@ internal class RootStructureElement( companion object { private val recorder = object : FirElementsRecorder() { override fun visitElement(element: FirElement, data: MutableMap) { - if (element !is FirDeclaration || element is FirFile) { + if (element !is FirDeclaration<*> || element is FirFile) { super.visitElement(element, data) } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt index b7f2d9868dc..cb3ceecf034 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructureUtil.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache -import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyDeclarationResolver import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.declarationCanBeLazilyResolved import org.jetbrains.kotlin.idea.fir.low.level.api.util.replaceFirst import org.jetbrains.kotlin.psi.* @@ -30,12 +29,12 @@ internal object FileStructureUtil { fun replaceDeclaration(firFile: FirFile, from: FirCallableDeclaration<*>, to: FirCallableDeclaration<*>) { val declarations = if (from.symbol.callableId.className == null) { - firFile.declarations as MutableList + firFile.declarations as MutableList> } else { val classLikeLookupTag = from.containingClass() ?: error("Class name should not be null for non-top-level & non-local declarations, but was null for\n${from.render()}") val containingClass = classLikeLookupTag.toSymbol(firFile.moduleData.session)?.fir as FirRegularClass - containingClass.declarations as MutableList + containingClass.declarations as MutableList> } declarations.replaceFirst(from, to) } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt index f5bd1a1ac2f..c2d73ed9c46 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt @@ -21,14 +21,14 @@ import org.jetbrains.kotlin.psi.KtSecondaryConstructor internal object FirLazyBodiesCalculator { fun calculateLazyBodiesInside(designation: FirDeclarationDesignation) { - designation.declaration.transform>( + designation.declaration.transform>>( FirLazyBodiesCalculatorTransformer, designation.toSequence(includeTarget = true).toMutableList() ) } fun calculateLazyBodies(firFile: FirFile) { - firFile.transform>(FirLazyBodiesCalculatorTransformer, mutableListOf()) + firFile.transform>>(FirLazyBodiesCalculatorTransformer, mutableListOf()) } fun calculateLazyBodiesForFunction(designation: FirDeclarationDesignation) { @@ -104,16 +104,16 @@ internal object FirLazyBodiesCalculator { || (firProperty.delegate as? FirWrappedDelegateExpression)?.expression is FirLazyExpression } -private object FirLazyBodiesCalculatorTransformer : FirTransformer>() { +private object FirLazyBodiesCalculatorTransformer : FirTransformer>>() { - override fun transformFile(file: FirFile, data: MutableList): FirDeclaration { + override fun transformFile(file: FirFile, data: MutableList>): FirFile { file.declarations.forEach { it.transformSingle(this, data) } return file } - override fun transformElement(element: E, data: MutableList): E { + override fun transformElement(element: E, data: MutableList>): E { if (element is FirRegularClass) { data.add(element) element.declarations.forEach { @@ -127,8 +127,8 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer - ): FirDeclaration { + data: MutableList> + ): FirSimpleFunction { if (simpleFunction.body is FirLazyBlock) { val designation = FirDeclarationDesignation(data, simpleFunction) FirLazyBodiesCalculator.calculateLazyBodiesForFunction(designation) @@ -138,8 +138,8 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer - ): FirDeclaration { + data: MutableList> + ): FirConstructor { if (constructor.body is FirLazyBlock) { val designation = FirDeclarationDesignation(data, constructor) FirLazyBodiesCalculator.calculateLazyBodyForSecondaryConstructor(designation) @@ -147,7 +147,7 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer): FirDeclaration { + override fun transformProperty(property: FirProperty, data: MutableList>): FirProperty { if (FirLazyBodiesCalculator.needCalculatingLazyBodyForProperty(property)) { val designation = FirDeclarationDesignation(data, property) FirLazyBodiesCalculator.calculateLazyBodyForProperty(designation) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt index 87de98c4757..7255a285d33 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolveToType.kt @@ -5,16 +5,11 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve -import org.jetbrains.kotlin.fir.containingClass import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.toFirRegularClass -import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.ModuleFileCache import org.jetbrains.kotlin.idea.fir.low.level.api.file.builder.runCustomResolveUnderLock -import org.jetbrains.kotlin.idea.fir.low.level.api.util.containingKtFileIfAny import org.jetbrains.kotlin.idea.fir.low.level.api.util.getContainingFile enum class ResolveType { @@ -34,7 +29,7 @@ enum class ResolveType { } internal fun FirLazyDeclarationResolver.lazyResolveDeclaration( - firDeclaration: FirDeclaration, + firDeclaration: FirDeclaration<*>, moduleFileCache: ModuleFileCache, toResolveType: ResolveType, scopeSession: ScopeSession, @@ -162,4 +157,4 @@ internal fun FirLazyDeclarationResolver.lazyResolveDeclaration( ) } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt index 439f2ffdd66..82ca0a417da 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt @@ -84,7 +84,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui ).transformDeclaration(firFileBuilder.firPhaseRunner) } - private fun FirDeclaration.isValidForResolve(): Boolean = when (origin) { + private fun FirDeclaration<*>.isValidForResolve(): Boolean = when (origin) { is FirDeclarationOrigin.Source, is FirDeclarationOrigin.ImportedFromObject, is FirDeclarationOrigin.Delegated, @@ -190,7 +190,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui * @param firDeclarationToResolve target non-local declaration */ fun lazyResolveDeclaration( - firDeclarationToResolve: FirDeclaration, + firDeclarationToResolve: FirDeclaration<*>, moduleFileCache: ModuleFileCache, scopeSession: ScopeSession, toPhase: FirResolvePhase, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/NonLocalDeclarationUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/NonLocalDeclarationUtils.kt index 2f4c9418009..13b7abb7b2e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/NonLocalDeclarationUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/NonLocalDeclarationUtils.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -internal fun FirDeclaration.getKtDeclarationForFirElement(): KtDeclaration { +internal fun FirDeclaration<*>.getKtDeclarationForFirElement(): KtDeclaration { require(this !is FirFile) val ktDeclaration = (psi as? KtDeclaration) ?: run { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt index 12df8fe4d67..0fd85ad46a5 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt @@ -32,7 +32,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( designation: FirDeclarationDesignation, rootNonLocalDeclaration: KtDeclaration, replacement: RawFirReplacement? - ): FirDeclaration { + ): FirDeclaration<*> { val replacementApplier = replacement?.Applier() val builder = RawFirNonLocalDeclarationBuilder( session = session, @@ -51,7 +51,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( scopeProvider: FirScopeProvider, designation: FirDeclarationDesignation, rootNonLocalDeclaration: KtDeclaration, - ): FirDeclaration { + ): FirDeclaration<*> { val functionsToRebind = when (val originalDeclaration = designation.declaration) { is FirSimpleFunction -> setOf(originalDeclaration) is FirProperty -> setOfNotNull(originalDeclaration.getter, originalDeclaration.setter) @@ -102,7 +102,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( } } - private fun moveNext(iterator: Iterator, containingClass: FirRegularClass?): FirDeclaration { + private fun moveNext(iterator: Iterator>, containingClass: FirRegularClass?): FirDeclaration<*> { if (!iterator.hasNext()) { val visitor = VisitorWithReplacement() return when (declarationToBuild) { @@ -112,7 +112,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( visitor.convertProperty(declarationToBuild, ownerSymbol, ownerTypeArgumentsCount) } else -> visitor.convertElement(declarationToBuild) - } as FirDeclaration + } as FirDeclaration<*> } val parent = iterator.next() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeBuiltinsAndCloneableSessionProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeBuiltinsAndCloneableSessionProvider.kt index fc8799a3a2b..347315d70f2 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeBuiltinsAndCloneableSessionProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeBuiltinsAndCloneableSessionProvider.kt @@ -25,12 +25,12 @@ internal class FirIdeBuiltinsAndCloneableSessionProvider(override val symbolProv override fun getFirFilesByPackage(fqName: FqName): List = emptyList() @FirProviderInternals - override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) = shouldNotBeCalled() + override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) = shouldNotBeCalled() @FirProviderInternals - override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) = shouldNotBeCalled() + override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) = shouldNotBeCalled() override fun getClassNamesInPackage(fqName: FqName): Set = shouldNotBeCalled() private fun shouldNotBeCalled(): Nothing = error("Should not be called for FirIdeBuiltinsAndCloneableSession") -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeLibrariesSessionProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeLibrariesSessionProvider.kt index e0153ee1753..9f95196c07e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeLibrariesSessionProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeLibrariesSessionProvider.kt @@ -27,10 +27,10 @@ internal class FirIdeLibrariesSessionProvider( override fun getFirFilesByPackage(fqName: FqName): List = emptyList() @FirProviderInternals - override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) = shouldNotBeCalled() + override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) = shouldNotBeCalled() @FirProviderInternals - override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) = shouldNotBeCalled() + override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) = shouldNotBeCalled() override fun getClassNamesInPackage(fqName: FqName): Set = shouldNotBeCalled() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt index 19742dc492b..ff4fd3700e4 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt @@ -92,12 +92,12 @@ internal class FirIdeProvider( @FirProviderInternals - override fun recordGeneratedClass(owner: FirAnnotatedDeclaration, klass: FirRegularClass) { + override fun recordGeneratedClass(owner: FirAnnotatedDeclaration<*>, klass: FirRegularClass) { TODO() } @FirProviderInternals - override fun recordGeneratedMember(owner: FirAnnotatedDeclaration, klass: FirDeclaration) { + override fun recordGeneratedMember(owner: FirAnnotatedDeclaration<*>, klass: FirDeclaration<*>) { TODO() } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt index 68f81e2a426..941f16d8ba4 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedBodyResolveTransformerForIDE.kt @@ -10,7 +10,10 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor -import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.* +import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer +import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector +import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession +import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.createReturnTypeCalculatorForIDE import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator @@ -46,12 +49,12 @@ internal class FirDesignatedBodyResolveTransformerForIDE( ) { private val ideDeclarationTransformer = IDEDeclarationTransformer(designation) - override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration = + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> = ideDeclarationTransformer.transformDeclarationContent(this, declaration, data) { super.transformDeclarationContent(declaration, data) } - override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = + override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = ideDeclarationTransformer.needReplacePhase && firDeclaration !is FirFile && super.needReplacePhase(firDeclaration) override fun transformDeclaration(phaseRunner: FirPhaseRunner) { @@ -73,7 +76,7 @@ internal class FirDesignatedBodyResolveTransformerForIDE( ensureResolvedDeep(designation.declaration) } - override fun ensureResolved(declaration: FirDeclaration) { + override fun ensureResolved(declaration: FirDeclaration<*>) { when (declaration) { is FirSimpleFunction, is FirConstructor, is FirTypeAlias, is FirField, is FirAnonymousInitializer -> declaration.ensurePhase(FirResolvePhase.BODY_RESOLVE) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt index 034d99ac939..f5d691826e4 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedContractsResolveTransformerForIDE.kt @@ -16,8 +16,9 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.FirLazyBodiesCalculator import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.isResolvedForAllDeclarations import org.jetbrains.kotlin.idea.fir.low.level.api.transformers.FirLazyTransformerForIDE.Companion.updateResolvedPhaseForDeclarationAndChildren -import org.jetbrains.kotlin.idea.fir.low.level.api.util.* +import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensureDesignation import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase +import org.jetbrains.kotlin.idea.fir.low.level.api.util.isTargetCallableDeclarationAndInPhase /** * Transform designation into CONTRACTS declaration. Affects only for target declaration and it's children @@ -40,13 +41,13 @@ internal class FirDesignatedContractsResolveTransformerForIDE( } } - override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration = + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> = ideDeclarationTransformer.transformDeclarationContent(this, declaration, data) { designation.declaration.updateResolvedPhaseForDeclarationAndChildren(FirResolvePhase.CONTRACTS) super.transformDeclarationContent(declaration, data) } - override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = + override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = ideDeclarationTransformer.needReplacePhase && firDeclaration !is FirFile && super.needReplacePhase(firDeclaration) override fun transformDeclaration(phaseRunner: FirPhaseRunner) { @@ -65,7 +66,7 @@ internal class FirDesignatedContractsResolveTransformerForIDE( ensureResolvedDeep(designation.declaration) } - override fun ensureResolved(declaration: FirDeclaration) { + override fun ensureResolved(declaration: FirDeclaration<*>) { when (declaration) { is FirSimpleFunction, is FirConstructor, is FirAnonymousInitializer -> declaration.ensurePhase(FirResolvePhase.CONTRACTS) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt index a5f7653a46f..8e50fbdb769 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedImplicitTypesTransformerForIDE.kt @@ -49,12 +49,12 @@ internal class FirDesignatedImplicitTypesTransformerForIDE( ) { private val ideDeclarationTransformer = IDEDeclarationTransformer(designation) - override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration = + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> = ideDeclarationTransformer.transformDeclarationContent(this, declaration, data) { super.transformDeclarationContent(declaration, data) } - override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = + override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = ideDeclarationTransformer.needReplacePhase && firDeclaration !is FirFile && super.needReplacePhase(firDeclaration) override fun transformDeclaration(phaseRunner: FirPhaseRunner) { @@ -78,7 +78,7 @@ internal class FirDesignatedImplicitTypesTransformerForIDE( ensureResolvedDeep(designation.declaration) } - override fun ensureResolved(declaration: FirDeclaration) { + override fun ensureResolved(declaration: FirDeclaration<*>) { when (declaration) { is FirSimpleFunction -> check(declaration.returnTypeRef is FirResolvedTypeRef) is FirField -> check(declaration.returnTypeRef is FirResolvedTypeRef) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt index fb4e6432c33..767a6a97e37 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedStatusResolveTransformerForIDE.kt @@ -32,10 +32,10 @@ internal class FirDesignatedStatusResolveTransformerForIDE( val designationTransformer = IDEDeclarationTransformer(designation) - override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = + override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = firDeclaration !is FirFile && super.needReplacePhase(firDeclaration) - override fun transformDeclarationContent(declaration: FirDeclaration, data: FirResolvedDeclarationStatus?): FirDeclaration = + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: FirResolvedDeclarationStatus?): FirDeclaration<*> = designationTransformer.transformDeclarationContent(this, declaration, data) { super.transformDeclarationContent(declaration, data) } @@ -57,7 +57,7 @@ internal class FirDesignatedStatusResolveTransformerForIDE( ensureResolvedDeep(designation.declaration) } - override fun ensureResolved(declaration: FirDeclaration) { + override fun ensureResolved(declaration: FirDeclaration<*>) { if (declaration !is FirAnonymousInitializer) { declaration.ensurePhase(FirResolvePhase.STATUS) } @@ -77,4 +77,4 @@ internal class FirDesignatedStatusResolveTransformerForIDE( else -> error("Unexpected type: ${declaration::class.simpleName}") } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt index 88bb16ceeaf..2189e5953f8 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedSupertypeResolverTransformerForIDE.kt @@ -53,7 +53,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE( ) { val declarationTransformer = IDEDeclarationTransformer(classDesignation) - override fun visitDeclarationContent(declaration: FirDeclaration, data: Any?) { + override fun visitDeclarationContent(declaration: FirDeclaration<*>, data: Any?) { declarationTransformer.visitDeclarationContent(this, declaration, data) { super.visitDeclarationContent(declaration, data) declaration @@ -64,7 +64,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE( private inner class DesignatedFirApplySupertypesTransformer(classDesignation: FirDeclarationDesignation) : FirApplySupertypesTransformer(supertypeComputationSession) { - override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = + override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = firDeclaration !is FirFile && super.needReplacePhase(firDeclaration) override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): FirStatement { @@ -79,15 +79,15 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE( else super.transformAnonymousObject(anonymousObject, data) } - override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirDeclaration { + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Any?): FirStatement { return if (typeAlias.resolvePhase >= FirResolvePhase.SUPER_TYPES) - transformDeclarationContent(typeAlias, data) + transformDeclarationContent(typeAlias, data) as FirTypeAlias else super.transformTypeAlias(typeAlias, data) } val declarationTransformer = IDEDeclarationTransformer(classDesignation) - override fun transformDeclarationContent(declaration: FirDeclaration, data: Any?): FirDeclaration { + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: Any?): FirDeclaration<*> { return declarationTransformer.transformDeclarationContent(this, declaration, data) { super.transformDeclarationContent(declaration, data) } @@ -95,7 +95,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE( } private fun collect(designation: FirDeclarationDesignationWithFile): Collection { - val visited = mutableMapOf() + val visited = mutableMapOf, FirDeclarationDesignationWithFile>() val toVisit = mutableListOf() toVisit.add(designation) @@ -178,7 +178,7 @@ internal class FirDesignatedSupertypeResolverTransformerForIDE( ensureResolvedDeep(designation.declaration) } - override fun ensureResolved(declaration: FirDeclaration) { + override fun ensureResolved(declaration: FirDeclaration<*>) { when (declaration) { is FirFunction<*>, is FirProperty, is FirEnumEntry, is FirField, is FirAnonymousInitializer -> Unit is FirRegularClass -> { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt index 189ccff67b2..0d22ae8e390 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedTypeResolverTransformerForIDE.kt @@ -32,10 +32,11 @@ internal class FirDesignatedTypeResolverTransformerForIDE( private val declarationTransformer = IDEDeclarationTransformer(designation) override fun transformElement(element: E, data: Any?): E { - return if (element is FirDeclaration && (element is FirRegularClass || element is FirFile)) { + return if (element is FirDeclaration<*> && (element is FirRegularClass || element is FirFile)) { + @Suppress("UNCHECKED_CAST") declarationTransformer.transformDeclarationContent(this, element, data) { super.transformElement(element, data) - } + } as E } else { super.transformElement(element, data) } @@ -57,7 +58,7 @@ internal class FirDesignatedTypeResolverTransformerForIDE( ensureResolvedDeep(designation.declaration) } - override fun ensureResolved(declaration: FirDeclaration) { + override fun ensureResolved(declaration: FirDeclaration<*>) { if (declaration !is FirAnonymousInitializer) { declaration.ensurePhase(FirResolvePhase.TYPES) } @@ -81,4 +82,4 @@ internal class FirDesignatedTypeResolverTransformerForIDE( else -> error("Unexpected type: ${declaration::class.simpleName}") } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt index 85cc6d593ef..4c098e5cb76 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt @@ -36,7 +36,7 @@ internal class FirFileAnnotationsResolveTransformer( firTowerDataContextCollector = firTowerDataContextCollector ), FirLazyTransformerForIDE { - override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration { + override fun transformDeclarationContent(declaration: FirDeclaration<*>, data: ResolutionMode): FirDeclaration<*> { require(declaration is FirFile) { "Unexpected declaration ${declaration::class.simpleName}" } annotations.forEach { if (it.resolveStatus != FirAnnotationResolveStatus.Resolved) { @@ -54,7 +54,7 @@ internal class FirFileAnnotationsResolveTransformer( check(annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) { "Annotation was not resolved" } } - override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented") + override fun ensureResolved(declaration: FirDeclaration<*>) = error("Not implemented") - override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = false -} \ No newline at end of file + override fun needReplacePhase(firDeclaration: FirDeclaration<*>): Boolean = false +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt index c8636c5d808..3f8c35f2b39 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirLazyTransformerForIDE.kt @@ -12,8 +12,8 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation internal interface FirLazyTransformerForIDE { fun transformDeclaration(phaseRunner: FirPhaseRunner) - fun ensureResolved(declaration: FirDeclaration) - fun ensureResolvedDeep(declaration: FirDeclaration) { + fun ensureResolved(declaration: FirDeclaration<*>) + fun ensureResolvedDeep(declaration: FirDeclaration<*>) { if (!enableDeepEnsure) return ensureResolved(declaration) if (declaration is FirRegularClass) { @@ -27,19 +27,19 @@ internal interface FirLazyTransformerForIDE { private object ResolvePhaseWithForAllDeclarationsKey : FirDeclarationDataKey() - private var FirDeclaration.resolvePhaseForDeclarationAndChildrenAttr: FirResolvePhase? + private var FirDeclaration<*>.resolvePhaseForDeclarationAndChildrenAttr: FirResolvePhase? by FirDeclarationDataRegistry.data(ResolvePhaseWithForAllDeclarationsKey) /** * This resolve phase is used to check if current declaration and it's children were resolved for phase */ - var FirDeclaration.resolvePhaseForDeclarationAndChildren: FirResolvePhase + var FirDeclaration<*>.resolvePhaseForDeclarationAndChildren: FirResolvePhase get() = resolvePhaseForDeclarationAndChildrenAttr ?: FirResolvePhase.RAW_FIR set(value) { resolvePhaseForDeclarationAndChildrenAttr = value } - fun FirDeclaration.updateResolvedPhaseForDeclarationAndChildren(phase: FirResolvePhase) { + fun FirDeclaration<*>.updateResolvedPhaseForDeclarationAndChildren(phase: FirResolvePhase) { val allDeclaration = resolvePhaseForDeclarationAndChildren if (allDeclaration < phase) { resolvePhaseForDeclarationAndChildren = phase @@ -67,7 +67,7 @@ internal interface FirLazyTransformerForIDE { val DUMMY = object : FirLazyTransformerForIDE { override fun transformDeclaration(phaseRunner: FirPhaseRunner) = Unit - override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented") + override fun ensureResolved(declaration: FirDeclaration<*>) = error("Not implemented") } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt index f48b7b23c8b..a69fa63941a 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/IDEDeclarationTransformer.kt @@ -8,9 +8,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.fir.resolve.transformers.FirAbstractPhaseTransformer import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer -import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation @@ -19,21 +17,21 @@ internal class IDEDeclarationTransformer(private val designation: FirDeclaration private var isInsideTargetDeclaration: Boolean = false private var designationPassed: Boolean = false - inline fun visitDeclarationContent( + inline fun visitDeclarationContent( visitor: FirVisitor, - declaration: K, + declaration: FirDeclaration<*>, data: D, - default: () -> K - ) = processDeclarationContent(declaration, default) { + default: () -> FirDeclaration<*> + ): FirDeclaration<*> = processDeclarationContent(declaration, default) { it.accept(visitor, data) } - inline fun transformDeclarationContent( + inline fun transformDeclarationContent( transformer: FirDefaultTransformer, - declaration: K, + declaration: FirDeclaration<*>, data: D, - default: () -> K - ): K = processDeclarationContent(declaration, default) { toTransform -> + default: () -> FirDeclaration<*> + ): FirDeclaration<*> = processDeclarationContent(declaration, default) { toTransform -> toTransform.transform(transformer, data).also { transformed -> check(transformed === toTransform) { "become $transformed `${transformed.render()}`, was ${toTransform}: `${toTransform.render()}`" @@ -41,11 +39,11 @@ internal class IDEDeclarationTransformer(private val designation: FirDeclaration } } - inline fun processDeclarationContent( - declaration: K, - default: () -> K, - applyToDesignated: (FirDeclaration) -> Unit, - ): K { + private inline fun processDeclarationContent( + declaration: FirDeclaration<*>, + default: () -> FirDeclaration<*>, + applyToDesignated: (FirDeclaration<*>) -> Unit, + ): FirDeclaration<*> { //It means that we are inside the target declaration if (isInsideTargetDeclaration) { return default() @@ -76,4 +74,4 @@ internal class IDEDeclarationTransformer(private val designation: FirDeclaration fun ensureDesignationPassed() { check(designationPassed) { "Designation not passed for declaration ${designation.declaration::class.simpleName}" } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/contrainingFileUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/contrainingFileUtils.kt index 545509f1b84..f9cdbae8dff 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/contrainingFileUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/contrainingFileUtils.kt @@ -9,10 +9,9 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile -import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.firProvider -fun FirDeclaration.getContainingFile(): FirFile? { +fun FirDeclaration<*>.getContainingFile(): FirFile? { val provider = moduleData.session.firProvider return when (this) { is FirFile -> this @@ -20,4 +19,4 @@ fun FirDeclaration.getContainingFile(): FirFile? { is FirClassLikeDeclaration<*> -> provider.getFirClassifierContainerFile(symbol) else -> error("Unsupported declaration ${this::class.java}") } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt index 6b56ed9e1e4..cfaca11e196 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/declarationUtils.kt @@ -5,7 +5,10 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.util -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider @@ -24,7 +27,7 @@ internal fun KtDeclaration.findSourceNonLocalFirDeclaration( firSymbolProvider: FirSymbolProvider, moduleFileCache: ModuleFileCache, containerFirFile: FirFile? = null -): FirDeclaration { +): FirDeclaration<*> { //TODO test what way faster findSourceNonLocalFirDeclarationByProvider(firFileBuilder, firSymbolProvider, moduleFileCache, containerFirFile)?.let { return it } findSourceOfNonLocalFirDeclarationByTraversingWholeTree(firFileBuilder, moduleFileCache, containerFirFile)?.let { return it } @@ -35,23 +38,23 @@ internal fun KtDeclaration.findFirDeclarationForAnyFirSourceDeclaration( firFileBuilder: FirFileBuilder, firSymbolProvider: FirSymbolProvider, moduleFileCache: ModuleFileCache -): FirDeclaration { +): FirDeclaration<*> { val nonLocalDeclaration = getNonLocalContainingOrThisDeclaration() ?.findSourceNonLocalFirDeclaration(firFileBuilder, firSymbolProvider, moduleFileCache) ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, preferLazyBodies = true) val originalDeclaration = originalDeclaration - val fir = FirElementFinder.findElementIn(nonLocalDeclaration) { firDeclaration -> + val fir = FirElementFinder.findElementIn>(nonLocalDeclaration) { firDeclaration -> firDeclaration.psi == this || firDeclaration.psi == originalDeclaration } return fir ?: error("FirDeclaration was not found for\n${getElementTextInContext()}") } -internal inline fun KtDeclaration.findFirDeclarationForAnyFirSourceDeclarationOfType( +internal inline fun > KtDeclaration.findFirDeclarationForAnyFirSourceDeclarationOfType( firFileBuilder: FirFileBuilder, firSymbolProvider: FirSymbolProvider, moduleFileCache: ModuleFileCache -): FirDeclaration { +): FirDeclaration<*> { val fir = findFirDeclarationForAnyFirSourceDeclaration(firFileBuilder, firSymbolProvider, moduleFileCache) if (fir !is F) throw InvalidFirElementTypeException(this, F::class, fir::class) return fir @@ -61,7 +64,7 @@ private fun KtDeclaration.findSourceOfNonLocalFirDeclarationByTraversingWholeTre firFileBuilder: FirFileBuilder, moduleFileCache: ModuleFileCache, containerFirFile: FirFile?, -): FirDeclaration? { +): FirDeclaration<*>? { val firFile = containerFirFile ?: firFileBuilder.buildRawFirFileWithCaching(containingKtFile, moduleFileCache, preferLazyBodies = true) val originalDeclaration = originalDeclaration return FirElementFinder.findElementIn(firFile, goInside = { it is FirRegularClass }) { firDeclaration -> @@ -74,7 +77,7 @@ private fun KtDeclaration.findSourceNonLocalFirDeclarationByProvider( firSymbolProvider: FirSymbolProvider, moduleFileCache: ModuleFileCache, containerFirFile: FirFile? -): FirDeclaration? { +): FirDeclaration<*>? { val candidate = when { this is KtClassOrObject -> findFir(firSymbolProvider) this is KtNamedDeclaration && (this is KtProperty || this is KtNamedFunction) -> { @@ -122,5 +125,5 @@ private fun KtClassLikeDeclaration.findFir(firSymbolProvider: FirSymbolProvider) } -val FirDeclaration.isGeneratedDeclaration - get() = realPsi == null \ No newline at end of file +val FirDeclaration<*>.isGeneratedDeclaration + get() = realPsi == null diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/firDeclarationDesignationUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/firDeclarationDesignationUtils.kt index 5a082fec2f3..7ab48ab9aa8 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/firDeclarationDesignationUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/firDeclarationDesignationUtils.kt @@ -6,11 +6,9 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.util import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved -import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignation -internal fun FirDeclaration.ensurePhase(firResolvePhase: FirResolvePhase) = +internal fun FirDeclaration<*>.ensurePhase(firResolvePhase: FirResolvePhase) = check(resolvePhase >= firResolvePhase) { "Element phase required to be $firResolvePhase but element resolved to $resolvePhase" } @@ -34,4 +32,4 @@ internal fun FirDeclarationDesignation.ensurePhaseForClasses(firResolvePhase: Fi internal fun FirDeclarationDesignation.isTargetCallableDeclarationAndInPhase(firResolvePhase: FirResolvePhase): Boolean = (declaration as? FirCallableDeclaration<*>)?.let { it.resolvePhase >= firResolvePhase } ?: false -internal fun FirDeclarationDesignation.targetContainingDeclaration(): FirDeclaration? = path.lastOrNull() \ No newline at end of file +internal fun FirDeclarationDesignation.targetContainingDeclaration(): FirDeclaration<*>? = path.lastOrNull() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt index 77df6046e6e..337d01ff06c 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/util/utils.kt @@ -67,7 +67,7 @@ internal inline fun checkCanceled() { internal val FirElement.isErrorElement get() = this is FirDiagnosticHolder -internal val FirDeclaration.ktDeclaration: KtDeclaration +internal val FirDeclaration<*>.ktDeclaration: KtDeclaration get() { val psi = psi ?: error("PSI element was not found for${render()}") @@ -85,7 +85,7 @@ internal val FirDeclaration.ktDeclaration: KtDeclaration } } -internal val FirDeclaration.containingKtFileIfAny: KtFile? +internal val FirDeclaration<*>.containingKtFileIfAny: KtFile? get() = psi?.containingFile as? KtFile diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyDeclarationResolveTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyDeclarationResolveTest.kt index 81ed145c1b9..5faef6a428e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyDeclarationResolveTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirLazyDeclarationResolveTest.kt @@ -5,8 +5,11 @@ package org.jetbrains.kotlin.idea.fir.low.level.api -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.realPsi +import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.idea.fir.low.level.api.api.withFirDeclaration import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType @@ -27,13 +30,13 @@ import org.junit.jupiter.api.parallel.ExecutionMode @Execution(ExecutionMode.SAME_THREAD) abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingleFileTest() { - private fun FirFile.findResolveMe(): FirDeclaration { + private fun FirFile.findResolveMe(): FirDeclaration<*> { val visitor = object : FirVisitorVoid() { - var result: FirDeclaration? = null + var result: FirDeclaration<*>? = null override fun visitElement(element: FirElement) { if (result != null) return val declaration = element.realPsi as? KtDeclaration - if (element is FirDeclaration && declaration != null && declaration.name == "resolveMe") { + if (element is FirDeclaration<*> && declaration != null && declaration.name == "resolveMe") { result = element return } @@ -107,4 +110,4 @@ abstract class AbstractFirLazyDeclarationResolveTest : AbstractLowLevelApiSingle } } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt index f3ec2d17caf..b6d4774184d 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt @@ -54,7 +54,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF } private class DesignationBuilder(private val elementToBuild: KtDeclaration) : FirVisitorVoid() { - private val path = mutableListOf() + private val path = mutableListOf>() var resultDesignation: FirDeclarationDesignation? = null private set @@ -63,7 +63,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF when (element) { is FirSimpleFunction, is FirProperty -> { if (element.psi == elementToBuild) { - val originalDeclaration = element as FirDeclaration + val originalDeclaration = element as FirDeclaration<*> resultDesignation = FirDeclarationDesignation(path, originalDeclaration) } else { element.acceptChildren(this) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractDiagnosticTraversalCounterTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractDiagnosticTraversalCounterTest.kt index ffa83450e09..a5fb11128d1 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractDiagnosticTraversalCounterTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractDiagnosticTraversalCounterTest.kt @@ -107,7 +107,7 @@ abstract class AbstractDiagnosticTraversalCounterTest : AbstractLowLevelApiSing firFile: FirElement, ): Set { val elementUsageCount = mutableMapOf() - val sessionHolder = SessionHolderImpl((firFile as FirDeclaration).moduleData.session, ScopeSession()) + val sessionHolder = SessionHolderImpl((firFile as FirDeclaration<*>).moduleData.session, ScopeSession()) val visitor = object : AbstractDiagnosticCollectorVisitor( PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(sessionHolder) ) { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractFirContextCollectionTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractFirContextCollectionTest.kt index ad78348ac4a..c5ee747efeb 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractFirContextCollectionTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/AbstractFirContextCollectionTest.kt @@ -57,9 +57,9 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT } } - private fun FileStructureElement.getFirDeclaration(): FirDeclaration = when (this) { + private fun FileStructureElement.getFirDeclaration(): FirDeclaration<*> = when (this) { is NonReanalyzableDeclarationStructureElement -> fir - is ReanalyzableStructureElement<*, *> -> firSymbol.fir as FirDeclaration + is ReanalyzableStructureElement<*, *> -> firSymbol.fir is RootStructureElement -> firFile } @@ -68,10 +68,10 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT private val assertions: AssertionsService ) : BeforeElementDiagnosticCollectionHandler() { - lateinit var elementsToCheckContext: List + lateinit var elementsToCheckContext: List> lateinit var firFile: FirFile - override fun beforeGoingNestedDeclaration(declaration: FirDeclaration, context: PersistentCheckerContext) { + override fun beforeGoingNestedDeclaration(declaration: FirDeclaration<*>, context: PersistentCheckerContext) { if (declaration is FirFile) { return } @@ -93,8 +93,8 @@ abstract class AbstractFirContextCollectionTest : AbstractLowLevelApiSingleFileT private fun PersistentImplicitReceiverStack.asString() = joinToString { it.boundSymbol.name() } - private fun PersistentList.asString() = - joinToString(transform = FirDeclaration::name) + private fun PersistentList>.asString() = + joinToString(transform = FirDeclaration<*>::name) } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt index 9496c6c9bb2..1ae6d43d99a 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/firTestUtils.kt @@ -9,14 +9,13 @@ import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirRenderer -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousInitializerSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.api.getModuleInfo import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState @@ -34,14 +33,11 @@ internal fun FirBasedSymbol<*>.name(): String = when (this) { is FirCallableSymbol<*> -> callableId.callableName.asString() is FirClassLikeSymbol<*> -> classId.shortClassName.asString() is FirAnonymousInitializerSymbol -> "" + is FirFileSymbol -> "" else -> error("unknown symbol ${this::class.simpleName}") } -internal fun FirDeclaration.name(): String = when (this) { - is FirSymbolOwner<*> -> symbol.name() - is FirFile -> "" - else -> error("unknown declaration ${this::class.simpleName}") -} +internal fun FirDeclaration<*>.name(): String = symbol.name() internal inline fun resolveWithClearCaches( context: KtElement, diff --git a/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt b/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt index a685cff740c..96927c21e1d 100644 --- a/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt +++ b/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt @@ -185,7 +185,7 @@ private object FirToKtConversionCreator { importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirRegularClass") ), FirMemberDeclaration::class to HLFunctionCallConversion( - "firSymbolBuilder.buildSymbol({0} as FirDeclaration)", + "firSymbolBuilder.buildSymbol({0} as FirDeclaration<*>)", KtSymbol::class.createType(), importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirDeclaration") ), diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt index 7d3949e082e..1c05b8d9f79 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/asJava/firLightUtils.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.jvm.jvmTypeMapper import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.isPrimitiveType -import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -36,7 +35,10 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.types.KtFirType import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.* -import org.jetbrains.kotlin.idea.frontend.api.types.* +import org.jetbrains.kotlin.idea.frontend.api.types.KtNonErrorClassType +import org.jetbrains.kotlin.idea.frontend.api.types.KtType +import org.jetbrains.kotlin.idea.frontend.api.types.KtTypeNullability +import org.jetbrains.kotlin.idea.frontend.api.types.KtTypeWithNullability import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.SpecialNames @@ -194,7 +196,7 @@ internal val KtType.nullabilityType: NullabilityType } ?: NullabilityType.Unknown -internal fun FirMemberDeclaration.computeSimpleModality(): Set { +internal fun FirMemberDeclaration<*>.computeSimpleModality(): Set { require(this !is FirConstructor) val modifier = when (modality) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt index d81facf0af6..802097fc60c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/FirIdeDeserializedDeclarationSourceProvider.kt @@ -99,7 +99,7 @@ object FirIdeDeserializedDeclarationSourceProvider { return null } - private fun FirDeclaration.scope(project: Project): GlobalSearchScope { + private fun FirDeclaration<*>.scope(project: Project): GlobalSearchScope { return GlobalSearchScope.allScope(project) /* TODO: val session = session as? FirLibrarySession @@ -150,5 +150,5 @@ fun FirElement.findPsi(session: FirSession): PsiElement? = * For data classes & enums generated members like `copy` `componentN`, `values` it will return corresponding enum/data class * Otherwise, behaves the same way as [findPsi] returns exact PSI declaration corresponding to passed [FirDeclaration] */ -fun FirDeclaration.findReferencePsi(): PsiElement? = +fun FirDeclaration<*>.findReferencePsi(): PsiElement? = psi ?: FirIdeDeserializedDeclarationSourceProvider.findPsi(this, (moduleData.session as FirIdeSession).project) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/evaluate/FirCompileTimeConstantEvaluator.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/evaluate/FirCompileTimeConstantEvaluator.kt index ec083955bcd..15b149c73dc 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/evaluate/FirCompileTimeConstantEvaluator.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/fir/evaluate/FirCompileTimeConstantEvaluator.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.resolve.constants.evaluate.CompileTimeType @@ -204,7 +204,7 @@ internal class FirCompileTimeConstantEvaluator { buildConstExpression(source, this, value as T) private fun FirFunctionCall.getOriginalFunction(): FirCallableDeclaration<*>? { - val symbol: AbstractFirBasedSymbol<*>? = when (val reference = calleeReference) { + val symbol: FirBasedSymbol<*>? = when (val reference = calleeReference) { is FirResolvedNamedReference -> reference.resolvedSymbol else -> null } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt index 6b55b3a67d0..31b27ca4cd4 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/KtSymbolByFirBuilder.kt @@ -14,10 +14,10 @@ import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirFieldImpl import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty -import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias import org.jetbrains.kotlin.fir.java.declarations.FirJavaField -import org.jetbrains.kotlin.fir.resolve.symbolProvider +import org.jetbrains.kotlin.fir.resolve.calls.originalConstructorIfTypeAlias import org.jetbrains.kotlin.fir.resolve.getSymbolByLookupTag +import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol @@ -27,7 +27,10 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.createPackageProvider -import org.jetbrains.kotlin.idea.frontend.api.* +import org.jetbrains.kotlin.idea.frontend.api.KtStarProjectionTypeArgument +import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgument +import org.jetbrains.kotlin.idea.frontend.api.KtTypeArgumentWithVariance +import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.* import org.jetbrains.kotlin.idea.frontend.api.fir.types.* import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef @@ -50,7 +53,7 @@ internal class KtSymbolByFirBuilder private constructor( resolveState: FirModuleResolveState, override val token: ValidityToken, val withReadOnlyCaching: Boolean, - private val symbolsCache: BuilderCache, + private val symbolsCache: BuilderCache, KtSymbol>, private val filesCache: BuilderCache, private val backingFieldCache: BuilderCache, private val typesCache: BuilderCache, @@ -97,7 +100,7 @@ internal class KtSymbolByFirBuilder private constructor( } - fun buildSymbol(fir: FirDeclaration): KtSymbol { + fun buildSymbol(fir: FirDeclaration<*>): KtSymbol { return when (fir) { is FirClassLikeDeclaration<*> -> classifierBuilder.buildClassLikeSymbol(fir) is FirTypeParameter -> classifierBuilder.buildTypeParameterSymbol(fir) @@ -397,7 +400,7 @@ private class BuilderCache private constructor( } internal fun FirElement.buildSymbol(builder: KtSymbolByFirBuilder) = - (this as? FirDeclaration)?.let(builder::buildSymbol) + (this as? FirDeclaration<*>)?.let(builder::buildSymbol) -internal fun FirDeclaration.buildSymbol(builder: KtSymbolByFirBuilder) = +internal fun FirDeclaration<*>.buildSymbol(builder: KtSymbolByFirBuilder) = builder.buildSymbol(this) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt index 9d311871db0..cceb85e7f5c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCompletionCandidateChecker.kt @@ -17,13 +17,13 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolutionMode import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolver import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext -import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.components.KtCompletionCandidateChecker import org.jetbrains.kotlin.idea.frontend.api.components.KtExtensionApplicabilityResult import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol +import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.withValidityAssertion import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtFile diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt index 71e7a0c7c77..2081c56adcd 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirSymbolDeclarationOverridesProvider.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.scopes.* @@ -49,14 +48,14 @@ internal class KtFirSymbolDeclarationOverridesProvider( return overriddenElement.map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) } } - private fun FirTypeScope.processCallableByName(declaration: FirDeclaration) = when (declaration) { + private fun FirTypeScope.processCallableByName(declaration: FirDeclaration<*>) = when (declaration) { is FirSimpleFunction -> processFunctionsByName(declaration.name) { } is FirProperty -> processPropertiesByName(declaration.name) { } else -> error { "Invalid FIR symbol to process: ${declaration::class}" } } private fun FirTypeScope.processAllOverriddenDeclarations( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, processor: (FirCallableDeclaration<*>) -> Unit ) = when (declaration) { is FirSimpleFunction -> processOverriddenFunctions(declaration.symbol) { symbol -> @@ -71,7 +70,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( } private fun FirTypeScope.processDirectOverriddenDeclarations( - declaration: FirDeclaration, + declaration: FirDeclaration<*>, processor: (FirCallableDeclaration<*>) -> Unit ) = when (declaration) { is FirSimpleFunction -> processDirectOverriddenFunctionsWithBaseScope(declaration.symbol) { symbol, _ -> @@ -87,7 +86,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( private inline fun processOverrides( callableSymbol: T, - crossinline process: (FirTypeScope, FirDeclaration) -> Unit + crossinline process: (FirTypeScope, FirDeclaration<*>) -> Unit ) { require(callableSymbol is KtFirSymbol<*>) val containingDeclaration = with(analysisSession) { @@ -101,7 +100,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( private inline fun processOverrides( containingDeclaration: KtFirNamedClassOrObjectSymbol, callableSymbol: KtFirSymbol<*>, - crossinline process: (FirTypeScope, FirDeclaration) -> Unit + crossinline process: (FirTypeScope, FirDeclaration<*>) -> Unit ) { containingDeclaration.firRef.withFir(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { firContainer -> callableSymbol.firRef.withFirUnsafe { firCallableDeclaration -> @@ -134,7 +133,7 @@ internal class KtFirSymbolDeclarationOverridesProvider( require(symbol is KtFirSymbol<*>) if (symbol.origin != KtSymbolOrigin.INTERSECTION_OVERRIDE) return emptyList() return symbol.firRef.withFir { fir -> - val firSymbol = (fir as? FirSymbolOwner<*>)?.symbol ?: return@withFir emptyList() + val firSymbol = fir.symbol firSymbol.getIntersectionOverriddenSymbols().map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it.fir) } } } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt index 950a6eb6b01..26567f995ef 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirVisibilityChecker.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.components import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -56,7 +55,7 @@ internal class KtFirVisibilityChecker( ?.let { ExpressionReceiverValue(it) } candidateSymbol.firRef.withFir { candidateFirSymbol -> - require(candidateFirSymbol is FirMemberDeclaration && candidateFirSymbol is FirSymbolOwner<*>) { + require(candidateFirSymbol is FirMemberDeclaration) { "$candidateFirSymbol must be a FirMemberDeclaration and FirSymbolOwner; it were ${candidateFirSymbol::class} instead" } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index 1e8b744fbf2..d87f3f8ee1a 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -841,7 +841,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE) { firDiagnostic -> ExposedTypealiasExpandedTypeImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -850,7 +850,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_FUNCTION_RETURN_TYPE) { firDiagnostic -> ExposedFunctionReturnTypeImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -859,7 +859,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_RECEIVER_TYPE) { firDiagnostic -> ExposedReceiverTypeImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -868,7 +868,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_PROPERTY_TYPE) { firDiagnostic -> ExposedPropertyTypeImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -877,7 +877,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR) { firDiagnostic -> ExposedPropertyTypeInConstructorImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -886,7 +886,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_PARAMETER_TYPE) { firDiagnostic -> ExposedParameterTypeImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -895,7 +895,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_SUPER_INTERFACE) { firDiagnostic -> ExposedSuperInterfaceImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -904,7 +904,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_SUPER_CLASS) { firDiagnostic -> ExposedSuperClassImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -913,7 +913,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert add(FirErrors.EXPOSED_TYPE_PARAMETER_BOUND) { firDiagnostic -> ExposedTypeParameterBoundImpl( firDiagnostic.a, - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic.c, firDiagnostic as FirPsiDiagnostic, token, @@ -1590,7 +1590,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert } add(FirErrors.NOTHING_TO_OVERRIDE) { firDiagnostic -> NothingToOverrideImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) @@ -1687,32 +1687,32 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert } add(FirErrors.RETURN_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic -> ReturnTypeMismatchOnOverrideImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) } add(FirErrors.PROPERTY_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic -> PropertyTypeMismatchOnOverrideImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) } add(FirErrors.VAR_TYPE_MISMATCH_ON_OVERRIDE) { firDiagnostic -> VarTypeMismatchOnOverrideImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) } add(FirErrors.VAR_OVERRIDDEN_BY_VAL) { firDiagnostic -> VarOverriddenByValImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), - firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), + firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) @@ -1731,7 +1731,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert } add(FirErrors.VIRTUAL_MEMBER_HIDDEN) { firDiagnostic -> VirtualMemberHiddenImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b) as KtNamedClassOrObjectSymbol, firDiagnostic as FirPsiDiagnostic, token, @@ -1783,7 +1783,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert } add(FirErrors.ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS) { firDiagnostic -> AbstractFunctionInNonAbstractClassImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b), firDiagnostic as FirPsiDiagnostic, token, @@ -1791,28 +1791,28 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert } add(FirErrors.ABSTRACT_FUNCTION_WITH_BODY) { firDiagnostic -> AbstractFunctionWithBodyImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) } add(FirErrors.NON_ABSTRACT_FUNCTION_WITH_NO_BODY) { firDiagnostic -> NonAbstractFunctionWithNoBodyImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) } add(FirErrors.PRIVATE_FUNCTION_WITH_NO_BODY) { firDiagnostic -> PrivateFunctionWithNoBodyImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) } add(FirErrors.NON_MEMBER_FUNCTION_NO_BODY) { firDiagnostic -> NonMemberFunctionNoBodyImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firDiagnostic as FirPsiDiagnostic, token, ) @@ -1904,7 +1904,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert } add(FirErrors.ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS) { firDiagnostic -> AbstractPropertyInNonAbstractClassImpl( - firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration), + firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration<*>), firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b), firDiagnostic as FirPsiDiagnostic, token, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/ConeTypeIdeRenderer.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/ConeTypeIdeRenderer.kt index de2fe6d2e60..305daa49e0c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/ConeTypeIdeRenderer.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/ConeTypeIdeRenderer.kt @@ -189,7 +189,7 @@ internal class ConeTypeIdeRenderer( return designation } - private fun collectDesignationPathForLocal(declaration: FirDeclaration): List? { + private fun collectDesignationPathForLocal(declaration: FirDeclaration<*>): List>? { val containingClass = when (declaration) { is FirCallableDeclaration<*> -> declaration.containingClass()?.toFirRegularClass(declaration.moduleData.session) is FirAnonymousObject -> return listOf(declaration) @@ -326,7 +326,6 @@ internal class ConeTypeIdeRenderer( val notNullParametersType = type .valueParameterTypesIncludingReceiver(session) - .filterNotNull() .applyIf(receiverType != null) { drop(1) } notNullParametersType.forEachIndexed { index, typeProjection -> @@ -337,14 +336,10 @@ internal class ConeTypeIdeRenderer( append(") -> ") val returnType = type.returnType(session) - if (returnType != null) { - append(renderType(returnType)) - } else { - appendError() - } + append(renderType(returnType)) if (needParenthesis) append(")") renderNullability(type) } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt index 1e646d19502..db122c6339b 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/renderer/FirIdeRenderer.kt @@ -28,14 +28,14 @@ import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly internal class FirIdeRenderer private constructor( - private var containingDeclaration: FirDeclaration?, + private var containingDeclaration: FirDeclaration<*>?, private val options: KtDeclarationRendererOptions, private val session: FirSession ) : FirVisitor() { private val typeIdeRenderer: ConeTypeIdeRenderer = ConeTypeIdeRenderer(session, options.typeRendererOptions) - private fun StringBuilder.renderAnnotations(annotated: FirAnnotatedDeclaration) { + private fun StringBuilder.renderAnnotations(annotated: FirAnnotatedDeclaration<*>) { if (RendererModifier.ANNOTATIONS in options.modifiers) { renderAnnotations(typeIdeRenderer, annotated.annotations, session) } @@ -58,7 +58,7 @@ internal class FirIdeRenderer private constructor( return renderType(approximatedIfNeeded, annotations) } - private fun StringBuilder.renderName(declaration: FirDeclaration) { + private fun StringBuilder.renderName(declaration: FirDeclaration<*>) { if (declaration is FirAnonymousObject) { append("") return @@ -109,7 +109,7 @@ internal class FirIdeRenderer private constructor( renderModifier(RendererModifier.MODALITY in options.modifiers, modality.name.toLowerCaseAsciiOnly()) } - private fun FirMemberDeclaration.implicitModalityWithoutExtensions(containingDeclaration: FirDeclaration?): Modality { + private fun FirMemberDeclaration<*>.implicitModalityWithoutExtensions(containingDeclaration: FirDeclaration<*>?): Modality { if (this is FirRegularClass) { return if (classKind == ClassKind.INTERFACE) Modality.ABSTRACT else Modality.FINAL } @@ -126,7 +126,7 @@ internal class FirIdeRenderer private constructor( private fun StringBuilder.renderModalityForCallable( callable: FirCallableMemberDeclaration<*>, - containingDeclaration: FirDeclaration? + containingDeclaration: FirDeclaration<*>? ) { val modality = callable.modality ?: return val isTopLevel = containingDeclaration == null @@ -148,13 +148,13 @@ internal class FirIdeRenderer private constructor( } } - private fun StringBuilder.renderMemberModifiers(declaration: FirMemberDeclaration) { + private fun StringBuilder.renderMemberModifiers(declaration: FirMemberDeclaration<*>) { renderModifier(declaration.isExternal, "external") renderModifier(RendererModifier.EXPECT in options.modifiers && declaration.isExpect, "expect") renderModifier(RendererModifier.ACTUAL in options.modifiers && declaration.isActual, "actual") } - private fun StringBuilder.renderAdditionalModifiers(firMember: FirMemberDeclaration) { + private fun StringBuilder.renderAdditionalModifiers(firMember: FirMemberDeclaration<*>) { val isOperator = firMember.isOperator//TODO make similar to functionDescriptor.overriddenDescriptors.none { it.isOperator } val isInfix = @@ -167,7 +167,7 @@ internal class FirIdeRenderer private constructor( renderModifier(RendererModifier.OPERATOR in options.modifiers && isOperator, "operator") } - private fun StringBuilder.renderSuspendModifier(functionDescriptor: FirMemberDeclaration) { + private fun StringBuilder.renderSuspendModifier(functionDescriptor: FirMemberDeclaration<*>) { renderModifier(functionDescriptor.isSuspend, "suspend") } @@ -377,14 +377,14 @@ internal class FirIdeRenderer private constructor( renderWhereSuffix(typeParameters) } - fun FirDeclaration.isDefaultPrimaryConstructor() = + fun FirDeclaration<*>.isDefaultPrimaryConstructor() = this is FirConstructor && isPrimary && valueParameters.isEmpty() && !hasBody && (visibility == Visibilities.DEFAULT_VISIBILITY || regularClass.classKind == ClassKind.OBJECT) - fun FirDeclaration.skipDeclarationForEnumClass(): Boolean { + fun FirDeclaration<*>.skipDeclarationForEnumClass(): Boolean { if (this is FirConstructor) return isPrimary && valueParameters.isEmpty() if (this !is FirSimpleFunction) return false @@ -440,14 +440,14 @@ internal class FirIdeRenderer private constructor( tabbedString = oldTabbedString } - private inline fun underContainingDeclaration(firDeclaration: FirDeclaration, body: () -> Unit) { + private inline fun underContainingDeclaration(firDeclaration: FirDeclaration<*>, body: () -> Unit) { val oldContainingDeclaration = containingDeclaration containingDeclaration = firDeclaration body() containingDeclaration = oldContainingDeclaration } - private inline fun StringBuilder.underBlockDeclaration(firDeclaration: FirDeclaration, withBrackets: Boolean = true, body: () -> Unit) { + private inline fun StringBuilder.underBlockDeclaration(firDeclaration: FirDeclaration<*>, withBrackets: Boolean = true, body: () -> Unit) { val oldLength = length if (withBrackets) append(" {") val unchangedLength = length @@ -469,7 +469,7 @@ internal class FirIdeRenderer private constructor( private fun StringBuilder.appendTabs() = append(tabbedString) - private fun underBlockDeclaration(firDeclaration: FirDeclaration, firBlock: FirBlock, data: StringBuilder) { + private fun underBlockDeclaration(firDeclaration: FirDeclaration<*>, firBlock: FirBlock, data: StringBuilder) { data.underBlockDeclaration(firDeclaration) { firBlock.accept(this, data) } @@ -502,8 +502,8 @@ internal class FirIdeRenderer private constructor( companion object { fun render( - firDeclaration: FirDeclaration, - containingDeclaration: FirDeclaration?, + firDeclaration: FirDeclaration<*>, + containingDeclaration: FirDeclaration<*>?, options: KtDeclarationRendererOptions, session: FirSession ): String { @@ -679,7 +679,7 @@ internal class FirIdeRenderer private constructor( } - private fun getClassifierKindPrefix(classifier: FirDeclaration): String = when (classifier) { + private fun getClassifierKindPrefix(classifier: FirDeclaration<*>): String = when (classifier) { is FirTypeAlias -> "typealias" is FirRegularClass -> if (classifier.isCompanion) { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt index c4bc90fdfdc..fb8036dd6ce 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirSymbol.kt @@ -6,7 +6,9 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import org.jetbrains.kotlin.fir.FirFakeSourceElementKind -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.originalIfFakeOverride import org.jetbrains.kotlin.fir.render @@ -16,14 +18,14 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbolOrigin -internal interface KtFirSymbol : KtSymbol, ValidityTokenOwner { +internal interface KtFirSymbol> : KtSymbol, ValidityTokenOwner { val firRef: FirRefWithValidityCheck override val origin: KtSymbolOrigin get() = firRef.withFir { it.ktSymbolOrigin() } } -private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (origin) { +private tailrec fun FirDeclaration<*>.ktSymbolOrigin(): KtSymbolOrigin = when (origin) { FirDeclarationOrigin.Source -> { if (source?.kind == FirFakeSourceElementKind.DataClassGeneratedMembers || source?.kind == FirFakeSourceElementKind.EnumGeneratedDeclaration @@ -58,5 +60,5 @@ private tailrec fun FirDeclaration.ktSymbolOrigin(): KtSymbolOrigin = when (orig } -class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration) : +class InvalidFirDeclarationOriginForSymbol(declaration: FirDeclaration<*>) : IllegalStateException("Invalid FirDeclarationOrigin ${declaration.origin::class.simpleName} for ${declaration.render()}") diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt index a5fdfd90521..c8c2c45d096 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirTypeAndAnnotations.kt @@ -7,9 +7,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.transformers.resolveSupertypesInTheAir -import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.types.ConeKotlinType +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType -import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations.KtFirAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck @@ -17,9 +18,10 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations +import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.types.KtType -internal class KtFirTypeAndAnnotations( +internal class KtFirTypeAndAnnotations>( private val containingDeclaration: FirRefWithValidityCheck, typeResolvePhase: FirResolvePhase, _builder: KtSymbolByFirBuilder, @@ -82,7 +84,7 @@ private fun List.mapToTypeAndAnnotations( KtSimpleFirTypeAndAnnotations(typeRef.coneType, annotations, builder, containingDeclaration.token) } -internal fun FirRefWithValidityCheck.returnTypeAndAnnotations( +internal fun FirRefWithValidityCheck>.returnTypeAndAnnotations( typeResolvePhase: FirResolvePhase, builder: KtSymbolByFirBuilder ) = KtFirTypeAndAnnotations(this, typeResolvePhase, builder) { it.returnTypeRef } @@ -100,4 +102,4 @@ internal fun FirRefWithValidityCheck>.dispatchRe fir.dispatchReceiverType?.let { builder.typeBuilder.buildKtType(it) } - } \ No newline at end of file + } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/KtFirAnnotationCall.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/KtFirAnnotationCall.kt index b0d7923593f..fa5012f983c 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/KtFirAnnotationCall.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/KtFirAnnotationCall.kt @@ -7,15 +7,10 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.idea.fir.findPsi import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType import org.jetbrains.kotlin.idea.frontend.api.fir.utils.* -import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck -import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertConstantExpression -import org.jetbrains.kotlin.idea.frontend.api.fir.utils.mapAnnotationParameters -import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedConstantValue import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken @@ -23,7 +18,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtCallElement internal class KtFirAnnotationCall( - private val containingDeclaration: FirRefWithValidityCheck, + private val containingDeclaration: FirRefWithValidityCheck>, annotationCall: FirAnnotationCall ) : KtAnnotationCall() { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt index 3861c0a6054..750f8c7d7e0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/annotations/firAnnotationUtils.kt @@ -7,12 +7,9 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols.annotations import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.expandedConeType import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.coneClassLikeType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType -import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolved import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType import org.jetbrains.kotlin.idea.frontend.api.fir.utils.FirRefWithValidityCheck @@ -22,16 +19,16 @@ import org.jetbrains.kotlin.name.ClassId internal fun FirAnnotationCall.getClassId(session: FirSession): ClassId? = coneClassLikeType?.fullyExpandedType(session)?.classId -internal fun FirRefWithValidityCheck.toAnnotationsList() = withFir { fir -> +internal fun FirRefWithValidityCheck>.toAnnotationsList() = withFir { fir -> fir.annotations.map { KtFirAnnotationCall(this, it) } } -internal fun FirRefWithValidityCheck.containsAnnotation(classId: ClassId): Boolean = +internal fun FirRefWithValidityCheck>.containsAnnotation(classId: ClassId): Boolean = withFir(ResolveType.AnnotationType) { fir -> fir.annotations.any { it.getClassId(fir.moduleData.session) == classId } } -internal fun FirRefWithValidityCheck.getAnnotationClassIds(): Collection = +internal fun FirRefWithValidityCheck>.getAnnotationClassIds(): Collection = withFir(ResolveType.AnnotationType) { fir -> fir.annotations.mapNotNull { it.getClassId(fir.moduleData.session) } - } \ No newline at end of file + } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt index 8ac89461096..c0b62bb154e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/firSymbolUtils.kt @@ -8,23 +8,14 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.symbols import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirRenderer -import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.renderWithType -import org.jetbrains.kotlin.fir.resolve.firProvider -import org.jetbrains.kotlin.fir.resolve.fullyExpandedType -import org.jetbrains.kotlin.fir.resolve.toSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol -import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import org.jetbrains.kotlin.fir.types.coneType -import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState -import org.jetbrains.kotlin.idea.frontend.api.fir.buildSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.util.getElementTextInContext import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.psi.KtDeclaration -internal fun KtFirSymbol.getModality( +internal fun KtFirSymbol>.getModality( phase: FirResolvePhase = FirResolvePhase.STATUS, defaultModality: Modality? = null ) = @@ -35,7 +26,7 @@ internal fun KtFirSymbol.getModality( } -private fun FirDeclaration.invalidModalityError(): Nothing { +private fun FirDeclaration<*>.invalidModalityError(): Nothing { error( """|Symbol modality should not be null, looks like the FIR symbol was not properly resolved | @@ -46,7 +37,7 @@ private fun FirDeclaration.invalidModalityError(): Nothing { } -internal fun KtFirSymbol.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility = +internal fun > KtFirSymbol.getVisibility(phase: FirResolvePhase = FirResolvePhase.STATUS): Visibility = firRef.withFir(phase) { fir -> fir.visibility } internal fun KtFirSymbol>.getCallableIdIfNonLocal(): CallableId? = diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/pointerUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/pointerUtils.kt index 07b985b62a5..44c24604b55 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/pointerUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/pointers/pointerUtils.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.idea.fir.low.level.api.ideSessionComponents import org.jetbrains.kotlin.ir.util.IdSignature -internal inline fun FirScope.findDeclarationWithSignature( +internal inline fun > FirScope.findDeclarationWithSignature( signature: IdSignature, firSession: FirSession, processor: FirScope.((FirBasedSymbol<*>) -> Unit) -> Unit @@ -31,7 +31,7 @@ internal inline fun FirScope.findDeclarationWithSig return foundSymbol } -internal inline fun Collection>.findDeclarationWithSignatureBySymbols( +internal inline fun > Collection>.findDeclarationWithSignatureBySymbols( signature: IdSignature, firSession: FirSession ): D? { @@ -45,7 +45,7 @@ internal inline fun Collection return null } -internal fun FirDeclaration.createSignature(): IdSignature { +internal fun FirDeclaration<*>.createSignature(): IdSignature { val signatureComposer = moduleData.session.ideSessionComponents.signatureComposer return signatureComposer.composeSignature(this) ?: error("Could not compose signature for ${this.renderWithType(FirRenderer.RenderMode.WithResolvePhases)}, looks like it is private or local") diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/FirRefWithValidityCheck.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/FirRefWithValidityCheck.kt index c2ddea967bf..4c97a2ec6e7 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/FirRefWithValidityCheck.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/FirRefWithValidityCheck.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.tokens.assertIsValidAndAccessible import java.lang.ref.WeakReference -internal class FirRefWithValidityCheck(fir: D, resolveState: FirModuleResolveState, val token: ValidityToken) { +internal class FirRefWithValidityCheck>(fir: D, resolveState: FirModuleResolveState, val token: ValidityToken) { private val firWeakRef = WeakReference(fir) private val resolveStateWeakRef = WeakReference(resolveState) @@ -138,5 +138,5 @@ internal class FirRefWithValidityCheck(fir: D, resolveSt } @Suppress("NOTHING_TO_INLINE") -internal inline fun ValidityTokenOwner.firRef(fir: D, resolveState: FirModuleResolveState) = - FirRefWithValidityCheck(fir, resolveState, token) \ No newline at end of file +internal inline fun > ValidityTokenOwner.firRef(fir: D, resolveState: FirModuleResolveState) = + FirRefWithValidityCheck(fir, resolveState, token) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/KtAnalysisSessionFe10BindingHolder.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/KtAnalysisSessionFe10BindingHolder.kt index 4b05a43bf42..5372909f6b9 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/KtAnalysisSessionFe10BindingHolder.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/KtAnalysisSessionFe10BindingHolder.kt @@ -40,7 +40,7 @@ class KtAnalysisSessionFe10BindingHolder private constructor( fun buildSymbol(firElement: FirElement): KtSymbol? = firElement.buildSymbol(firAnalysisSession.firSymbolBuilder) @Suppress("UNCHECKED_CAST", "NON_PUBLIC_CALL_FROM_PUBLIC_INLINE") - inline fun withFir(ktSymbol: KtSymbol, crossinline action: (T) -> R) = + inline fun , R> withFir(ktSymbol: KtSymbol, crossinline action: (T) -> R) = (ktSymbol as KtFirSymbol).firRef.withFir(action = action) fun toSignature(ktSymbol: KtSymbol): IdSignature = (ktSymbol as KtFirSymbol<*>).firRef.withFir { it.createSignature() } @@ -52,4 +52,4 @@ class KtAnalysisSessionFe10BindingHolder private constructor( return KtAnalysisSessionFe10BindingHolder(firAnalysisSession) } } -} \ No newline at end of file +} diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenStatusTransformer.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenStatusTransformer.kt index d6f8d5b6a02..086b9e659c6 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenStatusTransformer.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenStatusTransformer.kt @@ -12,7 +12,10 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirPluginKey import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension -import org.jetbrains.kotlin.fir.extensions.predicate.* +import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate +import org.jetbrains.kotlin.fir.extensions.predicate.hasOrUnder +import org.jetbrains.kotlin.fir.extensions.predicate.metaHasOrUnder +import org.jetbrains.kotlin.fir.extensions.predicate.or import org.jetbrains.kotlin.fir.extensions.transform import org.jetbrains.kotlin.name.FqName @@ -21,7 +24,7 @@ class AllOpenStatusTransformer(session: FirSession) : FirStatusTransformerExtens private val ALL_OPEN = FqName("org.jetbrains.kotlin.fir.plugin.AllOpen") } - override fun transformStatus(declaration: FirDeclaration, owners: List, status: FirDeclarationStatus): FirDeclarationStatus { + override fun transformStatus(declaration: FirDeclaration<*>, owners: List>, status: FirDeclarationStatus): FirDeclarationStatus { if (status.modality != null) return status return status.transform(modality = Modality.OPEN) } @@ -30,4 +33,4 @@ class AllOpenStatusTransformer(session: FirSession) : FirStatusTransformerExtens override val key: FirPluginKey get() = AllOpenPluginKey -} \ No newline at end of file +} diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt index b034ea958ee..1365da78d2f 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt @@ -39,8 +39,8 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx } override fun transformStatus( - declaration: FirDeclaration, - owners: List, + declaration: FirDeclaration<*>, + owners: List>, status: FirDeclarationStatus ): FirDeclarationStatus { val visibility = findVisibility(declaration, owners) ?: return status @@ -48,7 +48,7 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx return status.transform(visibility = visibility) } - private fun findVisibility(declaration: FirDeclaration, owners: List): Visibility? { + private fun findVisibility(declaration: FirDeclaration<*>, owners: List>): Visibility? { (declaration as? FirAnnotatedDeclaration)?.visibilityFromAnnotation()?.let { return it } for (owner in owners) { owner.visibilityFromAnnotation()?.let { return it } @@ -56,7 +56,7 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx return null } - private fun FirAnnotatedDeclaration.visibilityFromAnnotation(): Visibility? { + private fun FirAnnotatedDeclaration<*>.visibilityFromAnnotation(): Visibility? { val annotation = annotations.firstOrNull { it.annotationTypeRef.coneTypeSafe()?.lookupTag?.classId == AllPublicClassId } ?: return null diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/checkers/DummyNameChecker.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/checkers/DummyNameChecker.kt index 0c207ed8a4e..c0a9068981e 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/checkers/DummyNameChecker.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/checkers/DummyNameChecker.kt @@ -7,12 +7,14 @@ package org.jetbrains.kotlin.fir.plugin.checkers import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker -import org.jetbrains.kotlin.fir.analysis.diagnostics.* +import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction object DummyNameChecker : FirMemberDeclarationChecker() { - override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration !is FirSimpleFunction) return if (declaration.name.asString() == "dummy") { reporter.reportOn(declaration.source, FirErrors.SYNTAX, context) diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenMemberGenerator.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenMemberGenerator.kt index b2e1ffbbbc7..35657a3c2a7 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenMemberGenerator.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenMemberGenerator.kt @@ -23,19 +23,19 @@ import org.jetbrains.kotlin.name.Name class AllOpenMemberGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) { override fun generateClasses( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { return emptyList() } - override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List { + override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List> { return emptyList() } override fun generateMembers( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { if (annotatedDeclaration !is FirProperty) return emptyList() val owner = owners.last() as? FirRegularClass ?: return emptyList() diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenNestedClassGenerator.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenNestedClassGenerator.kt index c7d41047f46..53a6afa1a97 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenNestedClassGenerator.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenNestedClassGenerator.kt @@ -33,8 +33,8 @@ import org.jetbrains.kotlin.name.Name class AllOpenNestedClassGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) { override fun generateClasses( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { val owner = annotatedDeclaration as? FirRegularClass ?: return emptyList() val newClass = buildRegularClass { @@ -56,7 +56,7 @@ class AllOpenNestedClassGenerator(session: FirSession) : FirDeclarationGeneratio return listOf(GeneratedDeclaration(newClass, owner)) } - override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List { + override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List> { val klass = generatedClass.klass val classId = klass.symbol.classId @@ -92,8 +92,8 @@ class AllOpenNestedClassGenerator(session: FirSession) : FirDeclarationGeneratio } override fun generateMembers( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { return emptyList() } diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt index f37d8bd3b34..aa69eb67155 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenRecursiveNestedClassGenerator.kt @@ -30,8 +30,8 @@ import org.jetbrains.kotlin.name.Name class AllOpenRecursiveNestedClassGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) { override fun generateClasses( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { if (owners.size > 2) return emptyList() val owner = annotatedDeclaration as? FirRegularClass ?: return emptyList() @@ -62,13 +62,13 @@ class AllOpenRecursiveNestedClassGenerator(session: FirSession) : FirDeclaration return listOf(GeneratedDeclaration(newClass, owner)) } - override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List { + override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List> { return emptyList() } override fun generateMembers( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { return emptyList() } diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenTopLevelDeclarationsGenerator.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenTopLevelDeclarationsGenerator.kt index 83bff14a847..e9842530b31 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenTopLevelDeclarationsGenerator.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/AllOpenTopLevelDeclarationsGenerator.kt @@ -28,8 +28,8 @@ import org.jetbrains.kotlin.name.Name class AllOpenTopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) { override fun generateClasses( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { val file = owners.first() as FirFile val klass = annotatedDeclaration as? FirRegularClass ?: return emptyList() @@ -50,7 +50,7 @@ class AllOpenTopLevelDeclarationsGenerator(session: FirSession) : FirDeclaration return listOf(GeneratedDeclaration(newClass, file)) } - override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List { + override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List> { val klass = generatedClass.klass val function = buildSimpleFunction { moduleData = session.moduleData @@ -69,8 +69,8 @@ class AllOpenTopLevelDeclarationsGenerator(session: FirSession) : FirDeclaration } override fun generateMembers( - annotatedDeclaration: FirDeclaration, - owners: List + annotatedDeclaration: FirDeclaration<*>, + owners: List> ): List> { return emptyList() }