From cb981919f98670706bc8668154bd7261ab494da5 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 26 Sep 2019 15:36:32 +0300 Subject: [PATCH] [FIR] Replace FIR tree with generated implementation --- .../jetbrains/kotlin/fir/dump/HtmlFirDump.kt | 41 +- .../kotlin/fir/backend/ConversionUtils.kt | 5 +- .../kotlin/fir/backend/Fir2IrCallableCache.kt | 3 +- .../fir/backend/Fir2IrDeclarationStorage.kt | 9 +- .../kotlin/fir/backend/Fir2IrLocalStorage.kt | 2 +- .../kotlin/fir/backend/Fir2IrVisitor.kt | 43 +- .../kotlin/fir/java/FirJavaElementFinder.kt | 10 +- .../fir/java/FirJavaElementFinder.kt.183 | 10 +- .../kotlin/fir/java/JavaSymbolProvider.kt | 27 +- .../jetbrains/kotlin/fir/java/JavaUtils.kt | 19 +- .../fir/java/declarations/FirJavaClass.kt | 59 +- .../java/declarations/FirJavaConstructor.kt | 85 +- .../fir/java/declarations/FirJavaField.kt | 86 +- .../fir/java/declarations/FirJavaMethod.kt | 31 +- .../declarations/FirJavaValueParameter.kt | 12 +- .../KotlinDeserializedJvmSymbolsProvider.kt | 19 +- .../enhancement/EnhancementSignatureParts.kt | 2 +- .../fir/java/enhancement/javaTypeUtils.kt | 17 +- .../java/scopes/JavaClassEnhancementScope.kt | 57 +- .../fir/java/scopes/JavaClassUseSiteScope.kt | 4 +- .../fir/lightTree/converter/ConverterUtil.kt | 32 +- .../converter/DeclarationsConverter.kt | 243 ++- .../converter/ExpressionsConverter.kt | 85 +- .../lightTree/fir/DestructuringDeclaration.kt | 2 +- .../fir/lightTree/fir/PrimaryConstructor.kt | 4 +- .../fir/lightTree/fir/ValueParameter.kt | 46 +- .../fir/lightTree/fir/modifier/Modifier.kt | 9 +- .../lightTree/fir/modifier/TypeModifier.kt | 9 +- .../fir/modifier/TypeParameterModifier.kt | 10 +- .../fir/modifier/TypeProjectionModifier.kt | 9 +- .../kotlin/fir/builder/BaseFirBuilder.kt | 65 +- .../kotlin/fir/builder/ConversionUtils.kt | 99 +- .../kotlin/fir/builder/DataClassUtils.kt | 88 +- .../kotlin/fir/builder/RawFirBuilder.kt | 326 ++-- .../builder/AbstractRawFirBuilderTestCase.kt | 1 + .../RawFirBuilderTotalKotlinTestCase.kt | 11 +- .../src/org/jetbrains/kotlin/fir/CopyUtils.kt | 19 +- .../jetbrains/kotlin/fir/FirCallResolver.kt | 30 +- .../kotlin/fir/FirQualifiedNameResolver.kt | 2 +- .../AbstractAnnotationDeserializer.kt | 8 +- .../deserialization/ClassDeserialization.kt | 31 +- .../deserialization/FirMemberDeserializer.kt | 143 +- .../deserialization/FirTypeDeserializer.kt | 8 +- .../kotlin/fir/resolve/ResolveUtils.kt | 13 +- .../kotlin/fir/resolve/SamResolution.kt | 79 +- .../kotlin/fir/resolve/ScopeUtils.kt | 1 - .../kotlin/fir/resolve/SessionHolder.kt | 2 +- .../kotlin/fir/resolve/calls/Arguments.kt | 6 +- .../fir/resolve/calls/CandidateCollector.kt | 2 +- .../fir/resolve/calls/CandidateFactory.kt | 2 +- .../calls/ConeOverloadConflictResolver.kt | 10 +- ...CreateFreshTypeVariableSubstitutorStage.kt | 6 +- .../calls/FirNamedReferenceWithCandidate.kt | 4 +- .../kotlin/fir/resolve/calls/FirReceivers.kt | 2 +- .../fir/resolve/calls/FirTowerResolver.kt | 1 + .../kotlin/fir/resolve/calls/ResolverParts.kt | 1 + .../kotlin/fir/resolve/calls/Synthetics.kt | 45 +- .../kotlin/fir/resolve/calls/TowerLevels.kt | 4 +- .../dfa/FirControlFlowGraphReferenceImpl.kt | 14 +- .../fir/resolve/dfa/FirDataFlowAnalyzer.kt | 6 +- .../jetbrains/kotlin/fir/resolve/dfa/Stack.kt | 2 +- .../fir/resolve/dfa/cfg/ControlFlowGraph.kt | 10 +- .../dfa/cfg/ControlFlowGraphBuilder.kt | 19 +- .../dfa/cfg/ControlFlowGraphNodeBuilder.kt | 2 +- .../dfa/cfg/ControlFlowGraphRenderer.kt | 11 +- .../impl/FirLibrarySymbolProviderImpl.kt | 90 +- .../fir/resolve/impl/FirProviderImpl.kt | 14 +- .../fir/resolve/inference/FirCallCompleter.kt | 18 +- .../ControlFlowGraphReferenceTransformer.kt | 5 +- .../FirAbstractPhaseTransformer.kt | 4 +- .../transformers/FirBodyResolveTransformer.kt | 141 +- ...rCallCompletionResultsWriterTransformer.kt | 12 +- .../FirImportResolveTransformer.kt | 4 +- .../FirSpecificTypeResolverTransformer.kt | 20 +- .../FirStatusResolveTransformer.kt | 26 +- .../FirSupertypeResolverTransformer.kt | 47 +- .../transformers/FirSyntheticCallGenerator.kt | 78 +- .../transformers/FirTypeResolveTransformer.kt | 15 +- .../transformers/InvocationKindTransformer.kt | 2 +- .../fir/resolve/transformers/PhaseUtils.kt | 5 +- .../transformers/ReturnTypeCalculator.kt | 2 +- .../resolve/transformers/TransformUtils.kt | 4 +- .../scopes/impl/AbstractFirOverrideScope.kt | 4 +- .../scopes/impl/FirClassSubstitutionScope.kt | 46 +- .../kotlin/fir/scopes/impl/FirLocalScope.kt | 11 +- .../kotlin/fir/types/ConeTypeContext.kt | 4 +- .../resolve/cfg/initBlockAndInPlaceLambda.dot | 16 +- .../resolve/testData/resolve/cfg/lambdas.dot | 106 +- .../resolve/cfg/propertiesAndInitBlocks.dot | 278 +-- .../testData/resolve/smartcasts/elvis.dot | 188 +- .../resolve/smartcasts/equalsToBoolean.dot | 644 +++---- .../resolve/smartcasts/nullability.dot | 1678 +++++++++-------- .../resolve/stdlib/simpleDelegatedToMap.txt | 4 +- .../jetbrains/kotlin/fir/FirResolveBench.kt | 2 +- ...{FirAbstractElement.kt => DefaultNames.kt} | 10 +- .../kotlin/fir/FirAnnotationContainer.kt | 22 + .../kotlin/fir/FirControlFlowGraphOwner.kt | 24 + .../org/jetbrains/kotlin/fir/FirElement.kt | 26 +- .../src/org/jetbrains/kotlin/fir/FirLabel.kt | 12 +- .../jetbrains/kotlin/fir/FirLabeledElement.kt | 21 - .../org/jetbrains/kotlin/fir/FirReference.kt | 13 - .../org/jetbrains/kotlin/fir/FirRenderer.kt | 83 +- .../jetbrains/kotlin/fir/FirSymbolOwner.kt | 23 + .../jetbrains/kotlin/fir/FirTargetElement.kt | 15 +- .../src/org/jetbrains/kotlin/fir/Utils.kt | 26 - .../fir/declarations/FirAnonymousFunction.kt | 55 +- .../declarations/FirAnonymousInitializer.kt | 23 +- .../fir/declarations/FirAnonymousObject.kt | 31 +- .../declarations/FirCallableDeclaration.kt | 37 +- .../FirCallableMemberDeclaration.kt | 42 +- .../kotlin/fir/declarations/FirClass.kt | 46 +- .../declarations/FirClassLikeDeclaration.kt | 42 +- .../kotlin/fir/declarations/FirConstructor.kt | 62 +- .../kotlin/fir/declarations/FirDeclaration.kt | 20 +- .../declarations/FirDeclarationContainer.kt | 12 - .../fir/declarations/FirDeclarationStatus.kt | 31 +- .../fir/declarations/FirDeclarationUtil.kt | 62 + .../declarations/FirDeclarationWithBody.kt | 21 - .../kotlin/fir/declarations/FirEnumEntry.kt | 53 +- .../fir/declarations/FirErrorDeclaration.kt | 16 - .../fir/declarations/FirErrorFunction.kt | 43 + .../kotlin/fir/declarations/FirField.kt | 56 +- .../kotlin/fir/declarations/FirFile.kt | 41 +- .../kotlin/fir/declarations/FirFunction.kt | 52 +- .../kotlin/fir/declarations/FirImport.kt | 18 +- .../fir/declarations/FirMemberDeclaration.kt | 47 +- .../fir/declarations/FirMemberFunction.kt | 48 +- .../fir/declarations/FirNamedDeclaration.kt | 17 +- .../fir/declarations/FirNamedFunction.kt | 30 - .../fir/declarations/FirPackageFragment.kt | 21 - .../kotlin/fir/declarations/FirProperty.kt | 74 +- .../fir/declarations/FirPropertyAccessor.kt | 50 +- .../fir/declarations/FirRegularClass.kt | 56 +- .../FirResolvedDeclarationStatus.kt | 28 +- .../fir/declarations/FirResolvedImport.kt | 26 +- .../fir/declarations/FirSimpleFunction.kt | 47 + .../kotlin/fir/declarations/FirTypeAlias.kt | 41 +- .../fir/declarations/FirTypeParameter.kt | 44 +- .../declarations/FirTypeParametersOwner.kt | 22 + .../fir/declarations/FirTypedDeclaration.kt | 30 +- .../fir/declarations/FirValueParameter.kt | 56 +- .../kotlin/fir/declarations/FirVariable.kt | 50 + ...iner.kt => SupertypesComputationStatus.kt} | 6 +- .../impl/FirAbstractAnnotatedDeclaration.kt | 19 - .../impl/FirAbstractCallableMember.kt | 67 - .../impl/FirAbstractMemberDeclaration.kt | 53 - .../FirAbstractNamedAnnotatedDeclaration.kt | 17 - .../impl/FirAbstractPropertyAccessor.kt | 31 - .../impl/FirAnonymousFunctionImpl.kt | 105 +- .../impl/FirAnonymousInitializerImpl.kt | 28 +- .../impl/FirAnonymousObjectImpl.kt | 53 +- .../fir/declarations/impl/FirClassImpl.kt | 109 +- .../declarations/impl/FirConstructorImpl.kt | 131 +- .../impl/FirDeclarationStatusImpl.kt | 15 +- .../impl/FirDefaultPropertyAccessor.kt | 74 +- .../impl/FirDefaultSetterValueParameter.kt | 102 +- .../fir/declarations/impl/FirEnumEntryImpl.kt | 123 +- .../fir/declarations/impl/FirErrorFunction.kt | 65 - .../declarations/impl/FirErrorFunctionImpl.kt | 83 + .../fir/declarations/impl/FirErrorLoop.kt | 45 - .../fir/declarations/impl/FirFileImpl.kt | 40 +- .../fir/declarations/impl/FirImportImpl.kt | 19 +- .../impl/FirMemberFunctionImpl.kt | 98 - .../impl/FirMemberPropertyImpl.kt | 124 -- .../impl/FirModifiableAccessorsOwner.kt | 17 - .../declarations/impl/FirModifiableClass.kt | 41 +- .../impl/FirModifiableConstructor.kt | 92 + .../impl/FirModifiableFunction.kt | 67 +- .../impl/FirModifiableTypeParametersOwner.kt | 29 + .../impl/FirModifiableVariable.kt | 87 + .../impl/FirPrimaryConstructorImpl.kt | 34 +- .../impl/FirPropertyAccessorImpl.kt | 91 +- .../fir/declarations/impl/FirPropertyImpl.kt | 118 ++ .../impl/FirResolvedDeclarationStatusImpl.kt | 2 +- .../impl/FirResolvedImportImpl.kt | 34 +- .../impl/FirSimpleFunctionImpl.kt | 93 + .../fir/declarations/impl/FirTypeAliasImpl.kt | 66 +- .../declarations/impl/FirTypeParameterImpl.kt | 52 +- .../impl/FirValueParameterImpl.kt | 93 +- .../fir/declarations/impl/FirVariableImpl.kt | 68 - .../fir/expressions/FirAnnotationCall.kt | 41 +- .../fir/expressions/FirAnnotationContainer.kt | 18 - .../kotlin/fir/expressions/FirArrayOfCall.kt | 21 +- .../kotlin/fir/expressions/FirArraySetCall.kt | 47 +- .../kotlin/fir/expressions/FirAssignment.kt | 28 - .../expressions/FirBinaryLogicExpression.kt | 39 +- .../kotlin/fir/expressions/FirBlock.kt | 28 +- .../fir/expressions/FirBreakExpression.kt | 20 +- .../kotlin/fir/expressions/FirCall.kt | 28 +- .../FirCallLikeControlFlowExpression.kt | 37 - .../expressions/FirCallableReferenceAccess.kt | 31 +- .../kotlin/fir/expressions/FirCatch.kt | 23 +- .../FirClassReferenceExpression.kt | 18 +- .../fir/expressions/FirComponentCall.kt | 38 +- .../fir/expressions/FirConstExpression.kt | 23 +- .../fir/expressions/FirContinueExpression.kt | 20 +- .../FirDelegatedConstructorCall.kt | 37 +- .../kotlin/fir/expressions/FirDoWhileLoop.kt | 24 +- .../fir/expressions/FirErrorExpression.kt | 22 +- .../fir/expressions/FirErrorStatement.kt | 15 - .../kotlin/fir/expressions/FirExpression.kt | 37 +- .../fir/expressions/FirExpressionUtil.kt | 42 + .../expressions/FirExpressionWithSmartcast.kt | 44 +- .../kotlin/fir/expressions/FirFunctionCall.kt | 50 +- .../kotlin/fir/expressions/FirGetClassCall.kt | 22 +- .../kotlin/fir/expressions/FirJump.kt | 18 +- .../FirLambdaArgumentExpression.kt | 19 +- .../kotlin/fir/expressions/FirLoop.kt | 33 +- .../kotlin/fir/expressions/FirLoopJump.kt | 25 + .../expressions/FirNamedArgumentExpression.kt | 22 +- .../kotlin/fir/expressions/FirOperatorCall.kt | 22 +- .../fir/expressions/FirQualifiedAccess.kt | 48 +- .../FirQualifiedAccessExpression.kt | 41 +- .../FirQualifiedAccessWithoutCallee.kt | 31 + .../kotlin/fir/expressions/FirResolvable.kt | 17 +- .../fir/expressions/FirResolvedQualifier.kt | 23 +- .../fir/expressions/FirReturnExpression.kt | 23 +- .../FirSpreadArgumentExpression.kt | 18 +- .../kotlin/fir/expressions/FirStatement.kt | 24 +- .../expressions/FirStringConcatenationCall.kt | 21 +- .../expressions/FirThisReceiverExpression.kt | 37 + .../fir/expressions/FirThrowExpression.kt | 21 +- .../fir/expressions/FirTryExpression.kt | 43 +- .../fir/expressions/FirTypeOperatorCall.kt | 29 +- .../expressions/FirUncheckedNotNullCast.kt | 16 - .../kotlin/fir/expressions/FirVariable.kt | 46 - .../fir/expressions/FirVariableAssignment.kt | 34 +- .../kotlin/fir/expressions/FirWhenBranch.kt | 27 +- .../fir/expressions/FirWhenExpression.kt | 40 +- .../expressions/FirWhenSubjectExpression.kt | 23 +- .../kotlin/fir/expressions/FirWhileLoop.kt | 24 +- .../FirWrappedArgumentExpression.kt | 18 +- .../FirWrappedDelegateExpression.kt | 23 +- .../fir/expressions/FirWrappedExpression.kt | 24 +- .../LogicOperationKind.kt} | 6 +- .../impl/FirAbstractAnnotatedElement.kt | 23 - .../expressions/impl/FirAbstractAssignment.kt | 40 - .../fir/expressions/impl/FirAbstractLoop.kt | 52 +- .../expressions/impl/FirAbstractLoopJump.kt | 42 + .../impl/FirAbstractQualifiedAccess.kt | 31 - .../expressions/impl/FirAnnotatedStatement.kt | 11 - .../expressions/impl/FirAnnotationCallImpl.kt | 42 +- .../expressions/impl/FirArrayOfCallImpl.kt | 41 +- .../expressions/impl/FirArraySetCallImpl.kt | 102 +- .../impl/FirBinaryLogicExpressionImpl.kt | 53 +- .../fir/expressions/impl/FirBlockImpl.kt | 39 +- .../impl/FirBreakExpressionImpl.kt | 35 +- .../impl/FirCallWithArgumentList.kt | 31 +- .../impl/FirCallableReferenceAccessImpl.kt | 75 +- .../fir/expressions/impl/FirCatchImpl.kt | 30 +- .../impl/FirClassReferenceExpressionImpl.kt | 36 +- .../expressions/impl/FirComponentCallImpl.kt | 81 +- .../impl/FirConstExpressionImpl.kt | 37 +- .../impl/FirContinueExpressionImpl.kt | 35 +- .../impl/FirDelegatedConstructorCallImpl.kt | 72 +- .../expressions/impl/FirDoWhileLoopImpl.kt | 49 +- .../impl/FirElseIfTrueCondition.kt | 34 +- .../impl/FirEmptyExpressionBlock.kt | 35 +- .../impl/FirErrorExpressionImpl.kt | 35 +- .../fir/expressions/impl/FirErrorLoop.kt | 59 + .../fir/expressions/impl/FirExpressionStub.kt | 35 +- .../impl/FirExpressionWithSmartcastImpl.kt | 42 +- .../expressions/impl/FirFunctionCallImpl.kt | 94 +- .../expressions/impl/FirGetClassCallImpl.kt | 42 +- .../impl/FirLambdaArgumentExpressionImpl.kt | 34 +- .../fir/expressions/impl/FirLoopJump.kt | 29 - .../impl/FirModifiableQualifiedAccess.kt | 77 +- .../impl/FirNamedArgumentExpressionImpl.kt | 37 +- .../impl/FirNoReceiverExpression.kt | 17 +- .../expressions/impl/FirOperationBasedCall.kt | 36 - .../expressions/impl/FirOperatorCallImpl.kt | 49 +- .../impl/FirQualifiedAccessExpressionImpl.kt | 75 +- .../impl/FirResolvedQualifierImpl.kt | 39 +- .../impl/FirReturnExpressionImpl.kt | 36 +- .../impl/FirSingleExpressionBlock.kt | 38 +- .../impl/FirSpreadArgumentExpressionImpl.kt | 34 +- .../impl/FirStringConcatenationCallImpl.kt | 39 +- .../impl/FirThisReceiverExpressionImpl.kt | 81 +- .../impl/FirThrowExpressionImpl.kt | 37 +- .../expressions/impl/FirTryExpressionImpl.kt | 65 +- .../impl/FirTypeOperatorCallImpl.kt | 46 +- .../fir/expressions/impl/FirUnitExpression.kt | 30 +- .../FirUnknownTypeCallWithArgumentList.kt | 29 - .../impl/FirUnknownTypeExpression.kt | 30 - .../impl/FirVariableAssignmentImpl.kt | 82 +- .../fir/expressions/impl/FirWhenBranchImpl.kt | 30 +- .../expressions/impl/FirWhenExpressionImpl.kt | 77 +- .../impl/FirWhenSubjectExpressionImpl.kt | 28 +- .../fir/expressions/impl/FirWhileLoopImpl.kt | 49 +- .../impl/FirWrappedDelegateExpressionImpl.kt | 32 +- .../fir/impl/FirAbstractAnnotatedElement.kt | 29 + .../jetbrains/kotlin/fir/impl/FirLabelImpl.kt | 26 + .../kotlin/fir/labels/FirLabelImpl.kt | 15 - .../FirBackingFieldReference.kt | 24 +- .../FirBackingFieldReferenceImpl.kt | 16 - .../FirControlFlowGraphReference.kt | 21 +- .../FirDelegateFieldReference.kt | 23 +- .../FirDelegateFieldReferenceImpl.kt | 16 - .../fir/references/FirErrorNamedReference.kt | 22 +- .../references/FirExplicitThisReference.kt | 15 - .../references/FirImplicitThisReference.kt | 15 - .../fir/{ => references}/FirNamedReference.kt | 18 +- ...rPropertyFromParameterCallableReference.kt | 18 - .../kotlin/fir/references/FirReference.kt | 21 + .../FirResolvedCallableReference.kt | 18 +- .../FirResolvedCallableReferenceImpl.kt | 18 - .../fir/references/FirSimpleNamedReference.kt | 13 - .../kotlin/fir/references/FirStubReference.kt | 14 - .../fir/{ => references}/FirSuperReference.kt | 20 +- .../fir/{ => references}/FirThisReference.kt | 17 +- .../impl/FirBackingFieldReferenceImpl.kt | 32 + .../impl/FirDelegateFieldReferenceImpl.kt | 32 + .../impl/FirEmptyControlFlowGraphReference.kt | 25 + .../impl/FirErrorNamedReferenceImpl.kt | 31 + .../{ => impl}/FirExplicitSuperReference.kt | 25 +- .../impl/FirExplicitThisReference.kt | 33 + .../impl/FirImplicitThisReference.kt | 31 + ...rPropertyFromParameterCallableReference.kt | 31 + .../impl/FirResolvedCallableReferenceImpl.kt | 31 + .../impl/FirSimpleNamedReference.kt | 29 + .../fir/references/impl/FirStubReference.kt | 25 + .../fir/symbols/AbstractFirBasedSymbol.kt | 3 +- .../kotlin/fir/symbols/FirBasedSymbol.kt | 3 +- .../kotlin/fir/symbols/FirSymbolOwner.kt | 7 +- .../fir/symbols/impl/FirClassLikeSymbol.kt | 8 +- .../fir/symbols/impl/FirClassifierSymbol.kt | 8 +- .../fir/symbols/impl/FirFunctionSymbol.kt | 5 +- .../fir/symbols/impl/FirVariableSymbol.kt | 2 +- .../kotlin/fir/types/FirDelegatedTypeRef.kt | 23 +- .../kotlin/fir/types/FirDynamicTypeRef.kt | 18 +- .../kotlin/fir/types/FirErrorTypeRef.kt | 17 +- .../kotlin/fir/types/FirFunctionTypeRef.kt | 38 +- .../kotlin/fir/types/FirImplicitTypeRef.kt | 17 +- ...ectionContainer.kt => FirQualifierPart.kt} | 7 +- .../fir/types/FirResolvedFunctionTypeRef.kt | 28 + .../kotlin/fir/types/FirResolvedTypeRef.kt | 27 +- .../kotlin/fir/types/FirStarProjection.kt | 15 +- .../kotlin/fir/types/FirTypeProjection.kt | 17 +- .../types/FirTypeProjectionWithVariance.kt | 22 +- .../jetbrains/kotlin/fir/types/FirTypeRef.kt | 27 +- .../fir/types/FirTypeRefWithNullability.kt | 16 +- .../kotlin/fir/types/FirTypeUtils.kt | 11 +- .../kotlin/fir/types/FirUserTypeRef.kt | 29 +- .../types/impl/FirAbstractAnnotatedTypeRef.kt | 27 - .../types/impl/FirComputingImplicitTypeRef.kt | 31 + .../fir/types/impl/FirDelegatedTypeRefImpl.kt | 33 +- .../fir/types/impl/FirDynamicTypeRefImpl.kt | 27 +- .../fir/types/impl/FirErrorTypeRefImpl.kt | 29 +- .../fir/types/impl/FirFunctionTypeRefImpl.kt | 38 +- .../types/impl/FirImplicitBuiltinTypeRef.kt | 16 +- .../fir/types/impl/FirImplicitTypeRefImpl.kt | 28 +- .../impl/FirResolvedFunctionTypeRefImpl.kt | 38 +- .../fir/types/impl/FirResolvedTypeRefImpl.kt | 28 +- .../fir/types/impl/FirStarProjectionImpl.kt | 19 +- .../impl/FirTypePlaceholderProjection.kt | 19 +- .../impl/FirTypeProjectionWithVarianceImpl.kt | 29 +- .../fir/types/impl/FirUserTypeRefImpl.kt | 30 +- .../kotlin/fir/visitors/FirTransformer.kt} | 1593 ++++++++-------- .../kotlin/fir/visitors/FirTransformerUtil.kt | 35 + .../kotlin/fir/visitors/FirVisitor.kt | 333 ++++ .../kotlin/fir/visitors/FirVisitorVoid.kt} | 1667 ++++++++-------- .../src/VisitorsGenerator.kt | 64 +- .../fir/visitors/FirDefaultTransformer.kt | 2 +- .../fir/visitors/FirVisitorGenerated.kt | 472 ----- .../compiler/visualizer/FirVisualizer.kt | 8 +- .../kotlin/idea/fir/FirResolutionApi.kt | 2 +- 366 files changed, 11081 insertions(+), 8224 deletions(-) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{FirAbstractElement.kt => DefaultNames.kt} (54%) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAnnotationContainer.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirControlFlowGraphOwner.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabeledElement.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSymbolOwner.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationContainer.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationWithBody.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorDeclaration.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorFunction.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPackageFragment.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirSimpleFunction.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirVariable.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/{FirTypeParameterContainer.kt => SupertypesComputationStatus.kt} (56%) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractAnnotatedDeclaration.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractNamedAnnotatedDeclaration.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunctionImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorLoop.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableAccessorsOwner.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableConstructor.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableTypeParametersOwner.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableVariable.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyImpl.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirSimpleFunctionImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationContainer.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallLikeControlFlowExpression.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorStatement.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoopJump.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{references/FirEmptyControlFlowGraphReference.kt => expressions/LogicOperationKind.kt} (63%) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAnnotatedElement.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoop.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirAbstractAnnotatedElement.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirLabelImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/labels/FirLabelImpl.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{ => references}/FirBackingFieldReference.kt (56%) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReferenceImpl.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{ => references}/FirDelegateFieldReference.kt (56%) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReferenceImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitThisReference.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirImplicitThisReference.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{ => references}/FirNamedReference.kt (57%) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirPropertyFromParameterCallableReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirReference.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{ => references}/FirResolvedCallableReference.kt (51%) delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReferenceImpl.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSimpleNamedReference.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirStubReference.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{ => references}/FirSuperReference.kt (62%) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/{ => references}/FirThisReference.kt (50%) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirBackingFieldReferenceImpl.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirDelegateFieldReferenceImpl.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirEmptyControlFlowGraphReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirErrorNamedReferenceImpl.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/{ => impl}/FirExplicitSuperReference.kt (58%) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitThisReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirImplicitThisReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirPropertyFromParameterCallableReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirResolvedCallableReferenceImpl.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirSimpleNamedReference.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirStubReference.kt rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/{FirTypeProjectionContainer.kt => FirQualifierPart.kt} (60%) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedFunctionTypeRef.kt delete mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt rename compiler/fir/tree/{visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt => src/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt} (66%) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformerUtil.kt create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt rename compiler/fir/tree/{visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt => src/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt} (64%) delete mode 100644 compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt 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 5f341009079..8e7c5e46540 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 @@ -18,8 +18,8 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression -import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.* +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol @@ -268,7 +268,7 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) { require(inModule) val dumpOutput = index.files[file] ?: error("No location for ${file.name}") - val dumper = HtmlFirDump(LinkResolver(dumpOutput), file.fileSession) + val dumper = HtmlFirDump(LinkResolver(dumpOutput), file.session) val builder = StringBuilder() dumper.generate(file, builder) @@ -338,9 +338,9 @@ class MultiModuleHtmlFirDump(private val outputRoot: File) { visitElement(valueParameter) } - override fun visitNamedFunction(namedFunction: FirNamedFunction) { - indexDeclaration(namedFunction) - visitElement(namedFunction) + override fun visitSimpleFunction(simpleFunction: FirSimpleFunction) { + indexDeclaration(simpleFunction) + visitElement(simpleFunction) } override fun visitTypeParameter(typeParameter: FirTypeParameter) { @@ -576,7 +576,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver } } - generateDeclarations(klass) + generateDeclarations(klass.declarations) br } @@ -773,14 +773,14 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver private fun FlowContent.generate(memberDeclaration: FirMemberDeclaration) { when (memberDeclaration) { is FirRegularClass -> generate(memberDeclaration) - is FirNamedFunction -> generate(memberDeclaration) - is FirProperty -> generate(memberDeclaration) + is FirSimpleFunction -> generate(memberDeclaration) + is FirProperty -> if (memberDeclaration.isLocal) generate(memberDeclaration as FirVariable<*>) else generate(memberDeclaration) is FirConstructor -> generate(memberDeclaration) else -> unsupported(memberDeclaration) } } - private fun FlowContent.generateTypeParameters(typeParameterContainer: FirTypeParameterContainer) { + private fun FlowContent.generateTypeParameters(typeParameterContainer: FirTypeParametersOwner) { if (typeParameterContainer.typeParameters.isEmpty()) return +"<" generateList(typeParameterContainer.typeParameters) { @@ -873,7 +873,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver private fun FlowContent.generate(statement: FirStatement) { when (statement) { - is FirNamedFunction -> generate(statement) + is FirSimpleFunction -> generate(statement) is FirAnonymousObject -> generate(statement, isStatement = true) is FirAnonymousFunction -> generate(statement, isStatement = true) is FirWhileLoop -> generate(statement) @@ -1074,7 +1074,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver private fun FlowContent.generate(whileLoop: FirWhileLoop) { iline { - generateLabel(whileLoop) + generateLabel(whileLoop.label) keyword("while ") +"(" generate(whileLoop.condition) @@ -1153,8 +1153,8 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver } } - private fun FlowContent.generateLabel(labeledElement: FirLabeledElement) { - val label = labeledElement.label ?: return + private fun FlowContent.generateLabel(label: FirLabel?) { + if (label == null) return span("label") { +label.name +"@" @@ -1301,30 +1301,29 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver generate(it) } } - generateDeclarations(anonymousObject) + generateDeclarations(anonymousObject.declarations) } } } - private fun FlowContent.generateDeclarations(declarationContainer: FirDeclarationContainer) { - if (declarationContainer.declarations.isNotEmpty()) { + private fun FlowContent.generateDeclarations(declarations: List) { + if (declarations.isNotEmpty()) { +" {" br withIdentLevel { - for (declaration in declarationContainer.declarations) { + for (declaration in declarations) { generate(declaration) line {} } } - inl() +"}" } } - private fun FlowContent.generate(function: FirNamedFunction) { + private fun FlowContent.generate(function: FirSimpleFunction) { generateMultiLineExpression(isStatement = true) { iline { declarationStatus(function.status) @@ -1365,7 +1364,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver private fun FlowContent.generate(anonymousFunction: FirAnonymousFunction, isStatement: Boolean) { generateMultiLineExpression(isStatement) { iline { - generateLabel(anonymousFunction) + generateLabel(anonymousFunction.label) keyword("fun ") generateReceiver(anonymousFunction.receiverTypeRef) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 674cc43d8da..347f32cc795 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -7,6 +7,9 @@ package org.jetbrains.kotlin.fir.backend import com.intellij.psi.PsiCompiledElement import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* @@ -117,7 +120,7 @@ fun FirReference.toSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbo private fun AbstractFirBasedSymbol<*>.toSymbol(declarationStorage: Fir2IrDeclarationStorage): IrSymbol? = when (this) { is FirClassSymbol -> toClassSymbol(declarationStorage) is FirFunctionSymbol<*> -> toFunctionSymbol(declarationStorage) - is FirPropertySymbol -> toPropertyOrFieldSymbol(declarationStorage) + is FirPropertySymbol -> if (fir.isLocal) toValueSymbol(declarationStorage) else toPropertyOrFieldSymbol(declarationStorage) is FirFieldSymbol -> toPropertyOrFieldSymbol(declarationStorage) is FirBackingFieldSymbol -> toBackingFieldSymbol(declarationStorage) is FirDelegateFieldSymbol<*> -> toBackingFieldSymbol(declarationStorage) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt index e3bc533152c..d1d17dd62cb 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter @@ -44,7 +43,7 @@ class Fir2IrCallableCache { fun getLocalFunction(localFunction: FirFunction<*>): IrSimpleFunction? = localFunctionCache[localFunction] fun putLocalFunction(localFunction: FirFunction<*>, irFunction: IrSimpleFunction) { - require(localFunction !is FirNamedFunction || localFunction.visibility == Visibilities.LOCAL) + require(localFunction !is FirSimpleFunction || localFunction.visibility == Visibilities.LOCAL) localFunctionCache[localFunction] = irFunction } 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 e0323ebb2da..1bbedcecb3b 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 @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor import org.jetbrains.kotlin.fir.descriptors.FirPackageFragmentDescriptor -import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -52,7 +51,7 @@ class Fir2IrDeclarationStorage( private val typeParameterCache = mutableMapOf() - private val functionCache = mutableMapOf() + private val functionCache = mutableMapOf() private val constructorCache = mutableMapOf() @@ -273,7 +272,7 @@ class Fir2IrDeclarationStorage( } if (function !is FirConstructor) { val thisOrigin = IrDeclarationOrigin.DEFINED - if (function is FirNamedFunction) { + if (function is FirSimpleFunction) { val receiverTypeRef = function.receiverTypeRef if (receiverTypeRef != null) { extensionReceiverParameter = receiverTypeRef.convertWithOffsets { startOffset, endOffset -> @@ -337,7 +336,7 @@ class Fir2IrDeclarationStorage( } fun getIrFunction( - function: FirNamedFunction, + function: FirSimpleFunction, irParent: IrDeclarationParent? = null, shouldLeaveScope: Boolean = false, origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED @@ -611,7 +610,7 @@ class Fir2IrDeclarationStorage( val firDeclaration = firFunctionSymbol.fir val irParent = (firDeclaration as? FirCallableMemberDeclaration<*>)?.let { findIrParent(it) } return when (firDeclaration) { - is FirNamedFunction -> { + is FirSimpleFunction -> { val irDeclaration = getIrFunction(firDeclaration, irParent, shouldLeaveScope = true).apply { setAndModifyParent(irParent) } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt index 12f67e61131..7917047203e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.expressions.FirVariable +import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter 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 93a84161e95..2ca6ea5e841 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 @@ -16,7 +16,9 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression -import org.jetbrains.kotlin.fir.references.FirPropertyFromParameterCallableReference +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterCallableReference import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol import org.jetbrains.kotlin.fir.scopes.ProcessorAction @@ -164,7 +166,7 @@ class Fir2IrVisitor( is FirClassSymbol -> { val superClass = superSymbol.fir for (declaration in superClass.declarations) { - if (declaration is FirMemberDeclaration && (declaration is FirNamedFunction || declaration is FirProperty)) { + if (declaration is FirMemberDeclaration && (declaration is FirSimpleFunction || declaration is FirProperty)) { result += declaration.name } } @@ -270,7 +272,7 @@ class Fir2IrVisitor( if (it !is FirConstructor || !it.isPrimary) { val irDeclaration = it.toIrDeclaration() ?: return@forEach declarations += irDeclaration - if (it is FirMemberDeclaration && (it is FirNamedFunction || it is FirProperty)) { + if (it is FirMemberDeclaration && (it is FirSimpleFunction || it is FirProperty)) { processedCallableNames += it.name } } @@ -317,12 +319,12 @@ class Fir2IrVisitor( ): T { setParentByParentStack() withParent { - if (firFunction is FirNamedFunction) { + if (firFunction is FirSimpleFunction) { for ((index, typeParameter) in firFunction.typeParameters.withIndex()) { typeParameters += declarationStorage.getIrTypeParameter(typeParameter, index).setParentByParentStack() } } - val firFunctionSymbol = (firFunction as? FirNamedFunction)?.symbol + val firFunctionSymbol = (firFunction as? FirSimpleFunction)?.symbol val lastClass = classStack.lastOrNull() val containingClass = if (firOverriddenSymbol == null || firFunctionSymbol == null) { lastClass @@ -449,12 +451,12 @@ class Fir2IrVisitor( } } - override fun visitNamedFunction(namedFunction: FirNamedFunction, data: Any?): IrElement { + override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): IrElement { val irFunction = declarationStorage.getIrFunction( - namedFunction, irParent = parentStack.last() as? IrClass + simpleFunction, irParent = parentStack.last() as? IrClass ) return irFunction.setParentByParentStack().withFunction { - setFunctionContent(irFunction.descriptor, namedFunction) + setFunctionContent(irFunction.descriptor, simpleFunction) } } @@ -477,7 +479,8 @@ class Fir2IrVisitor( } } - override fun > visitVariable(variable: FirVariable, data: Any?): IrElement { + private fun visitLocalVariable(variable: FirProperty, data: Any?): IrElement { + assert(variable.isLocal) val irVariable = declarationStorage.createAndSaveIrVariable(variable) return irVariable.setParentByParentStack().apply { val initializer = variable.initializer @@ -569,7 +572,8 @@ class Fir2IrVisitor( return this } - override fun visitProperty(property: FirProperty, data: Any?): IrProperty { + override fun visitProperty(property: FirProperty, data: Any?): IrElement { + if (property.isLocal) return visitLocalVariable(property, data) val irProperty = declarationStorage.getIrProperty(property, irParent = parentStack.last() as? IrClass) return irProperty.setParentByParentStack().withProperty { setPropertyContent(irProperty.descriptor, property) } } @@ -634,7 +638,7 @@ class Fir2IrVisitor( var irTarget = functionStack.last() for (potentialTarget in functionStack.asReversed()) { // TODO: remove comparison by name - if (potentialTarget.name == (firTarget as? FirNamedFunction)?.name) { + if (potentialTarget.name == (firTarget as? FirSimpleFunction)?.name) { irTarget = potentialTarget break } @@ -649,11 +653,6 @@ class Fir2IrVisitor( } } - override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: Any?): IrElement { - // TODO: Ensure correct - return uncheckedNotNullCast.expression.toIrExpression() - } - override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: Any?): IrElement { // TODO: change this temporary hack to something correct return wrappedArgumentExpression.expression.toIrExpression() @@ -799,6 +798,14 @@ class Fir2IrVisitor( return qualifiedAccessExpression.toIrExpression(qualifiedAccessExpression.typeRef).applyReceivers(qualifiedAccessExpression) } + override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: Any?): IrElement { + return visitQualifiedAccessExpression(thisReceiverExpression, data) + } + + override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: Any?): IrElement { + return visitQualifiedAccessExpression(expressionWithSmartcast, data) + } + override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: Any?): IrElement { val symbol = callableReferenceAccess.calleeReference.toSymbol(declarationStorage) val type = callableReferenceAccess.typeRef.toIrType(this@Fir2IrVisitor.session, declarationStorage) @@ -1255,13 +1262,13 @@ class Fir2IrVisitor( val leftOperand = binaryLogicExpression.leftOperand.accept(this, data) as IrExpression val rightOperand = binaryLogicExpression.rightOperand.accept(this, data) as IrExpression when (binaryLogicExpression.kind) { - FirBinaryLogicExpression.OperationKind.AND -> { + LogicOperationKind.AND -> { IrIfThenElseImpl(startOffset, endOffset, irBuiltIns.booleanType, IrStatementOrigin.ANDAND).apply { branches.add(IrBranchImpl(leftOperand, rightOperand)) branches.add(elseBranch(constFalse(rightOperand.startOffset, rightOperand.endOffset))) } } - FirBinaryLogicExpression.OperationKind.OR -> { + LogicOperationKind.OR -> { IrIfThenElseImpl(startOffset, endOffset, irBuiltIns.booleanType, IrStatementOrigin.OROR).apply { branches.add(IrBranchImpl(leftOperand, constTrue(leftOperand.startOffset, leftOperand.endOffset))) branches.add(elseBranch(rightOperand)) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt index e093414db74..e4b3788a87a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt @@ -22,10 +22,8 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.classId -import org.jetbrains.kotlin.fir.declarations.superConeTypes +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -96,7 +94,7 @@ class FirJavaElementFinder( firClass.typeParameters.map { Pair(it.name.asString(), arrayOf(CommonClassNames.JAVA_LANG_OBJECT)) } ) - if (firClass.supertypesComputationStatus != FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTED) { + if (firClass.supertypesComputationStatus != SupertypesComputationStatus.COMPUTED) { val firForSuperClassFile = firProvider.getFirClassifierContainerFile(classId) FirSupertypeResolverTransformer().apply { initFromFile(firForSuperClassFile) @@ -137,7 +135,7 @@ private fun FirRegularClass.packFlags(): Int { } private fun PsiClassStubImpl<*>.addSupertypesReferencesLists(firRegularClass: FirRegularClass, session: FirSession) { - if (firRegularClass.supertypesComputationStatus == FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTING) return + if (firRegularClass.supertypesComputationStatus == SupertypesComputationStatus.COMPUTING) return require(firRegularClass.superTypeRefs.all { it is FirResolvedTypeRef }) { "Supertypes for light class $qualifiedName are being added too early" } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt.183 b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt.183 index a16a452e109..713d2d1de69 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt.183 +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt.183 @@ -22,10 +22,8 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.classId -import org.jetbrains.kotlin.fir.declarations.superConeTypes +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -96,7 +94,7 @@ class FirJavaElementFinder( firClass.typeParameters.map { Pair(it.name.asString(), arrayOf(CommonClassNames.JAVA_LANG_OBJECT)) } ) - if (firClass.supertypesComputationStatus != FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTED) { + if (firClass.supertypesComputationStatus != SupertypesComputationStatus.COMPUTED) { val firForSuperClassFile = firProvider.getFirClassifierContainerFile(classId) FirSupertypeResolverTransformer().apply { initFromFile(firForSuperClassFile) @@ -137,7 +135,7 @@ private fun FirRegularClass.packFlags(): Int { } private fun PsiClassStubImpl<*>.addSupertypesReferencesLists(firRegularClass: FirRegularClass, session: FirSession) { - if (firRegularClass.supertypesComputationStatus == FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTING) return + if (firRegularClass.supertypesComputationStatus == SupertypesComputationStatus.COMPUTING) return require(firRegularClass.superTypeRefs.all { it is FirResolvedTypeRef }) { "Supertypes for light class $qualifiedName are being added too early" } 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 e8c0d97aa7b..a17b85f05a7 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 @@ -9,12 +9,15 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl -import org.jetbrains.kotlin.fir.declarations.impl.addDefaultBoundIfNecessary +import org.jetbrains.kotlin.fir.declarations.visibility import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaConstructor import org.jetbrains.kotlin.fir.java.declarations.FirJavaField @@ -116,7 +119,14 @@ class JavaSymbolProvider( val stored = javaTypeParameterStack.safeGet(this) if (stored != null) return stored.fir val firSymbol = FirTypeParameterSymbol() - val result = FirTypeParameterImpl(session, null, firSymbol, name, variance = INVARIANT, isReified = false) + val result = FirTypeParameterImpl( + null, + session, + name, + firSymbol, + variance = INVARIANT, + isReified = false + ) javaTypeParameterStack.add(this, result) return result } @@ -167,7 +177,7 @@ class JavaSymbolProvider( } } FirJavaClass( - session, (javaClass as? JavaElementImpl<*>)?.psi, + (javaClass as? JavaElementImpl<*>)?.psi, session, firSymbol as FirClassSymbol, javaClass.name, javaClass.visibility, javaClass.modality, javaClass.classKind, isTopLevel = isTopLevel, @@ -187,7 +197,7 @@ class JavaSymbolProvider( val fieldSymbol = FirFieldSymbol(fieldId) val returnType = javaField.type val firJavaField = FirJavaField( - this@JavaSymbolProvider.session, (javaField as? JavaElementImpl<*>)?.psi, + (javaField as? JavaElementImpl<*>)?.psi, this@JavaSymbolProvider.session, fieldSymbol, fieldName, javaField.visibility, javaField.modality, returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack), @@ -231,10 +241,13 @@ class JavaSymbolProvider( val constructorSymbol = FirConstructorSymbol(constructorId) val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack) val firJavaConstructor = FirJavaConstructor( - this@JavaSymbolProvider.session, psi, - constructorSymbol, visibility, isPrimary, + psi, + this@JavaSymbolProvider.session, + constructorSymbol, + visibility, + isPrimary, isInner = !javaClass.isStatic, - delegatedSelfTypeRef = FirResolvedTypeRefImpl( + returnTypeRef = FirResolvedTypeRefImpl( null, firSymbol.constructType( classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol.toLookupTag(), false) }.toTypedArray(), diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index fd7b7671f40..983d15c7333 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -15,11 +15,13 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.impl.* +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter import org.jetbrains.kotlin.fir.java.enhancement.readOnlyToMutable import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.resolve.constructClassType import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.getClassDeclaredCallableSymbols @@ -91,9 +93,10 @@ internal fun JavaClassifierType.toFirResolvedTypeRef( ): FirResolvedTypeRef { val coneType = this.toConeKotlinTypeWithNullability(session, javaTypeParameterStack, isNullable = false) return FirResolvedTypeRefImpl( - psi = null, type = coneType, - annotations = annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } - ) + psi = null, type = coneType + ).apply { + annotations += this@toFirResolvedTypeRef.annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } + } } internal fun JavaType?.toConeKotlinTypeWithNullability( @@ -173,8 +176,7 @@ internal fun JavaAnnotation.toFirAnnotationCall( psi = null, useSiteTarget = null, annotationTypeRef = FirResolvedTypeRefImpl( psi = null, - type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false), - annotations = emptyList() + type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false) ) ).apply { for (argument in this@toFirAnnotationCall.arguments) { @@ -256,7 +258,7 @@ private fun JavaAnnotationArgument.toFirExpression( null } this.calleeReference = calleeReference - ?: FirErrorNamedReference(null, "Strange Java enum value: $classId.$entryName") + ?: FirErrorNamedReferenceImpl(null, "Strange Java enum value: $classId.$entryName") } } is JavaClassObjectAnnotationArgument -> FirGetClassCallImpl(null).apply { @@ -309,8 +311,7 @@ private fun JavaType.toFirResolvedTypeRef( ): FirResolvedTypeRef { if (this is JavaClassifierType) return toFirResolvedTypeRef(session, javaTypeParameterStack) return FirResolvedTypeRefImpl( - psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"), - annotations = emptyList() + psi = null, type = ConeClassErrorType("Unexpected JavaType: $this") ) } 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 1b113537190..1deaeeca489 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 @@ -10,42 +10,45 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility 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.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.transformInplace +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.Name class FirJavaClass internal constructor( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, override val symbol: FirClassSymbol, - name: Name, + override val name: Name, visibility: Visibility, modality: Modality?, override val classKind: ClassKind, isTopLevel: Boolean, isStatic: Boolean, internal val javaTypeParameterStack: JavaTypeParameterStack -) : FirAbstractMemberDeclaration( - session, psi, name, - visibility, modality, - isExpect = false, isActual = false -), FirRegularClass, FirModifiableClass { +) : FirRegularClass, FirModifiableClass { + override var status: FirDeclarationStatusImpl = FirDeclarationStatusImpl(visibility, modality) + override val annotations: MutableList = mutableListOf() + override val typeParameters: MutableList = mutableListOf() + init { symbol.bind(this) status.isInner = !isTopLevel && !isStatic status.isCompanion = false status.isData = false status.isInline = false - resolvePhase = FirResolvePhase.DECLARATIONS } + override var resolvePhase: FirResolvePhase = FirResolvePhase.DECLARATIONS + override val superTypeRefs = mutableListOf() override val declarations = mutableListOf() @@ -53,11 +56,31 @@ class FirJavaClass internal constructor( override val companionObject: FirRegularClass? get() = null - override fun replaceSupertypes(newSupertypes: List): FirRegularClass { + override fun replaceSuperTypeRefs(newSuperTypeRefs: List) { superTypeRefs.clear() - superTypeRefs.addAll(newSupertypes) - return this + superTypeRefs.addAll(newSuperTypeRefs) } - override var supertypesComputationStatus = FirClassLikeDeclaration.SupertypesComputationStatus.NOT_COMPUTED + override var supertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED + + override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) { + supertypesComputationStatus = newSupertypesComputationStatus + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + declarations.forEach { it.accept(visitor, data) } + annotations.forEach { it.accept(visitor, data) } + typeParameters.forEach { it.accept(visitor, data) } + status.accept(visitor, data) + superTypeRefs.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableClass { + declarations.transformInplace(transformer, data) + annotations.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + status = status.transformSingle(transformer, data) + superTypeRefs.transformInplace(transformer, data) + return this + } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index bb5f8711c81..9c335d40f59 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -8,44 +8,51 @@ package org.jetbrains.kotlin.fir.java.declarations import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.CONSTRUCTOR_NAME +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirConstructor -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember -import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl.Companion.NAME +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +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.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol -import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.transformInplace +import org.jetbrains.kotlin.fir.visitors.transformSingle +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class FirJavaConstructor( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, override val symbol: FirConstructorSymbol, visibility: Visibility, override val isPrimary: Boolean, - override val isInner: Boolean, - delegatedSelfTypeRef: FirTypeRef -) : FirAbstractCallableMember( - session, - psi, - name = NAME, - visibility = visibility, - modality = Modality.FINAL, - isExpect = false, - isActual = false, - isOverride = false, - receiverTypeRef = null, - returnTypeRef = delegatedSelfTypeRef -), FirConstructor { + isInner: Boolean, + override var returnTypeRef : FirTypeRef +) : FirAbstractAnnotatedElement, FirConstructor { + override val receiverTypeRef: FirTypeRef? get() = null + override val typeParameters: MutableList = mutableListOf() + override val name: Name get() = CONSTRUCTOR_NAME + override val annotations: MutableList = mutableListOf() + + override var status: FirDeclarationStatus = FirDeclarationStatusImpl(visibility, Modality.FINAL).apply { + isExpect = false + isActual = false + isOverride = false + this.isInner = isInner + } + + override var resolvePhase: FirResolvePhase = FirResolvePhase.DECLARATIONS init { symbol.bind(this) - resolvePhase = FirResolvePhase.DECLARATIONS } override val delegatedConstructor: FirDelegatedConstructorCall? @@ -56,7 +63,7 @@ class FirJavaConstructor( override val valueParameters = mutableListOf() - override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null + override val controlFlowGraphReference: FirControlFlowGraphReference get() = FirEmptyControlFlowGraphReference() override fun transformValueParameters(transformer: FirTransformer, data: D): FirJavaConstructor { valueParameters.transformInplace(transformer, data) @@ -66,4 +73,34 @@ class FirJavaConstructor( override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirJavaConstructor { return this } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirConstructor { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + status.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirJavaConstructor { + transformReturnTypeRef(transformer, data) + transformControlFlowGraphReference(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) + status = status.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override var containerSource: DeserializedContainerSource? = null } \ No newline at end of file diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt index 273fbc120ec..0d0ee4cf3fe 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaField.kt @@ -8,36 +8,86 @@ package org.jetbrains.kotlin.fir.java.declarations import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirField -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.transformInplace +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource class FirJavaField( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, override val symbol: FirFieldSymbol, - name: Name, + override val name: Name, visibility: Visibility, modality: Modality?, - returnTypeRef: FirTypeRef, + override var returnTypeRef: FirTypeRef, override val isVar: Boolean, isStatic: Boolean -) : FirAbstractCallableMember( - session, psi, name, - visibility, modality, - isExpect = false, isActual = false, isOverride = false, - receiverTypeRef = null, returnTypeRef = returnTypeRef -), FirField { +) : FirAbstractAnnotatedElement, FirField { init { symbol.bind(this) - resolvePhase = FirResolvePhase.DECLARATIONS + } + + override var status: FirDeclarationStatus = FirDeclarationStatusImpl(visibility, modality).apply { + this.isStatic = isStatic + isExpect = false + isActual = false + isOverride = false + } + override val receiverTypeRef: FirTypeRef? get() = null + override var resolvePhase: FirResolvePhase = FirResolvePhase.DECLARATIONS + override val isVal: Boolean = true + override val getter: FirPropertyAccessor? get() = null + override val setter: FirPropertyAccessor? get() = null + override val annotations: MutableList = mutableListOf() + override val typeParameters: MutableList = mutableListOf() + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirField { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformGetter(transformer: FirTransformer, data: D): FirField { + return this + } + + override fun transformSetter(transformer: FirTransformer, data: D): FirField { + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirField { + annotations.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + typeParameters.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirJavaField { + transformReturnTypeRef(transformer, data) + transformOtherChildren(transformer, data) + return this } override val delegate: FirExpression? @@ -49,11 +99,5 @@ class FirJavaField( override val delegateFieldSymbol: FirDelegateFieldSymbol? get() = null - init { - status.isStatic = isStatic - } - - override fun transformChildrenWithoutAccessors(transformer: FirTransformer, data: D) { - transformChildren(transformer, data) - } + override var containerSource: DeserializedContainerSource? = null } \ No newline at end of file diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt index ec44a8a24f0..10e52667aea 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaMethod.kt @@ -10,7 +10,8 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.name.Name @@ -24,17 +25,27 @@ class FirJavaMethod( modality: Modality?, returnTypeRef: FirJavaTypeRef, isStatic: Boolean -) : FirMemberFunctionImpl( - session, psi, symbol, name, - visibility, modality, - false, isActual = false, - isOverride = false, - isOperator = true, // All Java methods with name that allows to use it in operator form are considered operators - isInfix = false, isInline = false, isTailRec = false, isExternal = false, isSuspend = false, - receiverTypeRef = null, returnTypeRef = returnTypeRef +) : FirSimpleFunctionImpl( + psi, + session, + returnTypeRef, + null, + name, + FirDeclarationStatusImpl(visibility, modality).apply { + this.isStatic = isStatic + isExpect = false + isActual = false + isOverride = false + isOperator = true // All Java methods with name that allows to use it in operator form are considered operators + isInfix = false + isInline = false + isTailRec = false + isExternal = false + isSuspend = false + }, + symbol ) { init { - status.isStatic = isStatic resolvePhase = FirResolvePhase.DECLARATIONS } } \ No newline at end of file diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt index 17b0ca30194..7a23bb3e34b 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.name.Name class FirJavaValueParameter( @@ -19,8 +20,15 @@ class FirJavaValueParameter( returnTypeRef: FirJavaTypeRef, isVararg: Boolean ) : FirValueParameterImpl( - session, psi, name, returnTypeRef, - defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = isVararg + psi, + session, + returnTypeRef, + name, + FirVariableSymbol(name), + defaultValue = null, + isCrossinline = false, + isNoinline = false, + isVararg = isVararg ) { init { resolvePhase = FirResolvePhase.DECLARATIONS diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index c3ec3f618aa..84d8da6efc4 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -10,19 +10,21 @@ import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberPropertyImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.impl.* +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.createConstant import org.jetbrains.kotlin.fir.java.topLevelName import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope @@ -171,8 +173,7 @@ class KotlinDeserializedJvmSymbolsProvider( private fun FirClassifierSymbol<*>?.toDefaultResolvedTypeRef(classId: ClassId): FirResolvedTypeRef { return this?.let { FirResolvedTypeRefImpl( - null, it.constructType(emptyList(), isNullable = false), - annotations = emptyList() + null, it.constructType(emptyList(), isNullable = false) ) } ?: FirErrorTypeRefImpl(null, "Symbol not found for $classId") @@ -224,7 +225,7 @@ class KotlinDeserializedJvmSymbolsProvider( ) } else -> { - FirErrorNamedReference( + FirErrorNamedReferenceImpl( null, errorReason = "Strange deserialized enum value: ${this@toEnumEntryReferenceExpression}.$name" ) @@ -282,7 +283,7 @@ class KotlinDeserializedJvmSymbolsProvider( result += FirAnnotationCallImpl(null, null, symbol.toDefaultResolvedTypeRef(annotationClassId)).apply { for ((name, expression) in argumentMap) { arguments += FirNamedArgumentExpressionImpl( - null, name, false, expression + null, expression, false, name ) } } @@ -357,7 +358,7 @@ class KotlinDeserializedJvmSymbolsProvider( val functionIds = part.topLevelFunctionNameIndex[name] ?: return emptyList() return functionIds.map { part.proto.getFunction(it) } .map { - val firNamedFunction = part.context.memberDeserializer.loadFunction(it) as FirMemberFunctionImpl + val firNamedFunction = part.context.memberDeserializer.loadFunction(it) as FirSimpleFunctionImpl firNamedFunction.containerSource = part.source firNamedFunction.symbol } @@ -367,7 +368,7 @@ class KotlinDeserializedJvmSymbolsProvider( val propertyIds = part.topLevelPropertyNameIndex[name] ?: return emptyList() return propertyIds.map { part.proto.getProperty(it) } .map { - val firProperty = part.context.memberDeserializer.loadProperty(it) as FirMemberPropertyImpl + val firProperty = part.context.memberDeserializer.loadProperty(it) as FirPropertyImpl firProperty.containerSource = part.source firProperty.symbol } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt index bcb11d93163..fd981dbe72f 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt @@ -6,10 +6,10 @@ package org.jetbrains.kotlin.fir.java.enhancement import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap +import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer import org.jetbrains.kotlin.fir.expressions.resolvedFqName import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.toConeKotlinTypeWithNullability diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt index 8cd52a224d7..02f61646c70 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt @@ -19,8 +19,8 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaField import org.jetbrains.kotlin.fir.java.toConeProjection import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toTypeProjection @@ -85,13 +85,16 @@ private fun JavaType?.enhancePossiblyFlexible( FirResolvedTypeRefImpl( psi = null, - type = coneFlexibleOrSimpleType(session, lowerResult, upperResult), - annotations = annotations - ) + type = coneFlexibleOrSimpleType(session, lowerResult, upperResult) + ).apply { + this.annotations += annotations + } } else -> { val enhanced = type.toNotNullConeKotlinType(session, javaTypeParameterStack) - FirResolvedTypeRefImpl(psi = null, type = enhanced, annotations = annotations) + FirResolvedTypeRefImpl(psi = null, type = enhanced).apply { + this.annotations += annotations + } } } } @@ -249,7 +252,7 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String): return if (firEnumEntry != null) FirQualifiedAccessExpressionImpl(null).apply { calleeReference = FirSimpleNamedReference( - null, name // TODO: , firEnumEntry.symbol + null, name, null // TODO: , firEnumEntry.symbol ) } else if (firElement is FirJavaClass) { val firStaticProperty = firElement.declarations.filterIsInstance().find { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index 1cbdad8a36c..7068526a1cc 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -5,12 +5,15 @@ package org.jetbrains.kotlin.fir.java.scopes +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.* -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack import org.jetbrains.kotlin.fir.java.declarations.* import org.jetbrains.kotlin.fir.java.enhancement.* @@ -84,8 +87,8 @@ class JavaClassEnhancementScope( val symbol = FirFieldSymbol(original.callableId) with(firElement) { FirJavaField( - this@JavaClassEnhancementScope.session, firElement.psi, + this@JavaClassEnhancementScope.session, symbol, name, visibility, @@ -172,8 +175,9 @@ class JavaClassEnhancementScope( val (newTypeRef, newDefaultValue) = newInfo with(valueParameter) { FirValueParameterImpl( - this@JavaClassEnhancementScope.session, psi, - this.name, newTypeRef, + psi, this@JavaClassEnhancementScope.session, + newTypeRef, this.name, + FirVariableSymbol(this.name), defaultValue ?: newDefaultValue, isCrossinline, isNoinline, isVararg ).apply { resolvePhase = FirResolvePhase.DECLARATIONS @@ -181,23 +185,31 @@ class JavaClassEnhancementScope( } } } - val function: FirMemberFunction<*> = when (firMethod) { + val function = when (firMethod) { is FirJavaConstructor -> { val symbol = FirConstructorSymbol(methodId) + val status = FirDeclarationStatusImpl(firMethod.visibility, Modality.FINAL).apply { + isExpect = false + isActual = false + isInner = firMethod.isInner + } if (firMethod.isPrimary) { FirPrimaryConstructorImpl( - this@JavaClassEnhancementScope.session, firMethod.psi, symbol, - firMethod.visibility, - isExpect = false, - isActual = false, - isInner = firMethod.isInner, - delegatedSelfTypeRef = newReturnTypeRef, - delegatedConstructor = null + firMethod.psi, + this@JavaClassEnhancementScope.session, + newReturnTypeRef, + null, + status, + symbol ) } else { FirConstructorImpl( - this@JavaClassEnhancementScope.session, firMethod.psi, symbol, - newReceiverTypeRef, newReturnTypeRef + firMethod.psi, + this@JavaClassEnhancementScope.session, + newReturnTypeRef, + newReceiverTypeRef, + firMethod.status, + symbol ) }.apply { resolvePhase = FirResolvePhase.DECLARATIONS @@ -205,21 +217,22 @@ class JavaClassEnhancementScope( this.typeParameters += firMethod.typeParameters } } - else -> FirMemberFunctionImpl( - this@JavaClassEnhancementScope.session, firMethod.psi, + else -> FirSimpleFunctionImpl( + firMethod.psi, + this@JavaClassEnhancementScope.session, + newReturnTypeRef, + newReceiverTypeRef, + name, + firMethod.status, if (!isAccessor) FirNamedFunctionSymbol(methodId) - else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId), - name, newReceiverTypeRef, newReturnTypeRef + else FirAccessorSymbol(callableId = propertyId!!, accessorId = methodId) ).apply { resolvePhase = FirResolvePhase.DECLARATIONS this.valueParameters += newValueParameters this.typeParameters += firMethod.typeParameters } } - (function as FirAbstractCallableMember<*>).apply { - status = firMethod.status as FirDeclarationStatusImpl - annotations += firMethod.annotations - } + function.annotations += firMethod.annotations return function.symbol } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt index 0dd75f30251..b87413adeb7 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteScope.kt @@ -59,7 +59,7 @@ class JavaClassUseSiteScope( substitutor ) - private fun isOverriddenFunCheck(overriddenInJava: FirNamedFunction, base: FirNamedFunction): Boolean { + private fun isOverriddenFunCheck(overriddenInJava: FirSimpleFunction, base: FirSimpleFunction): Boolean { val receiverTypeRef = base.receiverTypeRef val baseParameterTypes = listOfNotNull(receiverTypeRef) + base.valueParameters.map { it.returnTypeRef } @@ -83,7 +83,7 @@ class JavaClassUseSiteScope( } } - private fun isOverriddenPropertyCheck(overriddenInJava: FirNamedFunction, base: FirProperty): Boolean { + private fun isOverriddenPropertyCheck(overriddenInJava: FirSimpleFunction, base: FirProperty): Boolean { val receiverTypeRef = base.receiverTypeRef if (receiverTypeRef == null) { // TODO: setters diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt index ab2cd7e988b..f21c22544ea 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ConverterUtil.kt @@ -10,20 +10,25 @@ import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.TokenSet import org.jetbrains.kotlin.KtNodeType import org.jetbrains.kotlin.KtNodeTypes.* +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.generateResolvedAccessExpression -import org.jetbrains.kotlin.fir.declarations.FirTypeParameterContainer +import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl -import org.jetbrains.kotlin.fir.declarations.impl.addDefaultBoundIfNecessary import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.fir.expressions.impl.FirBlockImpl import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList import org.jetbrains.kotlin.fir.expressions.impl.FirComponentCallImpl import org.jetbrains.kotlin.fir.lightTree.fir.DestructuringDeclaration import org.jetbrains.kotlin.fir.lightTree.fir.TypeConstraint +import org.jetbrains.kotlin.fir.symbols.CallableId +import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens @@ -72,7 +77,7 @@ fun LighterASTNode.isExpression(): Boolean { } } -fun FirTypeParameterContainer.joinTypeParameters(typeConstraints: List) { +fun FirTypeParametersOwner.joinTypeParameters(typeConstraints: List) { typeConstraints.forEach { typeConstraint -> this.typeParameters.forEach { typeParameter -> if (typeConstraint.identifier == typeParameter.name.identifier) { @@ -125,11 +130,18 @@ fun generateDestructuringBlock( } val isVar = multiDeclaration.isVar for ((index, entry) in multiDeclaration.entries.withIndex()) { - statements += FirVariableImpl( - session, null, entry.name, - entry.returnTypeRef, isVar, - FirComponentCallImpl(null, index + 1, generateResolvedAccessExpression(null, container)), - FirVariableSymbol(entry.name) // TODO? + statements += FirPropertyImpl( + null, + session, + entry.returnTypeRef, + null, + entry.name, + FirComponentCallImpl(null, generateResolvedAccessExpression(null, container), index + 1), + null, + isVar, + FirPropertySymbol(CallableId(entry.name)), // TODO? + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) ).apply { annotations += entry.annotations symbol.bind(this) diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 26ebecea4ac..01deb22a340 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -10,10 +10,12 @@ import com.intellij.psi.TokenType import com.intellij.util.diff.FlyweightCapableTreeStructure import org.jetbrains.kotlin.KtNodeTypes.* import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NAME_FOR_DEFAULT_VALUE_PARAMETER import org.jetbrains.kotlin.fir.builder.Context import org.jetbrains.kotlin.fir.builder.generateAccessorsByDelegate import org.jetbrains.kotlin.fir.builder.generateComponentFunctions @@ -28,6 +30,7 @@ import org.jetbrains.kotlin.fir.lightTree.fir.modifier.Modifier import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeModifier import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeParameterModifier import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeProjectionModifier +import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeProjection @@ -76,8 +79,8 @@ class DeclarationsConverter( } val firFile = FirFileImpl( - session, null, + session, fileName, context.packageFqName ) @@ -358,20 +361,25 @@ class DeclarationsConverter( val isLocal = isClassLocal(classNode) { getParent() } return withChildClassName(className) { - val firClass = FirClassImpl( - session, - null, - FirClassSymbol(context.currentClassId), - className, + val status = FirDeclarationStatusImpl( if (isLocal) Visibilities.LOCAL else modifiers.getVisibility(), - modifiers.getModality(), - modifiers.hasExpect(), - modifiers.hasActual(), - classKind, - isInner = modifiers.isInner(), - isCompanion = modifiers.isCompanion() && classKind == ClassKind.OBJECT, - isData = modifiers.isDataClass() && classKind != ClassKind.OBJECT, + modifiers.getModality() + ).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + isInner = modifiers.isInner() + isCompanion = modifiers.isCompanion() && classKind == ClassKind.OBJECT + isData = modifiers.isDataClass() && classKind != ClassKind.OBJECT isInline = modifiers.hasInline() + } + val firClass = FirClassImpl( + null, + session, + className, + status, + classKind, + FirClassSymbol(context.currentClassId) + ) firClass.annotations += modifiers.annotations firClass.typeParameters += firTypeParameters @@ -446,7 +454,7 @@ class DeclarationsConverter( superTypeRefs.ifEmpty { superTypeRefs += implicitAnyType } val delegatedType = delegatedSuperTypeRef ?: implicitAnyType - return FirAnonymousObjectImpl(null).apply { + return FirAnonymousObjectImpl(null, session).apply { annotations += modifiers.annotations this.superTypeRefs += superTypeRefs this.typeRef = superTypeRefs.first() @@ -493,10 +501,10 @@ class DeclarationsConverter( val enumEntryName = identifier.nameAsSafeName() return withChildClassName(enumEntryName) { val firEnumEntry = FirEnumEntryImpl( - session, null, - FirClassSymbol(context.currentClassId), - enumEntryName + session, + enumEntryName, + FirClassSymbol(context.currentClassId) ) firEnumEntry.annotations += modifiers.annotations @@ -581,21 +589,28 @@ class DeclarationsConverter( isThis = false ).extractArgumentsFrom(classWrapper.superTypeCallEntry, stubMode) + val status = FirDeclarationStatusImpl( + if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility, + Modality.FINAL + ).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + isInner = classWrapper.isInner() + } + return PrimaryConstructor( FirPrimaryConstructorImpl( - session, null, - FirConstructorSymbol(callableIdForClassConstructor()), - if (primaryConstructor != null) modifiers.getVisibility() else defaultVisibility, - modifiers.hasExpect(), - modifiers.hasActual(), - classWrapper.isInner(), + session, classWrapper.delegatedSelfTypeRef, - firDelegatedCall + null, + status, + FirConstructorSymbol(callableIdForClassConstructor()) ).apply { annotations += modifiers.annotations this.typeParameters += typeParametersFromSelfType(classWrapper.delegatedSelfTypeRef) this.valueParameters += valueParameters.map { it.firValueParameter } + this.delegatedConstructor = firDelegatedCall }, valueParameters ) } @@ -613,8 +628,8 @@ class DeclarationsConverter( } return FirAnonymousInitializerImpl( - session, null, + session, if (stubMode) FirEmptyExpressionBlock() else firBlock ) } @@ -641,17 +656,22 @@ class DeclarationsConverter( if (classWrapper.isObjectLiteral()) FirErrorTypeRefImpl(null, "Constructor in object") else classWrapper.delegatedSelfTypeRef + val status = FirDeclarationStatusImpl(modifiers.getVisibility(), Modality.FINAL).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + isInner = classWrapper.isInner() + } + val firConstructor = FirConstructorImpl( - session, null, - FirConstructorSymbol(callableIdForClassConstructor()), - modifiers.getVisibility(), - modifiers.hasExpect(), - modifiers.hasActual(), - classWrapper.isInner(), + session, delegatedSelfTypeRef, - constructorDelegationCall - ) + null, + status, + FirConstructorSymbol(callableIdForClassConstructor()) + ).apply { + delegatedConstructor = constructorDelegationCall + } context.firFunctions += firConstructor firConstructor.annotations += modifiers.annotations @@ -716,15 +736,17 @@ class DeclarationsConverter( } val typeAliasName = identifier.nameAsSafeName() + val status = FirDeclarationStatusImpl(modifiers.getVisibility(), Modality.FINAL).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + } return withChildClassName(typeAliasName) { return@withChildClassName FirTypeAliasImpl( - session, null, - FirTypeAliasSymbol(context.currentClassId), + session, typeAliasName, - modifiers.getVisibility(), - modifiers.hasExpect(), - modifiers.hasActual(), + status, + FirTypeAliasSymbol(context.currentClassId), firType ).apply { annotations += modifiers.annotations @@ -772,51 +794,57 @@ class DeclarationsConverter( val parentNode = property.getParent() val isLocal = !(parentNode?.tokenType == KT_FILE || parentNode?.tokenType == CLASS_BODY) return if (isLocal) { - FirVariableImpl( + FirPropertyImpl( + null, session, + returnType, null, propertyName, - returnType, - isVar, firExpression, - delegate = delegateExpression?.let { + delegateExpression?.let { FirWrappedDelegateExpressionImpl( null, expressionConverter.getAsFirExpression(it, "Incorrect delegate expression") ) - } + }, + isVar, + FirPropertySymbol(CallableId(propertyName)), + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) ).apply { annotations += modifiers.annotations this.generateAccessorsByDelegate(this@DeclarationsConverter.session, member = false, stubMode = stubMode) } } else { - FirMemberPropertyImpl( - session, + val status = FirDeclarationStatusImpl(modifiers.getVisibility(), modifiers.getModality()).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + isOverride = modifiers.hasOverride() + isConst = modifiers.isConst() + isLateInit = modifiers.hasLateinit() + } + FirPropertyImpl( null, - FirPropertySymbol(callableIdForName(propertyName)), - propertyName, - modifiers.getVisibility(), - modifiers.getModality(), - modifiers.hasExpect(), - modifiers.hasActual(), - modifiers.hasOverride(), - modifiers.isConst(), - modifiers.hasLateinit(), - receiverType, + session, returnType, - isVar, + receiverType, + propertyName, firExpression, delegateExpression?.let { FirWrappedDelegateExpressionImpl( null, expressionConverter.getAsFirExpression(it, "Should have delegate") ) - } + }, + isVar, + FirPropertySymbol(callableIdForName(propertyName)), + false, + status ).apply { this.typeParameters += firTypeParameters this.joinTypeParameters(typeConstraints) annotations += modifiers.annotations - this.getter = getter ?: FirDefaultPropertyGetter(session, null, returnType, modifiers.getVisibility()) - this.setter = if (isVar) setter ?: FirDefaultPropertySetter(session, null, returnType, modifiers.getVisibility()) else null + this.getter = getter ?: FirDefaultPropertyGetter(null, session, returnType, modifiers.getVisibility()) + this.setter = if (isVar) setter ?: FirDefaultPropertySetter(null, session, returnType, modifiers.getVisibility()) else null generateAccessorsByDelegate( this@DeclarationsConverter.session, member = parentNode?.tokenType != KT_FILE, stubMode = stubMode ) @@ -858,8 +886,19 @@ class DeclarationsConverter( } } - return FirVariableImpl( - session, null, identifier.nameAsSafeName(), firType ?: implicitType, false, null + val name = identifier.nameAsSafeName() + return FirPropertyImpl( + null, + session, + firType ?: implicitType, + null, + name, + null, + null, + false, + FirPropertySymbol(CallableId(name)), + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) ).apply { annotations += modifiers.annotations } @@ -872,7 +911,12 @@ class DeclarationsConverter( var modifiers = Modifier() var isGetter = true var returnType: FirTypeRef? = null - var firValueParameters: FirValueParameter = FirDefaultSetterValueParameter(session, null, propertyTypeRef) + var firValueParameters: FirValueParameter = FirDefaultSetterValueParameter( + null, + session, + propertyTypeRef, + FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) + ) var block: LighterASTNode? = null var expression: LighterASTNode? = null getterOrSetter.forEachChildren { @@ -887,13 +931,15 @@ class DeclarationsConverter( } } + val status = FirDeclarationStatusImpl(modifiers.getVisibility(), Modality.FINAL) + val firAccessor = FirPropertyAccessorImpl( - session, null, - isGetter, - modifiers.getVisibility(), + session, returnType ?: if (isGetter) propertyTypeRef else implicitUnitType, - FirPropertyAccessorSymbol() + FirPropertyAccessorSymbol(), + isGetter, + status ) context.firFunctions += firAccessor firAccessor.annotations += modifiers.annotations @@ -924,10 +970,11 @@ class DeclarationsConverter( } return FirValueParameterImpl( - session, null, - firValueParameter.name, + session, if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef, + firValueParameter.name, + FirVariableSymbol(firValueParameter.name), firValueParameter.defaultValue, isCrossinline = modifiers.hasCrossinline() || firValueParameter.isCrossinline, isNoinline = modifiers.hasNoinline() || firValueParameter.isNoinline, @@ -976,34 +1023,38 @@ class DeclarationsConverter( val parentNode = functionDeclaration.getParent() val isLocal = !(parentNode?.tokenType == KT_FILE || parentNode?.tokenType == CLASS_BODY) val firFunction = if (identifier == null) { - FirAnonymousFunctionImpl(session, null, returnType!!, receiverType, FirAnonymousFunctionSymbol()) + FirAnonymousFunctionImpl(null, session, returnType!!, receiverType, FirAnonymousFunctionSymbol()) } else { val functionName = identifier.nameAsSafeName() - FirMemberFunctionImpl( - session, - null, - FirNamedFunctionSymbol(callableIdForName(functionName, isLocal)), - functionName, + val status = FirDeclarationStatusImpl( if (isLocal) Visibilities.LOCAL else modifiers.getVisibility(), - modifiers.getModality(), - modifiers.hasExpect(), - modifiers.hasActual(), - modifiers.hasOverride(), - modifiers.hasOperator(), - modifiers.hasInfix(), - modifiers.hasInline(), - modifiers.hasTailrec(), - modifiers.hasExternal(), - modifiers.hasSuspend(), + modifiers.getModality() + ).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + isOverride = modifiers.hasOverride() + isOperator = modifiers.hasOperator() + isInfix = modifiers.hasInfix() + isInline = modifiers.hasInline() + isTailRec = modifiers.hasTailrec() + isExternal = modifiers.hasExternal() + isSuspend = modifiers.hasSuspend() + } + FirSimpleFunctionImpl( + null, + session, + returnType!!, receiverType, - returnType!! + functionName, + status, + FirNamedFunctionSymbol(callableIdForName(functionName, isLocal)) ) } context.firFunctions += firFunction firFunction.annotations += modifiers.annotations - if (firFunction is FirMemberFunctionImpl) { + if (firFunction is FirSimpleFunctionImpl) { firFunction.typeParameters += firTypeParameters firFunction.joinTypeParameters(typeConstraints) } @@ -1112,8 +1163,8 @@ class DeclarationsConverter( } return FirDelegatedTypeRefImpl( - firTypeRef, - firExpression + firExpression, + firTypeRef ) } @@ -1175,10 +1226,10 @@ class DeclarationsConverter( } val firTypeParameter = FirTypeParameterImpl( - session, null, - FirTypeParameterSymbol(), + session, identifier.nameAsSafeName(), + FirTypeParameterSymbol(), typeParameterModifiers.getVariance(), typeParameterModifiers.hasReified() ) @@ -1211,7 +1262,7 @@ class DeclarationsConverter( } } - return firType.also { (it as FirAbstractAnnotatedTypeRef).annotations += typeModifiers.annotations } + return firType.also { (it.annotations as MutableList) += typeModifiers.annotations } } /** @@ -1307,8 +1358,8 @@ class DeclarationsConverter( return if (isStarProjection) FirStarProjectionImpl(null) else FirTypeProjectionWithVarianceImpl( null, - modifiers.getVariance(), - firType + firType, + modifiers.getVariance() ) } @@ -1369,11 +1420,13 @@ class DeclarationsConverter( } } + val name = identifier.nameAsSafeName() val firValueParameter = FirValueParameterImpl( - session, null, - identifier.nameAsSafeName(), + session, firType ?: implicitType, + name, + FirVariableSymbol(name), firExpression, isCrossinline = modifiers.hasCrossinline(), isNoinline = modifiers.hasNoinline(), diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 823a63d42a9..bde75dce6f4 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -9,25 +9,34 @@ import com.intellij.lang.LighterASTNode import com.intellij.psi.TokenType import com.intellij.util.diff.FlyweightCapableTreeStructure import org.jetbrains.kotlin.KtNodeTypes.* +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirWhenSubject import org.jetbrains.kotlin.fir.builder.* +import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousFunctionImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.labels.FirLabelImpl +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.impl.FirLabelImpl import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.fir.ValueParameter import org.jetbrains.kotlin.fir.lightTree.fir.WhenEntry import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference -import org.jetbrains.kotlin.fir.references.FirExplicitThisReference -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirExplicitSuperReference +import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl @@ -116,16 +125,23 @@ class ExpressionsConverter( } } - return FirAnonymousFunctionImpl(session, null, implicitType, implicitType, FirAnonymousFunctionSymbol()).apply { + return FirAnonymousFunctionImpl(null, session, implicitType, implicitType, FirAnonymousFunctionSymbol()).apply { context.firFunctions += this var destructuringBlock: FirExpression? = null for (valueParameter in valueParameterList) { val multiDeclaration = valueParameter.destructuringDeclaration valueParameters += if (multiDeclaration != null) { + val name = Name.special("") val multiParameter = FirValueParameterImpl( - this@ExpressionsConverter.session, null, Name.special(""), + null, + this@ExpressionsConverter.session, FirImplicitTypeRefImpl(null), - defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false + name, + FirVariableSymbol(name), + defaultValue = null, + isCrossinline = false, + isNoinline = false, + isVararg = false ) destructuringBlock = generateDestructuringBlock( this@ExpressionsConverter.session, @@ -205,7 +221,7 @@ class ExpressionsConverter( return if (conventionCallName != null || operationToken == IDENTIFIER) { FirFunctionCallImpl(null).apply { calleeReference = FirSimpleNamedReference( - null, conventionCallName ?: operationTokenName.nameAsSafeName() + null, conventionCallName ?: operationTokenName.nameAsSafeName(), null ) explicitReceiver = getAsFirExpression(leftArgNode, "No left operand") arguments += rightArgAsFir @@ -303,7 +319,7 @@ class ExpressionsConverter( ) { getAsFirExpression(this) } } FirFunctionCallImpl(null).apply { - calleeReference = FirSimpleNamedReference(null, conventionCallName) + calleeReference = FirSimpleNamedReference(null, conventionCallName, null) explicitReceiver = getAsFirExpression(argument, "No operand") } } else { @@ -401,10 +417,9 @@ class ExpressionsConverter( } } - //TODO use contracts? - if (firSelector is FirModifiableQualifiedAccess<*>) { - (firSelector as FirModifiableQualifiedAccess<*>).safe = isSafe - (firSelector as FirModifiableQualifiedAccess<*>).explicitReceiver = firReceiver + (firSelector as? FirModifiableQualifiedAccess)?.let { + it.safe = isSafe + it.explicitReceiver = firReceiver } return firSelector } @@ -429,12 +444,12 @@ class ExpressionsConverter( return FirFunctionCallImpl(null).apply { this.calleeReference = when { - name != null -> FirSimpleNamedReference(null, name.nameAsSafeName()) + name != null -> FirSimpleNamedReference(null, name.nameAsSafeName(), null) additionalArgument != null -> { arguments += additionalArgument!! - FirSimpleNamedReference(null, OperatorNameConventions.INVOKE) + FirSimpleNamedReference(null, OperatorNameConventions.INVOKE, null) } - else -> FirErrorNamedReference(null, "Call has no callee") + else -> FirErrorNamedReferenceImpl(null, "Call has no callee") } context.firFunctionCalls += this @@ -477,9 +492,18 @@ class ExpressionsConverter( whenExpression.forEachChildren { when (it.tokenType) { PROPERTY -> subjectVariable = (declarationsConverter.convertPropertyDeclaration(it) as FirVariable<*>).let { variable -> - FirVariableImpl( - session, null, variable.name, variable.returnTypeRef, - isVar = false, initializer = variable.initializer + FirPropertyImpl( + null, + session, + variable.returnTypeRef, + null, + variable.name, + variable.initializer, + null, + false, + FirPropertySymbol(CallableId(variable.name)), + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) ) } DESTRUCTURING_DECLARATION -> subjectExpression = @@ -568,7 +592,7 @@ class ExpressionsConverter( val name = if (isNegate) OperatorNameConventions.NOT else SpecialNames.NO_NAME_PROVIDED return FirFunctionCallImpl(null).apply { - calleeReference = FirSimpleNamedReference(null, name) + calleeReference = FirSimpleNamedReference(null, name, null) explicitReceiver = firExpression } } @@ -601,7 +625,7 @@ class ExpressionsConverter( } } return FirFunctionCallImpl(null).apply { - calleeReference = FirSimpleNamedReference(null, OperatorNameConventions.GET) + calleeReference = FirSimpleNamedReference(null, OperatorNameConventions.GET, null) explicitReceiver = firExpression arguments += indices } @@ -640,7 +664,7 @@ class ExpressionsConverter( private fun convertSimpleNameExpression(referenceExpression: LighterASTNode): FirQualifiedAccessExpression { return FirQualifiedAccessExpressionImpl(null).apply { calleeReference = - FirSimpleNamedReference(null, referenceExpression.asText.nameAsSafeName()) + FirSimpleNamedReference(null, referenceExpression.asText.nameAsSafeName(), null) } } @@ -701,7 +725,7 @@ class ExpressionsConverter( val iteratorVal = generateTemporaryVariable( this@ExpressionsConverter.session, null, Name.special(""), FirFunctionCallImpl(null).apply { - calleeReference = FirSimpleNamedReference(null, Name.identifier("iterator")) + calleeReference = FirSimpleNamedReference(null, Name.identifier("iterator"), null) explicitReceiver = generateResolvedAccessExpression(null, rangeVal) } ) @@ -709,7 +733,7 @@ class ExpressionsConverter( statements += FirWhileLoopImpl( null, FirFunctionCallImpl(null).apply { - calleeReference = FirSimpleNamedReference(null, Name.identifier("hasNext")) + calleeReference = FirSimpleNamedReference(null, Name.identifier("hasNext"), null) explicitReceiver = generateResolvedAccessExpression(null, iteratorVal) } ).configure { @@ -723,7 +747,7 @@ class ExpressionsConverter( this@ExpressionsConverter.session, null, if (multiDeclaration != null) Name.special("") else parameter!!.firValueParameter.name, FirFunctionCallImpl(null).apply { - calleeReference = FirSimpleNamedReference(null, Name.identifier("next")) + calleeReference = FirSimpleNamedReference(null, Name.identifier("next"), null) explicitReceiver = generateResolvedAccessExpression(null, iteratorVal) } ) @@ -838,7 +862,7 @@ class ExpressionsConverter( } } - return FirWhenExpressionImpl(null).apply { + return FirWhenExpressionImpl(null, null, null).apply { val trueBranch = convertLoopBody(thenBlock) branches += FirWhenBranchImpl(null, firCondition, trueBranch) val elseBranch = convertLoopBody(elseBlock) @@ -953,7 +977,12 @@ class ExpressionsConverter( } } return when { - identifier != null -> FirNamedArgumentExpressionImpl(null, identifier.nameAsSafeName(), isSpread, firExpression) + identifier != null -> FirNamedArgumentExpressionImpl( + null, + firExpression, + isSpread, + identifier.nameAsSafeName() + ) isSpread -> FirSpreadArgumentExpressionImpl(null, firExpression) else -> firExpression } diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/DestructuringDeclaration.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/DestructuringDeclaration.kt index fab2941c4ec..9697e61476d 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/DestructuringDeclaration.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/DestructuringDeclaration.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.lightTree.fir import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.builder.generateTemporaryVariable +import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.fir.lightTree.converter.generateDestructuringBlock data class DestructuringDeclaration( diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/PrimaryConstructor.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/PrimaryConstructor.kt index 5eec39897c6..4f684d238b3 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/PrimaryConstructor.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/PrimaryConstructor.kt @@ -5,9 +5,9 @@ package org.jetbrains.kotlin.fir.lightTree.fir -import org.jetbrains.kotlin.fir.declarations.impl.FirConstructorImpl +import org.jetbrains.kotlin.fir.declarations.FirConstructor data class PrimaryConstructor( - val firConstructor: FirConstructorImpl, + val firConstructor: FirConstructor, val valueParameters: List ) \ No newline at end of file diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt index d8c313bf867..07d065d7fe5 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt @@ -8,17 +8,12 @@ package org.jetbrains.kotlin.fir.lightTree.fir import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter -import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberPropertyImpl -import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl import org.jetbrains.kotlin.fir.lightTree.fir.modifier.Modifier -import org.jetbrains.kotlin.fir.references.FirPropertyFromParameterCallableReference +import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterCallableReference import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol -import org.jetbrains.kotlin.fir.types.FirErrorTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl @@ -40,31 +35,34 @@ class ValueParameter( type = FirErrorTypeRefImpl(null, "Incomplete code") } - return FirMemberPropertyImpl( - session, + val status = FirDeclarationStatusImpl(modifiers.getVisibility(), modifiers.getModality()).apply { + isExpect = modifiers.hasExpect() + isActual = modifiers.hasActual() + isOverride = modifiers.hasOverride() + isConst = false + isLateInit = false + } + + return FirPropertyImpl( + null, + session, + type, null, - FirPropertySymbol(callableId), name, - modifiers.getVisibility(), - modifiers.getModality(), - modifiers.hasExpect(), - modifiers.hasActual(), - isOverride = modifiers.hasOverride(), - isConst = false, - isLateInit = false, - receiverTypeRef = null, - returnTypeRef = type, - isVar = this.isVar, - initializer = FirQualifiedAccessExpressionImpl(null).apply { + FirQualifiedAccessExpressionImpl(null).apply { calleeReference = FirPropertyFromParameterCallableReference( null, name, this@ValueParameter.firValueParameter.symbol ) }, - delegate = null + null, + this.isVar, + FirPropertySymbol(callableId), + false, + status ).apply { annotations += this@ValueParameter.firValueParameter.annotations - getter = FirDefaultPropertyGetter(session, null, type, modifiers.getVisibility()) - setter = if (this.isVar) FirDefaultPropertySetter(session, null, type, modifiers.getVisibility()) else null + getter = FirDefaultPropertyGetter(null, session, type, modifiers.getVisibility()) + setter = if (this.isVar) FirDefaultPropertySetter(null, session, type, modifiers.getVisibility()) else null } } } \ No newline at end of file diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/Modifier.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/Modifier.kt index 66c76ad7097..092cc09bc34 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/Modifier.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/Modifier.kt @@ -10,7 +10,8 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.CLASS_MODIFIER import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.FUNCTION_MODIFIER import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.INHERITANCE_MODIFIER @@ -21,7 +22,7 @@ import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.PROPERTY_MOD import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VISIBILITY_MODIFIER class Modifier( - psi: PsiElement? = null, + override val psi: PsiElement? = null, private val classModifiers: MutableList = mutableListOf(), private val memberModifiers: MutableList = mutableListOf(), private val visibilityModifiers: MutableList = mutableListOf(), @@ -30,7 +31,9 @@ class Modifier( private val inheritanceModifiers: MutableList = mutableListOf(), private val parameterModifiers: MutableList = mutableListOf(), private val platformModifiers: MutableList = mutableListOf() -) : FirAbstractAnnotatedElement(psi) { +) : FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + fun addModifier(modifier: LighterASTNode) { val tokenType = modifier.tokenType when { diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeModifier.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeModifier.kt index 621290aa00d..394bb05c5eb 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeModifier.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeModifier.kt @@ -7,13 +7,16 @@ package org.jetbrains.kotlin.fir.lightTree.fir.modifier import com.intellij.lang.LighterASTNode import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.lexer.KtTokens class TypeModifier( - psi: PsiElement? = null, + override val psi: PsiElement? = null, var hasSuspend: Boolean = false -) : FirAbstractAnnotatedElement(psi) { +) : FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + fun addModifier(modifier: LighterASTNode) { when (modifier.tokenType) { KtTokens.SUSPEND_KEYWORD -> this.hasSuspend = true diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeParameterModifier.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeParameterModifier.kt index de3b9c339e1..7034a23b374 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeParameterModifier.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeParameterModifier.kt @@ -7,17 +7,19 @@ package org.jetbrains.kotlin.fir.lightTree.fir.modifier import com.intellij.lang.LighterASTNode import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.REIFICATION_MODIFIER import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VARIANCE_MODIFIER import org.jetbrains.kotlin.types.Variance class TypeParameterModifier( - psi: PsiElement? = null, + override val psi: PsiElement? = null, private val varianceModifiers: MutableList = mutableListOf(), - private var reificationModifier: ReificationModifier? = null -) : FirAbstractAnnotatedElement(psi) { +) : FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + fun addModifier(modifier: LighterASTNode) { val tokenType = modifier.tokenType when { diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeProjectionModifier.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeProjectionModifier.kt index 6666a5a1b2e..135eb58180d 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeProjectionModifier.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/modifier/TypeProjectionModifier.kt @@ -7,14 +7,17 @@ package org.jetbrains.kotlin.fir.lightTree.fir.modifier import com.intellij.lang.LighterASTNode import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierSets.VARIANCE_MODIFIER import org.jetbrains.kotlin.types.Variance class TypeProjectionModifier( - psi: PsiElement? = null, + override val psi: PsiElement? = null, private val varianceModifiers: MutableList = mutableListOf() -) : FirAbstractAnnotatedElement(psi) { +) : FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + fun addModifier(modifier: LighterASTNode) { val tokenType = modifier.tokenType when { diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 1c36cc22c98..8ba5be021b4 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -10,22 +10,18 @@ import com.intellij.psi.tree.IElementType import org.jetbrains.kotlin.KtNodeTypes.* import org.jetbrains.kotlin.fir.FirFunctionTarget import org.jetbrains.kotlin.fir.FirLoopTarget -import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.FirTypeParameter -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunction -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorLoop +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl -import org.jetbrains.kotlin.fir.declarations.impl.addDefaultBoundIfNecessary import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirExplicitThisReference -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.symbols.CallableId +import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeTypeParameterType @@ -112,7 +108,14 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = if (lastFunction != null) { target.bind(lastFunction) } else { - target.bind(FirErrorFunction(this@BaseFirBuilder.session, psi, "Cannot bind unlabeled return to a function")) + target.bind( + FirErrorFunctionImpl( + psi, + this@BaseFirBuilder.session, + "Cannot bind unlabeled return to a function", + FirErrorFunctionSymbol() + ) + ) } } else { for (firFunction in context.firFunctions.asReversed()) { @@ -123,7 +126,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = return@apply } } - is FirNamedFunction -> { + is FirMemberFunction<*> -> { if (firFunction.name.asString() == labelName) { target.bind(firFunction) return@apply @@ -131,14 +134,21 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = } } } - target.bind(FirErrorFunction(this@BaseFirBuilder.session, psi, "Cannot bind label $labelName to a function")) + target.bind( + FirErrorFunctionImpl( + psi, + this@BaseFirBuilder.session, + "Cannot bind label $labelName to a function", + FirErrorFunctionSymbol() + ) + ) } } } fun KtClassOrObject?.toDelegatedSelfType(firClass: FirRegularClass): FirTypeRef { val typeParameters = firClass.typeParameters.map { - FirTypeParameterImpl(session, it.psi, FirTypeParameterSymbol(), it.name, Variance.INVARIANT, false).apply { + FirTypeParameterImpl(it.psi, session, it.name, FirTypeParameterSymbol(), Variance.INVARIANT, false).apply { this.bounds += it.bounds addDefaultBoundIfNecessary() } @@ -165,7 +175,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = session, FirThrowExpressionImpl( parent.getPsiOrNull(), FirFunctionCallImpl(parent.getPsiOrNull()).apply { - calleeReference = FirSimpleNamedReference(parent, KNPE) + calleeReference = FirSimpleNamedReference(parent, KNPE, null) } ), "bangbang", parent ) @@ -179,7 +189,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = return this } - fun FirLoopJump.bindLabel(expression: T): FirLoopJump { + fun FirAbstractLoopJump.bindLabel(expression: T): FirAbstractLoopJump { val labelName = expression.getLabelName() target = FirLoopTarget(labelName) val lastLoop = context.firLoops.lastOrNull() @@ -252,7 +262,6 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = else -> throw AssertionError("Unknown literal type: $type, $text") } - } fun Array.toInterpolatingCall( @@ -343,7 +352,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = statements += temporaryVariable val resultName = Name.special("") val resultInitializer = FirFunctionCallImpl(baseExpression).apply { - this.calleeReference = FirSimpleNamedReference(baseExpression?.operationReference, callName) + this.calleeReference = FirSimpleNamedReference(baseExpression?.operationReference, callName, null) this.explicitReceiver = generateResolvedAccessExpression(baseExpression, temporaryVariable) } val resultVar = generateTemporaryVariable(this@BaseFirBuilder.session, baseExpression, resultName, resultInitializer) @@ -380,7 +389,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = } } - private fun FirModifiableQualifiedAccess<*>.initializeLValue( + private fun FirModifiableQualifiedAccess.initializeLValue( left: T?, convertQualified: T.() -> FirQualifiedAccess? ): FirReference { @@ -388,7 +397,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = if (left != null) { when (tokenType) { REFERENCE_EXPRESSION -> { - return FirSimpleNamedReference(left.getPsiOrNull(), left.getReferencedNameAsName()) + return FirSimpleNamedReference(left.getPsiOrNull(), left.getReferencedNameAsName(), null) } THIS_EXPRESSION -> { return FirExplicitThisReference(left.getPsiOrNull(), left.getLabelName()) @@ -400,7 +409,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = safe = firMemberAccess.safe firMemberAccess.calleeReference } else { - FirErrorNamedReference( + FirErrorNamedReferenceImpl( left.getPsiOrNull(), "Unsupported qualified LValue: ${left.asText}" ) } @@ -410,7 +419,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = } } } - return FirErrorNamedReference(left.getPsiOrNull(), "Unsupported LValue: $tokenType") + return FirErrorNamedReferenceImpl(left.getPsiOrNull(), "Unsupported LValue: $tokenType") } fun T?.generateAssignment( @@ -431,7 +440,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = } } else { return firArrayAccess.apply { - calleeReference = FirSimpleNamedReference(psi, OperatorNameConventions.SET) + calleeReference = FirSimpleNamedReference(psi, OperatorNameConventions.SET, null) arguments += value } } @@ -447,7 +456,7 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = statements += generateTemporaryVariable( this@BaseFirBuilder.session, this@generateAssignment.getPsiOrNull(), name, firArrayAccess.explicitReceiver!! ) - statements += arraySet.apply { lValue = FirSimpleNamedReference(psiArrayExpression, name) } + statements += arraySet.apply { lValue = FirSimpleNamedReference(psiArrayExpression, name, null) } } } if (operation != FirOperation.ASSIGN && @@ -461,12 +470,12 @@ abstract class BaseFirBuilder(val session: FirSession, val context: Context = this@generateAssignment?.convert() ?: FirErrorExpressionImpl(this.getPsiOrNull(), "No LValue in assignment") ) - statements += FirVariableAssignmentImpl(psi, value, operation).apply { - lValue = FirSimpleNamedReference(this.getPsiOrNull(), name) + statements += FirVariableAssignmentImpl(psi, false, value, operation).apply { + lValue = FirSimpleNamedReference(this.getPsiOrNull(), name, null) } } } - return FirVariableAssignmentImpl(psi, value, operation).apply { + return FirVariableAssignmentImpl(psi, false, value, operation).apply { lValue = initializeLValue(this@generateAssignment) { convert() as? FirQualifiedAccess } } } diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index ab7331437c9..0f71ce51a00 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -7,21 +7,23 @@ package org.jetbrains.kotlin.fir.builder import com.intellij.psi.PsiElement import com.intellij.psi.tree.IElementType +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirFunctionTarget import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirWhenSubject -import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableAccessorsOwner -import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyAccessorImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.FirDelegateFieldReferenceImpl -import org.jetbrains.kotlin.fir.references.FirExplicitThisReference -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.impl.FirDelegateFieldReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.ConeStarProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -165,9 +167,9 @@ fun FirExpression.generateLazyLogicalOperation( other: FirExpression, isAnd: Boolean, basePsi: KtElement? ): FirBinaryLogicExpression { val kind = if (isAnd) - FirBinaryLogicExpression.OperationKind.AND + LogicOperationKind.AND else - FirBinaryLogicExpression.OperationKind.OR + LogicOperationKind.OR return FirBinaryLogicExpressionImpl(basePsi, this, other, kind) } @@ -231,20 +233,20 @@ fun FirExpression.generateContainsOperation( operationReference: KtOperationReferenceExpression? ): FirFunctionCall { val containsCall = FirFunctionCallImpl(base).apply { - calleeReference = FirSimpleNamedReference(operationReference, OperatorNameConventions.CONTAINS) + calleeReference = FirSimpleNamedReference(operationReference, OperatorNameConventions.CONTAINS, null) explicitReceiver = this@generateContainsOperation arguments += argument } if (!inverted) return containsCall return FirFunctionCallImpl(base).apply { - calleeReference = FirSimpleNamedReference(operationReference, OperatorNameConventions.NOT) + calleeReference = FirSimpleNamedReference(operationReference, OperatorNameConventions.NOT, null) explicitReceiver = containsCall } } fun generateAccessExpression(psi: PsiElement?, name: Name): FirQualifiedAccessExpression = FirQualifiedAccessExpressionImpl(psi).apply { - calleeReference = FirSimpleNamedReference(psi, name) + calleeReference = FirSimpleNamedReference(psi, name, null) } fun generateResolvedAccessExpression(psi: PsiElement?, variable: FirVariable<*>): FirQualifiedAccessExpression = @@ -266,11 +268,18 @@ internal fun generateDestructuringBlock( } val isVar = multiDeclaration.isVar for ((index, entry) in multiDeclaration.entries.withIndex()) { - statements += FirVariableImpl( - session, entry, entry.nameAsSafeName, - entry.typeReference.toFirOrImplicitTypeRef(), isVar, - FirComponentCallImpl(entry, index + 1, generateResolvedAccessExpression(entry, container)), - FirVariableSymbol(entry.nameAsSafeName) // TODO? + statements += FirPropertyImpl( + entry, + session, + entry.typeReference.toFirOrImplicitTypeRef(), + null, + entry.nameAsSafeName, + FirComponentCallImpl(entry, generateResolvedAccessExpression(entry, container), index + 1), + null, + isVar, + FirPropertySymbol(CallableId(entry.nameAsSafeName)), // TODO? + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) ).apply { entry.extractAnnotationsTo(this) symbol.bind(this) @@ -282,7 +291,19 @@ internal fun generateDestructuringBlock( fun generateTemporaryVariable( session: FirSession, psi: PsiElement?, name: Name, initializer: FirExpression ): FirVariable<*> = - FirVariableImpl(session, psi, name, FirImplicitTypeRefImpl(psi), false, initializer, FirVariableSymbol(name)).apply { + FirPropertyImpl( + psi, + session, + FirImplicitTypeRefImpl(psi), + null, + name, + initializer, + null, + false, + FirPropertySymbol(CallableId(name)), + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) + ).apply { symbol.bind(this) } @@ -290,15 +311,15 @@ fun generateTemporaryVariable( session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression ): FirVariable<*> = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer) -fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession, member: Boolean, stubMode: Boolean) { +fun FirModifiableVariable<*>.generateAccessorsByDelegate(session: FirSession, member: Boolean, stubMode: Boolean) { val variable = this as FirVariable<*> val delegateFieldSymbol = delegateFieldSymbol ?: return val delegate = delegate as? FirWrappedDelegateExpressionImpl ?: return fun delegateAccess() = FirQualifiedAccessExpressionImpl(null).apply { - calleeReference = FirDelegateFieldReferenceImpl(null, delegateFieldSymbol) + calleeReference = FirDelegateFieldReferenceImpl(null, null, delegateFieldSymbol) } - fun thisRef() = + fun thisRef(): FirExpression = if (member) FirQualifiedAccessExpressionImpl(null).apply { calleeReference = FirExplicitThisReference(null, null) } @@ -311,19 +332,26 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession, delegate.delegateProvider = if (stubMode) FirExpressionStub(null) else FirFunctionCallImpl(null).apply { explicitReceiver = delegate.expression - calleeReference = FirSimpleNamedReference(null, PROVIDE_DELEGATE) + calleeReference = FirSimpleNamedReference(null, PROVIDE_DELEGATE, null) arguments += thisRef() arguments += propertyRef() } if (stubMode) return - getter = (getter as? FirPropertyAccessorImpl) - ?: FirPropertyAccessorImpl(session, null, true, Visibilities.UNKNOWN, FirImplicitTypeRefImpl(null), FirPropertyAccessorSymbol()).apply Accessor@{ + if (getter == null || getter is FirDefaultPropertyAccessor) { + getter = FirPropertyAccessorImpl( + null, + session, + FirImplicitTypeRefImpl(null), + FirPropertyAccessorSymbol(), + true, + FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL) + ).apply Accessor@{ body = FirSingleExpressionBlock( FirReturnExpressionImpl( null, FirFunctionCallImpl(null).apply { explicitReceiver = delegateAccess() - calleeReference = FirSimpleNamedReference(null, GET_VALUE) + calleeReference = FirSimpleNamedReference(null, GET_VALUE, null) arguments += thisRef() arguments += propertyRef() } @@ -333,11 +361,19 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession, } ) } - setter = (setter as? FirPropertyAccessorImpl) - ?: FirPropertyAccessorImpl(session, null, false, Visibilities.UNKNOWN, session.builtinTypes.unitType, FirPropertyAccessorSymbol()).apply { + } + if (setter == null || setter is FirDefaultPropertyAccessor) { + setter = FirPropertyAccessorImpl( + null, + session, + session.builtinTypes.unitType, + FirPropertyAccessorSymbol(), + false, + FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL) + ).apply { val parameter = FirValueParameterImpl( - session, null, DELEGATED_SETTER_PARAM, - FirImplicitTypeRefImpl(null), + null, session, FirImplicitTypeRefImpl(null), + DELEGATED_SETTER_PARAM, FirVariableSymbol(name), defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false ) @@ -345,7 +381,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession, body = FirSingleExpressionBlock( FirFunctionCallImpl(null).apply { explicitReceiver = delegateAccess() - calleeReference = FirSimpleNamedReference(null, SET_VALUE) + calleeReference = FirSimpleNamedReference(null, SET_VALUE, null) arguments += thisRef() arguments += propertyRef() arguments += FirQualifiedAccessExpressionImpl(null).apply { @@ -354,6 +390,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession, } ) } + } } private val GET_VALUE = Name.identifier("getValue") diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/DataClassUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/DataClassUtils.kt index 30010d7021e..d23c14b3b38 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/DataClassUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/DataClassUtils.kt @@ -11,14 +11,17 @@ import org.jetbrains.kotlin.fir.FirFunctionTarget import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.addDeclaration import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.FirImplicitThisReference -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -35,16 +38,21 @@ fun List>.generateComponentFunctions( val name = Name.identifier("component$componentIndex") componentIndex++ val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, name)) + val status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply { + isExpect = false + isActual = false + isOverride = false + isOperator = false + isInfix = false + isInline = false + isTailRec = false + isExternal = false + isSuspend = false + } firClass.addDeclaration( - FirMemberFunctionImpl( - session, ktParameter, symbol, name, - Visibilities.PUBLIC, Modality.FINAL, - isExpect = false, isActual = false, - isOverride = false, isOperator = false, - isInfix = false, isInline = false, - isTailRec = false, isExternal = false, - isSuspend = false, receiverTypeRef = null, - returnTypeRef = FirImplicitTypeRefImpl(ktParameter) + FirSimpleFunctionImpl( + ktParameter, session, FirImplicitTypeRefImpl(ktParameter), + null, name, status, symbol ).apply { val componentFunction = this body = FirSingleExpressionBlock( @@ -77,22 +85,33 @@ fun List>.generateCopyFunction( firPrimaryConstructor: FirConstructor ) { val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, copyName)) + val status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply { + isExpect = false + isActual = false + isOverride = false + isOperator = false + isInfix = false + isInline = false + isTailRec = false + isExternal = false + isSuspend = false + } firClass.addDeclaration( - FirMemberFunctionImpl( - session, classOrObject, symbol, copyName, - Visibilities.PUBLIC, Modality.FINAL, - isExpect = false, isActual = false, - isOverride = false, isOperator = false, - isInfix = false, isInline = false, - isTailRec = false, isExternal = false, - isSuspend = false, receiverTypeRef = null, - returnTypeRef = firPrimaryConstructor.returnTypeRef + FirSimpleFunctionImpl( + classOrObject, + session, + firPrimaryConstructor.returnTypeRef, + null, + copyName, + status, + symbol ).apply { for ((ktParameter, firProperty) in this@generateCopyFunction) { val name = firProperty.name valueParameters += FirValueParameterImpl( - session, ktParameter, name, - firProperty.returnTypeRef, + ktParameter, session, firProperty.returnTypeRef, + name, + FirVariableSymbol(name), FirQualifiedAccessExpressionImpl(ktParameter).apply { dispatchReceiver = FirThisReceiverExpressionImpl(null, FirImplicitThisReference(firClass.symbol)).apply { typeRef = firPrimaryConstructor.returnTypeRef @@ -104,29 +123,6 @@ fun List>.generateCopyFunction( } body = FirEmptyExpressionBlock() -// body = FirSingleExpressionBlock( -// session, -// FirReturnExpressionImpl( -// session, this@generateCopyFunction, -// FirFunctionCallImpl(session, this@generateCopyFunction).apply { -// calleeReference = FirResolvedCallableReferenceImpl( -// session, this@generateCopyFunction, firClass.name, -// firPrimaryConstructor.symbol -// ) -// }.apply { -// for ((ktParameter, firParameter) in primaryConstructorParameters.zip(valueParameters)) { -// this.arguments += FirQualifiedAccessExpressionImpl(session, ktParameter).apply { -// calleeReference = FirResolvedCallableReferenceImpl( -// session, ktParameter, firParameter.name, firParameter.symbol -// ) -// } -// } -// } -// ).apply { -// target = FirFunctionTarget(null) -// target.bind(copyFunction) -// } -// ) } ) } \ No newline at end of file diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index f6a06507762..d83e26232c8 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -11,16 +11,15 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.FirWhenSubject +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.labels.FirLabelImpl -import org.jetbrains.kotlin.fir.references.* -import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.impl.FirLabelImpl +import org.jetbrains.kotlin.fir.references.impl.* +import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -180,7 +179,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } val isSpread = getSpreadElement() != null return when { - name != null -> FirNamedArgumentExpressionImpl(expression, name, isSpread, firExpression) + name != null -> FirNamedArgumentExpressionImpl(expression, firExpression, isSpread, name) isSpread -> FirSpreadArgumentExpressionImpl(expression, firExpression) else -> firExpression } @@ -193,28 +192,33 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder ): FirPropertyAccessor { if (this == null) { return if (isGetter) { - FirDefaultPropertyGetter(session, property, propertyTypeRef, property.visibility) + FirDefaultPropertyGetter(property, session, propertyTypeRef, property.visibility) } else { - FirDefaultPropertySetter(session, property, propertyTypeRef, property.visibility) + FirDefaultPropertySetter(property, session, propertyTypeRef, property.visibility) } } val firAccessor = FirPropertyAccessorImpl( - session, this, - isGetter, - visibility, + session, if (isGetter) { returnTypeReference?.convertSafe() ?: propertyTypeRef } else { returnTypeReference.toFirOrUnitType() }, - FirPropertyAccessorSymbol() + FirPropertyAccessorSymbol(), + isGetter, + FirDeclarationStatusImpl(visibility, Modality.FINAL) ) this@RawFirBuilder.context.firFunctions += firAccessor extractAnnotationsTo(firAccessor) extractValueParametersTo(firAccessor, propertyTypeRef) if (!isGetter && firAccessor.valueParameters.isEmpty()) { - firAccessor.valueParameters += FirDefaultSetterValueParameter(session, this, propertyTypeRef) + firAccessor.valueParameters += FirDefaultSetterValueParameter( + this, + session, + propertyTypeRef, + FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) + ) } firAccessor.body = this.buildFirBody() this@RawFirBuilder.context.firFunctions.removeLast() @@ -222,15 +226,17 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } private fun KtParameter.toFirValueParameter(defaultTypeRef: FirTypeRef? = null): FirValueParameter { + val name = nameAsSafeName val firValueParameter = FirValueParameterImpl( - session, this, - nameAsSafeName, + session, when { typeReference != null -> typeReference.toFirOrErrorType() defaultTypeRef != null -> defaultTypeRef else -> null.toFirOrImplicitType() }, + name, + FirVariableSymbol(CallableId(name)), if (hasDefaultValue()) { { defaultValue }.toFirExpression("Should have default value") } else null, @@ -245,30 +251,32 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder private fun KtParameter.toFirProperty(firParameter: FirValueParameter): FirProperty { require(hasValOrVar()) val type = typeReference.toFirOrErrorType() - val firProperty = FirMemberPropertyImpl( - session, + val status = FirDeclarationStatusImpl(visibility, modality).apply { + isExpect = hasExpectModifier() + isActual = hasActualModifier() + isOverride = hasModifier(OVERRIDE_KEYWORD) + isConst = false + isLateInit = false + } + val firProperty = FirPropertyImpl( this, - FirPropertySymbol(callableIdForName(nameAsSafeName)), + session, + type, + null, nameAsSafeName, - visibility, - modality, - hasExpectModifier(), - hasActualModifier(), - isOverride = hasModifier(OVERRIDE_KEYWORD), - isConst = false, - isLateInit = false, - receiverTypeRef = null, - returnTypeRef = type, - isVar = isMutable, - initializer = FirQualifiedAccessExpressionImpl(this).apply { + FirQualifiedAccessExpressionImpl(this).apply { calleeReference = FirPropertyFromParameterCallableReference( this@toFirProperty, nameAsSafeName, firParameter.symbol ) }, - delegate = null + null, + isMutable, + FirPropertySymbol(callableIdForName(nameAsSafeName)), + false, + status ).apply { - getter = FirDefaultPropertyGetter(this@RawFirBuilder.session, this@toFirProperty, type, visibility) - setter = if (isMutable) FirDefaultPropertySetter(this@RawFirBuilder.session, this@toFirProperty, type, visibility) else null + getter = FirDefaultPropertyGetter(this@toFirProperty, this@RawFirBuilder.session, type, visibility) + setter = if (isMutable) FirDefaultPropertySetter(this@toFirProperty, this@RawFirBuilder.session, type, visibility) else null } extractAnnotationsTo(firProperty) return firProperty @@ -280,7 +288,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } } - private fun KtTypeParameterListOwner.extractTypeParametersTo(container: FirAbstractMemberDeclaration) { + private fun KtTypeParameterListOwner.extractTypeParametersTo(container: FirModifiableTypeParametersOwner) { for (typeParameter in typeParameters) { container.typeParameters += typeParameter.convert() } @@ -323,8 +331,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder is KtDelegatedSuperTypeEntry -> { val type = superTypeListEntry.typeReference.toFirOrErrorType() container.superTypeRefs += FirDelegatedTypeRefImpl( - type, - { superTypeListEntry.delegateExpression }.toFirExpression("Should have delegate") + { superTypeListEntry.delegateExpression }.toFirExpression("Should have delegate"), + type ) } } @@ -380,17 +388,21 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder else Visibilities.UNKNOWN + val status = FirDeclarationStatusImpl(this?.visibility ?: defaultVisibility(), Modality.FINAL).apply { + isExpect = this@toFirConstructor?.hasExpectModifier() ?: false + isActual = this@toFirConstructor?.hasActualModifier() ?: false + isInner = owner.hasModifier(INNER_KEYWORD) + } val firConstructor = FirPrimaryConstructorImpl( - session, this ?: owner, - FirConstructorSymbol(callableIdForClassConstructor()), - this?.visibility ?: defaultVisibility(), - this?.hasExpectModifier() ?: false, - this?.hasActualModifier() ?: false, - owner.hasModifier(INNER_KEYWORD), + session, delegatedSelfTypeRef, - firDelegatedCall - ) + null, + status, + FirConstructorSymbol(callableIdForClassConstructor()) + ).apply { + delegatedConstructor = firDelegatedCall + } this?.extractAnnotationsTo(firConstructor) firConstructor.typeParameters += typeParametersFromSelfType(delegatedSelfTypeRef) this?.extractValueParametersTo(firConstructor) @@ -399,7 +411,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitKtFile(file: KtFile, data: Unit): FirElement { context.packageFqName = file.packageFqName - val firFile = FirFileImpl(session, file, file.name, context.packageFqName) + val firFile = FirFileImpl(file, session, file.name, context.packageFqName) for (annotationEntry in file.annotationEntries) { firFile.annotations += annotationEntry.convert() } @@ -420,10 +432,10 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitEnumEntry(enumEntry: KtEnumEntry, data: Unit): FirElement { return withChildClassName(enumEntry.nameAsSafeName) { val firEnumEntry = FirEnumEntryImpl( - session, enumEntry, - FirClassSymbol(context.currentClassId), - enumEntry.nameAsSafeName + session, + enumEntry.nameAsSafeName, + FirClassSymbol(context.currentClassId) ) enumEntry.extractAnnotationsTo(firEnumEntry) val delegatedSelfType = enumEntry.toDelegatedSelfType(firEnumEntry) @@ -452,20 +464,24 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } else -> throw AssertionError("Unexpected class or object: ${classOrObject.text}") } - val firClass = FirClassImpl( - session, - classOrObject, - FirClassSymbol(context.currentClassId), - classOrObject.nameAsSafeName, + val status = FirDeclarationStatusImpl( if (classOrObject.isLocal) Visibilities.LOCAL else classOrObject.visibility, - classOrObject.modality, - classOrObject.hasExpectModifier(), - classOrObject.hasActualModifier(), - classKind, - isInner = classOrObject.hasModifier(INNER_KEYWORD), - isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true, - isData = (classOrObject as? KtClass)?.isData() == true, + classOrObject.modality + ).apply { + isExpect = classOrObject.hasExpectModifier() + isActual = classOrObject.hasActualModifier() + isInner = classOrObject.hasModifier(INNER_KEYWORD) + isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true + isData = (classOrObject as? KtClass)?.isData() == true isInline = classOrObject.hasModifier(INLINE_KEYWORD) + } + val firClass = FirClassImpl( + classOrObject, + session, + classOrObject.nameAsSafeName, + status, + classKind, + FirClassSymbol(context.currentClassId) ) classOrObject.extractAnnotationsTo(firClass) classOrObject.extractTypeParametersTo(firClass) @@ -507,7 +523,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitObjectLiteralExpression(expression: KtObjectLiteralExpression, data: Unit): FirElement { val objectDeclaration = expression.objectDeclaration - return FirAnonymousObjectImpl(expression).apply { + return FirAnonymousObjectImpl(expression, session).apply { objectDeclaration.extractAnnotationsTo(this) objectDeclaration.extractSuperTypeListEntriesTo(this, null) this.typeRef = superTypeRefs.first() // TODO @@ -522,15 +538,17 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } override fun visitTypeAlias(typeAlias: KtTypeAlias, data: Unit): FirElement { + val status = FirDeclarationStatusImpl(typeAlias.visibility, Modality.FINAL).apply { + isExpect = typeAlias.hasExpectModifier() + isActual = typeAlias.hasActualModifier() + } return withChildClassName(typeAlias.nameAsSafeName) { val firTypeAlias = FirTypeAliasImpl( - session, typeAlias, - FirTypeAliasSymbol(context.currentClassId), + session, typeAlias.nameAsSafeName, - typeAlias.visibility, - typeAlias.hasExpectModifier(), - typeAlias.hasActualModifier(), + status, + FirTypeAliasSymbol(context.currentClassId), typeAlias.getTypeReference().toFirOrErrorType() ) typeAlias.extractAnnotationsTo(firTypeAlias) @@ -548,32 +566,35 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } val receiverType = function.receiverTypeReference.convertSafe() val firFunction = if (function.name == null) { - FirAnonymousFunctionImpl(session, function, returnType, receiverType, FirAnonymousFunctionSymbol()) + FirAnonymousFunctionImpl(function, session, returnType, receiverType, FirAnonymousFunctionSymbol()) } else { - - FirMemberFunctionImpl( - session, - function, - FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName, function.isLocal)), - function.nameAsSafeName, + val status = FirDeclarationStatusImpl( if (function.isLocal) Visibilities.LOCAL else function.visibility, - function.modality, - function.hasExpectModifier(), - function.hasActualModifier(), - function.hasModifier(OVERRIDE_KEYWORD), - function.hasModifier(OPERATOR_KEYWORD), - function.hasModifier(INFIX_KEYWORD), - function.hasModifier(INLINE_KEYWORD), - function.hasModifier(TAILREC_KEYWORD), - function.hasModifier(EXTERNAL_KEYWORD), - function.hasModifier(SUSPEND_KEYWORD), + function.modality + ).apply { + isExpect = function.hasExpectModifier() + isActual = function.hasActualModifier() + isOverride = function.hasModifier(OVERRIDE_KEYWORD) + isOperator = function.hasModifier(OPERATOR_KEYWORD) + isInfix = function.hasModifier(INFIX_KEYWORD) + isInline = function.hasModifier(INLINE_KEYWORD) + isTailRec = function.hasModifier(TAILREC_KEYWORD) + isExternal = function.hasModifier(EXTERNAL_KEYWORD) + isSuspend = function.hasModifier(SUSPEND_KEYWORD) + } + FirSimpleFunctionImpl( + function, + session, + returnType, receiverType, - returnType + function.nameAsSafeName, + status, + FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName, function.isLocal)) ) } context.firFunctions += firFunction function.extractAnnotationsTo(firFunction) - if (firFunction is FirMemberFunctionImpl) { + if (firFunction is FirSimpleFunctionImpl) { function.extractTypeParametersTo(firFunction) } for (valueParameter in function.valueParameters) { @@ -588,16 +609,23 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder val literal = expression.functionLiteral val returnType = FirImplicitTypeRefImpl(literal) val receiverType = FirImplicitTypeRefImpl(literal) - return FirAnonymousFunctionImpl(session, literal, returnType, receiverType, FirAnonymousFunctionSymbol()).apply { + return FirAnonymousFunctionImpl(literal, session, returnType, receiverType, FirAnonymousFunctionSymbol()).apply { context.firFunctions += this var destructuringBlock: FirExpression? = null for (valueParameter in literal.valueParameters) { val multiDeclaration = valueParameter.destructuringDeclaration valueParameters += if (multiDeclaration != null) { + val name = Name.special("") val multiParameter = FirValueParameterImpl( - this@RawFirBuilder.session, valueParameter, Name.special(""), + valueParameter, + this@RawFirBuilder.session, FirImplicitTypeRefImpl(multiDeclaration), - defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false + name, + FirVariableSymbol(name), + defaultValue = null, + isCrossinline = false, + isNoinline = false, + isVararg = false ) destructuringBlock = generateDestructuringBlock( this@RawFirBuilder.session, @@ -639,17 +667,21 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder owner: KtClassOrObject, hasPrimaryConstructor: Boolean ): FirConstructor { + val status = FirDeclarationStatusImpl(visibility, Modality.FINAL).apply { + isExpect = hasExpectModifier() + isActual = hasActualModifier() + isInner = owner.hasModifier(INNER_KEYWORD) + } val firConstructor = FirConstructorImpl( - session, this, - FirConstructorSymbol(callableIdForClassConstructor()), - visibility, - hasExpectModifier(), - hasActualModifier(), - owner.hasModifier(INNER_KEYWORD), + session, delegatedSelfTypeRef, - getDelegationCall().convert(delegatedSuperTypeRef, delegatedSelfTypeRef, hasPrimaryConstructor) - ) + null, + status, + FirConstructorSymbol(callableIdForClassConstructor()) + ).apply { + delegatedConstructor = getDelegationCall().convert(delegatedSuperTypeRef, delegatedSelfTypeRef, hasPrimaryConstructor) + } this@RawFirBuilder.context.firFunctions += firConstructor extractAnnotationsTo(firConstructor) firConstructor.typeParameters += typeParametersFromSelfType(delegatedSelfTypeRef) @@ -682,8 +714,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitAnonymousInitializer(initializer: KtAnonymousInitializer, data: Unit): FirElement { return FirAnonymousInitializerImpl( - session, initializer, + session, if (stubMode) FirEmptyExpressionBlock() else initializer.body.toFirBlock() ) } @@ -697,45 +729,51 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } else null val delegateExpression by lazy { property.delegate?.expression } val firProperty = if (property.isLocal) { - FirVariableImpl( - session, + FirPropertyImpl( property, - name, + session, propertyType, - isVar, + null, + name, initializer, - delegate = delegateExpression?.let { + delegateExpression?.let { FirWrappedDelegateExpressionImpl( it, it.toFirExpression("Incorrect delegate expression") ) - } + }, + isVar, + FirPropertySymbol(CallableId(name)), + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) ).apply { generateAccessorsByDelegate(this@RawFirBuilder.session, member = false, stubMode = stubMode) } } else { - FirMemberPropertyImpl( - session, + val status = FirDeclarationStatusImpl(property.visibility, property.modality).apply { + isExpect = property.hasExpectModifier() + isActual = property.hasActualModifier() + isOverride = property.hasModifier(OVERRIDE_KEYWORD) + isConst = property.hasModifier(CONST_KEYWORD) + isLateInit = property.hasModifier(LATEINIT_KEYWORD) + } + FirPropertyImpl( property, - FirPropertySymbol(callableIdForName(name)), - name, - property.visibility, - property.modality, - property.hasExpectModifier(), - property.hasActualModifier(), - property.hasModifier(OVERRIDE_KEYWORD), - property.hasModifier(CONST_KEYWORD), - property.hasModifier(LATEINIT_KEYWORD), - property.receiverTypeReference.convertSafe(), + session, propertyType, - isVar, + property.receiverTypeReference.convertSafe(), + name, initializer, if (property.hasDelegate()) { FirWrappedDelegateExpressionImpl( if (stubMode) null else delegateExpression, { delegateExpression }.toFirExpression("Should have delegate") ) - } else null + } else null, + isVar, + FirPropertySymbol(callableIdForName(name)), + false, + status ).apply { property.extractTypeParametersTo(this) getter = property.getter.toFirPropertyAccessor(property, propertyType, isGetter = true) @@ -817,10 +855,10 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitTypeParameter(parameter: KtTypeParameter, data: Unit): FirElement { val parameterName = parameter.nameAsSafeName val firTypeParameter = FirTypeParameterImpl( - session, parameter, - FirTypeParameterSymbol(), + session, parameterName, + FirTypeParameterSymbol(), parameter.variance, parameter.hasModifier(REIFIED_KEYWORD) ) @@ -852,13 +890,13 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder val firType = typeReference.toFirOrErrorType() return FirTypeProjectionWithVarianceImpl( typeProjection, + firType, when (projectionKind) { KtProjectionKind.IN -> Variance.IN_VARIANCE KtProjectionKind.OUT -> Variance.OUT_VARIANCE KtProjectionKind.NONE -> Variance.INVARIANT KtProjectionKind.STAR -> throw AssertionError("* should not be here") - }, - firType + } ) } @@ -910,7 +948,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } override fun visitIfExpression(expression: KtIfExpression, data: Unit): FirElement { - return FirWhenExpressionImpl(expression).apply { + return FirWhenExpressionImpl(expression, null, null).apply { val condition = expression.condition val firCondition = condition.toFirExpression("If statement should have condition") val trueBranch = expression.then.toFirBlock() @@ -929,11 +967,22 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder else -> ktSubjectExpression }?.toFirExpression("Incorrect when subject expression: ${ktSubjectExpression?.text}") val subjectVariable = when (ktSubjectExpression) { - is KtVariableDeclaration -> FirVariableImpl( - session, ktSubjectExpression, ktSubjectExpression.nameAsSafeName, - ktSubjectExpression.typeReference.toFirOrImplicitType(), - isVar = false, initializer = subjectExpression - ) + is KtVariableDeclaration -> { + val name = ktSubjectExpression.nameAsSafeName + FirPropertyImpl( + ktSubjectExpression, + session, + ktSubjectExpression.typeReference.toFirOrImplicitType(), + null, + name, + subjectExpression, + null, + false, + FirPropertySymbol(CallableId(name)), + true, + FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) + ) + } else -> null } val hasSubject = subjectExpression != null @@ -996,7 +1045,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder val iteratorVal = generateTemporaryVariable( this@RawFirBuilder.session, expression.loopRange, Name.special(""), FirFunctionCallImpl(expression).apply { - calleeReference = FirSimpleNamedReference(expression, Name.identifier("iterator")) + calleeReference = FirSimpleNamedReference(expression, Name.identifier("iterator"), null) explicitReceiver = generateResolvedAccessExpression(expression.loopRange, rangeVal) } ) @@ -1004,7 +1053,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder statements += FirWhileLoopImpl( expression, FirFunctionCallImpl(expression).apply { - calleeReference = FirSimpleNamedReference(expression, Name.identifier("hasNext")) + calleeReference = FirSimpleNamedReference(expression, Name.identifier("hasNext"), null) explicitReceiver = generateResolvedAccessExpression(expression, iteratorVal) } ).configure { @@ -1020,7 +1069,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder this@RawFirBuilder.session, expression.loopParameter, if (multiDeclaration != null) Name.special("") else parameter.nameAsSafeName, FirFunctionCallImpl(expression).apply { - calleeReference = FirSimpleNamedReference(expression, Name.identifier("next")) + calleeReference = FirSimpleNamedReference(expression, Name.identifier("next"), null) explicitReceiver = generateResolvedAccessExpression(expression, iteratorVal) } ) @@ -1073,7 +1122,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder FirFunctionCallImpl(expression).apply { calleeReference = FirSimpleNamedReference( expression.operationReference, - conventionCallName ?: expression.operationReference.getReferencedNameAsName() + conventionCallName ?: expression.operationReference.getReferencedNameAsName(), + null ) explicitReceiver = leftArgument arguments += rightArgument @@ -1128,7 +1178,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder } FirFunctionCallImpl(expression).apply { calleeReference = FirSimpleNamedReference( - expression.operationReference, conventionCallName + expression.operationReference, conventionCallName, null ) explicitReceiver = argument.toFirExpression("No operand") } @@ -1145,15 +1195,15 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder return FirFunctionCallImpl(expression).apply { val calleeReference = when (calleeExpression) { is KtSimpleNameExpression -> FirSimpleNamedReference( - calleeExpression, calleeExpression.getReferencedNameAsName() + calleeExpression, calleeExpression.getReferencedNameAsName(), null ) - null -> FirErrorNamedReference( + null -> FirErrorNamedReferenceImpl( calleeExpression, "Call has no callee" ) else -> { arguments += calleeExpression.toFirExpression("Incorrect invoke receiver") FirSimpleNamedReference( - expression, OperatorNameConventions.INVOKE + expression, OperatorNameConventions.INVOKE, null ) } } @@ -1170,7 +1220,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitArrayAccessExpression(expression: KtArrayAccessExpression, data: Unit): FirElement { val arrayExpression = expression.arrayExpression return FirFunctionCallImpl(expression).apply { - calleeReference = FirSimpleNamedReference(expression, OperatorNameConventions.GET) + calleeReference = FirSimpleNamedReference(expression, OperatorNameConventions.GET, null) explicitReceiver = arrayExpression.toFirExpression("No array expression") for (indexExpression in expression.indexExpressions) { arguments += indexExpression.toFirExpression("Incorrect index expression") @@ -1182,7 +1232,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder val selector = expression.selectorExpression ?: return FirErrorExpressionImpl(expression, "Qualified expression without selector") val firSelector = selector.toFirExpression("Incorrect selector expression") - if (firSelector is FirModifiableQualifiedAccess<*>) { + if (firSelector is FirModifiableQualifiedAccess) { firSelector.safe = expression is KtSafeQualifiedExpression firSelector.explicitReceiver = expression.receiverExpression.toFirExpression("Incorrect receiver expression") } @@ -1256,7 +1306,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder override fun visitCallableReferenceExpression(expression: KtCallableReferenceExpression, data: Unit): FirElement { return FirCallableReferenceAccessImpl(expression).apply { calleeReference = FirSimpleNamedReference( - expression.callableReference, expression.callableReference.getReferencedNameAsName() + expression.callableReference, expression.callableReference.getReferencedNameAsName(), null ) explicitReceiver = expression.receiverExpression?.toFirExpression("Incorrect receiver expression") } diff --git a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt index 7a2f122219b..f36bc98da5f 100644 --- a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt +++ b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory diff --git a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt index 44d17a4c674..cae0be35090 100644 --- a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt +++ b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt @@ -9,7 +9,6 @@ import com.intellij.testFramework.TestDataPath import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirErrorDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -101,11 +100,11 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() { statement.acceptChildren(this) } - override fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) { - errorDeclarations++ - println(errorDeclaration.render()) - errorDeclaration.psi?.let { println(it) } - } +// override fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) { +// errorDeclarations++ +// println(errorDeclaration.render()) +// errorDeclaration.psi?.let { println(it) } +// } override fun visitDeclaration(declaration: FirDeclaration) { normalDeclarations++ diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt index 1d9296a84ae..beb96674cd1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt @@ -17,6 +17,8 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirFunctionCallImpl import org.jetbrains.kotlin.fir.expressions.impl.FirTryExpressionImpl import org.jetbrains.kotlin.fir.expressions.impl.FirWhenExpressionImpl import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeProjection @@ -35,7 +37,8 @@ fun FirFunctionCall.copy( typeArguments: List = this.typeArguments, resultType: FirTypeRef = this.typeRef ): FirFunctionCall { - return FirFunctionCallImpl(psi, safe).apply { + return FirFunctionCallImpl(psi).apply { + this.safe = safe this.annotations.addAll(annotations) this.arguments.addAll(arguments) this.calleeReference = calleeReference @@ -60,7 +63,7 @@ fun FirAnonymousFunction.copy( controlFlowGraphReference: FirControlFlowGraphReference = this.controlFlowGraphReference, invocationKind: InvocationKind? = this.invocationKind ): FirAnonymousFunction { - return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef, symbol).apply { + return FirAnonymousFunctionImpl(psi, session, returnTypeRef, receiverTypeRef, symbol).apply { this.valueParameters.addAll(valueParameters) this.body = body this.annotations.addAll(annotations) @@ -75,7 +78,9 @@ fun FirAnonymousFunction.copy( fun FirTypeRef.resolvedTypeFromPrototype( type: ConeKotlinType ): FirResolvedTypeRef { - return FirResolvedTypeRefImpl(psi, type, annotations) + return FirResolvedTypeRefImpl(psi, type).apply { + annotations += this@resolvedTypeFromPrototype.annotations + } } fun FirTypeParameter.copy( @@ -83,7 +88,7 @@ fun FirTypeParameter.copy( annotations: List = this.annotations ): FirTypeParameterImpl { return FirTypeParameterImpl( - session, psi, symbol, name, variance, isReified + psi, session, name, symbol, variance, isReified ).apply { this.bounds += bounds this.annotations += annotations @@ -93,7 +98,8 @@ fun FirTypeParameter.copy( fun FirWhenExpression.copy( resultType: FirTypeRef = this.typeRef, calleeReference: FirReference = this.calleeReference -): FirWhenExpressionImpl = FirWhenExpressionImpl(psi, subject, subjectVariable, calleeReference).apply { +): FirWhenExpressionImpl = FirWhenExpressionImpl(psi, subject, subjectVariable).apply { + this.calleeReference = calleeReference this@apply.branches.addAll(this@copy.branches) this.typeRef = resultType this.calleeReference = calleeReference @@ -102,7 +108,8 @@ fun FirWhenExpression.copy( fun FirTryExpression.copy( resultType: FirTypeRef = this.typeRef, calleeReference: FirReference = this.calleeReference -): FirTryExpressionImpl = FirTryExpressionImpl(psi, tryBlock, finallyBlock, calleeReference).apply { +): FirTryExpressionImpl = FirTryExpressionImpl(psi, tryBlock, finallyBlock).apply { + this.calleeReference = calleeReference this@apply.catches.addAll(this@copy.catches) this.typeRef = resultType } \ No newline at end of file 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 ed7272cccae..0aee8d653aa 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -12,10 +12,11 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedQualifierImpl -import org.jetbrains.kotlin.fir.references.FirBackingFieldReferenceImpl -import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.* +import org.jetbrains.kotlin.fir.references.impl.FirBackingFieldReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack import org.jetbrains.kotlin.fir.resolve.calls.* @@ -48,8 +49,8 @@ class FirCallResolver( fun resolveCallAndSelectCandidate(functionCall: FirFunctionCall, expectedTypeRef: FirTypeRef?, file: FirFile): FirFunctionCall { qualifiedResolver.reset() @Suppress("NAME_SHADOWING") - val functionCall = (functionCall.transformExplicitReceiver(transformer, noExpectedType) as FirFunctionCall) - .transformArguments(transformer, null) as FirFunctionCall + val functionCall = functionCall.transformExplicitReceiver(transformer, noExpectedType) + .transformArguments(transformer, null) val name = functionCall.calleeReference.name @@ -190,7 +191,8 @@ class FirCallResolver( else -> null } if (referencedSymbol is FirClassLikeSymbol<*>) { - return FirResolvedQualifierImpl(nameReference.psi, referencedSymbol.classId).apply { + val classId = referencedSymbol.classId + return FirResolvedQualifierImpl(nameReference.psi, classId.packageFqName, classId.relativeClassName).apply { resultType = typeForQualifier(this) } } @@ -218,21 +220,20 @@ class FirCallResolver( val name = namedReference.name val psi = namedReference.psi return when { - candidates.isEmpty() -> FirErrorNamedReference( + candidates.isEmpty() -> FirErrorNamedReferenceImpl( psi, "Unresolved name: $name" ) applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> { - FirErrorNamedReference( + FirErrorNamedReferenceImpl( psi, - "Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}", - namedReference.name + "Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}" ) } candidates.size == 1 -> { val candidate = candidates.single() val coneSymbol = candidate.symbol when { - coneSymbol is FirBackingFieldSymbol -> FirBackingFieldReferenceImpl(psi, coneSymbol) + coneSymbol is FirBackingFieldSymbol -> FirBackingFieldReferenceImpl(psi, null, coneSymbol) coneSymbol is FirVariableSymbol && ( coneSymbol !is FirPropertySymbol || (coneSymbol.phasedFir(session) as FirMemberDeclaration).typeParameters.isEmpty() @@ -241,9 +242,8 @@ class FirCallResolver( else -> FirNamedReferenceWithCandidate(psi, name, candidate) } } - else -> FirErrorNamedReference( - psi, "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}", - namedReference.name + else -> FirErrorNamedReferenceImpl( + psi, "Ambiguity: $name, ${candidates.map { describeSymbol(it.symbol) }}" ) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt index 8917df3440d..3d6ceab5a24 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirQualifiedNameResolver.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedQualifierImpl -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.transformers.PackageOrClass diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt index c4d1cd98dac..fe02b2acfc5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/AbstractAnnotationDeserializer.kt @@ -11,8 +11,8 @@ import org.jetbrains.kotlin.fir.declarations.FirConstructor import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl @@ -83,7 +83,7 @@ abstract class AbstractAnnotationDeserializer( val parameter = parameterByName[name] ?: return@mapNotNull null val value = resolveValue(parameter.returnTypeRef, it.value, nameResolver) ?: return@mapNotNull null FirNamedArgumentExpressionImpl( - null, name, false, value + null, value, false, name ) } } @@ -134,7 +134,7 @@ abstract class AbstractAnnotationDeserializer( val entrySymbol = entryLookupTag.toSymbol(this@AbstractAnnotationDeserializer.session) this.calleeReference = entrySymbol?.let { FirResolvedCallableReferenceImpl(null, entryName, it) - } ?: FirErrorNamedReference( + } ?: FirErrorNamedReferenceImpl( null, errorReason = "Strange deserialized enum value: $classId.$entryName" ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt index b9d1ccebdb7..ea36060cc7b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/ClassDeserialization.kt @@ -7,7 +7,9 @@ package org.jetbrains.kotlin.fir.deserialization import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.addDeclarations import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -35,16 +37,24 @@ fun deserializeClassToSymbol( ) { val flags = classProto.flags val kind = Flags.CLASS_KIND.get(flags) - FirClassImpl( - session, null, symbol, classId.shortClassName, + val status = FirDeclarationStatusImpl( ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - ProtoEnumFlags.modality(Flags.MODALITY.get(flags)), - Flags.IS_EXPECT_CLASS.get(flags), false, + ProtoEnumFlags.modality(Flags.MODALITY.get(flags)) + ).apply { + isExpect = Flags.IS_EXPECT_CLASS.get(flags) + isActual = false + isCompanion = kind == ProtoBuf.Class.Kind.COMPANION_OBJECT + isInner = Flags.IS_INNER.get(flags) + isData = Flags.IS_DATA.get(classProto.flags) + isInline = Flags.IS_INLINE_CLASS.get(classProto.flags) + } + FirClassImpl( + null, + session, + classId.shortClassName, + status, ProtoEnumFlags.classKind(kind), - Flags.IS_INNER.get(flags), - kind == ProtoBuf.Class.Kind.COMPANION_OBJECT, - Flags.IS_DATA.get(classProto.flags), - Flags.IS_INLINE_CLASS.get(classProto.flags) + symbol ).apply { resolvePhase = FirResolvePhase.DECLARATIONS val context = @@ -94,12 +104,11 @@ fun deserializeClassToSymbol( val enumEntryId = classId.createNestedClassId(enumEntryName) val symbol = FirClassSymbol(enumEntryId) - FirEnumEntryImpl(session, null, symbol, enumEntryId.shortClassName).apply { + FirEnumEntryImpl(null, session, enumEntryId.shortClassName, symbol).apply { resolvePhase = FirResolvePhase.DECLARATIONS superTypeRefs += FirResolvedTypeRefImpl( null, - ConeClassTypeImpl(ConeClassLikeLookupTagImpl(classId), emptyArray(), false), - emptyList() + ConeClassTypeImpl(ConeClassLikeLookupTagImpl(classId), emptyArray(), false) ) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index e63c12d9a2b..72cad243478 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.fir.deserialization +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* @@ -126,18 +128,19 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val flags = proto.flags val name = c.nameResolver.getName(proto.name) val local = c.childContext(proto.typeParameterList) + val status = FirDeclarationStatusImpl(ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), Modality.FINAL).apply { + isExpect = Flags.IS_EXPECT_CLASS.get(flags) + isActual = false + } return FirTypeAliasImpl( - c.session, null, - FirTypeAliasSymbol(ClassId(c.packageFqName, name)), + c.session, name, - ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - Flags.IS_EXPECT_CLASS.get(flags), - false, + status, + FirTypeAliasSymbol(ClassId(c.packageFqName, name)), FirResolvedTypeRefImpl( null, - local.typeDeserializer.type(proto.underlyingType(c.typeTable)), - emptyList() /* TODO */ + local.typeDeserializer.type(proto.underlyingType(c.typeTable)) ) ).apply { resolvePhase = FirResolvePhase.DECLARATIONS @@ -155,36 +158,40 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val getterFlags = if (proto.hasGetterFlags()) proto.getterFlags else flags val setterFlags = if (proto.hasSetterFlags()) proto.setterFlags else flags val isVar = Flags.IS_VAR.get(flags) - - return FirMemberPropertyImpl( - c.session, - null, - symbol, - callableName, + val status = FirDeclarationStatusImpl( ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - ProtoEnumFlags.modality(Flags.MODALITY.get(flags)), - isExpect = Flags.IS_EXPECT_PROPERTY.get(flags), - isActual = false, - isOverride = false, - isConst = Flags.IS_CONST.get(flags), - isLateInit = Flags.IS_LATEINIT.get(flags), - receiverTypeRef = proto.receiverType(c.typeTable)?.toTypeRef(local), - returnTypeRef = returnTypeRef, - isVar = isVar, - initializer = null, - delegate = null + ProtoEnumFlags.modality(Flags.MODALITY.get(flags)) + ).apply { + isExpect = Flags.IS_EXPECT_PROPERTY.get(flags) + isActual = false + isOverride = false + isConst = Flags.IS_CONST.get(flags) + isLateInit = Flags.IS_LATEINIT.get(flags) + } + return FirPropertyImpl( + null, + c.session, + returnTypeRef, + proto.receiverType(c.typeTable)?.toTypeRef(local), + callableName, + null, + null, + isVar, + symbol, + false, + status ).apply { resolvePhase = FirResolvePhase.DECLARATIONS typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir } annotations += c.annotationDeserializer.loadPropertyAnnotations(proto, local.nameResolver) - getter = FirDefaultPropertyGetter(c.session, null, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))) + getter = FirDefaultPropertyGetter(null, c.session, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags))) setter = if (isVar) { - FirDefaultPropertySetter(c.session, null, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))) + FirDefaultPropertySetter(null, c.session, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags))) } else null } } - fun loadFunction(proto: ProtoBuf.Function): FirNamedFunction { + fun loadFunction(proto: ProtoBuf.Function): FirSimpleFunction { val flags = if (proto.hasFlags()) proto.flags else loadOldFlags(proto.oldFlags) val receiverAnnotations = @@ -198,26 +205,30 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val callableName = c.nameResolver.getName(proto.name) val symbol = FirNamedFunctionSymbol(CallableId(c.packageFqName, c.relativeClassName, callableName)) val local = c.childContext(proto.typeParameterList) + val status = FirDeclarationStatusImpl( + ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), + ProtoEnumFlags.modality(Flags.MODALITY.get(flags)) + ).apply { + isExpect = Flags.IS_EXPECT_FUNCTION.get(flags) + isActual = false + isOverride = false + isOperator = Flags.IS_OPERATOR.get(flags) + isInfix = Flags.IS_INFIX.get(flags) + isInline = Flags.IS_INLINE.get(flags) + isTailRec = Flags.IS_TAILREC.get(flags) + isExternal = Flags.IS_EXTERNAL_FUNCTION.get(flags) + isSuspend = Flags.IS_SUSPEND.get(flags) + } // TODO: support contracts - return FirMemberFunctionImpl( - c.session, + return FirSimpleFunctionImpl( null, - symbol, + c.session, + proto.returnType(local.typeTable).toTypeRef(local), + proto.receiverType(local.typeTable)?.toTypeRef(local), callableName, - ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - ProtoEnumFlags.modality(Flags.MODALITY.get(flags)), - Flags.IS_EXPECT_FUNCTION.get(flags), - isActual = false, - isOverride = false, - isOperator = Flags.IS_OPERATOR.get(flags), - isInfix = Flags.IS_INFIX.get(flags), - isInline = Flags.IS_INLINE.get(flags), - isTailRec = Flags.IS_TAILREC.get(flags), - isExternal = Flags.IS_EXTERNAL_FUNCTION.get(flags), - isSuspend = Flags.IS_SUSPEND.get(flags), - receiverTypeRef = proto.receiverType(local.typeTable)?.toTypeRef(local), - returnTypeRef = proto.returnType(local.typeTable).toTypeRef(local) + status, + symbol ).apply { resolvePhase = FirResolvePhase.DECLARATIONS typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir } @@ -244,29 +255,28 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { ) ) + val status = FirDeclarationStatusImpl(ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), Modality.FINAL).apply { + isExpect = Flags.IS_EXPECT_FUNCTION.get(flags) + isActual = false + isInner = klass.isInner + } return if (isPrimary) { FirPrimaryConstructorImpl( - c.session, null, - symbol, - ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - Flags.IS_EXPECT_FUNCTION.get(flags), - false, - klass.isInner, + c.session, delegatedSelfType, - null + null, + status, + symbol ) } else { FirConstructorImpl( - c.session, null, - symbol, - ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - Flags.IS_EXPECT_FUNCTION.get(flags), - false, - klass.isInner, + c.session, delegatedSelfType, - null + null, + status, + symbol ) }.apply { resolvePhase = FirResolvePhase.DECLARATIONS @@ -289,13 +299,17 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { ): List { return valueParameters.map { proto -> val flags = if (proto.hasFlags()) proto.flags else 0 + val name = c.nameResolver.getName(proto.name) FirValueParameterImpl( - c.session, null, c.nameResolver.getName(proto.name), + null, + c.session, proto.type(c.typeTable).toTypeRef(c), + name, + FirVariableSymbol(name), defaultValue(flags), - Flags.IS_CROSSINLINE.get(flags), - Flags.IS_NOINLINE.get(flags), - proto.varargElementType(c.typeTable) != null + isCrossinline = Flags.IS_CROSSINLINE.get(flags), + isNoinline = Flags.IS_NOINLINE.get(flags), + isVararg = proto.varargElementType(c.typeTable) != null ).apply { annotations += c.annotationDeserializer.loadValueParameterAnnotations(proto, c.nameResolver) } @@ -305,9 +319,10 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { private fun ProtoBuf.Type.toTypeRef(context: FirDeserializationContext): FirTypeRef { val coneType = context.typeDeserializer.type(this) return FirResolvedTypeRefImpl( - null, coneType, - context.annotationDeserializer.loadTypeAnnotations(this, context.nameResolver) - ) + null, coneType + ).apply { + annotations += context.annotationDeserializer.loadTypeAnnotations(this@toTypeRef, context.nameResolver) + } } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt index 23c10cd5722..833496b5067 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt @@ -6,8 +6,8 @@ package org.jetbrains.kotlin.fir.deserialization import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl -import org.jetbrains.kotlin.fir.declarations.impl.addDefaultBoundIfNecessary import org.jetbrains.kotlin.fir.resolve.toTypeProjection import org.jetbrains.kotlin.fir.symbols.* import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl @@ -78,10 +78,10 @@ class FirTypeDeserializer( val name = nameResolver.getName(proto.name) val symbol = FirTypeParameterSymbol() FirTypeParameterImpl( - session, null, - symbol, + session, name, + symbol, proto.variance.convertVariance(), proto.reified ) @@ -98,7 +98,7 @@ class FirTypeDeserializer( val declaration = symbol.fir as FirTypeParameterImpl declaration.apply { proto.upperBoundList.mapTo(bounds) { - FirResolvedTypeRefImpl(null, type(it), emptyList()) + FirResolvedTypeRefImpl(null, type(it)) } addDefaultBoundIfNecessary() } 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 6f08a67b328..a201b24735a 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 @@ -12,6 +12,8 @@ import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.resultType @@ -194,7 +196,7 @@ fun T.withArguments(arguments: Array.constructFunctionalTypeRef(session: FirSession): FirResolvedTypeRef { val receiverTypeRef = when (this) { - is FirNamedFunction -> receiverTypeRef + is FirSimpleFunction -> receiverTypeRef is FirAnonymousFunction -> receiverTypeRef else -> null } @@ -225,7 +227,7 @@ fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifi val classId = resolvedQualifier.classId val resultType = resolvedQualifier.resultType if (classId != null) { - val classSymbol = symbolProvider.getClassLikeSymbolByFqName(classId)!! + val classSymbol: FirClassLikeSymbol<*> = symbolProvider.getClassLikeSymbolByFqName(classId)!! val declaration = classSymbol.phasedFir if (declaration is FirClass) { if (declaration.classKind == ClassKind.OBJECT) { @@ -282,7 +284,7 @@ fun BodyResolveComponents.typeFromCallee(access: T): FirReso is FirThisReference -> { val labelName = newCallee.labelName val implicitReceiver = implicitReceiverStack[labelName] - FirResolvedTypeRefImpl(null, implicitReceiver?.type ?: ConeKotlinErrorType("Unresolved this@$labelName"), emptyList()) + FirResolvedTypeRefImpl(null, implicitReceiver?.type ?: ConeKotlinErrorType("Unresolved this@$labelName")) } else -> error("Failed to extract type from: $newCallee") } @@ -309,10 +311,7 @@ private fun BodyResolveComponents.typeFromSymbol(symbol: AbstractFirBasedSymbol< "no enum item supertype" ) } else - FirResolvedTypeRefImpl( - null, symbol.constructType(emptyArray(), isNullable = false), - annotations = emptyList() - ) + FirResolvedTypeRefImpl(null, symbol.constructType(emptyArray(), isNullable = false)) } else -> error("WTF ! $symbol") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt index 325e30b074f..d1d5c0c92b0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt @@ -10,7 +10,8 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSessionComponent import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticFunctionSymbol @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl @@ -31,8 +33,8 @@ import org.jetbrains.kotlin.types.Variance interface FirSamResolver : FirSessionComponent { fun getFunctionTypeForPossibleSamType(type: ConeKotlinType): ConeKotlinType? - fun shouldRunSamConversionForFunction(firNamedFunction: FirNamedFunction): Boolean - fun getSamConstructor(firRegularClass: FirRegularClass): FirNamedFunction? + fun shouldRunSamConversionForFunction(firNamedFunction: FirSimpleFunction): Boolean + fun getSamConstructor(firRegularClass: FirRegularClass): FirSimpleFunction? } private val NULL_STUB = Any() @@ -92,13 +94,13 @@ class FirSamResolverImpl( return result } - override fun getSamConstructor(firRegularClass: FirRegularClass): FirNamedFunction? { + override fun getSamConstructor(firRegularClass: FirRegularClass): FirSimpleFunction? { return samConstructor.getOrPut(firRegularClass) { buildSamConstructor(firRegularClass) ?: return@getOrPut NULL_STUB - } as? FirNamedFunction + } as? FirSimpleFunction } - private fun buildSamConstructor(firRegularClass: FirRegularClass): FirNamedFunction? { + private fun buildSamConstructor(firRegularClass: FirRegularClass): FirSimpleFunction? { val functionType = resolveFunctionTypeIfSamInterface(firRegularClass) ?: return null val classId = firRegularClass.classId @@ -112,7 +114,11 @@ class FirSamResolverImpl( val newTypeParameters = firRegularClass.typeParameters.map { typeParameter -> FirTypeParameterImpl( - firSession, typeParameter.psi, FirTypeParameterSymbol(), typeParameter.name, Variance.INVARIANT, + typeParameter.psi, + firSession, + typeParameter.name, + FirTypeParameterSymbol(), + Variance.INVARIANT, isReified = false ).apply { annotations += typeParameter.annotations @@ -141,27 +147,38 @@ class FirSamResolverImpl( firRegularClass.symbol.toLookupTag(), newTypeParameterTypes.toTypedArray(), isNullable = false ) - return FirMemberFunctionImpl( - firSession, null, symbol, classId.shortClassName, - firRegularClass.visibility, Modality.FINAL, - isExpect = firRegularClass.isExpect, - isActual = firRegularClass.isActual, - isOverride = false, - isOperator = false, - isInfix = false, - isExternal = false, - isInline = false, - isSuspend = false, - isTailRec = false, - receiverTypeRef = null, - returnTypeRef = FirResolvedTypeRefImpl(null, substitutedReturnType) + val status = FirDeclarationStatusImpl(firRegularClass.visibility, Modality.FINAL).apply { + isExpect = firRegularClass.isExpect + isActual = firRegularClass.isActual + isOverride = false + isOperator = false + isInfix = false + isExternal = false + isInline = false + isSuspend = false + isTailRec = false + } + + return FirSimpleFunctionImpl( + null, + firSession, + FirResolvedTypeRefImpl(null, substitutedReturnType), + null, + classId.shortClassName, + status, + symbol ).apply { valueParameters += listOf( FirValueParameterImpl( - session, psi, SAM_PARAMETER_NAME, + psi, + session, FirResolvedTypeRefImpl(firRegularClass.psi, substitutedFunctionType), + SAM_PARAMETER_NAME, + FirVariableSymbol(SAM_PARAMETER_NAME), defaultValue = null, - isCrossinline = false, isNoinline = false, isVararg = false + isCrossinline = false, + isNoinline = false, + isVararg = false ) ) typeParameters += newTypeParameters @@ -178,7 +195,7 @@ class FirSamResolverImpl( } as? ConeKotlinType } - override fun shouldRunSamConversionForFunction(firNamedFunction: FirNamedFunction): Boolean { + override fun shouldRunSamConversionForFunction(firNamedFunction: FirSimpleFunction): Boolean { // TODO: properly support, see org.jetbrains.kotlin.load.java.sam.JvmSamConversionTransformer.shouldRunSamConversionForFunction return true } @@ -187,7 +204,7 @@ class FirSamResolverImpl( private fun FirRegularClass.getSingleAbstractMethodOrNull( session: FirSession, scopeSession: ScopeSession -): FirNamedFunction? { +): FirSimpleFunction? { // TODO: restrict to Java interfaces if (classKind != ClassKind.INTERFACE || hasMoreThenOneAbstractFunctionOrHasAbstractProperty()) return null @@ -218,8 +235,8 @@ private fun FirRegularClass.findSingleAbstractMethodByNames( session: FirSession, scopeSession: ScopeSession, samCandidateNames: Set -): FirNamedFunction? { - var resultMethod: FirNamedFunction? = null +): FirSimpleFunction? { + var resultMethod: FirSimpleFunction? = null var metIncorrectMember = false val classUseSiteMemberScope = session.firSymbolProvider.getClassUseSiteMemberScope(classId, session, scopeSession) @@ -241,8 +258,8 @@ private fun FirRegularClass.findSingleAbstractMethodByNames( classUseSiteMemberScope.processFunctionsByName(candidateName) { functionSymbol -> val firFunction = functionSymbol.fir - require(firFunction is FirNamedFunction) { - "${functionSymbol.callableId.callableName} is expected to be FirNamedFunction, but ${functionSymbol::class} was found" + require(firFunction is FirSimpleFunction) { + "${functionSymbol.callableId.callableName} is expected to be _root_ide_package_.org.jetbrains.kotlin.fir.declarations.FirSimpleFunction, but ${functionSymbol::class} was found" } if (firFunction.modality != Modality.ABSTRACT) return@processFunctionsByName ProcessorAction.NEXT @@ -266,7 +283,7 @@ private fun FirRegularClass.hasMoreThenOneAbstractFunctionOrHasAbstractProperty( var wasAbstractFunction = false for (declaration in declarations) { if (declaration is FirProperty && declaration.modality == Modality.ABSTRACT) return true - if (declaration is FirNamedFunction && declaration.modality == Modality.ABSTRACT) { + if (declaration is FirSimpleFunction && declaration.modality == Modality.ABSTRACT) { if (wasAbstractFunction) return true wasAbstractFunction = true } @@ -275,7 +292,7 @@ private fun FirRegularClass.hasMoreThenOneAbstractFunctionOrHasAbstractProperty( return false } -private fun FirNamedFunction.getFunctionTypeForAbstractMethod(session: FirSession): ConeLookupTagBasedType { +private fun FirSimpleFunction.getFunctionTypeForAbstractMethod(session: FirSession): ConeLookupTagBasedType { val parameterTypes = valueParameters.map { it.returnTypeRef.coneTypeSafe() ?: ConeKotlinErrorType("No type for parameter $it") } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ScopeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ScopeUtils.kt index 644716ba350..b5c89c618e1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ScopeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ScopeUtils.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl fun ConeKotlinType.scope(useSiteSession: FirSession, scopeSession: ScopeSession): FirScope? { return when (this) { is ConeKotlinErrorType -> null - is ConeClassErrorType -> null is ConeAbbreviatedType -> directExpansionType(useSiteSession)?.scope(useSiteSession, scopeSession) is ConeClassLikeType -> { // TODO: for ConeClassLikeType they might be a type alias instead of a regular class diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt index b448e7ea4b1..ef4e078a3a9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SessionHolder.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve 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.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase @@ -14,7 +15,6 @@ import org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator import org.jetbrains.kotlin.fir.resolve.transformers.phasedFir import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.types.FirTypeRef interface SessionHolder { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt index 6c3de7c035c..ec5d2820857 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Arguments.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe @@ -39,7 +39,7 @@ fun resolveArgumentExpression( typeProvider: (FirExpression) -> FirTypeRef? ) { return when (argument) { - is FirFunctionCall, is FirCallLikeControlFlowExpression -> resolveSubCallArgument( + is FirFunctionCall, is FirWhenExpression, is FirTryExpression -> resolveSubCallArgument( csBuilder, argument as FirResolvable, expectedType, @@ -248,7 +248,7 @@ private fun Candidate.getExpectedTypeWithSAMConversion( ): ConeKotlinType? { if (candidateExpectedType.isBuiltinFunctionalType) return null // TODO: if (!callComponents.languageVersionSettings.supportsFeature(LanguageFeature.SamConversionPerArgument)) return null - val firNamedFunction = symbol.fir as? FirNamedFunction ?: return null + val firNamedFunction = symbol.fir as? FirSimpleFunction ?: return null if (!samResolver.shouldRunSamConversionForFunction(firNamedFunction)) return null val argumentIsFunctional = when ((argument as? FirWrappedArgumentExpression)?.expression ?: argument) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt index 43a61d77286..de17d0ecb86 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateCollector.kt @@ -83,7 +83,7 @@ class InvokeReceiverCandidateCollector( val session = components.session val boundInvokeCallInfo = CallInfo( invokeCallInfo.callKind, - FirQualifiedAccessExpressionImpl(null, false).apply { + FirQualifiedAccessExpressionImpl(null).apply { calleeReference = FirNamedReferenceWithCandidate( null, (candidate.symbol as FirCallableSymbol<*>).callableId.callableName, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt index 0e3980ce3b1..fc8ddc9bd3f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt @@ -44,7 +44,7 @@ class CandidateFactory( fun PostponedArgumentsAnalyzer.Context.addSubsystemFromExpression(expression: FirExpression) { when (expression) { - is FirFunctionCall, is FirCallLikeControlFlowExpression -> (expression as FirResolvable).candidate()?.let { addOtherSystem(it.system.asReadOnlyStorage()) } + is FirFunctionCall, is FirWhenExpression, is FirTryExpression -> (expression as FirResolvable).candidate()?.let { addOtherSystem(it.system.asReadOnlyStorage()) } is FirWrappedArgumentExpression -> addSubsystemFromExpression(expression.expression) is FirBlock -> expression.returnExpressions().forEach { addSubsystemFromExpression(it) } } 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 75ec5007223..e064f444035 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 @@ -5,11 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.calls -import org.jetbrains.kotlin.fir.declarations.FirConstructor -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction -import org.jetbrains.kotlin.fir.declarations.FirProperty -import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.expressions.FirVariable +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -54,7 +50,7 @@ class ConeOverloadConflictResolver( private fun createFlatSignature(call: Candidate): FlatSignature { return when (val declaration = call.symbol.fir) { - is FirNamedFunction -> createFlatSignature(call, declaration) + is FirSimpleFunction -> createFlatSignature(call, declaration) is FirConstructor -> createFlatSignature(call, declaration) is FirVariable<*> -> createFlatSignature(call, declaration) else -> error("Not supported: $declaration") @@ -81,7 +77,7 @@ class ConeOverloadConflictResolver( return type } - private fun createFlatSignature(call: Candidate, function: FirNamedFunction): FlatSignature { + private fun createFlatSignature(call: Candidate, function: FirSimpleFunction): FlatSignature { return FlatSignature( call, function.typeParameters.map { it.symbol }, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CreateFreshTypeVariableSubstitutorStage.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CreateFreshTypeVariableSubstitutorStage.kt index 34bfe15ecfc..5bcc4f965e7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CreateFreshTypeVariableSubstitutorStage.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CreateFreshTypeVariableSubstitutorStage.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.fir.resolve.calls -import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.resolve.firSymbolProvider @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystem internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() { override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) { val declaration = candidate.symbol.fir - if (declaration !is FirCallableMemberDeclaration<*> || declaration.typeParameters.isEmpty()) { + if (declaration !is FirTypeParametersOwner || declaration.typeParameters.isEmpty()) { candidate.substitutor = ConeSubstitutor.Empty return } @@ -84,7 +84,7 @@ internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() { } fun createToFreshVariableSubstitutorAndAddInitialConstraints( - declaration: FirCallableMemberDeclaration<*>, + declaration: FirTypeParametersOwner, candidate: Candidate, csBuilder: ConstraintSystemOperation ): Pair> { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirNamedReferenceWithCandidate.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirNamedReferenceWithCandidate.kt index 4b1b4b23dfa..b138a16bc42 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirNamedReferenceWithCandidate.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirNamedReferenceWithCandidate.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.name.Name @@ -14,7 +14,7 @@ class FirNamedReferenceWithCandidate( psi: PsiElement?, name: Name, val candidate: Candidate -) : FirSimpleNamedReference(psi, name) { +) : FirSimpleNamedReference(psi, name, candidate.symbol) { override val candidateSymbol: AbstractFirBasedSymbol<*> get() = candidate.symbol } \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt index 82a07ff8201..023e67d3591 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirReceivers.kt @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.classId import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.impl.FirThisReceiverExpressionImpl -import org.jetbrains.kotlin.fir.references.FirImplicitThisReference +import org.jetbrains.kotlin.fir.references.impl.FirImplicitThisReference import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.ScopeSession diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt index 53a5649e5e0..45456dc163f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.isInner import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.calls.TowerDataKind.EMPTY import org.jetbrains.kotlin.fir.resolve.calls.TowerDataKind.TOWER_LEVEL diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt index 315273b877e..cacff45f4dc 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.visibility import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt index a767bde7315..0d853ea58be 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt @@ -6,10 +6,13 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberPropertyImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl +import org.jetbrains.kotlin.fir.declarations.modality +import org.jetbrains.kotlin.fir.declarations.visibility import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction @@ -39,7 +42,7 @@ class FirSyntheticPropertiesScope( symbol: FirFunctionSymbol<*>, processor: (FirCallableSymbol<*>) -> ProcessorAction ): ProcessorAction { - val fir = symbol.fir as? FirNamedFunction ?: return ProcessorAction.NEXT + val fir = symbol.fir as? FirSimpleFunction ?: return ProcessorAction.NEXT if (fir.typeParameters.isNotEmpty()) return ProcessorAction.NEXT if (fir.valueParameters.isNotEmpty()) return ProcessorAction.NEXT @@ -47,27 +50,29 @@ class FirSyntheticPropertiesScope( val synthetic = SyntheticPropertySymbol(CallableId(symbol.callableId.packageName, symbol.callableId.className, name)) val returnTypeRef = typeCalculator.tryCalculateReturnType(fir) - FirMemberPropertyImpl( - session, + val status = FirDeclarationStatusImpl(fir.visibility, fir.modality).apply { + isExpect = false + isActual = false + isOverride = false + isConst = false + isLateInit = false + } + FirPropertyImpl( + null, + session, + returnTypeRef, null, - synthetic, name, - fir.visibility, - fir.modality, - isExpect = false, - isActual = false, - isOverride = false, - isConst = false, - isLateInit = false, - receiverTypeRef = null, - returnTypeRef = returnTypeRef, - isVar = true, - initializer = null, - delegate = null + null, + null, + true, + synthetic, + false, + status ).apply { resolvePhase = fir.resolvePhase - getter = FirDefaultPropertyGetter(this@FirSyntheticPropertiesScope.session, null, returnTypeRef, fir.visibility) - setter = FirDefaultPropertySetter(this@FirSyntheticPropertiesScope.session, null, returnTypeRef, fir.visibility) + getter = FirDefaultPropertyGetter(null, this@FirSyntheticPropertiesScope.session, returnTypeRef, fir.visibility) + setter = FirDefaultPropertySetter(null, this@FirSyntheticPropertiesScope.session, returnTypeRef, fir.visibility) } return processor(synthetic) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt index 254aab5a355..ffa9bb2b3d8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt @@ -7,9 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration -import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration -import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirControlFlowGraphReferenceImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirControlFlowGraphReferenceImpl.kt index 4119978eb53..d68a6cb2c60 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirControlFlowGraphReferenceImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirControlFlowGraphReferenceImpl.kt @@ -5,7 +5,19 @@ package org.jetbrains.kotlin.fir.resolve.dfa +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor -class FirControlFlowGraphReferenceImpl(val controlFlowGraph: ControlFlowGraph) : FirControlFlowGraphReference() \ No newline at end of file +class FirControlFlowGraphReferenceImpl(val controlFlowGraph: ControlFlowGraph) : FirControlFlowGraphReference { + override val psi: PsiElement? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirControlFlowGraphReference { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index bf609a85e25..b76990a84f2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -6,12 +6,13 @@ package org.jetbrains.kotlin.fir.resolve.dfa import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirThisReceiverExpressionImpl +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStackImpl import org.jetbrains.kotlin.fir.resolve.dfa.Condition.* @@ -19,7 +20,6 @@ import org.jetbrains.kotlin.fir.resolve.dfa.cfg.* import org.jetbrains.kotlin.fir.resolve.transformers.FirBodyResolveTransformer import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.CallableId -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol @@ -477,7 +477,7 @@ class FirDataFlowAnalyzer(transformer: FirBodyResolveTransformer) : BodyResolveC graphBuilder.exitConstExpresion(constExpression).mergeIncomingFlow() } - fun exitVariableDeclaration(variable: FirVariable<*>) { + fun exitVariableDeclaration(variable: FirProperty) { val node = graphBuilder.exitVariableDeclaration(variable).mergeIncomingFlow() val initializer = variable.initializer ?: return 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 627a34ca8d2..f15a01d4677 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,9 +6,9 @@ package org.jetbrains.kotlin.fir.resolve.dfa import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.resolve.dfa.cfg.CFGNode import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner interface Stack { val size: Int 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 514e9ab809c..4b8eebc612a 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 @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor class ControlFlowGraph(val name: String, val kind: Kind) { val nodes = mutableListOf>() @@ -146,7 +148,7 @@ class StubNode(owner: ControlFlowGraph, level: Int) : CFGNode(owner, le override val fir: FirStub get() = FirStub } -class VariableDeclarationNode(owner: ControlFlowGraph, override val fir: FirVariable<*>, level: Int) : CFGNode>(owner, level) +class VariableDeclarationNode(owner: ControlFlowGraph, override val fir: FirProperty, level: Int) : CFGNode(owner, level) class VariableAssignmentNode(owner: ControlFlowGraph, override val fir: FirVariableAssignment, level: Int) : CFGNode(owner, level) // ----------------------------------- Other ----------------------------------- @@ -158,4 +160,10 @@ class AnnotationExitNode(owner: ControlFlowGraph, override val fir: FirAnnotatio object FirStub : FirElement { override val psi: PsiElement? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + return this + } } 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 2930c211385..1d59c5d44ab 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 @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.dfa.cfg import org.jetbrains.kotlin.contracts.description.InvocationKind import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractPropertyAccessor import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.dfa.* @@ -56,8 +55,8 @@ class ControlFlowGraphBuilder { */ fun enterFunction(function: FirFunction<*>): Pair?> { val name = when (function) { - is FirNamedFunction -> function.name.asString() - is FirAbstractPropertyAccessor -> if (function.isGetter) "" else "" + is FirSimpleFunction -> function.name.asString() + is FirPropertyAccessor -> if (function.isGetter) "" else "" is FirAnonymousFunction -> "" // TODO: add check to lambda or fun is FirConstructor -> function.name.asString() else -> throw IllegalArgumentException("Unknown function: ${function.render()}") @@ -323,13 +322,13 @@ class ControlFlowGraphBuilder { // ----------------------------------- Boolean operators ----------------------------------- fun enterBinaryAnd(binaryLogicExpression: FirBinaryLogicExpression): BinaryAndEnterNode { - assert(binaryLogicExpression.kind == FirBinaryLogicExpression.OperationKind.AND) + assert(binaryLogicExpression.kind == LogicOperationKind.AND) binaryAndExitNodes.push(createBinaryAndExitNode(binaryLogicExpression)) return createBinaryAndEnterNode(binaryLogicExpression).also { addNewSimpleNode(it) }.also { levelCounter++ } } fun exitLeftBinaryAndArgument(binaryLogicExpression: FirBinaryLogicExpression): Pair { - assert(binaryLogicExpression.kind == FirBinaryLogicExpression.OperationKind.AND) + assert(binaryLogicExpression.kind == LogicOperationKind.AND) val lastNode = lastNodes.pop() val leftBooleanConstValue = lastNode.booleanConstValue @@ -347,7 +346,7 @@ class ControlFlowGraphBuilder { fun exitBinaryAnd(binaryLogicExpression: FirBinaryLogicExpression): BinaryAndExitNode { levelCounter-- - assert(binaryLogicExpression.kind == FirBinaryLogicExpression.OperationKind.AND) + assert(binaryLogicExpression.kind == LogicOperationKind.AND) return binaryAndExitNodes.pop().also { val rightNode = lastNodes.pop() addEdge(rightNode, it, propagateDeadness = false, isDead = it.leftOperandNode.booleanConstValue == false) @@ -357,7 +356,7 @@ class ControlFlowGraphBuilder { } fun enterBinaryOr(binaryLogicExpression: FirBinaryLogicExpression): BinaryOrEnterNode { - assert(binaryLogicExpression.kind == FirBinaryLogicExpression.OperationKind.OR) + assert(binaryLogicExpression.kind == LogicOperationKind.OR) binaryOrExitNodes.push(createBinaryOrExitNode(binaryLogicExpression)) return createBinaryOrEnterNode(binaryLogicExpression).also { addNewSimpleNode(it) @@ -366,7 +365,7 @@ class ControlFlowGraphBuilder { fun exitLeftBinaryOrArgument(binaryLogicExpression: FirBinaryLogicExpression): Pair { levelCounter-- - assert(binaryLogicExpression.kind == FirBinaryLogicExpression.OperationKind.OR) + assert(binaryLogicExpression.kind == LogicOperationKind.OR) val previousNode = lastNodes.pop() val leftBooleanValue = previousNode.booleanConstValue @@ -384,7 +383,7 @@ class ControlFlowGraphBuilder { } fun exitBinaryOr(binaryLogicExpression: FirBinaryLogicExpression): BinaryOrExitNode { - assert(binaryLogicExpression.kind == FirBinaryLogicExpression.OperationKind.OR) + assert(binaryLogicExpression.kind == LogicOperationKind.OR) levelCounter-- return binaryOrExitNodes.pop().also { val rightNode = lastNodes.pop() @@ -497,7 +496,7 @@ class ControlFlowGraphBuilder { return createConstExpressionNode(constExpression).also { addNewSimpleNode(it) } } - fun exitVariableDeclaration(variable: FirVariable<*>): VariableDeclarationNode { + fun exitVariableDeclaration(variable: FirProperty): VariableDeclarationNode { return createVariableDeclarationNode(variable).also { addNewSimpleNode(it) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt index 8ae984c619b..46197236e26 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphNodeBuilder.kt @@ -115,7 +115,7 @@ fun ControlFlowGraphBuilder.createAnnotationExitNode(fir: FirAnnotationCall): An fun ControlFlowGraphBuilder.createAnnotationEnterNode(fir: FirAnnotationCall): AnnotationEnterNode = AnnotationEnterNode(graph, fir, levelCounter) -fun ControlFlowGraphBuilder.createVariableDeclarationNode(fir: FirVariable<*>): VariableDeclarationNode = +fun ControlFlowGraphBuilder.createVariableDeclarationNode(fir: FirProperty): VariableDeclarationNode = VariableDeclarationNode(graph, fir, levelCounter) fun ControlFlowGraphBuilder.createConstExpressionNode(fir: FirConstExpression<*>): ConstExpressionNode = diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphRenderer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphRenderer.kt index db60ecbb703..b974186cca5 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphRenderer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphRenderer.kt @@ -6,12 +6,7 @@ package org.jetbrains.kotlin.fir.resolve.dfa.cfg import org.jetbrains.kotlin.fir.FirRenderer -import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction -import org.jetbrains.kotlin.fir.declarations.FirConstructor -import org.jetbrains.kotlin.fir.declarations.FirFunction -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction -import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractPropertyAccessor -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunction +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop import org.jetbrains.kotlin.fir.expressions.FirLoop import org.jetbrains.kotlin.fir.expressions.FirWhileLoop @@ -155,10 +150,10 @@ fun CFGNode<*>.render(): String = } private fun FirFunction<*>.name(): String = when (this) { - is FirNamedFunction -> name.asString() + is FirSimpleFunction -> name.asString() is FirAnonymousFunction -> "anonymousFunction" is FirConstructor -> name.asString() - is FirAbstractPropertyAccessor -> if (isGetter) "getter" else "setter" + is FirPropertyAccessor -> if (isGetter) "getter" else "setter" is FirErrorFunction -> "errorFunction" else -> TODO(toString()) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt index 351d1e6fb47..279a3658cd2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt @@ -12,10 +12,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration -import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.deserialization.FirBuiltinAnnotationDeserializer import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext @@ -27,10 +24,7 @@ import org.jetbrains.kotlin.fir.resolve.getOrPut import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScope import org.jetbrains.kotlin.fir.symbols.CallableId -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol +import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.metadata.ProtoBuf @@ -99,7 +93,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider( } return lookup.getOrPut(classId, { FirClassSymbol(classId) }) { symbol -> if (shouldBeEnumEntry) { - FirEnumEntryImpl(session, null, symbol, classId.shortClassName).apply { + FirEnumEntryImpl(null, session, classId.shortClassName, symbol).apply { resolvePhase = FirResolvePhase.DECLARATIONS } } else { @@ -169,80 +163,84 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider( val prefix = kind.classNamePrefix val arity = className.substring(prefix.length).toIntOrNull() ?: return null fictitiousFunctionSymbols.getOrPut(arity) { + val status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.ABSTRACT).apply { + isExpect = false + isActual = false + isInner = false + isCompanion = false + isData = false + isInline = false + } FirClassSymbol(this).apply { FirClassImpl( - session, null, - this, + session, relativeClassName.shortName(), - Visibilities.PUBLIC, - Modality.ABSTRACT, - isExpect = false, - isActual = false, - classKind = ClassKind.INTERFACE, - isInner = false, - isCompanion = false, - isData = false, - isInline = false + status, + ClassKind.INTERFACE, + this ).apply klass@{ resolvePhase = FirResolvePhase.DECLARATIONS typeParameters.addAll((1..arity).map { FirTypeParameterImpl( - this@FirLibrarySymbolProviderImpl.session, null, - FirTypeParameterSymbol(), + this@FirLibrarySymbolProviderImpl.session, Name.identifier("P$it"), + FirTypeParameterSymbol(), Variance.IN_VARIANCE, false ) }) typeParameters.add( FirTypeParameterImpl( - this@FirLibrarySymbolProviderImpl.session, null, - FirTypeParameterSymbol(), + this@FirLibrarySymbolProviderImpl.session, Name.identifier("R"), + FirTypeParameterSymbol(), Variance.OUT_VARIANCE, false ) ) val name = OperatorNameConventions.INVOKE + val status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.ABSTRACT).apply { + isExpect = false + isActual = false + isOverride = false + isOperator = true + isInfix = false + isInline = false + isTailRec = false + isExternal = false + isSuspend = false + } addDeclaration( - FirMemberFunctionImpl( - this@FirLibrarySymbolProviderImpl.session, + FirSimpleFunctionImpl( null, - FirNamedFunctionSymbol(CallableId(packageFqName, relativeClassName, name)), - name, - Visibilities.PUBLIC, - Modality.ABSTRACT, - isExpect = false, - isActual = false, - isOverride = false, - isOperator = true, - isInfix = false, - isInline = false, - isTailRec = false, - isExternal = false, - isSuspend = false, - receiverTypeRef = null, - returnTypeRef = FirResolvedTypeRefImpl( + this@FirLibrarySymbolProviderImpl.session, + FirResolvedTypeRefImpl( null, ConeTypeParameterTypeImpl( typeParameters.last().symbol.toLookupTag(), false ) - ) + ), + null, + name, + status, + FirNamedFunctionSymbol(CallableId(packageFqName, relativeClassName, name)) ).apply { resolvePhase = FirResolvePhase.DECLARATIONS valueParameters += this@klass.typeParameters.dropLast(1).map { typeParameter -> + val name = Name.identifier(typeParameter.name.asString().toLowerCase()) FirValueParameterImpl( - this@FirLibrarySymbolProviderImpl.session, null, - Name.identifier(typeParameter.name.asString().toLowerCase()), + this@FirLibrarySymbolProviderImpl.session, FirResolvedTypeRefImpl( null, ConeTypeParameterTypeImpl(typeParameter.symbol.toLookupTag(), false) ), + name, + FirVariableSymbol(name), defaultValue = null, isCrossinline = false, isNoinline = false, @@ -251,7 +249,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider( } } ) - replaceSupertypes(listOf(session.builtinTypes.anyType)) + replaceSuperTypeRefs(listOf(session.builtinTypes.anyType)) } } } @@ -280,7 +278,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider( } override fun getAllCallableNamesInClass(classId: ClassId): Set { - return getClassDeclarations(classId).filterIsInstance>().mapTo(mutableSetOf()) { it.name } + return getClassDeclarations(classId).filterIsInstance().mapTo(mutableSetOf()) { it.name } } private fun getClassDeclarations(classId: ClassId): List { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt index f4d7157c6d5..b122e89d1b8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirProviderImpl.kt @@ -85,25 +85,23 @@ class FirProviderImpl(val session: FirSession) : FirProvider() { state.classifierContainerFileMap[classId] = file } - override fun > visitCallableMemberDeclaration( - callableMemberDeclaration: FirCallableMemberDeclaration - ) { - val symbol = callableMemberDeclaration.symbol + override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) { + val symbol = callableDeclaration.symbol val callableId = symbol.callableId state.callableMap.merge(callableId, listOf(symbol)) { a, b -> a + b } state.callableContainerMap[symbol] = file } override fun visitConstructor(constructor: FirConstructor) { - visitCallableMemberDeclaration(constructor) + visitCallableDeclaration(constructor) } - override fun visitNamedFunction(namedFunction: FirNamedFunction) { - visitCallableMemberDeclaration(namedFunction) + override fun visitSimpleFunction(simpleFunction: FirSimpleFunction) { + visitCallableDeclaration(simpleFunction) } override fun visitProperty(property: FirProperty) { - visitCallableMemberDeclaration(property) + visitCallableDeclaration(property) } }) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt index f3aa861ef0d..42e61241e28 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirResolvable +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor @@ -18,12 +19,13 @@ import org.jetbrains.kotlin.fir.resolve.transformers.MapArguments import org.jetbrains.kotlin.fir.resolve.typeFromCallee import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype import org.jetbrains.kotlin.fir.returnExpressions -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.components.InferenceSession import org.jetbrains.kotlin.resolve.calls.inference.buildAbstractResultingSubstitutor @@ -38,7 +40,8 @@ class FirCallCompleter( ) : BodyResolveComponents by transformer { private val completer = ConstraintSystemCompleter(inferenceComponents) - fun completeCall(call: T, expectedTypeRef: FirTypeRef?): T { + fun completeCall(call: T, expectedTypeRef: FirTypeRef?): T + where T : FirResolvable, T : FirStatement { val typeRef = typeFromCallee(call) if (typeRef.type is ConeKotlinErrorType) { if (call is FirExpression) { @@ -95,17 +98,20 @@ class FirCallCompleter( ): Pair, InferenceSession> { val itParam = when { - lambdaArgument.valueParameters.isEmpty() && parameters.size == 1 -> + lambdaArgument.valueParameters.isEmpty() && parameters.size == 1 -> { + val name = Name.identifier("it") FirValueParameterImpl( - session, null, - Name.identifier("it"), - FirResolvedTypeRefImpl(null, parameters.single(), emptyList()), + session, + FirResolvedTypeRefImpl(null, parameters.single()), + name, + FirVariableSymbol(name), defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false ) + } else -> null } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ControlFlowGraphReferenceTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ControlFlowGraphReferenceTransformer.kt index 43dfdd8ad35..4aaaad3b4a3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ControlFlowGraphReferenceTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ControlFlowGraphReferenceTransformer.kt @@ -8,8 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.resolve.dfa.FirControlFlowGraphReferenceImpl import org.jetbrains.kotlin.fir.resolve.dfa.cfg.ControlFlowGraph import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -24,7 +25,7 @@ object ControlFlowGraphReferenceTransformer : FirTransformer() override fun > transformFunction( function: FirFunction, data: ControlFlowGraph - ): CompositeTransformResult { + ): CompositeTransformResult { return (function.transformChildren(this, data) as FirFunction<*>).compose() } 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 86a86aab158..953b2731cc9 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 @@ -6,11 +6,11 @@ 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.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer @@ -33,7 +33,7 @@ abstract class FirAbstractPhaseTransformer( } override fun transformDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult { - declaration.resolvePhase = transformerPhase + declaration.replaceResolvePhase(transformerPhase) return super.transformDeclaration(declaration, data) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index a711af3d13a..6081adeb1c9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -14,8 +14,9 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionWithSmartcastImpl -import org.jetbrains.kotlin.fir.references.FirExplicitThisReference -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference +import org.jetbrains.kotlin.fir.references.* +import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.dfa.DataFlowInferenceContext @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.fir.scopes.addImportingScopes import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType import org.jetbrains.kotlin.fir.symbols.* +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -100,7 +102,7 @@ open class FirBodyResolveTransformer( this.file = file return withScopeCleanup(topLevelScopes) { topLevelScopes.addImportingScopes(file, session, scopeSession) - super.transformFile(file, data) + super.transformFile(file, data) as CompositeTransformResult } } @@ -111,7 +113,7 @@ open class FirBodyResolveTransformer( override fun transformConstructor(constructor: FirConstructor, data: Any?): CompositeTransformResult { if (implicitTypeOnly) return constructor.compose() - return transformFunction(constructor, data) + return transformFunction(constructor, data) as CompositeTransformResult } override fun transformAnonymousInitializer( @@ -128,6 +130,10 @@ open class FirBodyResolveTransformer( } } + override fun transformTypeRef(typeRef: FirTypeRef, data: Any?): CompositeTransformResult { + return typeRef.compose() + } + override fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Any?): CompositeTransformResult { if (data == null) return implicitTypeRef.compose() @@ -135,16 +141,16 @@ open class FirBodyResolveTransformer( return data.compose() } - override fun transformValueParameter(valueParameter: FirValueParameter, data: Any?): CompositeTransformResult { + override fun transformValueParameter(valueParameter: FirValueParameter, data: Any?): CompositeTransformResult { localScopes.lastOrNull()?.storeDeclaration(valueParameter) if (valueParameter.returnTypeRef is FirImplicitTypeRef) { - valueParameter.resolvePhase = transformerPhase + valueParameter.replaceResolvePhase(transformerPhase) return valueParameter.compose() // TODO } - return transformDeclaration(valueParameter, valueParameter.returnTypeRef) + return (transformDeclaration(valueParameter, valueParameter.returnTypeRef).single as FirStatement).compose() } - override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): CompositeTransformResult { + override fun transformRegularClass(regularClass: FirRegularClass, data: Any?): CompositeTransformResult { val oldConstructorScope = primaryConstructorParametersScope primaryConstructorParametersScope = null val type = regularClass.defaultType() @@ -158,18 +164,7 @@ open class FirBodyResolveTransformer( transformDeclaration(regularClass, data) } primaryConstructorParametersScope = oldConstructorScope - return result - } - - override fun transformUncheckedNotNullCast( - uncheckedNotNullCast: FirUncheckedNotNullCast, - data: Any? - ): CompositeTransformResult { - val notNullCast = transformExpression(uncheckedNotNullCast, data).single as FirUncheckedNotNullCast - val resultType = notNullCast.expression.resultType - notNullCast.resultType = - resultType.withReplacedConeType(resultType.coneTypeUnsafe().withNullability(ConeNullability.NOT_NULL)) - return notNullCast.compose() + return result as CompositeTransformResult } override fun transformTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: Any?): CompositeTransformResult { @@ -179,8 +174,7 @@ open class FirBodyResolveTransformer( FirOperation.IS, FirOperation.NOT_IS -> { resolved.resultType = FirResolvedTypeRefImpl( null, - StandardClassIds.Boolean(symbolProvider).constructType(emptyArray(), isNullable = false), - emptyList() + StandardClassIds.Boolean(symbolProvider).constructType(emptyArray(), isNullable = false) ) } FirOperation.AS -> { @@ -207,10 +201,11 @@ open class FirBodyResolveTransformer( is FirExplicitThisReference -> { val labelName = callee.labelName val implicitReceiver = implicitReceiverStack[labelName] - callee.boundSymbol = implicitReceiver?.boundSymbol + implicitReceiver?.boundSymbol?.let { + callee.replaceBoundSymbol(it) + } qualifiedAccessExpression.resultType = FirResolvedTypeRefImpl( - null, implicitReceiver?.type ?: ConeKotlinErrorType("Unresolved this@$labelName"), - emptyList() + null, implicitReceiver?.type ?: ConeKotlinErrorType("Unresolved this@$labelName") ) qualifiedAccessExpression } @@ -255,6 +250,13 @@ open class FirBodyResolveTransformer( return result.compose() } + override fun transformThisReceiverExpression( + thisReceiverExpression: FirThisReceiverExpression, + data: Any? + ): CompositeTransformResult { + return transformQualifiedAccessExpression(thisReceiverExpression, data) + } + private fun transformQualifiedAccessUsingSmartcastInfo(qualifiedAccessExpression: FirQualifiedAccessExpression): FirQualifiedAccessExpression { val typesFromSmartCast = dataFlowAnalyzer.getTypeUsingSmartcastInfo(qualifiedAccessExpression) ?: return qualifiedAccessExpression val allTypes = typesFromSmartCast.toMutableList().also { @@ -262,9 +264,10 @@ open class FirBodyResolveTransformer( } val intersectedType = ConeTypeIntersector.intersectTypes(inferenceComponents.ctx as ConeInferenceContext, allTypes) // TODO: add check that intersectedType is not equal to original type - return FirExpressionWithSmartcastImpl(qualifiedAccessExpression, typesFromSmartCast).also { - it.resultType = FirResolvedTypeRefImpl(qualifiedAccessExpression.resultType.psi, intersectedType, qualifiedAccessExpression.resultType.annotations) + val intersectedTypeRef = FirResolvedTypeRefImpl(qualifiedAccessExpression.resultType.psi, intersectedType).apply { + annotations += qualifiedAccessExpression.resultType.annotations } + return FirExpressionWithSmartcastImpl(qualifiedAccessExpression, intersectedTypeRef, typesFromSmartCast) } override fun transformVariableAssignment( @@ -286,7 +289,7 @@ open class FirBodyResolveTransformer( return result.compose() } - override fun transformAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Any?): CompositeTransformResult { + override fun transformAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Any?): CompositeTransformResult { return when (data) { null -> { anonymousFunction.compose() @@ -306,17 +309,20 @@ open class FirBodyResolveTransformer( else { val singleParameterType = resolvedLambdaAtom.parameters.singleOrNull() val itParam = when { - af.valueParameters.isEmpty() && singleParameterType != null -> + af.valueParameters.isEmpty() && singleParameterType != null -> { + val name = Name.identifier("it") FirValueParameterImpl( - session, null, - Name.identifier("it"), - FirResolvedTypeRefImpl(null, singleParameterType, emptyList()), + session, + FirResolvedTypeRefImpl(null, singleParameterType), + name, + FirVariableSymbol(name), defaultValue = null, isCrossinline = false, isNoinline = false, isVararg = false ) + } else -> null } if (itParam != null) { @@ -347,7 +353,7 @@ open class FirBodyResolveTransformer( ?: returnTypeRefFromResolvedAtom ?: af.returnTypeRef ) - af = af.transformValueParameters(ImplicitToErrorTypeTransformer, null) as FirAnonymousFunction + af = af.transformValueParameters(ImplicitToErrorTypeTransformer, null) val bodyExpectedType = returnTypeRefFromResolvedAtom ?: data af = transformFunction(af, bodyExpectedType).single as FirAnonymousFunction af = af.copy( @@ -357,7 +363,7 @@ open class FirBodyResolveTransformer( af.compose() } else -> { - transformFunction(anonymousFunction, data) + transformFunction(anonymousFunction, data).single.compose() } } } @@ -367,7 +373,7 @@ open class FirBodyResolveTransformer( return element.compose() } - override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { + override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { if (valueParameter.returnTypeRef is FirImplicitTypeRef) { valueParameter.transformReturnTypeRef( StoreType, @@ -593,7 +599,7 @@ open class FirBodyResolveTransformer( val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = kind == IrConstKind.Null) - constExpression.resultType = FirResolvedTypeRefImpl(null, type, emptyList()) + constExpression.resultType = FirResolvedTypeRefImpl(null, type) } else { constExpression.resultType = if (kind != IrConstKind.Null) { expectedType.resolvedTypeFromPrototype( @@ -623,7 +629,7 @@ open class FirBodyResolveTransformer( }.compose() } - override fun > transformFunction(function: FirFunction, data: Any?): CompositeTransformResult { + override fun > transformFunction(function: FirFunction, data: Any?): CompositeTransformResult { return withScopeCleanup(localScopes) { localScopes += FirLocalScope() dataFlowAnalyzer.enterFunction(function) @@ -632,7 +638,7 @@ open class FirBodyResolveTransformer( dataFlowAnalyzer.exitFunction(result)?.let { controlFlowGraph -> result.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) } - } + } as CompositeTransformResult } } @@ -641,7 +647,7 @@ open class FirBodyResolveTransformer( returnTypeRef: FirTypeRef, receiverTypeRef: FirTypeRef? = null ): CompositeTransformResult { - if (function is FirNamedFunction) { + if (function is FirSimpleFunction) { localScopes.lastOrNull()?.storeDeclaration(function) } val result = transformFunction(function, returnTypeRef).single as FirFunction<*> @@ -654,23 +660,23 @@ open class FirBodyResolveTransformer( }.compose() } - override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Any?): CompositeTransformResult { - val returnTypeRef = namedFunction.returnTypeRef + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): CompositeTransformResult { + val returnTypeRef = simpleFunction.returnTypeRef if ((returnTypeRef !is FirImplicitTypeRef) && implicitTypeOnly) { - return namedFunction.compose() + return simpleFunction.compose() } return withFullBodyResolve { if (returnTypeRef is FirImplicitTypeRef) { - namedFunction.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef) + simpleFunction.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef) } - val receiverTypeRef = namedFunction.receiverTypeRef + val receiverTypeRef = simpleFunction.receiverTypeRef if (receiverTypeRef != null) { - withLabelAndReceiverType(namedFunction.name, namedFunction, receiverTypeRef.coneTypeUnsafe()) { - transformFunctionWithGivenSignature(namedFunction, returnTypeRef, receiverTypeRef) + withLabelAndReceiverType(simpleFunction.name, simpleFunction, receiverTypeRef.coneTypeUnsafe()) { + transformFunctionWithGivenSignature(simpleFunction, returnTypeRef, receiverTypeRef) } } else { - transformFunctionWithGivenSignature(namedFunction, returnTypeRef) + transformFunctionWithGivenSignature(simpleFunction, returnTypeRef) } } } @@ -699,7 +705,7 @@ open class FirBodyResolveTransformer( } } else { transformFunctionWithGivenSignature(accessor, expectedReturnTypeRef) - } + } as CompositeTransformResult } private fun storeVariableReturnType(variable: FirVariable<*>) { @@ -742,6 +748,11 @@ open class FirBodyResolveTransformer( } } + private fun FirProperty.transformChildrenWithoutAccessors(returnTypeRef: FirTypeRef): FirProperty { + return transformReturnTypeRef(this@FirBodyResolveTransformer, returnTypeRef). + transformOtherChildren(this@FirBodyResolveTransformer, returnTypeRef) + } + private fun > FirVariable.transformAccessors() { var enhancedTypeRef = returnTypeRef getter?.let { @@ -771,21 +782,21 @@ open class FirBodyResolveTransformer( } } - override fun > transformVariable(variable: FirVariable, data: Any?): CompositeTransformResult { - variable.transformChildrenWithoutAccessors(this, variable.returnTypeRef) + private fun transformLocalVariable(variable: FirProperty, data: Any?): CompositeTransformResult { + assert(variable.isLocal) + variable.transformOtherChildren(this, variable.returnTypeRef) if (variable.initializer != null) { storeVariableReturnType(variable) } variable.transformAccessors() - if (variable !is FirProperty) { - localScopes.lastOrNull()?.storeDeclaration(variable) - } - variable.resolvePhase = transformerPhase + localScopes.lastOrNull()?.storeDeclaration(variable) + variable.replaceResolvePhase(transformerPhase) dataFlowAnalyzer.exitVariableDeclaration(variable) return variable.compose() } override fun transformProperty(property: FirProperty, data: Any?): CompositeTransformResult { + if (property.isLocal) return transformLocalVariable(property, data) val returnTypeRef = property.returnTypeRef if (returnTypeRef !is FirImplicitTypeRef && implicitTypeOnly) return property.compose() if (property.resolvePhase == transformerPhase) return property.compose() @@ -797,7 +808,7 @@ open class FirBodyResolveTransformer( withScopeCleanup(localScopes) { localScopes.addIfNotNull(primaryConstructorParametersScope) withContainer(property) { - property.transformChildrenWithoutAccessors(this, returnTypeRef) + property.transformChildrenWithoutAccessors(returnTypeRef) if (property.initializer != null) { storeVariableReturnType(property) } @@ -808,7 +819,7 @@ open class FirBodyResolveTransformer( property.transformAccessors() } } - property.resolvePhase = transformerPhase + property.replaceResolvePhase(transformerPhase) val controlFlowGraph = dataFlowAnalyzer.exitProperty(property) property.transformControlFlowGraphReference(ControlFlowGraphReferenceTransformer, controlFlowGraph) property.compose() @@ -850,8 +861,7 @@ open class FirBodyResolveTransformer( transformedGetClassCall.resultType = FirResolvedTypeRefImpl( null, - kClassSymbol.constructType(arrayOf(typeOfExpression), false), - emptyList() + kClassSymbol.constructType(arrayOf(typeOfExpression), false) ) return transformedGetClassCall.compose() } @@ -862,17 +872,16 @@ open class FirBodyResolveTransformer( ): CompositeTransformResult { val booleanType = builtinTypes.booleanType return when (binaryLogicExpression.kind) { - FirBinaryLogicExpression.OperationKind.AND -> + LogicOperationKind.AND -> binaryLogicExpression.also(dataFlowAnalyzer::enterBinaryAnd) .transformLeftOperand(this, booleanType).also(dataFlowAnalyzer::exitLeftBinaryAndArgument) .transformRightOperand(this, booleanType).also(dataFlowAnalyzer::exitBinaryAnd) - FirBinaryLogicExpression.OperationKind.OR -> + LogicOperationKind.OR -> binaryLogicExpression.also(dataFlowAnalyzer::enterBinaryOr) .transformLeftOperand(this, booleanType).also(dataFlowAnalyzer::exitLeftBinaryOrArgument) .transformRightOperand(this, booleanType).also(dataFlowAnalyzer::exitBinaryOr) - - }.transformRestChildren(this, booleanType).also { + }.transformOtherChildren(this, booleanType).also { it.resultType = booleanType }.compose() } @@ -893,14 +902,14 @@ open class FirBodyResolveTransformer( return whileLoop.also(dataFlowAnalyzer::enterWhileLoop) .transformCondition(this, data).also(dataFlowAnalyzer::exitWhileLoopCondition) .transformBlock(this, data).also(dataFlowAnalyzer::exitWhileLoop) - .transformRestChildren(this, data).compose() + .transformOtherChildren(this, data).compose() } override fun transformDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: Any?): CompositeTransformResult { return doWhileLoop.also(dataFlowAnalyzer::enterDoWhileLoop) .transformBlock(this, data).also(dataFlowAnalyzer::enterDoWhileLoopCondition) .transformCondition(this, data).also(dataFlowAnalyzer::exitDoWhileLoop) - .transformRestChildren(this, data).compose() + .transformOtherChildren(this, data).compose() } // ----------------------- Util functions ----------------------- @@ -1028,7 +1037,7 @@ class FirImplicitTypeBodyResolveTransformerAdapter : FirTransformer() override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { val transformer = FirBodyResolveTransformer( - file.fileSession, + file.session, phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, implicitTypeOnly = true, scopeSession = scopeSession @@ -1049,7 +1058,7 @@ class FirBodyResolveTransformerAdapter : FirTransformer() { override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { // Despite of real phase is EXPRESSIONS, we state IMPLICIT_TYPES here, because DECLARATIONS previous phase is OK for us val transformer = FirBodyResolveTransformer( - file.fileSession, + file.session, phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, implicitTypeOnly = false, scopeSession = scopeSession 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 4614ff89ef3..a5ef4558c27 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 @@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.copy import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl +import org.jetbrains.kotlin.fir.references.impl.FirResolvedCallableReferenceImpl import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.candidate import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef @@ -88,15 +88,15 @@ class FirCallCompletionResultsWriterTransformer( val typeRef = argument.typeRef as FirResolvedTypeRef FirTypeProjectionWithVarianceImpl( argument.psi, - argument.variance, - typeRef.withReplacedConeType(type) + typeRef.withReplacedConeType(type), + argument.variance ) } else -> { FirTypeProjectionWithVarianceImpl( argument?.psi, - Variance.INVARIANT, - FirResolvedTypeRefImpl(null, type, emptyList()) + FirResolvedTypeRefImpl(null, type), + Variance.INVARIANT ) } } @@ -133,7 +133,7 @@ class FirCallCompletionResultsWriterTransformer( override fun transformAnonymousFunction( anonymousFunction: FirAnonymousFunction, data: Nothing? - ): CompositeTransformResult { + ): CompositeTransformResult { val initialType = anonymousFunction.returnTypeRef.coneTypeSafe() if (initialType != null) { val finalType = finalSubstitutor.substituteOrNull(initialType) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt index 4c443651339..fedb8500d89 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt @@ -33,8 +33,8 @@ class FirImportResolveTransformer() : FirAbstractTreeTransformer(phase = FirReso } override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - session = file.fileSession - symbolProvider = FirSymbolProvider.getInstance(file.fileSession) + session = file.session + symbolProvider = FirSymbolProvider.getInstance(file.session) return file.also { it.transformChildren(this, null) }.compose() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt index 01468643bdd..0f7c3435c4b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSpecificTypeResolverTransformer.kt @@ -7,8 +7,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.resolve.FirTypeResolver import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.FirScope @@ -34,21 +32,23 @@ class FirSpecificTypeResolverTransformer( functionTypeRef.transformChildren(this, data) return FirResolvedFunctionTypeRefImpl( functionTypeRef.psi, + typeResolver.resolveType(functionTypeRef, towerScope, position), functionTypeRef.isMarkedNullable, - functionTypeRef.annotations as MutableList, functionTypeRef.receiverTypeRef, - functionTypeRef.valueParameters as MutableList, - functionTypeRef.returnTypeRef, - typeResolver.resolveType(functionTypeRef, towerScope, position) - ).compose() + functionTypeRef.returnTypeRef + ).apply { + annotations += functionTypeRef.annotations + valueParameters += functionTypeRef.valueParameters + }.compose() } private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult { return FirResolvedTypeRefImpl( typeRef.psi, - resolvedType, - typeRef.annotations - ).compose() + resolvedType + ).apply { + annotations += typeRef.annotations + }.compose() } override fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?): CompositeTransformResult { 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 1aafec93f19..4270192f83a 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 @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.compose @@ -42,7 +43,7 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer(phase = FirResolv when { visibility == Visibilities.PRIVATE -> Modality.FINAL - this is FirNamedFunction && body == null -> + this is FirSimpleFunction && body == null -> Modality.ABSTRACT this is FirProperty && initializer == null && getter?.body == null && setter?.body == null -> Modality.ABSTRACT @@ -62,7 +63,7 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer(phase = FirResolv override lateinit var session: FirSession override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - session = file.fileSession + session = file.session return transformElement(file, data) } @@ -108,10 +109,10 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer(phase = FirResolv return transformMemberDeclaration(typeAlias, data) } - override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { + override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { return storeClass(regularClass) { transformMemberDeclaration(regularClass, data) - } + } as CompositeTransformResult } override fun transformMemberDeclaration( @@ -126,10 +127,10 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer(phase = FirResolv override fun transformPropertyAccessor( propertyAccessor: FirPropertyAccessor, data: Nothing? - ): CompositeTransformResult { + ): CompositeTransformResult { return storeDeclaration(propertyAccessor) { transformDeclaration(propertyAccessor, data) - } + } as CompositeTransformResult } override fun transformConstructor( @@ -141,12 +142,9 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer(phase = FirResolv } } - override fun transformNamedFunction( - namedFunction: FirNamedFunction, - data: Nothing? - ): CompositeTransformResult { - return storeDeclaration(namedFunction) { - transformDeclaration(namedFunction, data) + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): CompositeTransformResult { + return storeDeclaration(simpleFunction) { + transformDeclaration(simpleFunction, data) } } @@ -159,7 +157,7 @@ class FirStatusResolveTransformer : FirAbstractTreeTransformer(phase = FirResolv } } - override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { - return transformDeclaration(valueParameter, data) + override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { + return (transformDeclaration(valueParameter, data).single as FirStatement).compose() } } \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt index 108ea1ad5ab..d1ba11ecfb8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.scopes.FirPosition @@ -27,21 +28,24 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { initFromFile(file) - return transformElement(file, data) + return transformDeclaration(file, data) as CompositeTransformResult } fun initFromFile(file: FirFile) { - session = file.fileSession + session = file.session this.file = file } - override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { + override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { val transformedClass = resolveSupertypesOrExpansions(regularClass) as? FirRegularClass ?: regularClass // resolve supertypes for nested classes - return transformElement(transformedClass, data) + return transformDeclaration(transformedClass, data) as CompositeTransformResult } + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): CompositeTransformResult { + return transformRegularClass(enumEntry, data) + } override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): CompositeTransformResult { val result = resolveSupertypesOrExpansions(typeAlias) @@ -67,15 +71,15 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe return constructor.compose() } - override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Nothing?): CompositeTransformResult { - return namedFunction.compose() + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): CompositeTransformResult { + return simpleFunction.compose() } override fun transformProperty(property: FirProperty, data: Nothing?): CompositeTransformResult { return property.compose() } - override fun > transformFunction(function: FirFunction, data: Nothing?): CompositeTransformResult { + override fun > transformFunction(function: FirFunction, data: Nothing?): CompositeTransformResult { return function.compose() } @@ -106,7 +110,11 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe towerScope.addImportingScopes(file, session, scopeSession) } - override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: Nothing?): CompositeTransformResult { + return transformRegularClass(enumEntry, data) + } + + override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { val classId = regularClass.classId if (!isOuterClass(classId, requestedClassId)) return regularClass.compose() val transformedClass = withScopeCleanup { @@ -115,10 +123,13 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe regularClass.addTypeParametersScope() val transformer = FirSpecificTypeResolverTransformer(towerScope, FirPosition.SUPER_TYPE_OR_EXPANSION, session) - val resolvedTypesRefs = regularClass.superTypeRefs.map { transformer.transformTypeRef(it, data).single } + val resolvedTypesRefs = regularClass.superTypeRefs.map { + transformer.transformTypeRef(it, data).single + } val resultingTypeRefs = resolveLoops(regularClass, classId, resolvedTypesRefs) - regularClass.replaceSupertypes(resultingTypeRefs) + regularClass.replaceSuperTypeRefs(resultingTypeRefs) + regularClass } if (regularClass.matchesRequestedDeclaration()) { @@ -146,9 +157,9 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe val resolvedTypesRef = transformer.transformTypeRef(typeAlias.expandedTypeRef, data).single val resultingTypeRef = resolveLoops(typeAlias, classId, listOf(resolvedTypesRef)).firstOrNull() - typeAlias.replaceExpandTypeRef(resultingTypeRef ?: resolvedTypesRef).also { - resultingClass = it - } + typeAlias.replaceExpandedTypeRef(resultingTypeRef ?: resolvedTypesRef) + resultingClass = typeAlias + typeAlias }.compose() } @@ -157,7 +168,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe classId: ClassId, resolvedTypesRefs: List ): List { - firClassLikeDeclaration.supertypesComputationStatus = FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTING + firClassLikeDeclaration.replaceSupertypesComputationStatus(SupertypesComputationStatus.COMPUTING) val resultingTypeRefs = mutableListOf() for (superTypeRef in resolvedTypesRefs) { @@ -196,7 +207,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe resultingTypeRefs.add(superTypeRef) } - firClassLikeDeclaration.supertypesComputationStatus = FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTED + firClassLikeDeclaration.replaceSupertypesComputationStatus(SupertypesComputationStatus.COMPUTED) return resultingTypeRefs } @@ -208,7 +219,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe private fun resolveNestedClassesSupertypes( regularClass: FirRegularClass, data: Nothing? - ): CompositeTransformResult { + ): CompositeTransformResult { return withScopeCleanup { // ? Is it Ok to use original file session here ? val firProvider = FirProvider.getInstance(session) @@ -236,6 +247,6 @@ private fun isOuterClass(outerCandidate: ClassId, innerCandidate: ClassId) = private fun ClassId.outerClasses() = generateSequence(this, ClassId::getOuterClassId) private fun FirClassLikeDeclaration<*>.areSupertypesComputed() = - supertypesComputationStatus == FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTED + supertypesComputationStatus == SupertypesComputationStatus.COMPUTED private fun FirClassLikeDeclaration<*>.areSupertypesComputing() = - supertypesComputationStatus == FirClassLikeDeclaration.SupertypesComputationStatus.COMPUTING + supertypesComputationStatus == SupertypesComputationStatus.COMPUTING diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt index 8debcde6525..60d690eedb0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt @@ -10,19 +10,21 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.copy import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.impl.FirMemberFunctionImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirTryExpression import org.jetbrains.kotlin.fir.expressions.FirWhenExpression -import org.jetbrains.kotlin.fir.references.FirStubReference +import org.jetbrains.kotlin.fir.references.impl.FirStubReference import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.SyntheticCallableId import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl @@ -32,12 +34,14 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind import org.jetbrains.kotlin.types.Variance class FirSyntheticCallGenerator(private val transformer: FirBodyResolveTransformer) : BodyResolveComponents by transformer { - private val whenSelectFunction: FirMemberFunctionImpl = generateSyntheticSelectFunction(SyntheticCallableId.WHEN) - private val trySelectFunction: FirMemberFunctionImpl = generateSyntheticSelectFunction(SyntheticCallableId.TRY) + private val whenSelectFunction: FirSimpleFunctionImpl = generateSyntheticSelectFunction(SyntheticCallableId.WHEN) + private val trySelectFunction: FirSimpleFunctionImpl = generateSyntheticSelectFunction(SyntheticCallableId.TRY) fun generateCalleeForWhenExpression(whenExpression: FirWhenExpression): FirWhenExpression? { val stubReference = whenExpression.calleeReference - assert(stubReference is FirStubReference) + // TODO: Investigate: assertion failed in ModularizedTest + // assert(stubReference is FirStubReference) + if (stubReference !is FirStubReference) return null val arguments = whenExpression.branches.map { it.result } val reference = generateCalleeReferenceWithCandidate( @@ -72,7 +76,7 @@ class FirSyntheticCallGenerator(private val transformer: FirBodyResolveTransform } private fun generateCalleeReferenceWithCandidate( - function: FirMemberFunctionImpl, + function: FirSimpleFunctionImpl, arguments: List, name: Name ): FirNamedReferenceWithCandidate? { @@ -86,7 +90,7 @@ class FirSyntheticCallGenerator(private val transformer: FirBodyResolveTransform return FirNamedReferenceWithCandidate(null, name, candidate) } - private fun generateCandidate(callInfo: CallInfo, function: FirMemberFunctionImpl): Candidate = + private fun generateCandidate(callInfo: CallInfo, function: FirSimpleFunctionImpl): Candidate = CandidateFactory(transformer, callInfo).createCandidate( symbol = function.symbol, dispatchReceiverValue = null, @@ -105,15 +109,15 @@ class FirSyntheticCallGenerator(private val transformer: FirBodyResolveTransform container = container ) { it.resultType } - private fun generateSyntheticSelectFunction(callableId: CallableId): FirMemberFunctionImpl { + private fun generateSyntheticSelectFunction(callableId: CallableId): FirSimpleFunctionImpl { val functionSymbol = FirSyntheticFunctionSymbol(callableId) val typeParameterSymbol = FirTypeParameterSymbol() - val typeParameter = FirTypeParameterImpl(session, null, typeParameterSymbol, Name.identifier("K"), Variance.INVARIANT, false) + val typeParameter = FirTypeParameterImpl(null, session, Name.identifier("K"), typeParameterSymbol, Variance.INVARIANT, false) val returnType = FirResolvedTypeRefImpl(null, ConeTypeParameterTypeImpl(typeParameterSymbol.toLookupTag(), false)) val argumentType = FirResolvedTypeRefImpl(null, returnType.coneTypeUnsafe().createArrayOf(session)) - val typeArgument = FirTypeProjectionWithVarianceImpl(null, Variance.INVARIANT, returnType) + val typeArgument = FirTypeProjectionWithVarianceImpl(null, returnType, Variance.INVARIANT) return generateMemberFunction(session, functionSymbol, callableId.callableName, typeArgument.typeRef).apply { typeParameters += typeParameter @@ -121,39 +125,45 @@ class FirSyntheticCallGenerator(private val transformer: FirBodyResolveTransform } } - private fun generateMemberFunction(session: FirSession, symbol: FirNamedFunctionSymbol, name: Name, returnType: FirTypeRef) = - FirMemberFunctionImpl( + private fun generateMemberFunction(session: FirSession, symbol: FirNamedFunctionSymbol, name: Name, returnType: FirTypeRef): FirSimpleFunctionImpl { + val status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply { + isExpect = false + isActual = false + isOverride = false + isOperator = false + isInfix = false + isInline = false + isTailRec = false + isExternal = false + isSuspend = false + } + return FirSimpleFunctionImpl( session = session, psi = null, symbol = symbol, name = name, - visibility = Visibilities.PUBLIC, - modality = Modality.FINAL, - isExpect = false, - isActual = false, - isOverride = false, - isOperator = false, - isInfix = false, - isInline = false, - isTailRec = false, - isExternal = false, - isSuspend = false, + status = status, receiverTypeRef = null, returnTypeRef = returnType ).apply { this.resolvePhase = FirResolvePhase.BODY_RESOLVE } + } - private fun FirResolvedTypeRef.toValueParameter(session: FirSession, name: String, isVararg: Boolean = false) = FirValueParameterImpl( - session = session, - psi = null, - name = Name.identifier(name), - returnTypeRef = this, - defaultValue = null, - isCrossinline = false, - isNoinline = false, - isVararg = isVararg - ).apply { - this.resolvePhase = FirResolvePhase.BODY_RESOLVE + private fun FirResolvedTypeRef.toValueParameter(session: FirSession, name: String, isVararg: Boolean = false): FirValueParameterImpl { + val name = Name.identifier(name) + return FirValueParameterImpl( + session = session, + psi = null, + name = name, + returnTypeRef = this, + defaultValue = null, + isCrossinline = false, + isNoinline = false, + isVararg = isVararg, + symbol = FirVariableSymbol(name) + ).apply { + this.resolvePhase = FirResolvePhase.BODY_RESOLVE + } } } 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 97f5dd2506d..0190a89b367 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 @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.ScopeSession @@ -27,7 +28,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( override lateinit var session: FirSession override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - session = file.fileSession + session = file.session val scopeSession = ScopeSession() return withScopeCleanup { towerScope.addImportingScopes(file, session, scopeSession) @@ -35,7 +36,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( } } - override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { + override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { withScopeCleanup { regularClass.addTypeParametersScope() regularClass.typeParameters.forEach { @@ -58,7 +59,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( towerScope.scopes += FirNestedClassifierScope(classId, firProvider) regularClass.addTypeParametersScope() - transformDeclaration(regularClass, data) + transformDeclaration(regularClass, data) as CompositeTransformResult } } @@ -84,10 +85,10 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( } } - override fun transformNamedFunction(namedFunction: FirNamedFunction, data: Nothing?): CompositeTransformResult { + override fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?): CompositeTransformResult { return withScopeCleanup { - namedFunction.addTypeParametersScope() - transformDeclaration(namedFunction, data) + simpleFunction.addTypeParametersScope() + transformDeclaration(simpleFunction, data) } } @@ -100,7 +101,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( return FirSpecificTypeResolverTransformer(towerScope, FirPosition.OTHER, session).transformTypeRef(typeRef, data) } - override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { + override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult { val result = transformDeclaration(valueParameter, data).single as FirValueParameter if (result.isVararg) { val returnTypeRef = result.returnTypeRef diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/InvocationKindTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/InvocationKindTransformer.kt index e2784c8fa8a..607c1b52c72 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/InvocationKindTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/InvocationKindTransformer.kt @@ -25,7 +25,7 @@ object InvocationKindTransformer : FirTransformer() { override fun transformAnonymousFunction( anonymousFunction: FirAnonymousFunction, data: InvocationKind? - ): CompositeTransformResult { + ): CompositeTransformResult { if (data != null) { anonymousFunction.replaceInvocationKind(data) } 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 0132c51d4d2..0c9e79679e7 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,12 +6,12 @@ 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.render import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol @@ -27,7 +27,8 @@ fun AbstractFirBasedSymbol.phasedFir( is FirCallableSymbol<*> -> provider.getFirCallableContainerFile(this) is FirClassLikeSymbol<*> -> provider.getFirClassifierContainerFile(this) else -> null - } ?: throw AssertionError("Cannot get container file by symbol: $this (${result.render()})") + } + ?: throw AssertionError("Cannot get container file by symbol: $this (${result.render()})") containingFile.runResolve(toPhase = requiredPhase, fromPhase = availablePhase) } return result 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 911bfda1f4b..e4efc854d6a 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 @@ -78,7 +78,7 @@ class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: Sc val transformer = FirDesignatedBodyResolveTransformer( (listOf(file) + outerClasses.filterNotNull().asReversed() + listOf(declaration)).iterator(), - file.fileSession, + file.session, scopeSession ) 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 8f9422d41ba..85154246149 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 @@ -6,10 +6,10 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirNamedReference -import org.jetbrains.kotlin.fir.FirResolvedCallableReference import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt index 3993516fbcd..0fb300ceaac 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/AbstractFirOverrideScope.kt @@ -31,7 +31,7 @@ abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope() { private fun isEqualTypes(a: FirTypeRef, b: FirTypeRef, substitution: ConeSubstitutor) = isEqualTypes(a.cast().type, b.cast().type, substitution) - private fun isOverriddenFunCheck(member: FirNamedFunction, self: FirNamedFunction): Boolean { + private fun isOverriddenFunCheck(member: FirSimpleFunction, self: FirSimpleFunction): Boolean { if (member.valueParameters.size != self.valueParameters.size) return false if (member.typeParameters.size != self.typeParameters.size) return false @@ -63,7 +63,7 @@ abstract class AbstractFirOverrideScope(val session: FirSession) : FirScope() { fun similarFunctionsOrBothProperties(declaration: FirCallableDeclaration<*>, self: FirCallableDeclaration<*>): Boolean { return when (declaration) { - is FirNamedFunction -> self is FirNamedFunction && isOverriddenFunCheck(declaration, self) + is FirSimpleFunction -> self is FirSimpleFunction && isOverriddenFunCheck(declaration, self) is FirConstructor -> false is FirProperty -> self is FirProperty && sameReceivers( declaration.receiverTypeRef, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index a9c0a3933b3..098fa8412c4 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.resolve.ScopeSession @@ -105,7 +105,7 @@ class FirClassSubstitutionScope( companion object { fun createFakeOverrideFunction( session: FirSession, - baseFunction: FirNamedFunction, + baseFunction: FirSimpleFunction, baseSymbol: FirNamedFunctionSymbol, newReceiverType: ConeKotlinType? = null, newReturnType: ConeKotlinType? = null, @@ -115,23 +115,30 @@ class FirClassSubstitutionScope( with(baseFunction) { // TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl // As second alternative, we can invent some light-weight kind of FirRegularClass - FirMemberFunctionImpl( + FirSimpleFunctionImpl( + psi, session, - psi, symbol, name, + baseFunction.returnTypeRef.withReplacedConeType(newReturnType), baseFunction.receiverTypeRef?.withReplacedConeType(newReceiverType), - baseFunction.returnTypeRef.withReplacedConeType(newReturnType) + name, + baseFunction.status, + symbol ).apply { resolvePhase = baseFunction.resolvePhase - status = baseFunction.status as FirDeclarationStatusImpl valueParameters += baseFunction.valueParameters.zip( newParameterTypes ?: List(baseFunction.valueParameters.size) { null } ) { valueParameter, newType -> with(valueParameter) { FirValueParameterImpl( - session, psi, - name, this.returnTypeRef.withReplacedConeType(newType), - defaultValue, isCrossinline, isNoinline, isVararg, - FirVariableSymbol(valueParameter.symbol.callableId) + psi, + session, + this.returnTypeRef.withReplacedConeType(newType), + name, + FirVariableSymbol(valueParameter.symbol.callableId), + defaultValue, + isCrossinline, + isNoinline, + isVararg ) } } @@ -149,15 +156,20 @@ class FirClassSubstitutionScope( ): FirPropertySymbol { val symbol = FirPropertySymbol(baseSymbol.callableId, true, baseSymbol) with(baseProperty) { - FirMemberPropertyImpl( + FirPropertyImpl( + psi, session, - psi, symbol, name, - baseProperty.receiverTypeRef?.withReplacedConeType(newReceiverType), baseProperty.returnTypeRef.withReplacedConeType(newReturnType), - isVar, initializer = null, delegate = null + baseProperty.receiverTypeRef?.withReplacedConeType(newReceiverType), + name, + null, + null, + isVar, + symbol, + false, + baseProperty.status ).apply { resolvePhase = baseProperty.resolvePhase - status = baseProperty.status as FirDeclarationStatusImpl } } return symbol @@ -170,6 +182,8 @@ fun FirTypeRef.withReplacedConeType(newType: ConeKotlinType?): FirResolvedTypeRe require(this is FirResolvedTypeRef) if (newType == null) return this - return FirResolvedTypeRefImpl(psi, newType, annotations = annotations) + return FirResolvedTypeRefImpl(psi, newType).apply { + annotations += this@withReplacedConeType.annotations + } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt index a2a8dc9568b..dc9c79c6b45 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirLocalScope.kt @@ -5,11 +5,8 @@ package org.jetbrains.kotlin.fir.scopes.impl -import org.jetbrains.kotlin.fir.FirBackingFieldReference -import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction -import org.jetbrains.kotlin.fir.declarations.FirProperty -import org.jetbrains.kotlin.fir.expressions.FirVariable +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.NAME_FOR_BACKING_FIELD import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol @@ -26,12 +23,12 @@ class FirLocalScope : FirScope() { fun storeDeclaration(declaration: FirNamedDeclaration) { when (declaration) { is FirVariable<*> -> properties[declaration.name] = declaration.symbol - is FirNamedFunction -> functions[declaration.name] = declaration.symbol as FirNamedFunctionSymbol + is FirSimpleFunction -> functions[declaration.name] = declaration.symbol as FirNamedFunctionSymbol } } fun storeBackingField(property: FirProperty) { - properties[FirBackingFieldReference.NAME] = property.backingFieldSymbol + properties[NAME_FOR_BACKING_FIELD] = property.backingFieldSymbol } override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt index 777df60f5c2..36549e78f63 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt @@ -9,9 +9,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirRegularClass -import org.jetbrains.kotlin.fir.declarations.expandedConeType -import org.jetbrains.kotlin.fir.declarations.superConeTypes +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.ConeInferenceContext import org.jetbrains.kotlin.fir.resolve.calls.ConeTypeVariableTypeConstructor diff --git a/compiler/fir/resolve/testData/resolve/cfg/initBlockAndInPlaceLambda.dot b/compiler/fir/resolve/testData/resolve/cfg/initBlockAndInPlaceLambda.dot index 25f0ddb6545..6711d7aae85 100644 --- a/compiler/fir/resolve/testData/resolve/cfg/initBlockAndInPlaceLambda.dot +++ b/compiler/fir/resolve/testData/resolve/cfg/initBlockAndInPlaceLambda.dot @@ -5,18 +5,26 @@ digraph initBlockAndInPlaceLambda_kt { subgraph cluster_0 { color=red - 0 [label="Enter property" style="filled" fillcolor=red]; - 1 [label="Exit property" style="filled" fillcolor=red]; + 0 [label="Enter function getter" style="filled" fillcolor=red]; + 1 [label="Exit function getter" style="filled" fillcolor=red]; } 0 -> {1}; subgraph cluster_1 { color=red - 2 [label="Enter function " style="filled" fillcolor=red]; - 3 [label="Exit function " style="filled" fillcolor=red]; + 2 [label="Enter property" style="filled" fillcolor=red]; + 3 [label="Exit property" style="filled" fillcolor=red]; } 2 -> {3}; + subgraph cluster_2 { + color=red + 4 [label="Enter function " style="filled" fillcolor=red]; + 5 [label="Exit function " style="filled" fillcolor=red]; + } + + 4 -> {5}; + } diff --git a/compiler/fir/resolve/testData/resolve/cfg/lambdas.dot b/compiler/fir/resolve/testData/resolve/cfg/lambdas.dot index 2af10c818ec..a3628a918b4 100644 --- a/compiler/fir/resolve/testData/resolve/cfg/lambdas.dot +++ b/compiler/fir/resolve/testData/resolve/cfg/lambdas.dot @@ -107,15 +107,45 @@ digraph lambdas_kt { subgraph cluster_11 { color=red - 32 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + 32 [label="Enter function test_2" style="filled" fillcolor=red]; subgraph cluster_12 { color=blue 33 [label="Enter block"]; - 34 [label="Access variable R|/x|"]; - 35 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; - 36 [label="Exit block"]; + subgraph cluster_13 { + color=blue + 34 [label="Enter when"]; + subgraph cluster_14 { + color=blue + 35 [label="Enter when branch condition "]; + 36 [label="Access variable R|/x|"]; + 37 [label="Type operator: x is Int"]; + 38 [label="Exit when branch condition"]; + } + subgraph cluster_15 { + color=blue + 39 [label="Enter when branch condition else"]; + 40 [label="Exit when branch condition"]; + } + 41 [label="Enter when branch result"]; + subgraph cluster_16 { + color=blue + 42 [label="Enter block"]; + 43 [label="Exit block"]; + } + 44 [label="Exit when branch result"]; + 45 [label="Enter when branch result"]; + subgraph cluster_17 { + color=blue + 46 [label="Enter block"]; + 47 [label="Variable declaration: lval lambda: R|kotlin/Function0|"]; + 48 [label="Exit block"]; + } + 49 [label="Exit when branch result"]; + 50 [label="Exit when"]; + } + 51 [label="Exit block"]; } - 37 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + 52 [label="Exit function test_2" style="filled" fillcolor=red]; } 32 -> {33}; @@ -123,65 +153,35 @@ digraph lambdas_kt { 34 -> {35}; 35 -> {36}; 36 -> {37}; - - subgraph cluster_13 { - color=red - 38 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_14 { - color=blue - 39 [label="Enter block"]; - subgraph cluster_15 { - color=blue - 40 [label="Enter when"]; - subgraph cluster_16 { - color=blue - 41 [label="Enter when branch condition "]; - 42 [label="Access variable R|/x|"]; - 43 [label="Type operator: x is Int"]; - 44 [label="Exit when branch condition"]; - } - subgraph cluster_17 { - color=blue - 45 [label="Enter when branch condition else"]; - 46 [label="Exit when branch condition"]; - } - 47 [label="Enter when branch result"]; - subgraph cluster_18 { - color=blue - 48 [label="Enter block"]; - 49 [label="Exit block"]; - } - 50 [label="Exit when branch result"]; - 51 [label="Enter when branch result"]; - subgraph cluster_19 { - color=blue - 52 [label="Enter block"]; - 53 [label="Variable declaration: lval lambda: R|kotlin/Function0|"]; - 54 [label="Exit block"]; - } - 55 [label="Exit when branch result"]; - 56 [label="Exit when"]; - } - 57 [label="Exit block"]; - } - 58 [label="Exit function test_2" style="filled" fillcolor=red]; - } - - 38 -> {39}; + 37 -> {38}; + 38 -> {45 39}; 39 -> {40}; 40 -> {41}; 41 -> {42}; 42 -> {43}; 43 -> {44}; - 44 -> {51 45}; + 44 -> {50}; 45 -> {46}; 46 -> {47}; 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {56}; + 50 -> {51}; 51 -> {52}; - 52 -> {53}; + + subgraph cluster_18 { + color=red + 53 [label="Enter function anonymousFunction" style="filled" fillcolor=red]; + subgraph cluster_19 { + color=blue + 54 [label="Enter block"]; + 55 [label="Access variable R|/x|"]; + 56 [label="Function call: R|/x|.R|kotlin/Int.inc|()"]; + 57 [label="Exit block"]; + } + 58 [label="Exit function anonymousFunction" style="filled" fillcolor=red]; + } + 53 -> {54}; 54 -> {55}; 55 -> {56}; diff --git a/compiler/fir/resolve/testData/resolve/cfg/propertiesAndInitBlocks.dot b/compiler/fir/resolve/testData/resolve/cfg/propertiesAndInitBlocks.dot index 05a1a375f3c..89b7966f1d3 100644 --- a/compiler/fir/resolve/testData/resolve/cfg/propertiesAndInitBlocks.dot +++ b/compiler/fir/resolve/testData/resolve/cfg/propertiesAndInitBlocks.dot @@ -22,143 +22,151 @@ digraph propertiesAndInitBlocks_kt { subgraph cluster_2 { color=red - 5 [label="Enter property" style="filled" fillcolor=red]; - 6 [label="Const: Int(1)"]; - 7 [label="Exit property" style="filled" fillcolor=red]; + 5 [label="Enter function getter" style="filled" fillcolor=red]; + 6 [label="Exit function getter" style="filled" fillcolor=red]; } 5 -> {6}; - 6 -> {7}; subgraph cluster_3 { color=red - 8 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_4 { - color=blue - 9 [label="Enter block"]; - 10 [label="Const: Int(1)"]; - 11 [label="Jump: ^ Int(1)"]; - 12 [label="Stub" style="filled" fillcolor=gray]; - 13 [label="Exit block" style="filled" fillcolor=gray]; - } - 14 [label="Exit function getter" style="filled" fillcolor=red]; + 7 [label="Enter property" style="filled" fillcolor=red]; + 8 [label="Const: Int(1)"]; + 9 [label="Exit property" style="filled" fillcolor=red]; } + 7 -> {8}; 8 -> {9}; - 9 -> {10}; - 10 -> {11}; - 11 -> {14}; - 11 -> {12} [style=dotted]; - 12 -> {13} [style=dotted]; - 13 -> {14} [style=dotted]; - subgraph cluster_5 { + subgraph cluster_4 { color=red - 15 [label="Enter function setter" style="filled" fillcolor=red]; - subgraph cluster_6 { + 10 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_5 { color=blue - 16 [label="Enter block"]; - 17 [label="Const: Int(1)"]; - 18 [label="Assignmenet: F|/x2|"]; - 19 [label="Exit block"]; + 11 [label="Enter block"]; + 12 [label="Const: Int(1)"]; + 13 [label="Jump: ^ Int(1)"]; + 14 [label="Stub" style="filled" fillcolor=gray]; + 15 [label="Exit block" style="filled" fillcolor=gray]; } - 20 [label="Exit function setter" style="filled" fillcolor=red]; + 16 [label="Exit function getter" style="filled" fillcolor=red]; + } + + 10 -> {11}; + 11 -> {12}; + 12 -> {13}; + 13 -> {16}; + 13 -> {14} [style=dotted]; + 14 -> {15} [style=dotted]; + 15 -> {16} [style=dotted]; + + subgraph cluster_6 { + color=red + 17 [label="Enter function setter" style="filled" fillcolor=red]; + subgraph cluster_7 { + color=blue + 18 [label="Enter block"]; + 19 [label="Const: Int(1)"]; + 20 [label="Assignmenet: F|/x2|"]; + 21 [label="Exit block"]; + } + 22 [label="Exit function setter" style="filled" fillcolor=red]; } - 15 -> {16}; - 16 -> {17}; 17 -> {18}; 18 -> {19}; 19 -> {20}; - - subgraph cluster_7 { - color=red - 21 [label="Enter property" style="filled" fillcolor=red]; - 22 [label="Const: Int(1)"]; - 23 [label="Exit property" style="filled" fillcolor=red]; - } - + 20 -> {21}; 21 -> {22}; - 22 -> {23}; subgraph cluster_8 { color=red - 24 [label="Enter function foo" style="filled" fillcolor=red]; - subgraph cluster_9 { - color=blue - 25 [label="Enter block"]; - 26 [label="Const: Int(1)"]; - 27 [label="Const: Int(1)"]; - 28 [label="Function call: Int(1).R|kotlin/Int.plus|(Int(1))"]; - 29 [label="Variable declaration: lval c: R|kotlin/Int|"]; - 30 [label="Function call: R|java/lang/Exception.Exception|()"]; - 31 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 32 [label="Stub" style="filled" fillcolor=gray]; - 33 [label="Exit block" style="filled" fillcolor=gray]; - } - 34 [label="Exit function foo" style="filled" fillcolor=red]; + 23 [label="Enter property" style="filled" fillcolor=red]; + 24 [label="Const: Int(1)"]; + 25 [label="Exit property" style="filled" fillcolor=red]; } + 23 -> {24}; 24 -> {25}; - 25 -> {26}; + + subgraph cluster_9 { + color=red + 26 [label="Enter function foo" style="filled" fillcolor=red]; + subgraph cluster_10 { + color=blue + 27 [label="Enter block"]; + 28 [label="Const: Int(1)"]; + 29 [label="Const: Int(1)"]; + 30 [label="Function call: Int(1).R|kotlin/Int.plus|(Int(1))"]; + 31 [label="Variable declaration: lval c: R|kotlin/Int|"]; + 32 [label="Function call: R|java/lang/Exception.Exception|()"]; + 33 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 34 [label="Stub" style="filled" fillcolor=gray]; + 35 [label="Exit block" style="filled" fillcolor=gray]; + } + 36 [label="Exit function foo" style="filled" fillcolor=red]; + } + 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {34}; - 31 -> {32} [style=dotted]; - 32 -> {33} [style=dotted]; + 31 -> {32}; + 32 -> {33}; + 33 -> {36}; 33 -> {34} [style=dotted]; - - subgraph cluster_10 { - color=red - 35 [label="Enter function " style="filled" fillcolor=red]; - 36 [label="Exit function " style="filled" fillcolor=red]; - } - - 35 -> {36}; + 34 -> {35} [style=dotted]; + 35 -> {36} [style=dotted]; subgraph cluster_11 { color=red - 37 [label="Enter function getter" style="filled" fillcolor=red]; - subgraph cluster_12 { - color=blue - 38 [label="Enter block"]; - 39 [label="Exit block"]; - } - 40 [label="Exit function getter" style="filled" fillcolor=red]; + 37 [label="Enter function " style="filled" fillcolor=red]; + 38 [label="Exit function " style="filled" fillcolor=red]; } 37 -> {38}; - 38 -> {39}; - 39 -> {40}; - subgraph cluster_13 { + subgraph cluster_12 { color=red - 41 [label="Enter function " style="filled" fillcolor=red]; - 42 [label="Exit function " style="filled" fillcolor=red]; + 39 [label="Enter function getter" style="filled" fillcolor=red]; + subgraph cluster_13 { + color=blue + 40 [label="Enter block"]; + 41 [label="Exit block"]; + } + 42 [label="Exit function getter" style="filled" fillcolor=red]; } + 39 -> {40}; + 40 -> {41}; 41 -> {42}; subgraph cluster_14 { color=red - 43 [label="Enter property" style="filled" fillcolor=red]; - subgraph cluster_15 { + 43 [label="Enter function " style="filled" fillcolor=red]; + 44 [label="Exit function " style="filled" fillcolor=red]; + } + + 43 -> {44}; + + subgraph cluster_15 { + color=red + 45 [label="Enter property" style="filled" fillcolor=red]; + subgraph cluster_16 { color=blue - 44 [label="Enter function anonymousFunction"]; - subgraph cluster_16 { + 46 [label="Enter function anonymousFunction"]; + subgraph cluster_17 { color=blue - 45 [label="Enter block"]; - 46 [label="Function call: R|java/lang/Exception.Exception|()"]; - 47 [label="Throw: throw R|java/lang/Exception.Exception|()"]; - 48 [label="Stub" style="filled" fillcolor=gray]; - 49 [label="Exit block" style="filled" fillcolor=gray]; + 47 [label="Enter block"]; + 48 [label="Function call: R|java/lang/Exception.Exception|()"]; + 49 [label="Throw: throw R|java/lang/Exception.Exception|()"]; + 50 [label="Stub" style="filled" fillcolor=gray]; + 51 [label="Exit block" style="filled" fillcolor=gray]; } - 50 [label="Exit function anonymousFunction" style="filled" fillcolor=gray]; + 52 [label="Exit function anonymousFunction" style="filled" fillcolor=gray]; } - 51 [label="Function call: R|/run|( = run@fun (): R|kotlin/Unit| { + 53 [label="Function call: R|/run|( = run@fun (): R|kotlin/Unit| { local final fun foo(): R|kotlin/Unit| { lval c: R|kotlin/Int| = Int(1).R|kotlin/Int.plus|(Int(1)) throw R|java/lang/Exception.Exception|() @@ -179,81 +187,89 @@ digraph propertiesAndInitBlocks_kt { throw R|java/lang/Exception.Exception|() } )" style="filled" fillcolor=gray]; - 52 [label="Exit property" style="filled" fillcolor=red]; + 54 [label="Exit property" style="filled" fillcolor=red]; } - 43 -> {44}; - 44 -> {45}; 45 -> {46}; 46 -> {47}; - 47 -> {52}; - 47 -> {48} [style=dotted]; - 48 -> {49} [style=dotted]; + 47 -> {48}; + 48 -> {49}; + 49 -> {54}; 49 -> {50} [style=dotted]; 50 -> {51} [style=dotted]; 51 -> {52} [style=dotted]; + 52 -> {53} [style=dotted]; + 53 -> {54} [style=dotted]; - subgraph cluster_17 { + subgraph cluster_18 { color=red - 53 [label="Enter property" style="filled" fillcolor=red]; - subgraph cluster_18 { + 55 [label="Enter function getter" style="filled" fillcolor=red]; + 56 [label="Exit function getter" style="filled" fillcolor=red]; + } + + 55 -> {56}; + + subgraph cluster_19 { + color=red + 57 [label="Enter property" style="filled" fillcolor=red]; + subgraph cluster_20 { color=blue - 54 [label="Try expression enter"]; - subgraph cluster_19 { - color=blue - 55 [label="Try main block enter"]; - subgraph cluster_20 { - color=blue - 56 [label="Enter block"]; - 57 [label="Const: Int(1)"]; - 58 [label="Exit block"]; - } - 59 [label="Try main block exit"]; - } + 58 [label="Try expression enter"]; subgraph cluster_21 { color=blue - 60 [label="Enter finally"]; + 59 [label="Try main block enter"]; subgraph cluster_22 { color=blue - 61 [label="Enter block"]; - 62 [label="Const: Int(0)"]; - 63 [label="Exit block"]; + 60 [label="Enter block"]; + 61 [label="Const: Int(1)"]; + 62 [label="Exit block"]; } - 64 [label="Exit finally"]; + 63 [label="Try main block exit"]; } subgraph cluster_23 { color=blue - 65 [label="Catch enter"]; + 64 [label="Enter finally"]; subgraph cluster_24 { color=blue - 66 [label="Enter block"]; - 67 [label="Const: Int(2)"]; - 68 [label="Exit block"]; + 65 [label="Enter block"]; + 66 [label="Const: Int(0)"]; + 67 [label="Exit block"]; } - 69 [label="Catch exit"]; + 68 [label="Exit finally"]; } - 70 [label="Try expression exit"]; + subgraph cluster_25 { + color=blue + 69 [label="Catch enter"]; + subgraph cluster_26 { + color=blue + 70 [label="Enter block"]; + 71 [label="Const: Int(2)"]; + 72 [label="Exit block"]; + } + 73 [label="Catch exit"]; + } + 74 [label="Try expression exit"]; } - 71 [label="Exit property" style="filled" fillcolor=red]; + 75 [label="Exit property" style="filled" fillcolor=red]; } - 53 -> {54}; - 54 -> {55}; - 55 -> {71 65 60 56}; - 56 -> {57}; 57 -> {58}; 58 -> {59}; - 59 -> {70}; + 59 -> {75 69 64 60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; - 63 -> {64}; - 64 -> {70}; - 65 -> {71 66}; + 63 -> {74}; + 64 -> {65}; + 65 -> {66}; 66 -> {67}; 67 -> {68}; - 68 -> {69}; - 69 -> {70}; + 68 -> {74}; + 69 -> {75 70}; 70 -> {71}; + 71 -> {72}; + 72 -> {73}; + 73 -> {74}; + 74 -> {75}; } diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/elvis.dot b/compiler/fir/resolve/testData/resolve/smartcasts/elvis.dot index 2d792cd3abd..3d0a1d12a6e 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/elvis.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/elvis.dot @@ -13,93 +13,99 @@ digraph elvis_kt { subgraph cluster_1 { color=red - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Exit property" style="filled" fillcolor=red]; + 2 [label="Enter function getter" style="filled" fillcolor=red]; + 3 [label="Exit function getter" style="filled" fillcolor=red]; } 2 -> {3}; subgraph cluster_2 { color=red - 4 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_3 { - color=blue - 5 [label="Enter block"]; - subgraph cluster_4 { - color=blue - 6 [label="Enter when"]; - subgraph cluster_5 { - color=blue - 7 [label="Enter when branch condition "]; - subgraph cluster_6 { - color=blue - 8 [label="Enter when"]; - 9 [label="Access variable R|/x|"]; - 10 [label="Access variable R|/A.b|"]; - 11 [label="Variable declaration: lval : R|kotlin/Boolean?|"]; - subgraph cluster_7 { - color=blue - 12 [label="Enter when branch condition "]; - 13 [label="Const: Null(null)"]; - 14 [label="Operator =="]; - 15 [label="Exit when branch condition"]; - } - subgraph cluster_8 { - color=blue - 16 [label="Enter when branch condition else"]; - 17 [label="Exit when branch condition"]; - } - 18 [label="Enter when branch result"]; - subgraph cluster_9 { - color=blue - 19 [label="Enter block"]; - 20 [label="Access variable R|/|"]; - 21 [label="Exit block"]; - } - 22 [label="Exit when branch result"]; - 23 [label="Enter when branch result"]; - subgraph cluster_10 { - color=blue - 24 [label="Enter block"]; - 25 [label="Jump: ^test_1 Unit"]; - 26 [label="Stub" style="filled" fillcolor=gray]; - 27 [label="Exit block" style="filled" fillcolor=gray]; - } - 28 [label="Exit when branch result" style="filled" fillcolor=gray]; - 29 [label="Exit when"]; - } - 30 [label="Exit when branch condition"]; - } - subgraph cluster_11 { - color=blue - 31 [label="Enter when branch condition else"]; - 32 [label="Exit when branch condition"]; - } - 33 [label="Enter when branch result"]; - subgraph cluster_12 { - color=blue - 34 [label="Enter block"]; - 35 [label="Exit block"]; - } - 36 [label="Exit when branch result"]; - 37 [label="Enter when branch result"]; - subgraph cluster_13 { - color=blue - 38 [label="Enter block"]; - 39 [label="Access variable R|/x|"]; - 40 [label="Function call: R|/x|.R|/A.foo|()"]; - 41 [label="Exit block"]; - } - 42 [label="Exit when branch result"]; - 43 [label="Exit when"]; - } - 44 [label="Exit block"]; - } - 45 [label="Exit function test_1" style="filled" fillcolor=red]; + 4 [label="Enter property" style="filled" fillcolor=red]; + 5 [label="Exit property" style="filled" fillcolor=red]; } 4 -> {5}; - 5 -> {6}; + + subgraph cluster_3 { + color=red + 6 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_4 { + color=blue + 7 [label="Enter block"]; + subgraph cluster_5 { + color=blue + 8 [label="Enter when"]; + subgraph cluster_6 { + color=blue + 9 [label="Enter when branch condition "]; + subgraph cluster_7 { + color=blue + 10 [label="Enter when"]; + 11 [label="Access variable R|/x|"]; + 12 [label="Access variable R|/A.b|"]; + 13 [label="Variable declaration: lval : R|kotlin/Boolean?|"]; + subgraph cluster_8 { + color=blue + 14 [label="Enter when branch condition "]; + 15 [label="Const: Null(null)"]; + 16 [label="Operator =="]; + 17 [label="Exit when branch condition"]; + } + subgraph cluster_9 { + color=blue + 18 [label="Enter when branch condition else"]; + 19 [label="Exit when branch condition"]; + } + 20 [label="Enter when branch result"]; + subgraph cluster_10 { + color=blue + 21 [label="Enter block"]; + 22 [label="Access variable R|/|"]; + 23 [label="Exit block"]; + } + 24 [label="Exit when branch result"]; + 25 [label="Enter when branch result"]; + subgraph cluster_11 { + color=blue + 26 [label="Enter block"]; + 27 [label="Jump: ^test_1 Unit"]; + 28 [label="Stub" style="filled" fillcolor=gray]; + 29 [label="Exit block" style="filled" fillcolor=gray]; + } + 30 [label="Exit when branch result" style="filled" fillcolor=gray]; + 31 [label="Exit when"]; + } + 32 [label="Exit when branch condition"]; + } + subgraph cluster_12 { + color=blue + 33 [label="Enter when branch condition else"]; + 34 [label="Exit when branch condition"]; + } + 35 [label="Enter when branch result"]; + subgraph cluster_13 { + color=blue + 36 [label="Enter block"]; + 37 [label="Exit block"]; + } + 38 [label="Exit when branch result"]; + 39 [label="Enter when branch result"]; + subgraph cluster_14 { + color=blue + 40 [label="Enter block"]; + 41 [label="Access variable R|/x|"]; + 42 [label="Function call: R|/x|.R|/A.foo|()"]; + 43 [label="Exit block"]; + } + 44 [label="Exit when branch result"]; + 45 [label="Exit when"]; + } + 46 [label="Exit block"]; + } + 47 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 6 -> {7}; 7 -> {8}; 8 -> {9}; @@ -109,36 +115,38 @@ digraph elvis_kt { 12 -> {13}; 13 -> {14}; 14 -> {15}; - 15 -> {23 16}; + 15 -> {16}; 16 -> {17}; - 17 -> {18}; + 17 -> {25 18}; 18 -> {19}; 19 -> {20}; 20 -> {21}; 21 -> {22}; - 22 -> {29}; + 22 -> {23}; 23 -> {24}; - 24 -> {25}; - 25 -> {45}; - 25 -> {26} [style=dotted]; - 26 -> {27} [style=dotted]; + 24 -> {31}; + 25 -> {26}; + 26 -> {27}; + 27 -> {47}; 27 -> {28} [style=dotted]; 28 -> {29} [style=dotted]; - 29 -> {30}; - 30 -> {37 31}; + 29 -> {30} [style=dotted]; + 30 -> {31} [style=dotted]; 31 -> {32}; - 32 -> {33}; + 32 -> {39 33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; - 36 -> {43}; + 36 -> {37}; 37 -> {38}; - 38 -> {39}; + 38 -> {45}; 39 -> {40}; 40 -> {41}; 41 -> {42}; 42 -> {43}; 43 -> {44}; 44 -> {45}; + 45 -> {46}; + 46 -> {47}; } diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot b/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot index b7f74b28f2b..1db858f3b2d 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/equalsToBoolean.dot @@ -13,63 +13,69 @@ digraph equalsToBoolean_kt { subgraph cluster_1 { color=red - 2 [label="Enter property" style="filled" fillcolor=red]; - 3 [label="Exit property" style="filled" fillcolor=red]; + 2 [label="Enter function getter" style="filled" fillcolor=red]; + 3 [label="Exit function getter" style="filled" fillcolor=red]; } 2 -> {3}; subgraph cluster_2 { color=red - 4 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_3 { - color=blue - 5 [label="Enter block"]; - subgraph cluster_4 { - color=blue - 6 [label="Enter when"]; - subgraph cluster_5 { - color=blue - 7 [label="Enter when branch condition "]; - 8 [label="Access variable R|/b|"]; - 9 [label="Const: Boolean(true)"]; - 10 [label="Operator =="]; - 11 [label="Const: Boolean(true)"]; - 12 [label="Operator =="]; - 13 [label="Exit when branch condition"]; - } - subgraph cluster_6 { - color=blue - 14 [label="Enter when branch condition else"]; - 15 [label="Exit when branch condition"]; - } - 16 [label="Enter when branch result"]; - subgraph cluster_7 { - color=blue - 17 [label="Enter block"]; - 18 [label="Access variable R|/b|"]; - 19 [label="Function call: R|/b|.#()"]; - 20 [label="Exit block"]; - } - 21 [label="Exit when branch result"]; - 22 [label="Enter when branch result"]; - subgraph cluster_8 { - color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/b|"]; - 25 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 26 [label="Exit block"]; - } - 27 [label="Exit when branch result"]; - 28 [label="Exit when"]; - } - 29 [label="Exit block"]; - } - 30 [label="Exit function test_1" style="filled" fillcolor=red]; + 4 [label="Enter property" style="filled" fillcolor=red]; + 5 [label="Exit property" style="filled" fillcolor=red]; } 4 -> {5}; - 5 -> {6}; + + subgraph cluster_3 { + color=red + 6 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_4 { + color=blue + 7 [label="Enter block"]; + subgraph cluster_5 { + color=blue + 8 [label="Enter when"]; + subgraph cluster_6 { + color=blue + 9 [label="Enter when branch condition "]; + 10 [label="Access variable R|/b|"]; + 11 [label="Const: Boolean(true)"]; + 12 [label="Operator =="]; + 13 [label="Const: Boolean(true)"]; + 14 [label="Operator =="]; + 15 [label="Exit when branch condition"]; + } + subgraph cluster_7 { + color=blue + 16 [label="Enter when branch condition else"]; + 17 [label="Exit when branch condition"]; + } + 18 [label="Enter when branch result"]; + subgraph cluster_8 { + color=blue + 19 [label="Enter block"]; + 20 [label="Access variable R|/b|"]; + 21 [label="Function call: R|/b|.#()"]; + 22 [label="Exit block"]; + } + 23 [label="Exit when branch result"]; + 24 [label="Enter when branch result"]; + subgraph cluster_9 { + color=blue + 25 [label="Enter block"]; + 26 [label="Access variable R|/b|"]; + 27 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 28 [label="Exit block"]; + } + 29 [label="Exit when branch result"]; + 30 [label="Exit when"]; + } + 31 [label="Exit block"]; + } + 32 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 6 -> {7}; 7 -> {8}; 8 -> {9}; @@ -77,75 +83,75 @@ digraph equalsToBoolean_kt { 10 -> {11}; 11 -> {12}; 12 -> {13}; - 13 -> {22 14}; + 13 -> {14}; 14 -> {15}; - 15 -> {16}; + 15 -> {24 16}; 16 -> {17}; 17 -> {18}; 18 -> {19}; 19 -> {20}; 20 -> {21}; - 21 -> {28}; + 21 -> {22}; 22 -> {23}; - 23 -> {24}; + 23 -> {30}; 24 -> {25}; 25 -> {26}; 26 -> {27}; 27 -> {28}; 28 -> {29}; 29 -> {30}; + 30 -> {31}; + 31 -> {32}; - subgraph cluster_9 { + subgraph cluster_10 { color=red - 31 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_10 { + 33 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_11 { color=blue - 32 [label="Enter block"]; - subgraph cluster_11 { + 34 [label="Enter block"]; + subgraph cluster_12 { color=blue - 33 [label="Enter when"]; - subgraph cluster_12 { - color=blue - 34 [label="Enter when branch condition "]; - 35 [label="Access variable R|/b|"]; - 36 [label="Const: Boolean(true)"]; - 37 [label="Operator =="]; - 38 [label="Const: Boolean(true)"]; - 39 [label="Operator !="]; - 40 [label="Exit when branch condition"]; - } + 35 [label="Enter when"]; subgraph cluster_13 { color=blue - 41 [label="Enter when branch condition else"]; + 36 [label="Enter when branch condition "]; + 37 [label="Access variable R|/b|"]; + 38 [label="Const: Boolean(true)"]; + 39 [label="Operator =="]; + 40 [label="Const: Boolean(true)"]; + 41 [label="Operator !="]; 42 [label="Exit when branch condition"]; } - 43 [label="Enter when branch result"]; subgraph cluster_14 { color=blue - 44 [label="Enter block"]; - 45 [label="Access variable R|/b|"]; - 46 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 47 [label="Exit block"]; + 43 [label="Enter when branch condition else"]; + 44 [label="Exit when branch condition"]; } - 48 [label="Exit when branch result"]; - 49 [label="Enter when branch result"]; + 45 [label="Enter when branch result"]; subgraph cluster_15 { color=blue - 50 [label="Enter block"]; - 51 [label="Access variable R|/b|"]; - 52 [label="Function call: R|/b|.#()"]; - 53 [label="Exit block"]; + 46 [label="Enter block"]; + 47 [label="Access variable R|/b|"]; + 48 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 49 [label="Exit block"]; } - 54 [label="Exit when branch result"]; - 55 [label="Exit when"]; + 50 [label="Exit when branch result"]; + 51 [label="Enter when branch result"]; + subgraph cluster_16 { + color=blue + 52 [label="Enter block"]; + 53 [label="Access variable R|/b|"]; + 54 [label="Function call: R|/b|.#()"]; + 55 [label="Exit block"]; + } + 56 [label="Exit when branch result"]; + 57 [label="Exit when"]; } - 56 [label="Exit block"]; + 58 [label="Exit block"]; } - 57 [label="Exit function test_2" style="filled" fillcolor=red]; + 59 [label="Exit function test_2" style="filled" fillcolor=red]; } - 31 -> {32}; - 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; @@ -153,75 +159,75 @@ digraph equalsToBoolean_kt { 37 -> {38}; 38 -> {39}; 39 -> {40}; - 40 -> {49 41}; + 40 -> {41}; 41 -> {42}; - 42 -> {43}; + 42 -> {51 43}; 43 -> {44}; 44 -> {45}; 45 -> {46}; 46 -> {47}; 47 -> {48}; - 48 -> {55}; + 48 -> {49}; 49 -> {50}; - 50 -> {51}; + 50 -> {57}; 51 -> {52}; 52 -> {53}; 53 -> {54}; 54 -> {55}; 55 -> {56}; 56 -> {57}; + 57 -> {58}; + 58 -> {59}; - subgraph cluster_16 { + subgraph cluster_17 { color=red - 58 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_17 { + 60 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_18 { color=blue - 59 [label="Enter block"]; - subgraph cluster_18 { + 61 [label="Enter block"]; + subgraph cluster_19 { color=blue - 60 [label="Enter when"]; - subgraph cluster_19 { - color=blue - 61 [label="Enter when branch condition "]; - 62 [label="Access variable R|/b|"]; - 63 [label="Const: Boolean(true)"]; - 64 [label="Operator =="]; - 65 [label="Const: Boolean(false)"]; - 66 [label="Operator =="]; - 67 [label="Exit when branch condition"]; - } + 62 [label="Enter when"]; subgraph cluster_20 { color=blue - 68 [label="Enter when branch condition else"]; + 63 [label="Enter when branch condition "]; + 64 [label="Access variable R|/b|"]; + 65 [label="Const: Boolean(true)"]; + 66 [label="Operator =="]; + 67 [label="Const: Boolean(false)"]; + 68 [label="Operator =="]; 69 [label="Exit when branch condition"]; } - 70 [label="Enter when branch result"]; subgraph cluster_21 { color=blue - 71 [label="Enter block"]; - 72 [label="Access variable R|/b|"]; - 73 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 74 [label="Exit block"]; + 70 [label="Enter when branch condition else"]; + 71 [label="Exit when branch condition"]; } - 75 [label="Exit when branch result"]; - 76 [label="Enter when branch result"]; + 72 [label="Enter when branch result"]; subgraph cluster_22 { color=blue - 77 [label="Enter block"]; - 78 [label="Access variable R|/b|"]; - 79 [label="Function call: R|/b|.#()"]; - 80 [label="Exit block"]; + 73 [label="Enter block"]; + 74 [label="Access variable R|/b|"]; + 75 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 76 [label="Exit block"]; } - 81 [label="Exit when branch result"]; - 82 [label="Exit when"]; + 77 [label="Exit when branch result"]; + 78 [label="Enter when branch result"]; + subgraph cluster_23 { + color=blue + 79 [label="Enter block"]; + 80 [label="Access variable R|/b|"]; + 81 [label="Function call: R|/b|.#()"]; + 82 [label="Exit block"]; + } + 83 [label="Exit when branch result"]; + 84 [label="Exit when"]; } - 83 [label="Exit block"]; + 85 [label="Exit block"]; } - 84 [label="Exit function test_3" style="filled" fillcolor=red]; + 86 [label="Exit function test_3" style="filled" fillcolor=red]; } - 58 -> {59}; - 59 -> {60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; @@ -229,75 +235,75 @@ digraph equalsToBoolean_kt { 64 -> {65}; 65 -> {66}; 66 -> {67}; - 67 -> {76 68}; + 67 -> {68}; 68 -> {69}; - 69 -> {70}; + 69 -> {78 70}; 70 -> {71}; 71 -> {72}; 72 -> {73}; 73 -> {74}; 74 -> {75}; - 75 -> {82}; + 75 -> {76}; 76 -> {77}; - 77 -> {78}; + 77 -> {84}; 78 -> {79}; 79 -> {80}; 80 -> {81}; 81 -> {82}; 82 -> {83}; 83 -> {84}; + 84 -> {85}; + 85 -> {86}; - subgraph cluster_23 { + subgraph cluster_24 { color=red - 85 [label="Enter function test_4" style="filled" fillcolor=red]; - subgraph cluster_24 { + 87 [label="Enter function test_4" style="filled" fillcolor=red]; + subgraph cluster_25 { color=blue - 86 [label="Enter block"]; - subgraph cluster_25 { + 88 [label="Enter block"]; + subgraph cluster_26 { color=blue - 87 [label="Enter when"]; - subgraph cluster_26 { - color=blue - 88 [label="Enter when branch condition "]; - 89 [label="Access variable R|/b|"]; - 90 [label="Const: Boolean(true)"]; - 91 [label="Operator =="]; - 92 [label="Const: Boolean(false)"]; - 93 [label="Operator !="]; - 94 [label="Exit when branch condition"]; - } + 89 [label="Enter when"]; subgraph cluster_27 { color=blue - 95 [label="Enter when branch condition else"]; + 90 [label="Enter when branch condition "]; + 91 [label="Access variable R|/b|"]; + 92 [label="Const: Boolean(true)"]; + 93 [label="Operator =="]; + 94 [label="Const: Boolean(false)"]; + 95 [label="Operator !="]; 96 [label="Exit when branch condition"]; } - 97 [label="Enter when branch result"]; subgraph cluster_28 { color=blue - 98 [label="Enter block"]; - 99 [label="Access variable R|/b|"]; - 100 [label="Function call: R|/b|.#()"]; - 101 [label="Exit block"]; + 97 [label="Enter when branch condition else"]; + 98 [label="Exit when branch condition"]; } - 102 [label="Exit when branch result"]; - 103 [label="Enter when branch result"]; + 99 [label="Enter when branch result"]; subgraph cluster_29 { color=blue - 104 [label="Enter block"]; - 105 [label="Access variable R|/b|"]; - 106 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 107 [label="Exit block"]; + 100 [label="Enter block"]; + 101 [label="Access variable R|/b|"]; + 102 [label="Function call: R|/b|.#()"]; + 103 [label="Exit block"]; } - 108 [label="Exit when branch result"]; - 109 [label="Exit when"]; + 104 [label="Exit when branch result"]; + 105 [label="Enter when branch result"]; + subgraph cluster_30 { + color=blue + 106 [label="Enter block"]; + 107 [label="Access variable R|/b|"]; + 108 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 109 [label="Exit block"]; + } + 110 [label="Exit when branch result"]; + 111 [label="Exit when"]; } - 110 [label="Exit block"]; + 112 [label="Exit block"]; } - 111 [label="Exit function test_4" style="filled" fillcolor=red]; + 113 [label="Exit function test_4" style="filled" fillcolor=red]; } - 85 -> {86}; - 86 -> {87}; 87 -> {88}; 88 -> {89}; 89 -> {90}; @@ -305,75 +311,75 @@ digraph equalsToBoolean_kt { 91 -> {92}; 92 -> {93}; 93 -> {94}; - 94 -> {103 95}; + 94 -> {95}; 95 -> {96}; - 96 -> {97}; + 96 -> {105 97}; 97 -> {98}; 98 -> {99}; 99 -> {100}; 100 -> {101}; 101 -> {102}; - 102 -> {109}; + 102 -> {103}; 103 -> {104}; - 104 -> {105}; + 104 -> {111}; 105 -> {106}; 106 -> {107}; 107 -> {108}; 108 -> {109}; 109 -> {110}; 110 -> {111}; + 111 -> {112}; + 112 -> {113}; - subgraph cluster_30 { + subgraph cluster_31 { color=red - 112 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_31 { + 114 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_32 { color=blue - 113 [label="Enter block"]; - subgraph cluster_32 { + 115 [label="Enter block"]; + subgraph cluster_33 { color=blue - 114 [label="Enter when"]; - subgraph cluster_33 { - color=blue - 115 [label="Enter when branch condition "]; - 116 [label="Access variable R|/b|"]; - 117 [label="Const: Boolean(true)"]; - 118 [label="Operator !="]; - 119 [label="Const: Boolean(true)"]; - 120 [label="Operator =="]; - 121 [label="Exit when branch condition"]; - } + 116 [label="Enter when"]; subgraph cluster_34 { color=blue - 122 [label="Enter when branch condition else"]; + 117 [label="Enter when branch condition "]; + 118 [label="Access variable R|/b|"]; + 119 [label="Const: Boolean(true)"]; + 120 [label="Operator !="]; + 121 [label="Const: Boolean(true)"]; + 122 [label="Operator =="]; 123 [label="Exit when branch condition"]; } - 124 [label="Enter when branch result"]; subgraph cluster_35 { color=blue - 125 [label="Enter block"]; - 126 [label="Access variable R|/b|"]; - 127 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 128 [label="Exit block"]; + 124 [label="Enter when branch condition else"]; + 125 [label="Exit when branch condition"]; } - 129 [label="Exit when branch result"]; - 130 [label="Enter when branch result"]; + 126 [label="Enter when branch result"]; subgraph cluster_36 { color=blue - 131 [label="Enter block"]; - 132 [label="Access variable R|/b|"]; - 133 [label="Function call: R|/b|.#()"]; - 134 [label="Exit block"]; + 127 [label="Enter block"]; + 128 [label="Access variable R|/b|"]; + 129 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 130 [label="Exit block"]; } - 135 [label="Exit when branch result"]; - 136 [label="Exit when"]; + 131 [label="Exit when branch result"]; + 132 [label="Enter when branch result"]; + subgraph cluster_37 { + color=blue + 133 [label="Enter block"]; + 134 [label="Access variable R|/b|"]; + 135 [label="Function call: R|/b|.#()"]; + 136 [label="Exit block"]; + } + 137 [label="Exit when branch result"]; + 138 [label="Exit when"]; } - 137 [label="Exit block"]; + 139 [label="Exit block"]; } - 138 [label="Exit function test_5" style="filled" fillcolor=red]; + 140 [label="Exit function test_5" style="filled" fillcolor=red]; } - 112 -> {113}; - 113 -> {114}; 114 -> {115}; 115 -> {116}; 116 -> {117}; @@ -381,75 +387,75 @@ digraph equalsToBoolean_kt { 118 -> {119}; 119 -> {120}; 120 -> {121}; - 121 -> {130 122}; + 121 -> {122}; 122 -> {123}; - 123 -> {124}; + 123 -> {132 124}; 124 -> {125}; 125 -> {126}; 126 -> {127}; 127 -> {128}; 128 -> {129}; - 129 -> {136}; + 129 -> {130}; 130 -> {131}; - 131 -> {132}; + 131 -> {138}; 132 -> {133}; 133 -> {134}; 134 -> {135}; 135 -> {136}; 136 -> {137}; 137 -> {138}; + 138 -> {139}; + 139 -> {140}; - subgraph cluster_37 { + subgraph cluster_38 { color=red - 139 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_38 { + 141 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_39 { color=blue - 140 [label="Enter block"]; - subgraph cluster_39 { + 142 [label="Enter block"]; + subgraph cluster_40 { color=blue - 141 [label="Enter when"]; - subgraph cluster_40 { - color=blue - 142 [label="Enter when branch condition "]; - 143 [label="Access variable R|/b|"]; - 144 [label="Const: Boolean(true)"]; - 145 [label="Operator !="]; - 146 [label="Const: Boolean(true)"]; - 147 [label="Operator !="]; - 148 [label="Exit when branch condition"]; - } + 143 [label="Enter when"]; subgraph cluster_41 { color=blue - 149 [label="Enter when branch condition else"]; + 144 [label="Enter when branch condition "]; + 145 [label="Access variable R|/b|"]; + 146 [label="Const: Boolean(true)"]; + 147 [label="Operator !="]; + 148 [label="Const: Boolean(true)"]; + 149 [label="Operator !="]; 150 [label="Exit when branch condition"]; } - 151 [label="Enter when branch result"]; subgraph cluster_42 { color=blue - 152 [label="Enter block"]; - 153 [label="Access variable R|/b|"]; - 154 [label="Function call: R|/b|.#()"]; - 155 [label="Exit block"]; + 151 [label="Enter when branch condition else"]; + 152 [label="Exit when branch condition"]; } - 156 [label="Exit when branch result"]; - 157 [label="Enter when branch result"]; + 153 [label="Enter when branch result"]; subgraph cluster_43 { color=blue - 158 [label="Enter block"]; - 159 [label="Access variable R|/b|"]; - 160 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 161 [label="Exit block"]; + 154 [label="Enter block"]; + 155 [label="Access variable R|/b|"]; + 156 [label="Function call: R|/b|.#()"]; + 157 [label="Exit block"]; } - 162 [label="Exit when branch result"]; - 163 [label="Exit when"]; + 158 [label="Exit when branch result"]; + 159 [label="Enter when branch result"]; + subgraph cluster_44 { + color=blue + 160 [label="Enter block"]; + 161 [label="Access variable R|/b|"]; + 162 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 163 [label="Exit block"]; + } + 164 [label="Exit when branch result"]; + 165 [label="Exit when"]; } - 164 [label="Exit block"]; + 166 [label="Exit block"]; } - 165 [label="Exit function test_6" style="filled" fillcolor=red]; + 167 [label="Exit function test_6" style="filled" fillcolor=red]; } - 139 -> {140}; - 140 -> {141}; 141 -> {142}; 142 -> {143}; 143 -> {144}; @@ -457,75 +463,75 @@ digraph equalsToBoolean_kt { 145 -> {146}; 146 -> {147}; 147 -> {148}; - 148 -> {157 149}; + 148 -> {149}; 149 -> {150}; - 150 -> {151}; + 150 -> {159 151}; 151 -> {152}; 152 -> {153}; 153 -> {154}; 154 -> {155}; 155 -> {156}; - 156 -> {163}; + 156 -> {157}; 157 -> {158}; - 158 -> {159}; + 158 -> {165}; 159 -> {160}; 160 -> {161}; 161 -> {162}; 162 -> {163}; 163 -> {164}; 164 -> {165}; + 165 -> {166}; + 166 -> {167}; - subgraph cluster_44 { + subgraph cluster_45 { color=red - 166 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_45 { + 168 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_46 { color=blue - 167 [label="Enter block"]; - subgraph cluster_46 { + 169 [label="Enter block"]; + subgraph cluster_47 { color=blue - 168 [label="Enter when"]; - subgraph cluster_47 { - color=blue - 169 [label="Enter when branch condition "]; - 170 [label="Access variable R|/b|"]; - 171 [label="Const: Boolean(true)"]; - 172 [label="Operator !="]; - 173 [label="Const: Boolean(false)"]; - 174 [label="Operator =="]; - 175 [label="Exit when branch condition"]; - } + 170 [label="Enter when"]; subgraph cluster_48 { color=blue - 176 [label="Enter when branch condition else"]; + 171 [label="Enter when branch condition "]; + 172 [label="Access variable R|/b|"]; + 173 [label="Const: Boolean(true)"]; + 174 [label="Operator !="]; + 175 [label="Const: Boolean(false)"]; + 176 [label="Operator =="]; 177 [label="Exit when branch condition"]; } - 178 [label="Enter when branch result"]; subgraph cluster_49 { color=blue - 179 [label="Enter block"]; - 180 [label="Access variable R|/b|"]; - 181 [label="Function call: R|/b|.#()"]; - 182 [label="Exit block"]; + 178 [label="Enter when branch condition else"]; + 179 [label="Exit when branch condition"]; } - 183 [label="Exit when branch result"]; - 184 [label="Enter when branch result"]; + 180 [label="Enter when branch result"]; subgraph cluster_50 { color=blue - 185 [label="Enter block"]; - 186 [label="Access variable R|/b|"]; - 187 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 188 [label="Exit block"]; + 181 [label="Enter block"]; + 182 [label="Access variable R|/b|"]; + 183 [label="Function call: R|/b|.#()"]; + 184 [label="Exit block"]; } - 189 [label="Exit when branch result"]; - 190 [label="Exit when"]; + 185 [label="Exit when branch result"]; + 186 [label="Enter when branch result"]; + subgraph cluster_51 { + color=blue + 187 [label="Enter block"]; + 188 [label="Access variable R|/b|"]; + 189 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 190 [label="Exit block"]; + } + 191 [label="Exit when branch result"]; + 192 [label="Exit when"]; } - 191 [label="Exit block"]; + 193 [label="Exit block"]; } - 192 [label="Exit function test_7" style="filled" fillcolor=red]; + 194 [label="Exit function test_7" style="filled" fillcolor=red]; } - 166 -> {167}; - 167 -> {168}; 168 -> {169}; 169 -> {170}; 170 -> {171}; @@ -533,75 +539,75 @@ digraph equalsToBoolean_kt { 172 -> {173}; 173 -> {174}; 174 -> {175}; - 175 -> {184 176}; + 175 -> {176}; 176 -> {177}; - 177 -> {178}; + 177 -> {186 178}; 178 -> {179}; 179 -> {180}; 180 -> {181}; 181 -> {182}; 182 -> {183}; - 183 -> {190}; + 183 -> {184}; 184 -> {185}; - 185 -> {186}; + 185 -> {192}; 186 -> {187}; 187 -> {188}; 188 -> {189}; 189 -> {190}; 190 -> {191}; 191 -> {192}; + 192 -> {193}; + 193 -> {194}; - subgraph cluster_51 { + subgraph cluster_52 { color=red - 193 [label="Enter function test_8" style="filled" fillcolor=red]; - subgraph cluster_52 { + 195 [label="Enter function test_8" style="filled" fillcolor=red]; + subgraph cluster_53 { color=blue - 194 [label="Enter block"]; - subgraph cluster_53 { + 196 [label="Enter block"]; + subgraph cluster_54 { color=blue - 195 [label="Enter when"]; - subgraph cluster_54 { - color=blue - 196 [label="Enter when branch condition "]; - 197 [label="Access variable R|/b|"]; - 198 [label="Const: Boolean(true)"]; - 199 [label="Operator !="]; - 200 [label="Const: Boolean(false)"]; - 201 [label="Operator !="]; - 202 [label="Exit when branch condition"]; - } + 197 [label="Enter when"]; subgraph cluster_55 { color=blue - 203 [label="Enter when branch condition else"]; + 198 [label="Enter when branch condition "]; + 199 [label="Access variable R|/b|"]; + 200 [label="Const: Boolean(true)"]; + 201 [label="Operator !="]; + 202 [label="Const: Boolean(false)"]; + 203 [label="Operator !="]; 204 [label="Exit when branch condition"]; } - 205 [label="Enter when branch result"]; subgraph cluster_56 { color=blue - 206 [label="Enter block"]; - 207 [label="Access variable R|/b|"]; - 208 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 209 [label="Exit block"]; + 205 [label="Enter when branch condition else"]; + 206 [label="Exit when branch condition"]; } - 210 [label="Exit when branch result"]; - 211 [label="Enter when branch result"]; + 207 [label="Enter when branch result"]; subgraph cluster_57 { color=blue - 212 [label="Enter block"]; - 213 [label="Access variable R|/b|"]; - 214 [label="Function call: R|/b|.#()"]; - 215 [label="Exit block"]; + 208 [label="Enter block"]; + 209 [label="Access variable R|/b|"]; + 210 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 211 [label="Exit block"]; } - 216 [label="Exit when branch result"]; - 217 [label="Exit when"]; + 212 [label="Exit when branch result"]; + 213 [label="Enter when branch result"]; + subgraph cluster_58 { + color=blue + 214 [label="Enter block"]; + 215 [label="Access variable R|/b|"]; + 216 [label="Function call: R|/b|.#()"]; + 217 [label="Exit block"]; + } + 218 [label="Exit when branch result"]; + 219 [label="Exit when"]; } - 218 [label="Exit block"]; + 220 [label="Exit block"]; } - 219 [label="Exit function test_8" style="filled" fillcolor=red]; + 221 [label="Exit function test_8" style="filled" fillcolor=red]; } - 193 -> {194}; - 194 -> {195}; 195 -> {196}; 196 -> {197}; 197 -> {198}; @@ -609,22 +615,24 @@ digraph equalsToBoolean_kt { 199 -> {200}; 200 -> {201}; 201 -> {202}; - 202 -> {211 203}; + 202 -> {203}; 203 -> {204}; - 204 -> {205}; + 204 -> {213 205}; 205 -> {206}; 206 -> {207}; 207 -> {208}; 208 -> {209}; 209 -> {210}; - 210 -> {217}; + 210 -> {211}; 211 -> {212}; - 212 -> {213}; + 212 -> {219}; 213 -> {214}; 214 -> {215}; 215 -> {216}; 216 -> {217}; 217 -> {218}; 218 -> {219}; + 219 -> {220}; + 220 -> {221}; } diff --git a/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot b/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot index 920297bb553..f69e8015f95 100644 --- a/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot +++ b/compiler/fir/resolve/testData/resolve/smartcasts/nullability.dot @@ -21,416 +21,428 @@ digraph nullability_kt { subgraph cluster_2 { color=red - 4 [label="Enter property" style="filled" fillcolor=red]; - 5 [label="Exit property" style="filled" fillcolor=red]; + 4 [label="Enter function getter" style="filled" fillcolor=red]; + 5 [label="Exit function getter" style="filled" fillcolor=red]; } 4 -> {5}; subgraph cluster_3 { color=red - 6 [label="Enter function fs" style="filled" fillcolor=red]; - 7 [label="Exit function fs" style="filled" fillcolor=red]; + 6 [label="Enter property" style="filled" fillcolor=red]; + 7 [label="Exit property" style="filled" fillcolor=red]; } 6 -> {7}; subgraph cluster_4 { color=red - 8 [label="Enter property" style="filled" fillcolor=red]; - 9 [label="Exit property" style="filled" fillcolor=red]; + 8 [label="Enter function fs" style="filled" fillcolor=red]; + 9 [label="Exit function fs" style="filled" fillcolor=red]; } 8 -> {9}; subgraph cluster_5 { color=red - 10 [label="Enter function fdata" style="filled" fillcolor=red]; - 11 [label="Exit function fdata" style="filled" fillcolor=red]; + 10 [label="Enter function getter" style="filled" fillcolor=red]; + 11 [label="Exit function getter" style="filled" fillcolor=red]; } 10 -> {11}; subgraph cluster_6 { color=red - 12 [label="Enter function test_1" style="filled" fillcolor=red]; - subgraph cluster_7 { - color=blue - 13 [label="Enter block"]; - subgraph cluster_8 { - color=blue - 14 [label="Enter when"]; - subgraph cluster_9 { - color=blue - 15 [label="Enter when branch condition "]; - 16 [label="Access variable R|/x|"]; - 17 [label="Const: Null(null)"]; - 18 [label="Operator !="]; - 19 [label="Exit when branch condition"]; - } - subgraph cluster_10 { - color=blue - 20 [label="Enter when branch condition else"]; - 21 [label="Exit when branch condition"]; - } - 22 [label="Enter when branch result"]; - subgraph cluster_11 { - color=blue - 23 [label="Enter block"]; - 24 [label="Access variable R|/x|"]; - 25 [label="Function call: R|/x|.#()"]; - 26 [label="Exit block"]; - } - 27 [label="Exit when branch result"]; - 28 [label="Enter when branch result"]; - subgraph cluster_12 { - color=blue - 29 [label="Enter block"]; - 30 [label="Access variable R|/x|"]; - 31 [label="Function call: R|/x|.R|/A.foo|()"]; - 32 [label="Exit block"]; - } - 33 [label="Exit when branch result"]; - 34 [label="Exit when"]; - } - 35 [label="Access variable R|/x|"]; - 36 [label="Function call: R|/x|.#()"]; - 37 [label="Exit block"]; - } - 38 [label="Exit function test_1" style="filled" fillcolor=red]; + 12 [label="Enter property" style="filled" fillcolor=red]; + 13 [label="Exit property" style="filled" fillcolor=red]; } 12 -> {13}; - 13 -> {14}; + + subgraph cluster_7 { + color=red + 14 [label="Enter function fdata" style="filled" fillcolor=red]; + 15 [label="Exit function fdata" style="filled" fillcolor=red]; + } + 14 -> {15}; - 15 -> {16}; + + subgraph cluster_8 { + color=red + 16 [label="Enter function test_1" style="filled" fillcolor=red]; + subgraph cluster_9 { + color=blue + 17 [label="Enter block"]; + subgraph cluster_10 { + color=blue + 18 [label="Enter when"]; + subgraph cluster_11 { + color=blue + 19 [label="Enter when branch condition "]; + 20 [label="Access variable R|/x|"]; + 21 [label="Const: Null(null)"]; + 22 [label="Operator !="]; + 23 [label="Exit when branch condition"]; + } + subgraph cluster_12 { + color=blue + 24 [label="Enter when branch condition else"]; + 25 [label="Exit when branch condition"]; + } + 26 [label="Enter when branch result"]; + subgraph cluster_13 { + color=blue + 27 [label="Enter block"]; + 28 [label="Access variable R|/x|"]; + 29 [label="Function call: R|/x|.#()"]; + 30 [label="Exit block"]; + } + 31 [label="Exit when branch result"]; + 32 [label="Enter when branch result"]; + subgraph cluster_14 { + color=blue + 33 [label="Enter block"]; + 34 [label="Access variable R|/x|"]; + 35 [label="Function call: R|/x|.R|/A.foo|()"]; + 36 [label="Exit block"]; + } + 37 [label="Exit when branch result"]; + 38 [label="Exit when"]; + } + 39 [label="Access variable R|/x|"]; + 40 [label="Function call: R|/x|.#()"]; + 41 [label="Exit block"]; + } + 42 [label="Exit function test_1" style="filled" fillcolor=red]; + } + 16 -> {17}; 17 -> {18}; 18 -> {19}; - 19 -> {28 20}; + 19 -> {20}; 20 -> {21}; 21 -> {22}; 22 -> {23}; - 23 -> {24}; + 23 -> {32 24}; 24 -> {25}; 25 -> {26}; 26 -> {27}; - 27 -> {34}; + 27 -> {28}; 28 -> {29}; 29 -> {30}; 30 -> {31}; - 31 -> {32}; + 31 -> {38}; 32 -> {33}; 33 -> {34}; 34 -> {35}; 35 -> {36}; 36 -> {37}; 37 -> {38}; - - subgraph cluster_13 { - color=red - 39 [label="Enter function test_2" style="filled" fillcolor=red]; - subgraph cluster_14 { - color=blue - 40 [label="Enter block"]; - subgraph cluster_15 { - color=blue - 41 [label="Enter when"]; - subgraph cluster_16 { - color=blue - 42 [label="Enter when branch condition "]; - 43 [label="Access variable R|/x|"]; - 44 [label="Const: Null(null)"]; - 45 [label="Operator =="]; - 46 [label="Exit when branch condition"]; - } - subgraph cluster_17 { - color=blue - 47 [label="Enter when branch condition else"]; - 48 [label="Exit when branch condition"]; - } - 49 [label="Enter when branch result"]; - subgraph cluster_18 { - color=blue - 50 [label="Enter block"]; - 51 [label="Access variable R|/x|"]; - 52 [label="Function call: R|/x|.R|/A.foo|()"]; - 53 [label="Exit block"]; - } - 54 [label="Exit when branch result"]; - 55 [label="Enter when branch result"]; - subgraph cluster_19 { - color=blue - 56 [label="Enter block"]; - 57 [label="Access variable R|/x|"]; - 58 [label="Function call: R|/x|.#()"]; - 59 [label="Exit block"]; - } - 60 [label="Exit when branch result"]; - 61 [label="Exit when"]; - } - 62 [label="Access variable R|/x|"]; - 63 [label="Function call: R|/x|.#()"]; - 64 [label="Exit block"]; - } - 65 [label="Exit function test_2" style="filled" fillcolor=red]; - } - + 38 -> {39}; 39 -> {40}; 40 -> {41}; 41 -> {42}; - 42 -> {43}; + + subgraph cluster_15 { + color=red + 43 [label="Enter function test_2" style="filled" fillcolor=red]; + subgraph cluster_16 { + color=blue + 44 [label="Enter block"]; + subgraph cluster_17 { + color=blue + 45 [label="Enter when"]; + subgraph cluster_18 { + color=blue + 46 [label="Enter when branch condition "]; + 47 [label="Access variable R|/x|"]; + 48 [label="Const: Null(null)"]; + 49 [label="Operator =="]; + 50 [label="Exit when branch condition"]; + } + subgraph cluster_19 { + color=blue + 51 [label="Enter when branch condition else"]; + 52 [label="Exit when branch condition"]; + } + 53 [label="Enter when branch result"]; + subgraph cluster_20 { + color=blue + 54 [label="Enter block"]; + 55 [label="Access variable R|/x|"]; + 56 [label="Function call: R|/x|.R|/A.foo|()"]; + 57 [label="Exit block"]; + } + 58 [label="Exit when branch result"]; + 59 [label="Enter when branch result"]; + subgraph cluster_21 { + color=blue + 60 [label="Enter block"]; + 61 [label="Access variable R|/x|"]; + 62 [label="Function call: R|/x|.#()"]; + 63 [label="Exit block"]; + } + 64 [label="Exit when branch result"]; + 65 [label="Exit when"]; + } + 66 [label="Access variable R|/x|"]; + 67 [label="Function call: R|/x|.#()"]; + 68 [label="Exit block"]; + } + 69 [label="Exit function test_2" style="filled" fillcolor=red]; + } + 43 -> {44}; 44 -> {45}; 45 -> {46}; - 46 -> {55 47}; + 46 -> {47}; 47 -> {48}; 48 -> {49}; 49 -> {50}; - 50 -> {51}; + 50 -> {59 51}; 51 -> {52}; 52 -> {53}; 53 -> {54}; - 54 -> {61}; + 54 -> {55}; 55 -> {56}; 56 -> {57}; 57 -> {58}; - 58 -> {59}; + 58 -> {65}; 59 -> {60}; 60 -> {61}; 61 -> {62}; 62 -> {63}; 63 -> {64}; 64 -> {65}; - - subgraph cluster_20 { - color=red - 66 [label="Enter function test_3" style="filled" fillcolor=red]; - subgraph cluster_21 { - color=blue - 67 [label="Enter block"]; - subgraph cluster_22 { - color=blue - 68 [label="Enter when"]; - 69 [label="Access variable R|/x|"]; - 70 [label="Variable declaration: lval : R|A?|"]; - subgraph cluster_23 { - color=blue - 71 [label="Enter when branch condition "]; - 72 [label="Const: Null(null)"]; - 73 [label="Operator =="]; - 74 [label="Exit when branch condition"]; - } - subgraph cluster_24 { - color=blue - 75 [label="Enter when branch condition else"]; - 76 [label="Exit when branch condition"]; - } - 77 [label="Enter when branch result"]; - subgraph cluster_25 { - color=blue - 78 [label="Enter block"]; - 79 [label="Access variable R|/|"]; - 80 [label="Exit block"]; - } - 81 [label="Exit when branch result"]; - 82 [label="Enter when branch result"]; - subgraph cluster_26 { - color=blue - 83 [label="Enter block"]; - 84 [label="Jump: ^test_3 Unit"]; - 85 [label="Stub" style="filled" fillcolor=gray]; - 86 [label="Exit block" style="filled" fillcolor=gray]; - } - 87 [label="Exit when branch result" style="filled" fillcolor=gray]; - 88 [label="Exit when"]; - } - 89 [label="Access variable R|/x|"]; - 90 [label="Function call: R|/x|.R|/A.foo|()"]; - 91 [label="Exit block"]; - } - 92 [label="Exit function test_3" style="filled" fillcolor=red]; - } - + 65 -> {66}; 66 -> {67}; 67 -> {68}; 68 -> {69}; - 69 -> {70}; + + subgraph cluster_22 { + color=red + 70 [label="Enter function test_3" style="filled" fillcolor=red]; + subgraph cluster_23 { + color=blue + 71 [label="Enter block"]; + subgraph cluster_24 { + color=blue + 72 [label="Enter when"]; + 73 [label="Access variable R|/x|"]; + 74 [label="Variable declaration: lval : R|A?|"]; + subgraph cluster_25 { + color=blue + 75 [label="Enter when branch condition "]; + 76 [label="Const: Null(null)"]; + 77 [label="Operator =="]; + 78 [label="Exit when branch condition"]; + } + subgraph cluster_26 { + color=blue + 79 [label="Enter when branch condition else"]; + 80 [label="Exit when branch condition"]; + } + 81 [label="Enter when branch result"]; + subgraph cluster_27 { + color=blue + 82 [label="Enter block"]; + 83 [label="Access variable R|/|"]; + 84 [label="Exit block"]; + } + 85 [label="Exit when branch result"]; + 86 [label="Enter when branch result"]; + subgraph cluster_28 { + color=blue + 87 [label="Enter block"]; + 88 [label="Jump: ^test_3 Unit"]; + 89 [label="Stub" style="filled" fillcolor=gray]; + 90 [label="Exit block" style="filled" fillcolor=gray]; + } + 91 [label="Exit when branch result" style="filled" fillcolor=gray]; + 92 [label="Exit when"]; + } + 93 [label="Access variable R|/x|"]; + 94 [label="Function call: R|/x|.R|/A.foo|()"]; + 95 [label="Exit block"]; + } + 96 [label="Exit function test_3" style="filled" fillcolor=red]; + } + 70 -> {71}; 71 -> {72}; 72 -> {73}; 73 -> {74}; - 74 -> {82 75}; + 74 -> {75}; 75 -> {76}; 76 -> {77}; 77 -> {78}; - 78 -> {79}; + 78 -> {86 79}; 79 -> {80}; 80 -> {81}; - 81 -> {88}; + 81 -> {82}; 82 -> {83}; 83 -> {84}; - 84 -> {92}; - 84 -> {85} [style=dotted]; - 85 -> {86} [style=dotted]; - 86 -> {87} [style=dotted]; - 87 -> {88} [style=dotted]; - 88 -> {89}; - 89 -> {90}; - 90 -> {91}; - 91 -> {92}; - - subgraph cluster_27 { - color=red - 93 [label="Enter function test_4" style="filled" fillcolor=red]; - subgraph cluster_28 { - color=blue - 94 [label="Enter block"]; - subgraph cluster_29 { - color=blue - 95 [label="Enter when"]; - subgraph cluster_30 { - color=blue - 96 [label="Enter when branch condition "]; - 97 [label="Access variable R|/x|"]; - 98 [label="Function call: R|/x|?.R|/A.getA|()"]; - 99 [label="Const: Null(null)"]; - 100 [label="Operator =="]; - 101 [label="Exit when branch condition"]; - } - subgraph cluster_31 { - color=blue - 102 [label="Enter when branch condition else"]; - 103 [label="Exit when branch condition"]; - } - 104 [label="Enter when branch result"]; - subgraph cluster_32 { - color=blue - 105 [label="Enter block"]; - 106 [label="Exit block"]; - } - 107 [label="Exit when branch result"]; - 108 [label="Enter when branch result"]; - subgraph cluster_33 { - color=blue - 109 [label="Enter block"]; - 110 [label="Jump: ^test_4 Unit"]; - 111 [label="Stub" style="filled" fillcolor=gray]; - 112 [label="Exit block" style="filled" fillcolor=gray]; - } - 113 [label="Exit when branch result" style="filled" fillcolor=gray]; - 114 [label="Exit when"]; - } - 115 [label="Access variable R|/x|"]; - 116 [label="Function call: R|/x|.R|/A.foo|()"]; - 117 [label="Exit block"]; - } - 118 [label="Exit function test_4" style="filled" fillcolor=red]; - } - + 84 -> {85}; + 85 -> {92}; + 86 -> {87}; + 87 -> {88}; + 88 -> {96}; + 88 -> {89} [style=dotted]; + 89 -> {90} [style=dotted]; + 90 -> {91} [style=dotted]; + 91 -> {92} [style=dotted]; + 92 -> {93}; 93 -> {94}; 94 -> {95}; 95 -> {96}; - 96 -> {97}; + + subgraph cluster_29 { + color=red + 97 [label="Enter function test_4" style="filled" fillcolor=red]; + subgraph cluster_30 { + color=blue + 98 [label="Enter block"]; + subgraph cluster_31 { + color=blue + 99 [label="Enter when"]; + subgraph cluster_32 { + color=blue + 100 [label="Enter when branch condition "]; + 101 [label="Access variable R|/x|"]; + 102 [label="Function call: R|/x|?.R|/A.getA|()"]; + 103 [label="Const: Null(null)"]; + 104 [label="Operator =="]; + 105 [label="Exit when branch condition"]; + } + subgraph cluster_33 { + color=blue + 106 [label="Enter when branch condition else"]; + 107 [label="Exit when branch condition"]; + } + 108 [label="Enter when branch result"]; + subgraph cluster_34 { + color=blue + 109 [label="Enter block"]; + 110 [label="Exit block"]; + } + 111 [label="Exit when branch result"]; + 112 [label="Enter when branch result"]; + subgraph cluster_35 { + color=blue + 113 [label="Enter block"]; + 114 [label="Jump: ^test_4 Unit"]; + 115 [label="Stub" style="filled" fillcolor=gray]; + 116 [label="Exit block" style="filled" fillcolor=gray]; + } + 117 [label="Exit when branch result" style="filled" fillcolor=gray]; + 118 [label="Exit when"]; + } + 119 [label="Access variable R|/x|"]; + 120 [label="Function call: R|/x|.R|/A.foo|()"]; + 121 [label="Exit block"]; + } + 122 [label="Exit function test_4" style="filled" fillcolor=red]; + } + 97 -> {98}; 98 -> {99}; 99 -> {100}; 100 -> {101}; - 101 -> {108 102}; + 101 -> {102}; 102 -> {103}; 103 -> {104}; 104 -> {105}; - 105 -> {106}; + 105 -> {112 106}; 106 -> {107}; - 107 -> {114}; + 107 -> {108}; 108 -> {109}; 109 -> {110}; - 110 -> {118}; - 110 -> {111} [style=dotted]; - 111 -> {112} [style=dotted]; - 112 -> {113} [style=dotted]; - 113 -> {114} [style=dotted]; - 114 -> {115}; - 115 -> {116}; - 116 -> {117}; - 117 -> {118}; - - subgraph cluster_34 { - color=red - 119 [label="Enter function test_5" style="filled" fillcolor=red]; - subgraph cluster_35 { - color=blue - 120 [label="Enter block"]; - subgraph cluster_36 { - color=blue - 121 [label="Enter when"]; - subgraph cluster_37 { - color=blue - 122 [label="Enter when branch condition "]; - 123 [label="Access variable R|/q|"]; - 124 [label="Access variable R|/Q.data|"]; - 125 [label="Access variable R|/MyData.s|"]; - 126 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; - 127 [label="Const: Null(null)"]; - 128 [label="Operator !="]; - 129 [label="Exit when branch condition"]; - } - subgraph cluster_38 { - color=blue - 130 [label="Enter when branch condition else"]; - 131 [label="Exit when branch condition"]; - } - 132 [label="Enter when branch result"]; - subgraph cluster_39 { - color=blue - 133 [label="Enter block"]; - 134 [label="Exit block"]; - } - 135 [label="Exit when branch result"]; - 136 [label="Enter when branch result"]; - subgraph cluster_40 { - color=blue - 137 [label="Enter block"]; - 138 [label="Access variable R|/q|"]; - 139 [label="Access variable R|/Q.data|"]; - 140 [label="Access variable R|/q|"]; - 141 [label="Access variable R|/Q.data|"]; - 142 [label="Access variable R|/MyData.s|"]; - 143 [label="Access variable R|/q|"]; - 144 [label="Access variable R|/Q.data|"]; - 145 [label="Access variable R|/MyData.s|"]; - 146 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 147 [label="Exit block"]; - } - 148 [label="Exit when branch result"]; - 149 [label="Exit when"]; - } - 150 [label="Exit block"]; - } - 151 [label="Exit function test_5" style="filled" fillcolor=red]; - } - + 110 -> {111}; + 111 -> {118}; + 112 -> {113}; + 113 -> {114}; + 114 -> {122}; + 114 -> {115} [style=dotted]; + 115 -> {116} [style=dotted]; + 116 -> {117} [style=dotted]; + 117 -> {118} [style=dotted]; + 118 -> {119}; 119 -> {120}; 120 -> {121}; 121 -> {122}; - 122 -> {123}; + + subgraph cluster_36 { + color=red + 123 [label="Enter function test_5" style="filled" fillcolor=red]; + subgraph cluster_37 { + color=blue + 124 [label="Enter block"]; + subgraph cluster_38 { + color=blue + 125 [label="Enter when"]; + subgraph cluster_39 { + color=blue + 126 [label="Enter when branch condition "]; + 127 [label="Access variable R|/q|"]; + 128 [label="Access variable R|/Q.data|"]; + 129 [label="Access variable R|/MyData.s|"]; + 130 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; + 131 [label="Const: Null(null)"]; + 132 [label="Operator !="]; + 133 [label="Exit when branch condition"]; + } + subgraph cluster_40 { + color=blue + 134 [label="Enter when branch condition else"]; + 135 [label="Exit when branch condition"]; + } + 136 [label="Enter when branch result"]; + subgraph cluster_41 { + color=blue + 137 [label="Enter block"]; + 138 [label="Exit block"]; + } + 139 [label="Exit when branch result"]; + 140 [label="Enter when branch result"]; + subgraph cluster_42 { + color=blue + 141 [label="Enter block"]; + 142 [label="Access variable R|/q|"]; + 143 [label="Access variable R|/Q.data|"]; + 144 [label="Access variable R|/q|"]; + 145 [label="Access variable R|/Q.data|"]; + 146 [label="Access variable R|/MyData.s|"]; + 147 [label="Access variable R|/q|"]; + 148 [label="Access variable R|/Q.data|"]; + 149 [label="Access variable R|/MyData.s|"]; + 150 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 151 [label="Exit block"]; + } + 152 [label="Exit when branch result"]; + 153 [label="Exit when"]; + } + 154 [label="Exit block"]; + } + 155 [label="Exit function test_5" style="filled" fillcolor=red]; + } + 123 -> {124}; 124 -> {125}; 125 -> {126}; 126 -> {127}; 127 -> {128}; 128 -> {129}; - 129 -> {136 130}; + 129 -> {130}; 130 -> {131}; 131 -> {132}; 132 -> {133}; - 133 -> {134}; + 133 -> {140 134}; 134 -> {135}; - 135 -> {149}; + 135 -> {136}; 136 -> {137}; 137 -> {138}; 138 -> {139}; - 139 -> {140}; + 139 -> {153}; 140 -> {141}; 141 -> {142}; 142 -> {143}; @@ -442,70 +454,70 @@ digraph nullability_kt { 148 -> {149}; 149 -> {150}; 150 -> {151}; - - subgraph cluster_41 { - color=red - 152 [label="Enter function test_6" style="filled" fillcolor=red]; - subgraph cluster_42 { - color=blue - 153 [label="Enter block"]; - subgraph cluster_43 { - color=blue - 154 [label="Enter when"]; - 155 [label="Access variable R|/q|"]; - 156 [label="Access variable R|/Q.data|"]; - 157 [label="Access variable R|/MyData.s|"]; - 158 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; - 159 [label="Variable declaration: lval : R|kotlin/Int?|"]; - subgraph cluster_44 { - color=blue - 160 [label="Enter when branch condition "]; - 161 [label="Const: Null(null)"]; - 162 [label="Operator =="]; - 163 [label="Exit when branch condition"]; - } - subgraph cluster_45 { - color=blue - 164 [label="Enter when branch condition else"]; - 165 [label="Exit when branch condition"]; - } - 166 [label="Enter when branch result"]; - subgraph cluster_46 { - color=blue - 167 [label="Enter block"]; - 168 [label="Access variable R|/|"]; - 169 [label="Exit block"]; - } - 170 [label="Exit when branch result"]; - 171 [label="Enter when branch result"]; - subgraph cluster_47 { - color=blue - 172 [label="Enter block"]; - 173 [label="Jump: ^test_6 Unit"]; - 174 [label="Stub" style="filled" fillcolor=gray]; - 175 [label="Exit block" style="filled" fillcolor=gray]; - } - 176 [label="Exit when branch result" style="filled" fillcolor=gray]; - 177 [label="Exit when"]; - } - 178 [label="Access variable R|/q|"]; - 179 [label="Access variable R|/Q.data|"]; - 180 [label="Access variable R|/q|"]; - 181 [label="Access variable R|/Q.data|"]; - 182 [label="Access variable R|/MyData.s|"]; - 183 [label="Access variable R|/q|"]; - 184 [label="Access variable R|/Q.data|"]; - 185 [label="Access variable R|/MyData.s|"]; - 186 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; - 187 [label="Exit block"]; - } - 188 [label="Exit function test_6" style="filled" fillcolor=red]; - } - + 151 -> {152}; 152 -> {153}; 153 -> {154}; 154 -> {155}; - 155 -> {156}; + + subgraph cluster_43 { + color=red + 156 [label="Enter function test_6" style="filled" fillcolor=red]; + subgraph cluster_44 { + color=blue + 157 [label="Enter block"]; + subgraph cluster_45 { + color=blue + 158 [label="Enter when"]; + 159 [label="Access variable R|/q|"]; + 160 [label="Access variable R|/Q.data|"]; + 161 [label="Access variable R|/MyData.s|"]; + 162 [label="Function call: R|/q|?.R|/Q.data|?.R|/MyData.s|?.R|kotlin/Int.inc|()"]; + 163 [label="Variable declaration: lval : R|kotlin/Int?|"]; + subgraph cluster_46 { + color=blue + 164 [label="Enter when branch condition "]; + 165 [label="Const: Null(null)"]; + 166 [label="Operator =="]; + 167 [label="Exit when branch condition"]; + } + subgraph cluster_47 { + color=blue + 168 [label="Enter when branch condition else"]; + 169 [label="Exit when branch condition"]; + } + 170 [label="Enter when branch result"]; + subgraph cluster_48 { + color=blue + 171 [label="Enter block"]; + 172 [label="Access variable R|/|"]; + 173 [label="Exit block"]; + } + 174 [label="Exit when branch result"]; + 175 [label="Enter when branch result"]; + subgraph cluster_49 { + color=blue + 176 [label="Enter block"]; + 177 [label="Jump: ^test_6 Unit"]; + 178 [label="Stub" style="filled" fillcolor=gray]; + 179 [label="Exit block" style="filled" fillcolor=gray]; + } + 180 [label="Exit when branch result" style="filled" fillcolor=gray]; + 181 [label="Exit when"]; + } + 182 [label="Access variable R|/q|"]; + 183 [label="Access variable R|/Q.data|"]; + 184 [label="Access variable R|/q|"]; + 185 [label="Access variable R|/Q.data|"]; + 186 [label="Access variable R|/MyData.s|"]; + 187 [label="Access variable R|/q|"]; + 188 [label="Access variable R|/Q.data|"]; + 189 [label="Access variable R|/MyData.s|"]; + 190 [label="Function call: R|/q|.R|/Q.data|.R|/MyData.s|.R|kotlin/Int.inc|()"]; + 191 [label="Exit block"]; + } + 192 [label="Exit function test_6" style="filled" fillcolor=red]; + } + 156 -> {157}; 157 -> {158}; 158 -> {159}; @@ -513,25 +525,25 @@ digraph nullability_kt { 160 -> {161}; 161 -> {162}; 162 -> {163}; - 163 -> {171 164}; + 163 -> {164}; 164 -> {165}; 165 -> {166}; 166 -> {167}; - 167 -> {168}; + 167 -> {175 168}; 168 -> {169}; 169 -> {170}; - 170 -> {177}; + 170 -> {171}; 171 -> {172}; 172 -> {173}; - 173 -> {188}; - 173 -> {174} [style=dotted]; - 174 -> {175} [style=dotted]; - 175 -> {176} [style=dotted]; - 176 -> {177} [style=dotted]; - 177 -> {178}; - 178 -> {179}; - 179 -> {180}; - 180 -> {181}; + 173 -> {174}; + 174 -> {181}; + 175 -> {176}; + 176 -> {177}; + 177 -> {192}; + 177 -> {178} [style=dotted]; + 178 -> {179} [style=dotted]; + 179 -> {180} [style=dotted]; + 180 -> {181} [style=dotted]; 181 -> {182}; 182 -> {183}; 183 -> {184}; @@ -539,83 +551,83 @@ digraph nullability_kt { 185 -> {186}; 186 -> {187}; 187 -> {188}; - - subgraph cluster_48 { - color=red - 189 [label="Enter function test_7" style="filled" fillcolor=red]; - subgraph cluster_49 { - color=blue - 190 [label="Enter block"]; - subgraph cluster_50 { - color=blue - 191 [label="Enter when"]; - subgraph cluster_51 { - color=blue - 192 [label="Enter when branch condition "]; - 193 [label="Access variable R|/q|"]; - 194 [label="Function call: R|/q|?.R|/Q.fdata|()"]; - 195 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()"]; - 196 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()?.R|kotlin/Int.inc|()"]; - 197 [label="Const: Null(null)"]; - 198 [label="Operator !="]; - 199 [label="Exit when branch condition"]; - } - subgraph cluster_52 { - color=blue - 200 [label="Enter when branch condition else"]; - 201 [label="Exit when branch condition"]; - } - 202 [label="Enter when branch result"]; - subgraph cluster_53 { - color=blue - 203 [label="Enter block"]; - 204 [label="Exit block"]; - } - 205 [label="Exit when branch result"]; - 206 [label="Enter when branch result"]; - subgraph cluster_54 { - color=blue - 207 [label="Enter block"]; - 208 [label="Access variable R|/q|"]; - 209 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 210 [label="Access variable R|/q|"]; - 211 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 212 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 213 [label="Access variable R|/q|"]; - 214 [label="Function call: R|/q|.R|/Q.fdata|()"]; - 215 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; - 216 [label="Function call: R|/q|.R|/Q.fdata|().#().#()"]; - 217 [label="Exit block"]; - } - 218 [label="Exit when branch result"]; - 219 [label="Exit when"]; - } - 220 [label="Exit block"]; - } - 221 [label="Exit function test_7" style="filled" fillcolor=red]; - } - + 188 -> {189}; 189 -> {190}; 190 -> {191}; 191 -> {192}; - 192 -> {193}; + + subgraph cluster_50 { + color=red + 193 [label="Enter function test_7" style="filled" fillcolor=red]; + subgraph cluster_51 { + color=blue + 194 [label="Enter block"]; + subgraph cluster_52 { + color=blue + 195 [label="Enter when"]; + subgraph cluster_53 { + color=blue + 196 [label="Enter when branch condition "]; + 197 [label="Access variable R|/q|"]; + 198 [label="Function call: R|/q|?.R|/Q.fdata|()"]; + 199 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()"]; + 200 [label="Function call: R|/q|?.R|/Q.fdata|()?.R|/MyData.fs|()?.R|kotlin/Int.inc|()"]; + 201 [label="Const: Null(null)"]; + 202 [label="Operator !="]; + 203 [label="Exit when branch condition"]; + } + subgraph cluster_54 { + color=blue + 204 [label="Enter when branch condition else"]; + 205 [label="Exit when branch condition"]; + } + 206 [label="Enter when branch result"]; + subgraph cluster_55 { + color=blue + 207 [label="Enter block"]; + 208 [label="Exit block"]; + } + 209 [label="Exit when branch result"]; + 210 [label="Enter when branch result"]; + subgraph cluster_56 { + color=blue + 211 [label="Enter block"]; + 212 [label="Access variable R|/q|"]; + 213 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 214 [label="Access variable R|/q|"]; + 215 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 216 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 217 [label="Access variable R|/q|"]; + 218 [label="Function call: R|/q|.R|/Q.fdata|()"]; + 219 [label="Function call: R|/q|.R|/Q.fdata|().#()"]; + 220 [label="Function call: R|/q|.R|/Q.fdata|().#().#()"]; + 221 [label="Exit block"]; + } + 222 [label="Exit when branch result"]; + 223 [label="Exit when"]; + } + 224 [label="Exit block"]; + } + 225 [label="Exit function test_7" style="filled" fillcolor=red]; + } + 193 -> {194}; 194 -> {195}; 195 -> {196}; 196 -> {197}; 197 -> {198}; 198 -> {199}; - 199 -> {206 200}; + 199 -> {200}; 200 -> {201}; 201 -> {202}; 202 -> {203}; - 203 -> {204}; + 203 -> {210 204}; 204 -> {205}; - 205 -> {219}; + 205 -> {206}; 206 -> {207}; 207 -> {208}; 208 -> {209}; - 209 -> {210}; + 209 -> {223}; 210 -> {211}; 211 -> {212}; 212 -> {213}; @@ -627,248 +639,248 @@ digraph nullability_kt { 218 -> {219}; 219 -> {220}; 220 -> {221}; - - subgraph cluster_55 { - color=red - 222 [label="Enter function test_8" style="filled" fillcolor=red]; - subgraph cluster_56 { - color=blue - 223 [label="Enter block"]; - subgraph cluster_57 { - color=blue - 224 [label="Enter when"]; - subgraph cluster_58 { - color=blue - 225 [label="Enter when branch condition "]; - 226 [label="Access variable R|/b|"]; - 227 [label="Const: Boolean(true)"]; - 228 [label="Operator =="]; - 229 [label="Exit when branch condition"]; - } - subgraph cluster_59 { - color=blue - 230 [label="Enter when branch condition else"]; - 231 [label="Exit when branch condition"]; - } - 232 [label="Enter when branch result"]; - subgraph cluster_60 { - color=blue - 233 [label="Enter block"]; - 234 [label="Exit block"]; - } - 235 [label="Exit when branch result"]; - 236 [label="Enter when branch result"]; - subgraph cluster_61 { - color=blue - 237 [label="Enter block"]; - 238 [label="Access variable R|/b|"]; - 239 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; - 240 [label="Exit block"]; - } - 241 [label="Exit when branch result"]; - 242 [label="Exit when"]; - } - 243 [label="Exit block"]; - } - 244 [label="Exit function test_8" style="filled" fillcolor=red]; - } - + 221 -> {222}; 222 -> {223}; 223 -> {224}; 224 -> {225}; - 225 -> {226}; + + subgraph cluster_57 { + color=red + 226 [label="Enter function test_8" style="filled" fillcolor=red]; + subgraph cluster_58 { + color=blue + 227 [label="Enter block"]; + subgraph cluster_59 { + color=blue + 228 [label="Enter when"]; + subgraph cluster_60 { + color=blue + 229 [label="Enter when branch condition "]; + 230 [label="Access variable R|/b|"]; + 231 [label="Const: Boolean(true)"]; + 232 [label="Operator =="]; + 233 [label="Exit when branch condition"]; + } + subgraph cluster_61 { + color=blue + 234 [label="Enter when branch condition else"]; + 235 [label="Exit when branch condition"]; + } + 236 [label="Enter when branch result"]; + subgraph cluster_62 { + color=blue + 237 [label="Enter block"]; + 238 [label="Exit block"]; + } + 239 [label="Exit when branch result"]; + 240 [label="Enter when branch result"]; + subgraph cluster_63 { + color=blue + 241 [label="Enter block"]; + 242 [label="Access variable R|/b|"]; + 243 [label="Function call: R|/b|.R|kotlin/Boolean.not|()"]; + 244 [label="Exit block"]; + } + 245 [label="Exit when branch result"]; + 246 [label="Exit when"]; + } + 247 [label="Exit block"]; + } + 248 [label="Exit function test_8" style="filled" fillcolor=red]; + } + 226 -> {227}; 227 -> {228}; 228 -> {229}; - 229 -> {236 230}; + 229 -> {230}; 230 -> {231}; 231 -> {232}; 232 -> {233}; - 233 -> {234}; + 233 -> {240 234}; 234 -> {235}; - 235 -> {242}; + 235 -> {236}; 236 -> {237}; 237 -> {238}; 238 -> {239}; - 239 -> {240}; + 239 -> {246}; 240 -> {241}; 241 -> {242}; 242 -> {243}; 243 -> {244}; - - subgraph cluster_62 { - color=red - 245 [label="Enter function test_9" style="filled" fillcolor=red]; - subgraph cluster_63 { - color=blue - 246 [label="Enter block"]; - subgraph cluster_64 { - color=blue - 247 [label="Enter when"]; - subgraph cluster_65 { - color=blue - 248 [label="Enter when branch condition "]; - 249 [label="Access variable R|/a|"]; - 250 [label="Access variable R|/b|"]; - 251 [label="Operator =="]; - 252 [label="Exit when branch condition"]; - } - subgraph cluster_66 { - color=blue - 253 [label="Enter when branch condition else"]; - 254 [label="Exit when branch condition"]; - } - 255 [label="Enter when branch result"]; - subgraph cluster_67 { - color=blue - 256 [label="Enter block"]; - 257 [label="Exit block"]; - } - 258 [label="Exit when branch result"]; - 259 [label="Enter when branch result"]; - subgraph cluster_68 { - color=blue - 260 [label="Enter block"]; - 261 [label="Access variable R|/b|"]; - 262 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 263 [label="Exit block"]; - } - 264 [label="Exit when branch result"]; - 265 [label="Exit when"]; - } - 266 [label="Access variable R|/b|"]; - 267 [label="Function call: R|/b|.#()"]; - subgraph cluster_69 { - color=blue - 268 [label="Enter when"]; - subgraph cluster_70 { - color=blue - 269 [label="Enter when branch condition "]; - 270 [label="Access variable R|/a|"]; - 271 [label="Access variable R|/b|"]; - 272 [label="Operator ==="]; - 273 [label="Exit when branch condition"]; - } - subgraph cluster_71 { - color=blue - 274 [label="Enter when branch condition else"]; - 275 [label="Exit when branch condition"]; - } - 276 [label="Enter when branch result"]; - subgraph cluster_72 { - color=blue - 277 [label="Enter block"]; - 278 [label="Exit block"]; - } - 279 [label="Exit when branch result"]; - 280 [label="Enter when branch result"]; - subgraph cluster_73 { - color=blue - 281 [label="Enter block"]; - 282 [label="Access variable R|/b|"]; - 283 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 284 [label="Exit block"]; - } - 285 [label="Exit when branch result"]; - 286 [label="Exit when"]; - } - 287 [label="Access variable R|/b|"]; - 288 [label="Function call: R|/b|.#()"]; - subgraph cluster_74 { - color=blue - 289 [label="Enter when"]; - subgraph cluster_75 { - color=blue - 290 [label="Enter when branch condition "]; - 291 [label="Access variable R|/b|"]; - 292 [label="Access variable R|/a|"]; - 293 [label="Operator =="]; - 294 [label="Exit when branch condition"]; - } - subgraph cluster_76 { - color=blue - 295 [label="Enter when branch condition else"]; - 296 [label="Exit when branch condition"]; - } - 297 [label="Enter when branch result"]; - subgraph cluster_77 { - color=blue - 298 [label="Enter block"]; - 299 [label="Exit block"]; - } - 300 [label="Exit when branch result"]; - 301 [label="Enter when branch result"]; - subgraph cluster_78 { - color=blue - 302 [label="Enter block"]; - 303 [label="Access variable R|/b|"]; - 304 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 305 [label="Exit block"]; - } - 306 [label="Exit when branch result"]; - 307 [label="Exit when"]; - } - 308 [label="Access variable R|/b|"]; - 309 [label="Function call: R|/b|.#()"]; - subgraph cluster_79 { - color=blue - 310 [label="Enter when"]; - subgraph cluster_80 { - color=blue - 311 [label="Enter when branch condition "]; - 312 [label="Access variable R|/b|"]; - 313 [label="Access variable R|/a|"]; - 314 [label="Operator ==="]; - 315 [label="Exit when branch condition"]; - } - subgraph cluster_81 { - color=blue - 316 [label="Enter when branch condition else"]; - 317 [label="Exit when branch condition"]; - } - 318 [label="Enter when branch result"]; - subgraph cluster_82 { - color=blue - 319 [label="Enter block"]; - 320 [label="Exit block"]; - } - 321 [label="Exit when branch result"]; - 322 [label="Enter when branch result"]; - subgraph cluster_83 { - color=blue - 323 [label="Enter block"]; - 324 [label="Access variable R|/b|"]; - 325 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; - 326 [label="Exit block"]; - } - 327 [label="Exit when branch result"]; - 328 [label="Exit when"]; - } - 329 [label="Access variable R|/b|"]; - 330 [label="Function call: R|/b|.#()"]; - 331 [label="Exit block"]; - } - 332 [label="Exit function test_9" style="filled" fillcolor=red]; - } - + 244 -> {245}; 245 -> {246}; 246 -> {247}; 247 -> {248}; - 248 -> {249}; + + subgraph cluster_64 { + color=red + 249 [label="Enter function test_9" style="filled" fillcolor=red]; + subgraph cluster_65 { + color=blue + 250 [label="Enter block"]; + subgraph cluster_66 { + color=blue + 251 [label="Enter when"]; + subgraph cluster_67 { + color=blue + 252 [label="Enter when branch condition "]; + 253 [label="Access variable R|/a|"]; + 254 [label="Access variable R|/b|"]; + 255 [label="Operator =="]; + 256 [label="Exit when branch condition"]; + } + subgraph cluster_68 { + color=blue + 257 [label="Enter when branch condition else"]; + 258 [label="Exit when branch condition"]; + } + 259 [label="Enter when branch result"]; + subgraph cluster_69 { + color=blue + 260 [label="Enter block"]; + 261 [label="Exit block"]; + } + 262 [label="Exit when branch result"]; + 263 [label="Enter when branch result"]; + subgraph cluster_70 { + color=blue + 264 [label="Enter block"]; + 265 [label="Access variable R|/b|"]; + 266 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 267 [label="Exit block"]; + } + 268 [label="Exit when branch result"]; + 269 [label="Exit when"]; + } + 270 [label="Access variable R|/b|"]; + 271 [label="Function call: R|/b|.#()"]; + subgraph cluster_71 { + color=blue + 272 [label="Enter when"]; + subgraph cluster_72 { + color=blue + 273 [label="Enter when branch condition "]; + 274 [label="Access variable R|/a|"]; + 275 [label="Access variable R|/b|"]; + 276 [label="Operator ==="]; + 277 [label="Exit when branch condition"]; + } + subgraph cluster_73 { + color=blue + 278 [label="Enter when branch condition else"]; + 279 [label="Exit when branch condition"]; + } + 280 [label="Enter when branch result"]; + subgraph cluster_74 { + color=blue + 281 [label="Enter block"]; + 282 [label="Exit block"]; + } + 283 [label="Exit when branch result"]; + 284 [label="Enter when branch result"]; + subgraph cluster_75 { + color=blue + 285 [label="Enter block"]; + 286 [label="Access variable R|/b|"]; + 287 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 288 [label="Exit block"]; + } + 289 [label="Exit when branch result"]; + 290 [label="Exit when"]; + } + 291 [label="Access variable R|/b|"]; + 292 [label="Function call: R|/b|.#()"]; + subgraph cluster_76 { + color=blue + 293 [label="Enter when"]; + subgraph cluster_77 { + color=blue + 294 [label="Enter when branch condition "]; + 295 [label="Access variable R|/b|"]; + 296 [label="Access variable R|/a|"]; + 297 [label="Operator =="]; + 298 [label="Exit when branch condition"]; + } + subgraph cluster_78 { + color=blue + 299 [label="Enter when branch condition else"]; + 300 [label="Exit when branch condition"]; + } + 301 [label="Enter when branch result"]; + subgraph cluster_79 { + color=blue + 302 [label="Enter block"]; + 303 [label="Exit block"]; + } + 304 [label="Exit when branch result"]; + 305 [label="Enter when branch result"]; + subgraph cluster_80 { + color=blue + 306 [label="Enter block"]; + 307 [label="Access variable R|/b|"]; + 308 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 309 [label="Exit block"]; + } + 310 [label="Exit when branch result"]; + 311 [label="Exit when"]; + } + 312 [label="Access variable R|/b|"]; + 313 [label="Function call: R|/b|.#()"]; + subgraph cluster_81 { + color=blue + 314 [label="Enter when"]; + subgraph cluster_82 { + color=blue + 315 [label="Enter when branch condition "]; + 316 [label="Access variable R|/b|"]; + 317 [label="Access variable R|/a|"]; + 318 [label="Operator ==="]; + 319 [label="Exit when branch condition"]; + } + subgraph cluster_83 { + color=blue + 320 [label="Enter when branch condition else"]; + 321 [label="Exit when branch condition"]; + } + 322 [label="Enter when branch result"]; + subgraph cluster_84 { + color=blue + 323 [label="Enter block"]; + 324 [label="Exit block"]; + } + 325 [label="Exit when branch result"]; + 326 [label="Enter when branch result"]; + subgraph cluster_85 { + color=blue + 327 [label="Enter block"]; + 328 [label="Access variable R|/b|"]; + 329 [label="Function call: R|/b|.R|kotlin/Int.inc|()"]; + 330 [label="Exit block"]; + } + 331 [label="Exit when branch result"]; + 332 [label="Exit when"]; + } + 333 [label="Access variable R|/b|"]; + 334 [label="Function call: R|/b|.#()"]; + 335 [label="Exit block"]; + } + 336 [label="Exit function test_9" style="filled" fillcolor=red]; + } + 249 -> {250}; 250 -> {251}; 251 -> {252}; - 252 -> {259 253}; + 252 -> {253}; 253 -> {254}; 254 -> {255}; 255 -> {256}; - 256 -> {257}; + 256 -> {263 257}; 257 -> {258}; - 258 -> {265}; + 258 -> {259}; 259 -> {260}; 260 -> {261}; 261 -> {262}; - 262 -> {263}; + 262 -> {269}; 263 -> {264}; 264 -> {265}; 265 -> {266}; @@ -879,17 +891,17 @@ digraph nullability_kt { 270 -> {271}; 271 -> {272}; 272 -> {273}; - 273 -> {280 274}; + 273 -> {274}; 274 -> {275}; 275 -> {276}; 276 -> {277}; - 277 -> {278}; + 277 -> {284 278}; 278 -> {279}; - 279 -> {286}; + 279 -> {280}; 280 -> {281}; 281 -> {282}; 282 -> {283}; - 283 -> {284}; + 283 -> {290}; 284 -> {285}; 285 -> {286}; 286 -> {287}; @@ -900,17 +912,17 @@ digraph nullability_kt { 291 -> {292}; 292 -> {293}; 293 -> {294}; - 294 -> {301 295}; + 294 -> {295}; 295 -> {296}; 296 -> {297}; 297 -> {298}; - 298 -> {299}; + 298 -> {305 299}; 299 -> {300}; - 300 -> {307}; + 300 -> {301}; 301 -> {302}; 302 -> {303}; 303 -> {304}; - 304 -> {305}; + 304 -> {311}; 305 -> {306}; 306 -> {307}; 307 -> {308}; @@ -921,197 +933,197 @@ digraph nullability_kt { 312 -> {313}; 313 -> {314}; 314 -> {315}; - 315 -> {322 316}; + 315 -> {316}; 316 -> {317}; 317 -> {318}; 318 -> {319}; - 319 -> {320}; + 319 -> {326 320}; 320 -> {321}; - 321 -> {328}; + 321 -> {322}; 322 -> {323}; 323 -> {324}; 324 -> {325}; - 325 -> {326}; + 325 -> {332}; 326 -> {327}; 327 -> {328}; 328 -> {329}; 329 -> {330}; 330 -> {331}; 331 -> {332}; - - subgraph cluster_84 { - color=red - 333 [label="Enter function test_10" style="filled" fillcolor=red]; - subgraph cluster_85 { - color=blue - 334 [label="Enter block"]; - subgraph cluster_86 { - color=blue - 335 [label="Enter when"]; - subgraph cluster_87 { - color=blue - 336 [label="Enter when branch condition "]; - 337 [label="Access variable R|/a|"]; - 338 [label="Access variable R|/b|"]; - 339 [label="Operator =="]; - 340 [label="Exit when branch condition"]; - } - subgraph cluster_88 { - color=blue - 341 [label="Enter when branch condition else"]; - 342 [label="Exit when branch condition"]; - } - 343 [label="Enter when branch result"]; - subgraph cluster_89 { - color=blue - 344 [label="Enter block"]; - 345 [label="Exit block"]; - } - 346 [label="Exit when branch result"]; - 347 [label="Enter when branch result"]; - subgraph cluster_90 { - color=blue - 348 [label="Enter block"]; - 349 [label="Access variable R|/b|"]; - 350 [label="Function call: R|/b|.#()"]; - 351 [label="Exit block"]; - } - 352 [label="Exit when branch result"]; - 353 [label="Exit when"]; - } - 354 [label="Access variable R|/b|"]; - 355 [label="Function call: R|/b|.#()"]; - subgraph cluster_91 { - color=blue - 356 [label="Enter when"]; - subgraph cluster_92 { - color=blue - 357 [label="Enter when branch condition "]; - 358 [label="Access variable R|/a|"]; - 359 [label="Access variable R|/b|"]; - 360 [label="Operator ==="]; - 361 [label="Exit when branch condition"]; - } - subgraph cluster_93 { - color=blue - 362 [label="Enter when branch condition else"]; - 363 [label="Exit when branch condition"]; - } - 364 [label="Enter when branch result"]; - subgraph cluster_94 { - color=blue - 365 [label="Enter block"]; - 366 [label="Exit block"]; - } - 367 [label="Exit when branch result"]; - 368 [label="Enter when branch result"]; - subgraph cluster_95 { - color=blue - 369 [label="Enter block"]; - 370 [label="Access variable R|/b|"]; - 371 [label="Function call: R|/b|.#()"]; - 372 [label="Exit block"]; - } - 373 [label="Exit when branch result"]; - 374 [label="Exit when"]; - } - 375 [label="Access variable R|/b|"]; - 376 [label="Function call: R|/b|.#()"]; - subgraph cluster_96 { - color=blue - 377 [label="Enter when"]; - subgraph cluster_97 { - color=blue - 378 [label="Enter when branch condition "]; - 379 [label="Access variable R|/b|"]; - 380 [label="Access variable R|/a|"]; - 381 [label="Operator =="]; - 382 [label="Exit when branch condition"]; - } - subgraph cluster_98 { - color=blue - 383 [label="Enter when branch condition else"]; - 384 [label="Exit when branch condition"]; - } - 385 [label="Enter when branch result"]; - subgraph cluster_99 { - color=blue - 386 [label="Enter block"]; - 387 [label="Exit block"]; - } - 388 [label="Exit when branch result"]; - 389 [label="Enter when branch result"]; - subgraph cluster_100 { - color=blue - 390 [label="Enter block"]; - 391 [label="Access variable R|/b|"]; - 392 [label="Function call: R|/b|.#()"]; - 393 [label="Exit block"]; - } - 394 [label="Exit when branch result"]; - 395 [label="Exit when"]; - } - 396 [label="Access variable R|/b|"]; - 397 [label="Function call: R|/b|.#()"]; - subgraph cluster_101 { - color=blue - 398 [label="Enter when"]; - subgraph cluster_102 { - color=blue - 399 [label="Enter when branch condition "]; - 400 [label="Access variable R|/b|"]; - 401 [label="Access variable R|/a|"]; - 402 [label="Operator ==="]; - 403 [label="Exit when branch condition"]; - } - subgraph cluster_103 { - color=blue - 404 [label="Enter when branch condition else"]; - 405 [label="Exit when branch condition"]; - } - 406 [label="Enter when branch result"]; - subgraph cluster_104 { - color=blue - 407 [label="Enter block"]; - 408 [label="Exit block"]; - } - 409 [label="Exit when branch result"]; - 410 [label="Enter when branch result"]; - subgraph cluster_105 { - color=blue - 411 [label="Enter block"]; - 412 [label="Access variable R|/b|"]; - 413 [label="Function call: R|/b|.#()"]; - 414 [label="Exit block"]; - } - 415 [label="Exit when branch result"]; - 416 [label="Exit when"]; - } - 417 [label="Access variable R|/b|"]; - 418 [label="Function call: R|/b|.#()"]; - 419 [label="Exit block"]; - } - 420 [label="Exit function test_10" style="filled" fillcolor=red]; - } - + 332 -> {333}; 333 -> {334}; 334 -> {335}; 335 -> {336}; - 336 -> {337}; + + subgraph cluster_86 { + color=red + 337 [label="Enter function test_10" style="filled" fillcolor=red]; + subgraph cluster_87 { + color=blue + 338 [label="Enter block"]; + subgraph cluster_88 { + color=blue + 339 [label="Enter when"]; + subgraph cluster_89 { + color=blue + 340 [label="Enter when branch condition "]; + 341 [label="Access variable R|/a|"]; + 342 [label="Access variable R|/b|"]; + 343 [label="Operator =="]; + 344 [label="Exit when branch condition"]; + } + subgraph cluster_90 { + color=blue + 345 [label="Enter when branch condition else"]; + 346 [label="Exit when branch condition"]; + } + 347 [label="Enter when branch result"]; + subgraph cluster_91 { + color=blue + 348 [label="Enter block"]; + 349 [label="Exit block"]; + } + 350 [label="Exit when branch result"]; + 351 [label="Enter when branch result"]; + subgraph cluster_92 { + color=blue + 352 [label="Enter block"]; + 353 [label="Access variable R|/b|"]; + 354 [label="Function call: R|/b|.#()"]; + 355 [label="Exit block"]; + } + 356 [label="Exit when branch result"]; + 357 [label="Exit when"]; + } + 358 [label="Access variable R|/b|"]; + 359 [label="Function call: R|/b|.#()"]; + subgraph cluster_93 { + color=blue + 360 [label="Enter when"]; + subgraph cluster_94 { + color=blue + 361 [label="Enter when branch condition "]; + 362 [label="Access variable R|/a|"]; + 363 [label="Access variable R|/b|"]; + 364 [label="Operator ==="]; + 365 [label="Exit when branch condition"]; + } + subgraph cluster_95 { + color=blue + 366 [label="Enter when branch condition else"]; + 367 [label="Exit when branch condition"]; + } + 368 [label="Enter when branch result"]; + subgraph cluster_96 { + color=blue + 369 [label="Enter block"]; + 370 [label="Exit block"]; + } + 371 [label="Exit when branch result"]; + 372 [label="Enter when branch result"]; + subgraph cluster_97 { + color=blue + 373 [label="Enter block"]; + 374 [label="Access variable R|/b|"]; + 375 [label="Function call: R|/b|.#()"]; + 376 [label="Exit block"]; + } + 377 [label="Exit when branch result"]; + 378 [label="Exit when"]; + } + 379 [label="Access variable R|/b|"]; + 380 [label="Function call: R|/b|.#()"]; + subgraph cluster_98 { + color=blue + 381 [label="Enter when"]; + subgraph cluster_99 { + color=blue + 382 [label="Enter when branch condition "]; + 383 [label="Access variable R|/b|"]; + 384 [label="Access variable R|/a|"]; + 385 [label="Operator =="]; + 386 [label="Exit when branch condition"]; + } + subgraph cluster_100 { + color=blue + 387 [label="Enter when branch condition else"]; + 388 [label="Exit when branch condition"]; + } + 389 [label="Enter when branch result"]; + subgraph cluster_101 { + color=blue + 390 [label="Enter block"]; + 391 [label="Exit block"]; + } + 392 [label="Exit when branch result"]; + 393 [label="Enter when branch result"]; + subgraph cluster_102 { + color=blue + 394 [label="Enter block"]; + 395 [label="Access variable R|/b|"]; + 396 [label="Function call: R|/b|.#()"]; + 397 [label="Exit block"]; + } + 398 [label="Exit when branch result"]; + 399 [label="Exit when"]; + } + 400 [label="Access variable R|/b|"]; + 401 [label="Function call: R|/b|.#()"]; + subgraph cluster_103 { + color=blue + 402 [label="Enter when"]; + subgraph cluster_104 { + color=blue + 403 [label="Enter when branch condition "]; + 404 [label="Access variable R|/b|"]; + 405 [label="Access variable R|/a|"]; + 406 [label="Operator ==="]; + 407 [label="Exit when branch condition"]; + } + subgraph cluster_105 { + color=blue + 408 [label="Enter when branch condition else"]; + 409 [label="Exit when branch condition"]; + } + 410 [label="Enter when branch result"]; + subgraph cluster_106 { + color=blue + 411 [label="Enter block"]; + 412 [label="Exit block"]; + } + 413 [label="Exit when branch result"]; + 414 [label="Enter when branch result"]; + subgraph cluster_107 { + color=blue + 415 [label="Enter block"]; + 416 [label="Access variable R|/b|"]; + 417 [label="Function call: R|/b|.#()"]; + 418 [label="Exit block"]; + } + 419 [label="Exit when branch result"]; + 420 [label="Exit when"]; + } + 421 [label="Access variable R|/b|"]; + 422 [label="Function call: R|/b|.#()"]; + 423 [label="Exit block"]; + } + 424 [label="Exit function test_10" style="filled" fillcolor=red]; + } + 337 -> {338}; 338 -> {339}; 339 -> {340}; - 340 -> {347 341}; + 340 -> {341}; 341 -> {342}; 342 -> {343}; 343 -> {344}; - 344 -> {345}; + 344 -> {351 345}; 345 -> {346}; - 346 -> {353}; + 346 -> {347}; 347 -> {348}; 348 -> {349}; 349 -> {350}; - 350 -> {351}; + 350 -> {357}; 351 -> {352}; 352 -> {353}; 353 -> {354}; @@ -1122,17 +1134,17 @@ digraph nullability_kt { 358 -> {359}; 359 -> {360}; 360 -> {361}; - 361 -> {368 362}; + 361 -> {362}; 362 -> {363}; 363 -> {364}; 364 -> {365}; - 365 -> {366}; + 365 -> {372 366}; 366 -> {367}; - 367 -> {374}; + 367 -> {368}; 368 -> {369}; 369 -> {370}; 370 -> {371}; - 371 -> {372}; + 371 -> {378}; 372 -> {373}; 373 -> {374}; 374 -> {375}; @@ -1143,17 +1155,17 @@ digraph nullability_kt { 379 -> {380}; 380 -> {381}; 381 -> {382}; - 382 -> {389 383}; + 382 -> {383}; 383 -> {384}; 384 -> {385}; 385 -> {386}; - 386 -> {387}; + 386 -> {393 387}; 387 -> {388}; - 388 -> {395}; + 388 -> {389}; 389 -> {390}; 390 -> {391}; 391 -> {392}; - 392 -> {393}; + 392 -> {399}; 393 -> {394}; 394 -> {395}; 395 -> {396}; @@ -1164,22 +1176,26 @@ digraph nullability_kt { 400 -> {401}; 401 -> {402}; 402 -> {403}; - 403 -> {410 404}; + 403 -> {404}; 404 -> {405}; 405 -> {406}; 406 -> {407}; - 407 -> {408}; + 407 -> {414 408}; 408 -> {409}; - 409 -> {416}; + 409 -> {410}; 410 -> {411}; 411 -> {412}; 412 -> {413}; - 413 -> {414}; + 413 -> {420}; 414 -> {415}; 415 -> {416}; 416 -> {417}; 417 -> {418}; 418 -> {419}; 419 -> {420}; + 420 -> {421}; + 421 -> {422}; + 422 -> {423}; + 423 -> {424}; } diff --git a/compiler/fir/resolve/testData/resolve/stdlib/simpleDelegatedToMap.txt b/compiler/fir/resolve/testData/resolve/stdlib/simpleDelegatedToMap.txt index 4f809582e3d..c4019f42bea 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/simpleDelegatedToMap.txt +++ b/compiler/fir/resolve/testData/resolve/stdlib/simpleDelegatedToMap.txt @@ -12,7 +12,7 @@ FILE: simpleDelegatedToMap.kt ^ D|/C.foo|.#(this@R|/C|, ::R|/C.foo|) } public set(: ): R|kotlin/Unit| { - D|/C.foo|.#(this@R|/C|, ::R|/C.foo|, R|/|) + D|/C.foo|.#(this@R|/C|, ::R|/C.foo|, R|/foo|) } } @@ -21,5 +21,5 @@ FILE: simpleDelegatedToMap.kt ^ D|/bar|.#(Null(null), ::R|/bar|) } public set(: ): R|kotlin/Unit| { - D|/bar|.#(Null(null), ::R|/bar|, R|/|) + D|/bar|.#(Null(null), ::R|/bar|, R|/bar|) } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt index 50899ff684e..40c57f64a58 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt @@ -25,7 +25,7 @@ import kotlin.system.measureNanoTime fun checkFirProvidersConsistency(firFiles: List) { - for ((session, files) in firFiles.groupBy { it.fileSession }) { + for ((session, files) in firFiles.groupBy { it.session }) { val provider = session.firProvider as FirProviderImpl provider.ensureConsistent(files) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt similarity index 54% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt index 30966d9f142..92d8fd8f927 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractElement.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt @@ -5,10 +5,8 @@ package org.jetbrains.kotlin.fir -import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.name.Name -abstract class FirPureAbstractElement : FirElement - -abstract class FirAbstractElement( - final override val psi: PsiElement? -) : FirPureAbstractElement() \ No newline at end of file +val NAME_FOR_BACKING_FIELD = Name.identifier("field") +val NAME_FOR_DEFAULT_VALUE_PARAMETER = Name.identifier("value") +val CONSTRUCTOR_NAME = Name.special("") \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAnnotationContainer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAnnotationContainer.kt new file mode 100644 index 00000000000..129bf99855e --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAnnotationContainer.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2019 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 com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirAnnotationContainer : FirElement { + override val psi: PsiElement? + val annotations: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnnotationContainer(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirControlFlowGraphOwner.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirControlFlowGraphOwner.kt new file mode 100644 index 00000000000..74df0b0f948 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirControlFlowGraphOwner.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2019 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 com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirControlFlowGraphOwner : FirElement { + override val psi: PsiElement? + val controlFlowGraphReference: FirControlFlowGraphReference + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitControlFlowGraphOwner(this, data) + + fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirControlFlowGraphOwner +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirElement.kt index 3f6d7cd19e9..93c219010f1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirElement.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirElement.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -7,27 +7,27 @@ package org.jetbrains.kotlin.fir import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor -import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirElement { val psi: PsiElement? - fun accept(visitor: FirVisitor, data: D): R = - visitor.visitElement(this, data) + fun accept(visitor: FirVisitor, data: D): R = visitor.visitElement(this, data) - fun accept(visitor: FirVisitorVoid) = - accept(visitor, null) + fun accept(visitor: FirVisitorVoid) = accept(visitor, null) - fun acceptChildren(visitor: FirVisitor, data: D) {} + fun acceptChildren(visitor: FirVisitor, data: D) - fun acceptChildren(visitor: FirVisitorVoid) = - acceptChildren(visitor, null) + fun acceptChildren(visitor: FirVisitorVoid) = acceptChildren(visitor, null) @Suppress("UNCHECKED_CAST") fun transform(visitor: FirTransformer, data: D): CompositeTransformResult = accept(visitor, data) as CompositeTransformResult - fun transformChildren(transformer: FirTransformer, data: D): FirElement = this -} + fun transformChildren(transformer: FirTransformer, data: D): FirElement +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabel.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabel.kt index 781b3b71b61..16447a17553 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabel.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabel.kt @@ -5,11 +5,17 @@ package org.jetbrains.kotlin.fir -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirLabel : FirElement { + override val psi: PsiElement? val name: String - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitLabel(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitLabel(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabeledElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabeledElement.kt deleted file mode 100644 index dbc0801a0f6..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLabeledElement.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2010-2019 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.visitors.FirVisitor - -// Target element which may have label -interface FirLabeledElement : FirTargetElement { - val label: FirLabel? get() = null - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitLabeledElement(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - label?.accept(visitor, data) - } - -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirReference.kt deleted file mode 100644 index 6c5be6c4f35..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirReference.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2010-2019 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.visitors.FirVisitor - -interface FirReference : FirElement { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitReference(this, data) -} \ No newline at end of file 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 8e30e7c51d1..7a0151d2dae 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -10,9 +10,14 @@ import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget 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.FirErrorNamedReference -import org.jetbrains.kotlin.fir.symbols.* +import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition +import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub +import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression +import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression +import org.jetbrains.kotlin.fir.references.* +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag +import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol @@ -156,7 +161,9 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { memberDeclaration.annotations.renderAnnotations() - print(memberDeclaration.visibility.asString() + " " + memberDeclaration.modalityAsString() + " ") + if (memberDeclaration !is FirProperty || !memberDeclaration.isLocal) { + print(memberDeclaration.visibility.asString() + " " + memberDeclaration.modalityAsString() + " ") + } if (memberDeclaration.isExpect) { print("expect ") } @@ -184,7 +191,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { if (memberDeclaration.isInline) { print("inline ") } - } else if (memberDeclaration is FirNamedFunction) { + } else if (memberDeclaration is FirSimpleFunction) { if (memberDeclaration.isOperator) { print("operator ") } @@ -235,10 +242,12 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { when (declaration) { is FirRegularClass -> declaration.classKind.name.toLowerCase().replace("_", " ") is FirTypeAlias -> "typealias" - is FirNamedFunction -> "fun" - is FirProperty -> if (declaration.isVal) "val" else "var" + is FirSimpleFunction -> "fun" + is FirProperty -> { + val prefix = if (declaration.isLocal) "l" else "" + prefix + if (declaration.isVal) "val" else "var" + } is FirField -> "field" - is FirVariable<*> -> if (declaration.isVal) "lval" else "lvar" else -> "unknown" } ) @@ -248,9 +257,10 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { visitRegularClass(enumEntry) } - private fun FirDeclarationContainer.renderDeclarations() { + + private fun List.renderDeclarations() { renderInBraces { - for (declaration in declarations) { + for (declaration in this) { declaration.accept(this@FirRenderer) println() } @@ -275,14 +285,14 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { override fun visitRegularClass(regularClass: FirRegularClass) { visitMemberDeclaration(regularClass) renderSupertypes(regularClass) - regularClass.renderDeclarations() + regularClass.declarations.renderDeclarations() } override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) { anonymousObject.annotations.renderAnnotations() print("object : ") anonymousObject.superTypeRefs.renderSeparated() - anonymousObject.renderDeclarations() + anonymousObject.declarations.renderDeclarations() } override fun > visitVariable(variable: FirVariable) { @@ -304,6 +314,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { override fun visitProperty(property: FirProperty) { visitVariable(property) + if (property.isLocal) return println() pushIndent() property.getter?.accept(this) @@ -319,10 +330,10 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { popIndent() } - override fun visitNamedFunction(namedFunction: FirNamedFunction) { - visitCallableDeclaration(namedFunction) - namedFunction.body?.renderBody() - if (namedFunction.body == null) { + override fun visitSimpleFunction(simpleFunction: FirSimpleFunction) { + visitCallableDeclaration(simpleFunction) + simpleFunction.body?.renderBody() + if (simpleFunction.body == null) { println() } } @@ -346,7 +357,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { println() } } - body?.renderBody(listOfNotNull(delegatedConstructor)) + body?.renderBody(listOfNotNull(delegatedConstructor)) } override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) { @@ -383,7 +394,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { override fun > visitFunction(function: FirFunction) { function.valueParameters.renderParameters() - visitDeclarationWithBody(function) + visitDeclaration(function) + function.body?.renderBody() } override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer) { @@ -391,11 +403,6 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { anonymousInitializer.body?.renderBody() } - override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody) { - visitDeclaration(declarationWithBody) - declarationWithBody.body?.renderBody() - } - private fun FirBlock.renderBody(additionalStatements: List = emptyList()) { renderInBraces { for (statement in additionalStatements + statements) { @@ -476,7 +483,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { print("^") val target = returnExpression.target val labeledElement = target.labeledElement - if (labeledElement is FirNamedFunction) { + if (labeledElement is FirSimpleFunction) { print("${labeledElement.name}") } else { val labelName = target.labelName @@ -586,6 +593,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { is FirExpressionStub -> "STUB" is FirUnitExpression -> "Unit" is FirElseIfTrueCondition -> "else" + is FirNoReceiverExpression -> "" else -> "??? ${expression.javaClass}" } ) @@ -875,10 +883,18 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { qualifiedAccessExpression.calleeReference.accept(this) } - override fun visitAssignment(assignment: FirAssignment) { - print(assignment.operation.operator) + override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression) { + visitQualifiedAccessExpression(thisReceiverExpression) + } + + override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast) { + visitQualifiedAccessExpression(expressionWithSmartcast) + } + + private fun visitAssignment(operation: FirOperation, rValue: FirExpression) { + print(operation.operator) print(" ") - assignment.rValue.accept(this) + rValue.accept(this) } override fun visitVariableAssignment(variableAssignment: FirVariableAssignment) { @@ -886,7 +902,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { visitQualifiedAccess(variableAssignment) variableAssignment.lValue.accept(this) print(" ") - visitAssignment(variableAssignment) + visitAssignment(variableAssignment.operation, variableAssignment.rValue) } override fun visitArraySetCall(arraySetCall: FirArraySetCall) { @@ -896,7 +912,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { print("[") arraySetCall.indexes.renderSeparated() print("] ") - visitAssignment(arraySetCall) + visitAssignment(arraySetCall.operation, arraySetCall.rValue) } override fun visitFunctionCall(functionCall: FirFunctionCall) { @@ -957,11 +973,6 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { print("ERROR_EXPR(${errorExpression.reason})") } - override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast) { - uncheckedNotNullCast.expression.accept(this) - print("!") - } - override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) { print("Q|") val classId = resolvedQualifier.classId @@ -978,4 +989,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { print(" ${binaryLogicExpression.kind.token} ") binaryLogicExpression.rightOperand.accept(this) } + + override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) { + visitNamedReference(errorNamedReference) + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSymbolOwner.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSymbolOwner.kt new file mode 100644 index 00000000000..02be64d5946 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSymbolOwner.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2019 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 com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +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 psi: PsiElement? + val symbol: AbstractFirBasedSymbol + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitSymbolOwner(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirTargetElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirTargetElement.kt index 47b1dd58cb5..547d7bd888f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirTargetElement.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirTargetElement.kt @@ -5,5 +5,16 @@ package org.jetbrains.kotlin.fir -// Any target of return / break / continue (some targets may have labels, some never have them) -interface FirTargetElement : FirElement \ No newline at end of file +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirTargetElement : FirElement { + override val psi: PsiElement? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTargetElement(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt index 2eece7ad17d..b4688354929 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/Utils.kt @@ -10,32 +10,6 @@ import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.visitors.FirTransformer -fun MutableList.transformInplace(transformer: FirTransformer, data: D) { - val iterator = this.listIterator() - while (iterator.hasNext()) { - val next = iterator.next() as FirPureAbstractElement - val result = next.transform(transformer, data) - if (result.isSingle) { - iterator.set(result.single) - } else { - val resultIterator = result.list.listIterator() - if (!resultIterator.hasNext()) { - iterator.remove() - } else { - iterator.set(resultIterator.next()) - } - while (resultIterator.hasNext()) { - iterator.add(resultIterator.next()) - } - } - - } -} - -fun T.transformSingle(transformer: FirTransformer, data: D): T { - return (this as FirPureAbstractElement).transform(transformer, data).single -} - fun ModuleInfo.dependenciesWithoutSelf(): Sequence = dependencies().asSequence().filter { it != this } // TODO: rewrite diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt index e299a2806c4..8dd24bb7779 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt @@ -7,41 +7,44 @@ package org.jetbrains.kotlin.fir.declarations import com.intellij.psi.PsiElement import org.jetbrains.kotlin.contracts.description.InvocationKind -import org.jetbrains.kotlin.fir.FirLabeledElement +import org.jetbrains.kotlin.fir.FirLabel import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirAnonymousFunction( - final override val session: FirSession, - psi: PsiElement? -) : @VisitedSupertype FirFunction, FirUnknownTypeExpression(psi), FirLabeledElement { - abstract override val receiverTypeRef: FirTypeRef? +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract override val symbol: FirAnonymousFunctionSymbol +interface FirAnonymousFunction : FirFunction, FirExpression { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val annotations: List + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List + override val valueParameters: List + override val body: FirBlock? + override val typeRef: FirTypeRef + override val symbol: FirAnonymousFunctionSymbol + val label: FirLabel? + val invocationKind: InvocationKind? - abstract override val controlFlowGraphReference: FirControlFlowGraphReference + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousFunction(this, data) - abstract val invocationKind: InvocationKind? + fun replaceInvocationKind(newInvocationKind: InvocationKind) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAnonymousFunction(this, data) + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirAnonymousFunction - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - super.acceptChildren(visitor, data) - typeRef.accept(visitor, data) - // Don't call super.acceptChildren (annotations & typeRef are already processed) - } + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousFunction - abstract fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef) - - abstract fun replaceInvocationKind(invocationKind: InvocationKind) - - abstract override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousFunction + override fun transformValueParameters(transformer: FirTransformer, data: D): FirAnonymousFunction } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt index 820ee3b8e0e..ad1bcf4ae96 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousInitializer.kt @@ -1,14 +1,25 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.visitors.* -// Probably not a function -interface FirAnonymousInitializer : FirDeclarationWithBody { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAnonymousInitializer(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirAnonymousInitializer : FirDeclaration { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + val body: FirBlock? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousInitializer(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt index d1c6ab77648..f23e3c90581 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt @@ -7,19 +7,26 @@ package org.jetbrains.kotlin.fir.declarations import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirAnonymousObject(psi: PsiElement?) : @VisitedSupertype FirClass, FirUnknownTypeExpression(psi) { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirAnonymousObject : FirClass, FirExpression { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase override val classKind: ClassKind - get() = ClassKind.OBJECT + override val superTypeRefs: List + override val declarations: List + override val annotations: List + override val typeRef: FirTypeRef - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAnonymousObject(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousObject(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt index 23ff3e9173d..2dee119ba89 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableDeclaration.kt @@ -1,30 +1,33 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +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 -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -// Good name needed (something with receiver, type parameters, return type, and name) -interface FirCallableDeclaration> : - @VisitedSupertype FirDeclaration, - FirTypedDeclaration, FirSymbolOwner { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirCallableDeclaration> : FirTypedDeclaration, FirSymbolOwner { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val annotations: List + override val returnTypeRef: FirTypeRef + val receiverTypeRef: FirTypeRef? override val symbol: FirCallableSymbol - val receiverTypeRef: FirTypeRef? + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCallableDeclaration(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitCallableDeclaration(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - receiverTypeRef?.accept(visitor, data) - super.acceptChildren(visitor, data) - } -} + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirCallableDeclaration +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt index 4d57cda77e5..a6bec9d9c88 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirCallableMemberDeclaration.kt @@ -5,26 +5,34 @@ package org.jetbrains.kotlin.fir.declarations -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* -interface FirCallableMemberDeclaration> : - @VisitedSupertype FirDeclaration, FirMemberDeclaration, FirCallableDeclaration { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - val isOverride: Boolean get() = status.isOverride - - val isStatic: Boolean get() = status.isStatic - - val containerSource: DeserializedContainerSource? get() = null +interface FirCallableMemberDeclaration> : FirCallableDeclaration, FirMemberDeclaration { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val annotations: List + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val symbol: FirCallableSymbol + override val name: Name + override val typeParameters: List + override val status: FirDeclarationStatus + val containerSource: DeserializedContainerSource? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCallableMemberDeclaration(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - receiverTypeRef?.accept(visitor, data) - super.acceptChildren(visitor, data) - returnTypeRef.accept(visitor, data) - } - - -} + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirCallableMemberDeclaration +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClass.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClass.kt index 14f4429f339..9e73b7cc408 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClass.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClass.kt @@ -5,38 +5,30 @@ package org.jetbrains.kotlin.fir.declarations +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirStatement -import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.coneTypeSafe -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -interface FirClass : FirDeclarationContainer, FirStatement, FirAnnotationContainer { - // including delegated types - val superTypeRefs: List +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirClass : FirDeclaration, FirStatement, FirAnnotationContainer { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase val classKind: ClassKind + val superTypeRefs: List + val declarations: List + override val annotations: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitClass(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitClass(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - for (superType in superTypeRefs) { - superType.accept(visitor, data) - } - var constructorFound = false - for (declaration in declarations) { - declaration.accept(visitor, data) - if (!constructorFound && declaration is FirConstructor) { - for (typeParameter in declaration.typeParameters) { - typeParameter.accept(visitor, data) - } - constructorFound = true - } - } - } -} - -val FirClass.superConeTypes get() = superTypeRefs.mapNotNull { it.coneTypeSafe() } \ No newline at end of file + fun replaceSuperTypeRefs(newSuperTypeRefs: List) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt index 69de6b0b990..9b7aee4c76e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration.kt @@ -5,28 +5,32 @@ package org.jetbrains.kotlin.fir.declarations -import org.jetbrains.kotlin.fir.VisitedSupertype +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +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.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -interface FirClassLikeDeclaration> : - @VisitedSupertype FirMemberDeclaration, FirStatement, FirSymbolOwner { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirClassLikeDeclaration> : FirStatement, FirMemberDeclaration, FirSymbolOwner, FirTypeParametersOwner { + override val psi: PsiElement? + override val annotations: List + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val name: Name + override val typeParameters: List + override val status: FirDeclarationStatus + val supertypesComputationStatus: SupertypesComputationStatus override val symbol: FirClassLikeSymbol - override fun accept(visitor: FirVisitor, data: D): R { - return super.accept(visitor, data) - } - - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - } - - enum class SupertypesComputationStatus { - NOT_COMPUTED, COMPUTING, COMPUTED - } - - var supertypesComputationStatus: SupertypesComputationStatus -} + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitClassLikeDeclaration(this, data) + fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt index dc4cb010da4..9f5a6a0dfcc 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirConstructor.kt @@ -1,38 +1,50 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.VisitedSupertype +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +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.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirConstructor : @VisitedSupertype FirMemberFunction { - - val isPrimary: Boolean get() = false - - override val isOverride: Boolean get() = status.isOverride - - val isInner: Boolean +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirConstructor : FirMemberFunction { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List + override val valueParameters: List + override val body: FirBlock? + override val name: Name + override val status: FirDeclarationStatus + override val containerSource: DeserializedContainerSource? + override val annotations: List + override val symbol: FirConstructorSymbol val delegatedConstructor: FirDelegatedConstructorCall? + val isPrimary: Boolean - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitConstructor(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitConstructor(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - status.accept(visitor, data) - delegatedConstructor?.accept(visitor, data) - for (parameter in valueParameters) { - parameter.accept(visitor, data) - } - returnTypeRef.accept(visitor, data) - body?.accept(visitor, data) - controlFlowGraphReference?.accept(visitor, data) - } + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirConstructor + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirConstructor + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirConstructor } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt index 5af1ca35cbc..0b7c7f2ace1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclaration.kt @@ -1,22 +1,26 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirDeclaration : FirElement { - + override val psi: PsiElement? val session: FirSession + val resolvePhase: FirResolvePhase - var resolvePhase: FirResolvePhase + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDeclaration(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDeclaration(this, data) + fun replaceResolvePhase(newResolvePhase: FirResolvePhase) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationContainer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationContainer.kt deleted file mode 100644 index 69bb7496b06..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationContainer.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations - -interface FirDeclarationContainer { - // May be only member declarations should be here - // ?: FirAnonymousInitializer - val declarations: List -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt index a71e5f77043..d3c10ab432f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationStatus.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -8,46 +8,33 @@ package org.jetbrains.kotlin.fir.declarations import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.BaseTransformedType import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirDeclarationStatus : FirElement { + override val psi: PsiElement? val visibility: Visibility - val modality: Modality? - val isExpect: Boolean - val isActual: Boolean - val isOverride: Boolean - val isOperator: Boolean - val isInfix: Boolean - val isInline: Boolean - val isTailRec: Boolean - val isExternal: Boolean - val isConst: Boolean - val isLateInit: Boolean - val isInner: Boolean - val isCompanion: Boolean - val isData: Boolean - val isSuspend: Boolean - val isStatic: Boolean - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDeclarationStatus(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDeclarationStatus(this, data) } \ No newline at end of file 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 new file mode 100644 index 00000000000..4775e2a2fae --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationUtil.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2019 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.declarations + +import org.jetbrains.kotlin.fir.declarations.impl.FirClassImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirTypeParameterImpl +import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.coneTypeSafe + +fun FirTypeParameterImpl.addDefaultBoundIfNecessary() { + if (bounds.isEmpty()) { + bounds += session.builtinTypes.nullableAnyType + } +} + +inline val FirRegularClass.isInner get() = status.isInner +inline val FirRegularClass.isCompanion get() = status.isCompanion +inline val FirRegularClass.isData get() = status.isData +inline val FirRegularClass.isInline get() = status.isInline +inline val FirMemberDeclaration.modality get() = status.modality +inline val FirMemberDeclaration.visibility get() = status.visibility +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 FirPropertyAccessor.modality get() = status.modality +inline val FirPropertyAccessor.visibility get() = status.visibility + +fun FirClassImpl.addDeclaration(declaration: FirDeclaration) { + declarations += declaration + if (companionObject == null && declaration is FirRegularClass && declaration.isCompanion) { + companionObject = declaration + } +} + +fun FirClassImpl.addDeclarations(declarations: Collection) { + declarations.forEach(this::addDeclaration) +} + +fun FirEnumEntryImpl.addDeclaration(declaration: FirDeclaration) { + declarations += declaration +} + +val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedTypeRef.coneTypeSafe() + +val FirRegularClass.classId get() = symbol.classId + +val FirClass.superConeTypes get() = superTypeRefs.mapNotNull { it.coneTypeSafe() } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationWithBody.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationWithBody.kt deleted file mode 100644 index 51844f9e0d0..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationWithBody.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations - -import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -interface FirDeclarationWithBody : FirDeclaration { - val body: FirBlock? - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDeclarationWithBody(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - body?.accept(visitor, data) - super.acceptChildren(visitor, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt index 45c03d2d228..66959705654 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt @@ -1,32 +1,43 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.BaseTransformedType +import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.FirCall -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -abstract class FirEnumEntry( - final override val session: FirSession, - psi: PsiElement? -) : @VisitedSupertype FirRegularClass, FirCall(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitEnumEntry(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun acceptChildren(visitor: FirVisitor, data: D) { - for (argument in arguments) { - argument.accept(visitor, data) - } - typeRef.accept(visitor, data) - super.acceptChildren(visitor, data) - } +interface FirEnumEntry : FirRegularClass { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val name: Name + override val annotations: List + override val typeParameters: List + override val status: FirDeclarationStatus + override val supertypesComputationStatus: SupertypesComputationStatus + override val classKind: ClassKind + override val declarations: List + override val symbol: FirClassSymbol + override val companionObject: FirRegularClass? + override val superTypeRefs: List + val arguments: List + val typeRef: FirTypeRef - override var supertypesComputationStatus = FirClassLikeDeclaration.SupertypesComputationStatus.NOT_COMPUTED -} + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitEnumEntry(this, data) + + fun transformArguments(transformer: FirTransformer, data: D): FirEnumEntry +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorDeclaration.kt deleted file mode 100644 index 93b8c0ac383..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorDeclaration.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations - -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -// Is it necessary? -interface FirErrorDeclaration : FirDeclaration { - val reason: String - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitErrorDeclaration(this, data) -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorFunction.kt new file mode 100644 index 00000000000..c8ba5c2d675 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirErrorFunction.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2019 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.declarations + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirErrorFunction : FirFunction { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val annotations: List + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List + override val valueParameters: List + override val body: FirBlock? + val reason: String + override val symbol: FirErrorFunctionSymbol + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitErrorFunction(this, data) + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirErrorFunction + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirErrorFunction + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorFunction +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt index 98acd6dc9ad..9366956c6fe 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirField.kt @@ -5,19 +5,49 @@ package org.jetbrains.kotlin.fir.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.FirVariable -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirField : @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration, FirVariable { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitField(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - initializer?.accept(visitor, data) - delegate?.accept(visitor, data) - } +interface FirField : FirVariable, FirCallableMemberDeclaration { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val name: Name + override val symbol: FirVariableSymbol + override val initializer: FirExpression? + override val delegate: FirExpression? + override val delegateFieldSymbol: FirDelegateFieldSymbol? + override val isVar: Boolean + override val isVal: Boolean + override val getter: FirPropertyAccessor? + override val setter: FirPropertyAccessor? + override val annotations: List + override val typeParameters: List + override val status: FirDeclarationStatus + override val containerSource: DeserializedContainerSource? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitField(this, data) + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirField + + override fun transformGetter(transformer: FirTransformer, data: D): FirField + + override fun transformSetter(transformer: FirTransformer, data: D): FirField + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirField } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt index 4be49852a59..7808dfc52c1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFile.kt @@ -1,38 +1,31 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirFile : @VisitedSupertype FirPackageFragment, FirDeclaration, FirAnnotationContainer { - - @Suppress("DEPRECATION") - val fileSession: FirSession - get() = session +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirFile : FirAnnotationContainer, FirDeclaration { + override val psi: PsiElement? + override val annotations: List + override val session: FirSession + override val resolvePhase: FirResolvePhase + val imports: List + val declarations: List val name: String - val packageFqName: FqName - val imports: List - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitFile(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - for (import in imports) { - import.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFile(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt index b63e1b9d50a..560f0ed30ba 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt @@ -1,42 +1,46 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirTargetElement -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -// May be should inherit FirTypeParameterContainer -interface FirFunction> : @VisitedSupertype FirDeclarationWithBody, FirCallableDeclaration, FirAnnotationContainer, - FirTargetElement, FirStatement, FirSymbolOwner { - - val valueParameters: List - val controlFlowGraphReference: FirControlFlowGraphReference? +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirFunction> : FirCallableDeclaration, FirControlFlowGraphOwner, FirTargetElement, FirAnnotationContainer, FirTypeParametersOwner, FirStatement { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val annotations: List + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List override val symbol: FirFunctionSymbol + val valueParameters: List + val body: FirBlock? - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitFunction(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFunction(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - for (parameter in valueParameters) { - parameter.accept(visitor, data) - } - controlFlowGraphReference?.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirFunction + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirFunction fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction - - fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirFunction } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirImport.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirImport.kt index 78a5228e054..040a41a9236 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirImport.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirImport.kt @@ -1,24 +1,26 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirImport : FirElement { + override val psi: PsiElement? val importedFqName: FqName? - val isAllUnder: Boolean - val aliasName: Name? - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitImport(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitImport(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt index d058c2517fa..a8af8b0c68b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberDeclaration.kt @@ -1,35 +1,30 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -interface FirMemberDeclaration : FirTypeParameterContainer, FirNamedDeclaration, FirAnnotationContainer { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirMemberDeclaration : FirNamedDeclaration, FirAnnotationContainer { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val name: Name + override val annotations: List + val typeParameters: List val status: FirDeclarationStatus - val visibility: Visibility get() = status.visibility - - val modality: Modality? get() = status.modality - - val isExpect: Boolean get() = status.isExpect - - val isActual: Boolean get() = status.isActual - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitMemberDeclaration(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - for (typeParameter in typeParameters) { - typeParameter.accept(visitor, data) - } - status.accept(visitor, data) - super.acceptChildren(visitor, data) - } -} + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitMemberDeclaration(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt index 27625631728..94f75a12b3d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt @@ -5,25 +5,43 @@ package org.jetbrains.kotlin.fir.declarations -import org.jetbrains.kotlin.fir.VisitedSupertype +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* -interface FirMemberFunction> : - @VisitedSupertype FirFunction, FirCallableMemberDeclaration { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirMemberFunction> : FirFunction, FirCallableMemberDeclaration { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List + override val valueParameters: List + override val body: FirBlock? + override val name: Name + override val status: FirDeclarationStatus + override val containerSource: DeserializedContainerSource? override val symbol: FirFunctionSymbol + override val annotations: List - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitMemberFunction(this, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitMemberFunction(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - for (parameter in valueParameters) { - parameter.accept(visitor, data) - } - body?.accept(visitor, data) - controlFlowGraphReference?.accept(visitor, data) - } + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirMemberFunction + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirMemberFunction + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirMemberFunction } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedDeclaration.kt index 4ec7ca0fa0c..e564005cbb0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedDeclaration.kt @@ -1,16 +1,25 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirNamedDeclaration : FirDeclaration { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase val name: Name - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitNamedDeclaration(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitNamedDeclaration(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt deleted file mode 100644 index 74cc7686220..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirNamedFunction.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations - -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -@BaseTransformedType -interface FirNamedFunction : @VisitedSupertype FirMemberFunction, FirMemberDeclaration { - val isOperator: Boolean get() = status.isOperator - - val isInfix: Boolean get() = status.isInfix - - val isInline: Boolean get() = status.isInline - - val isTailRec: Boolean get() = status.isTailRec - - val isExternal: Boolean get() = status.isExternal - - val isSuspend: Boolean get() = status.isSuspend - - override val isOverride: Boolean get() = status.isOverride - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitNamedFunction(this, data) -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPackageFragment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPackageFragment.kt deleted file mode 100644 index c7f7cee4d02..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPackageFragment.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations - -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -interface FirPackageFragment : FirElement, FirDeclarationContainer { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitPackageFragment(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - for (declaration in declarations) { - declaration.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt index b2d45f5cbd7..3bac40cb63f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirProperty.kt @@ -1,49 +1,61 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.FirVariable +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* -// May be should not inherit FirVariable -@BaseTransformedType -interface FirProperty : - @VisitedSupertype FirDeclaration, FirCallableMemberDeclaration, FirVariable, FirMemberDeclaration { - val isConst: Boolean get() = status.isConst +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - val isLateInit: Boolean get() = status.isLateInit - - override val isOverride: Boolean get() = status.isOverride - - // Should it be nullable or have some default? +interface FirProperty : FirVariable, FirControlFlowGraphOwner, FirTypeParametersOwner, FirCallableMemberDeclaration { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val name: Name + override val initializer: FirExpression? + override val delegate: FirExpression? + override val delegateFieldSymbol: FirDelegateFieldSymbol? + override val isVar: Boolean + override val isVal: Boolean override val getter: FirPropertyAccessor? - override val setter: FirPropertyAccessor? - - // TODO: it should be probably nullable + override val annotations: List + override val controlFlowGraphReference: FirControlFlowGraphReference + override val containerSource: DeserializedContainerSource? + override val symbol: FirPropertySymbol val backingFieldSymbol: FirBackingFieldSymbol + val isLocal: Boolean + override val typeParameters: List + override val status: FirDeclarationStatus - val controlFlowGraphReference: FirControlFlowGraphReference + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitProperty(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitProperty(this, data) + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirProperty - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - initializer?.accept(visitor, data) - delegate?.accept(visitor, data) - getter?.accept(visitor, data) - setter?.accept(visitor, data) - controlFlowGraphReference.accept(visitor, data) - } + override fun transformGetter(transformer: FirTransformer, data: D): FirProperty - fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirProperty + override fun transformSetter(transformer: FirTransformer, data: D): FirProperty + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirProperty + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirProperty } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt index 1fe57f8ab00..b804eecd1ba 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt @@ -1,31 +1,45 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.VisitedSupertype +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -interface FirPropertyAccessor : @VisitedSupertype FirFunction { - val isGetter: Boolean - - val isSetter: Boolean get() = !isGetter - - val status: FirDeclarationStatus - - val visibility: Visibility get() = status.visibility +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirPropertyAccessor : FirFunction { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List + override val valueParameters: List + override val body: FirBlock? override val symbol: FirPropertyAccessorSymbol + val isGetter: Boolean + val isSetter: Boolean + val status: FirDeclarationStatus + override val annotations: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitPropertyAccessor(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitPropertyAccessor(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - status.accept(visitor, data) - } + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirPropertyAccessor + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirPropertyAccessor + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirPropertyAccessor } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt index 13b6185a5cc..53ea6ed21a2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirRegularClass.kt @@ -1,42 +1,40 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.VisitedSupertype +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -// May be all containers should be properties and not base classes -// About descriptors: introduce something like FirDescriptor which is FirUnresolved at the beginning and FirSymbol(descriptor) at the end -@BaseTransformedType -interface FirRegularClass : FirClass, @VisitedSupertype FirClassLikeDeclaration { - val isInner: Boolean get() = status.isInner - - val isCompanion: Boolean get() = status.isCompanion - - val isData: Boolean get() = status.isData - - val isInline: Boolean get() = status.isInline - - val companionObject: FirRegularClass? +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirRegularClass : FirNamedDeclaration, FirClassLikeDeclaration, FirClass { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val name: Name + override val annotations: List + override val typeParameters: List + override val status: FirDeclarationStatus + override val supertypesComputationStatus: SupertypesComputationStatus + override val classKind: ClassKind + override val declarations: List override val symbol: FirClassSymbol + val companionObject: FirRegularClass? + override val superTypeRefs: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitRegularClass(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitRegularClass(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - super.acceptChildren(visitor, data) - } - - fun replaceSupertypes(newSupertypes: List): FirRegularClass - -} - -val FirRegularClass.classId get() = symbol.classId + override fun replaceSuperTypeRefs(newSuperTypeRefs: List) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt index a9372a78d18..bc7e1ba9779 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedDeclarationStatus.kt @@ -1,15 +1,39 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirResolvedDeclarationStatus : FirDeclarationStatus { + override val psi: PsiElement? override val visibility: Visibility + override val modality: Modality? + override val isExpect: Boolean + override val isActual: Boolean + override val isOverride: Boolean + override val isOperator: Boolean + override val isInfix: Boolean + override val isInline: Boolean + override val isTailRec: Boolean + override val isExternal: Boolean + override val isConst: Boolean + override val isLateInit: Boolean + override val isInner: Boolean + override val isCompanion: Boolean + override val isData: Boolean + override val isSuspend: Boolean + override val isStatic: Boolean - override val modality: Modality + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedDeclarationStatus(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedImport.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedImport.kt index e74f70b156b..a59efb9ae36 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedImport.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirResolvedImport.kt @@ -1,23 +1,31 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirResolvedImport : FirImport { + override val psi: PsiElement? + override val importedFqName: FqName? + override val isAllUnder: Boolean + override val aliasName: Name? + val delegate: FirImport val packageFqName: FqName - val relativeClassName: FqName? - val resolvedClassId: ClassId? get() = relativeClassName?.let { ClassId(packageFqName, it, false) } + val resolvedClassId: ClassId? + val importedName: Name? - val importedName: Name? get() = importedFqName?.shortName() - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitResolvedImport(this, data) -} + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedImport(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirSimpleFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirSimpleFunction.kt new file mode 100644 index 00000000000..992100e89d3 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirSimpleFunction.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2010-2019 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.declarations + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirSimpleFunction : FirMemberFunction { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: List + override val valueParameters: List + override val body: FirBlock? + override val name: Name + override val status: FirDeclarationStatus + override val containerSource: DeserializedContainerSource? + override val symbol: FirFunctionSymbol + override val annotations: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitSimpleFunction(this, data) + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirSimpleFunction + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirSimpleFunction + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirSimpleFunction +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt index 4765b9eec94..b2c9bdf8772 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeAlias.kt @@ -1,31 +1,36 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol -import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.coneTypeSafe -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirTypeAlias : FirClassLikeDeclaration { - fun replaceExpandTypeRef(typeRef: FirTypeRef): FirTypeAlias - - val expandedTypeRef: FirTypeRef - + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val name: Name + override val typeParameters: List + override val status: FirDeclarationStatus + override val supertypesComputationStatus: SupertypesComputationStatus override val symbol: FirTypeAliasSymbol + val expandedTypeRef: FirTypeRef + override val annotations: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeAlias(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeAlias(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - expandedTypeRef.accept(visitor, data) - } -} - - -val FirTypeAlias.expandedConeType: ConeClassLikeType? get() = expandedTypeRef.coneTypeSafe() + fun replaceExpandedTypeRef(newExpandedTypeRef: FirTypeRef) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt index dc024f75c91..dbe4bab7492 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameter.kt @@ -1,36 +1,36 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirSession +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 -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirTypeParameter : FirNamedDeclaration, FirAnnotationContainer, FirSymbolOwner { - val variance: Variance - - val isReified: Boolean - - val bounds: List +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirTypeParameter : FirNamedDeclaration, FirSymbolOwner, FirAnnotationContainer { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val name: Name override val symbol: FirTypeParameterSymbol + val variance: Variance + val isReified: Boolean + val bounds: List + override val annotations: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeParameter(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - super.acceptChildren(visitor, data) - for (bound in bounds) { - bound.accept(visitor, data) - } - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeParameter(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt new file mode 100644 index 00000000000..8d98801c46e --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParametersOwner.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2019 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.declarations + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirTypeParametersOwner : FirElement { + override val psi: PsiElement? + val typeParameters: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeParametersOwner(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt index 38237d95583..7ff89e8a7db 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypedDeclaration.kt @@ -1,26 +1,30 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val annotations: List val returnTypeRef: FirTypeRef - fun transformReturnTypeRef(transformer: FirTransformer, data: D) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypedDeclaration(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypedDeclaration(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - super.acceptChildren(visitor, data) - returnTypeRef.accept(visitor, data) - } + fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirTypedDeclaration } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt index e34587f6af8..181cf520543 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt @@ -1,39 +1,53 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.VisitedSupertype +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirVariable +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirValueParameter : @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirNamedDeclaration, FirVariable { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirValueParameter : FirVariable { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val name: Name + override val symbol: FirVariableSymbol + override val initializer: FirExpression? + override val delegate: FirExpression? + override val delegateFieldSymbol: FirDelegateFieldSymbol? + override val isVar: Boolean + override val isVal: Boolean + override val getter: FirPropertyAccessor? + override val setter: FirPropertyAccessor? + override val annotations: List + val defaultValue: FirExpression? val isCrossinline: Boolean - val isNoinline: Boolean - val isVararg: Boolean - val defaultValue: FirExpression? + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitValueParameter(this, data) - override val symbol: FirVariableSymbol + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirValueParameter - override fun transformChildrenWithoutAccessors(transformer: FirTransformer, data: D) { - transformChildren(transformer, data) - } + override fun transformGetter(transformer: FirTransformer, data: D): FirValueParameter - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitValueParameter(this, data) + override fun transformSetter(transformer: FirTransformer, data: D): FirValueParameter - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - defaultValue?.accept(visitor, data) - } + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirValueParameter } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirVariable.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirVariable.kt new file mode 100644 index 00000000000..66ea554f74e --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirVariable.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2019 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.declarations + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirStatement +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirVariable> : FirCallableDeclaration, FirNamedDeclaration, FirStatement { + override val psi: PsiElement? + override val session: FirSession + override val resolvePhase: FirResolvePhase + override val returnTypeRef: FirTypeRef + override val receiverTypeRef: FirTypeRef? + override val name: Name + override val symbol: FirVariableSymbol + val initializer: FirExpression? + val delegate: FirExpression? + val delegateFieldSymbol: FirDelegateFieldSymbol? + val isVar: Boolean + val isVal: Boolean + val getter: FirPropertyAccessor? + val setter: FirPropertyAccessor? + override val annotations: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitVariable(this, data) + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirVariable + + fun transformGetter(transformer: FirTransformer, data: D): FirVariable + + fun transformSetter(transformer: FirTransformer, data: D): FirVariable + + fun transformOtherChildren(transformer: FirTransformer, data: D): FirVariable +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameterContainer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/SupertypesComputationStatus.kt similarity index 56% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameterContainer.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/SupertypesComputationStatus.kt index b3d8d77fe9c..18f0d5197ee 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirTypeParameterContainer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/SupertypesComputationStatus.kt @@ -1,10 +1,10 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations -interface FirTypeParameterContainer { - val typeParameters: List +enum class SupertypesComputationStatus { + NOT_COMPUTED, COMPUTING, COMPUTED } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractAnnotatedDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractAnnotatedDeclaration.kt deleted file mode 100644 index 56ddfac41bd..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractAnnotatedDeclaration.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractAnnotatedElement - -abstract class FirAbstractAnnotatedDeclaration( - final override val session: FirSession, - psi: PsiElement? -) : FirAbstractAnnotatedElement(psi), FirDeclaration { - override var resolvePhase = FirResolvePhase.RAW_FIR -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt deleted file mode 100644 index 6b75f92a959..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource - -abstract class FirAbstractCallableMember> : - FirAbstractMemberDeclaration, FirCallableMemberDeclaration { - - final override var receiverTypeRef: FirTypeRef? - final override var returnTypeRef: FirTypeRef - - override var containerSource: DeserializedContainerSource? = null - - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - } - - constructor( - session: FirSession, - psi: PsiElement?, - name: Name, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef - ) : super(session, psi, name) { - this.receiverTypeRef = receiverTypeRef - this.returnTypeRef = returnTypeRef - } - - constructor( - session: FirSession, - psi: PsiElement?, - name: Name, - visibility: Visibility, - modality: Modality?, - isExpect: Boolean, - isActual: Boolean, - isOverride: Boolean, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef - ) : super(session, psi, name, visibility, modality, isExpect, isActual) { - this.receiverTypeRef = receiverTypeRef - this.returnTypeRef = returnTypeRef - status.isOverride = isOverride - } - - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) - } -} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt deleted file mode 100644 index 66cbe63a936..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration -import org.jetbrains.kotlin.fir.declarations.FirTypeParameter -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.name.Name - -abstract class FirAbstractMemberDeclaration( - session: FirSession, - psi: PsiElement?, - name: Name -) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirMemberDeclaration { - constructor( - session: FirSession, - psi: PsiElement?, - name: Name, - visibility: Visibility, - modality: Modality?, - isExpect: Boolean, - isActual: Boolean - ) : this(session, psi, name) { - this.status = FirDeclarationStatusImpl( - visibility, - modality - ).apply { - this.isExpect = isExpect - this.isActual = isActual - } - } - - final override val typeParameters: MutableList = mutableListOf() - - final override lateinit var status: FirDeclarationStatusImpl - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeParameters.transformInplace(transformer, data) - status = status.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractNamedAnnotatedDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractNamedAnnotatedDeclaration.kt deleted file mode 100644 index e21f53f4cd3..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractNamedAnnotatedDeclaration.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration -import org.jetbrains.kotlin.name.Name - -abstract class FirAbstractNamedAnnotatedDeclaration( - session: FirSession, - psi: PsiElement?, - final override val name: Name -) : FirAbstractAnnotatedDeclaration(session, psi), FirNamedDeclaration \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt deleted file mode 100644 index 88111f4806c..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirAbstractPropertyAccessor( - session: FirSession, - psi: PsiElement?, - final override val symbol: FirPropertyAccessorSymbol -) : FirAbstractAnnotatedDeclaration(session, psi), @VisitedSupertype FirPropertyAccessor { - init { - symbol.bind(this) - } - - final override val receiverTypeRef: FirTypeRef? get() = null - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt index a1db98c63fb..07ecdd0ae2d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt @@ -7,70 +7,97 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.contracts.description.InvocationKind -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirAnonymousFunctionImpl( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, override var returnTypeRef: FirTypeRef, override var receiverTypeRef: FirTypeRef?, override val symbol: FirAnonymousFunctionSymbol -) : FirAnonymousFunction(session, psi), FirModifiableFunction { +) : FirAnonymousFunction, FirModifiableFunction, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.DECLARATIONS + override val annotations: MutableList = mutableListOf() + override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() + override val typeParameters: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() + override var body: FirBlock? = null + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override var label: FirLabel? = null + override var invocationKind: InvocationKind? = null + init { symbol.bind(this) } - override var label: FirLabel? = null + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + body?.accept(visitor, data) + typeRef.accept(visitor, data) + label?.accept(visitor, data) + } - override val valueParameters = mutableListOf() - - override var body: FirBlock? = null - - override var resolvePhase = FirResolvePhase.DECLARATIONS - - override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() - - override var invocationKind: InvocationKind? = null - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirAnonymousFunctionImpl { + annotations.transformInplace(transformer, data) + transformReturnTypeRef(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) - label = label?.transformSingle(transformer, data) - valueParameters.transformInplace(transformer, data) - body = body?.transformSingle(transformer, data) transformControlFlowGraphReference(transformer, data) - - return super.transformChildren(transformer, data) - } - - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - } - - override fun replaceReceiverTypeRef(receiverTypeRef: FirTypeRef) { - this.receiverTypeRef = receiverTypeRef - } - - override fun transformValueParameters(transformer: FirTransformer, data: D): FirAnonymousFunction { - valueParameters.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) + body = body?.transformSingle(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + label = label?.transformSingle(transformer, data) return this } - override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousFunction { + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirAnonymousFunctionImpl { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirAnonymousFunctionImpl { controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) return this } - override fun replaceInvocationKind(invocationKind: InvocationKind) { - this.invocationKind = invocationKind + override fun transformValueParameters(transformer: FirTransformer, data: D): FirAnonymousFunctionImpl { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } + + override fun replaceInvocationKind(newInvocationKind: InvocationKind) { + invocationKind = newInvocationKind } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt index 0182b5acc8e..35c0ee94122 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousInitializerImpl.kt @@ -1,29 +1,39 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirAnonymousInitializerImpl( + override val psi: PsiElement?, override val session: FirSession, - psi: PsiElement?, override var body: FirBlock? -) : FirAnonymousInitializer, FirAbstractElement(psi) { - override var resolvePhase = FirResolvePhase.RAW_FIR +) : FirAnonymousInitializer { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + body?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirAnonymousInitializerImpl { body = body?.transformSingle(transformer, data) return this } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt index cc8dc7adf6c..0e2840cfb11 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt @@ -6,27 +6,58 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject import org.jetbrains.kotlin.fir.declarations.FirDeclaration -import org.jetbrains.kotlin.fir.transformInplace +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirAnonymousObjectImpl(psi: PsiElement?) : FirAnonymousObject(psi), FirModifiableClass { - override val superTypeRefs = mutableListOf() +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override val declarations = mutableListOf() +class FirAnonymousObjectImpl( + override val psi: PsiElement?, + override val session: FirSession +) : FirAnonymousObject, FirModifiableClass, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val classKind: ClassKind get() = ClassKind.OBJECT + override val superTypeRefs: MutableList = mutableListOf() + override val declarations: MutableList = mutableListOf() + override val annotations: MutableList = mutableListOf() + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - override fun accept(visitor: FirVisitor, data: D): R { - return super.accept(visitor, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + superTypeRefs.forEach { it.accept(visitor, data) } + declarations.forEach { it.accept(visitor, data) } + annotations.forEach { it.accept(visitor, data) } + typeRef.accept(visitor, data) } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirAnonymousObjectImpl { superTypeRefs.transformInplace(transformer, data) declarations.transformInplace(transformer, data) + annotations.transformInplace(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + return this + } - return super.transformChildren(transformer, data) + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun replaceSuperTypeRefs(newSuperTypeRefs: List) { + superTypeRefs.clear() + superTypeRefs.addAll(newSuperTypeRefs) + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt index 86ead4a94ce..8756366ab5b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -7,76 +7,75 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility 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.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.fir.visitors.* -open class FirClassImpl( - session: FirSession, - psi: PsiElement?, - final override val symbol: FirClassSymbol, - name: Name, - visibility: Visibility, - modality: Modality?, - isExpect: Boolean, - isActual: Boolean, - final override val classKind: ClassKind, - isInner: Boolean, - isCompanion: Boolean, - isData: Boolean, - isInline: Boolean -) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, isExpect, isActual), FirRegularClass, FirModifiableClass { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirClassImpl( + override val psi: PsiElement?, + override val session: FirSession, + override val name: Name, + override var status: FirDeclarationStatus, + override val classKind: ClassKind, + override val symbol: FirClassSymbol +) : FirRegularClass, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val annotations: MutableList = mutableListOf() + override val typeParameters: MutableList = mutableListOf() + override var supertypesComputationStatus: SupertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED + override val declarations: MutableList = mutableListOf() + override var companionObject: FirRegularClass? = null + override val superTypeRefs: MutableList = mutableListOf() init { symbol.bind(this) - status.isInner = isInner - status.isCompanion = isCompanion - status.isData = isData - status.isInline = isInline } - override val superTypeRefs = mutableListOf() - - override val declarations = mutableListOf() - - override var companionObject: FirRegularClass? = null - - fun addDeclaration(declaration: FirDeclaration) { - declarations += declaration - if (companionObject == null && declaration is FirRegularClass && declaration.isCompanion) { - companionObject = declaration - } + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + typeParameters.forEach { it.accept(visitor, data) } + status.accept(visitor, data) + (declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.forEach { it.accept(visitor, data) } + declarations.forEach { it.accept(visitor, data) } + superTypeRefs.forEach { it.accept(visitor, data) } } - fun addDeclarations(declarations: Collection) { - declarations.forEach(this::addDeclaration) - } - - override fun replaceSupertypes(newSupertypes: List): FirRegularClass { - superTypeRefs.clear() - superTypeRefs.addAll(newSupertypes) + override fun transformChildren(transformer: FirTransformer, data: D): FirClassImpl { + annotations.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + status = status.transformSingle(transformer, data) + (declarations.firstOrNull { it is FirConstructorImpl } as? FirConstructorImpl)?.typeParameters?.transformInplace(transformer, data) + declarations.transformInplace(transformer, data) + companionObject = declarations.asSequence().filterIsInstance().firstOrNull { it.status.isCompanion } + superTypeRefs.transformInplace(transformer, data) return this } - override fun transformChildren(transformer: FirTransformer, data: D): FirRegularClass { - superTypeRefs.transformInplace(transformer, data) - val result = super.transformChildren(transformer, data) as FirRegularClass - - declarations.firstIsInstanceOrNull()?.typeParameters?.transformInplace(transformer, data) - // Transform declarations in last turn - declarations.transformInplace(transformer, data) - companionObject = declarations.asSequence().filterIsInstance().firstOrNull { it.isCompanion } - return result + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } - override var supertypesComputationStatus = FirClassLikeDeclaration.SupertypesComputationStatus.NOT_COMPUTED -} + override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) { + supertypesComputationStatus = newSupertypesComputationStatus + } + + override fun replaceSuperTypeRefs(newSuperTypeRefs: List) { + superTypeRefs.clear() + superTypeRefs.addAll(newSuperTypeRefs) + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt index cfdd0658122..f6c13b3ca0a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirConstructorImpl.kt @@ -1,102 +1,82 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter +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.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* -open class FirConstructorImpl : FirAbstractCallableMember, FirConstructor { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +open class FirConstructorImpl( + override val psi: PsiElement?, + override val session: FirSession, + override var returnTypeRef: FirTypeRef, + override var receiverTypeRef: FirTypeRef?, + override var status: FirDeclarationStatus, override val symbol: FirConstructorSymbol - - final override var delegatedConstructor: FirDelegatedConstructorCall? = null - - final override var isInner: Boolean - get() = status.isInner - set(isInner) { - status.isInner = isInner - } - - constructor( - session: FirSession, - psi: PsiElement?, - symbol: FirConstructorSymbol, - visibility: Visibility, - isExpect: Boolean, - isActual: Boolean, - isInner: Boolean, - delegatedSelfTypeRef: FirTypeRef, - delegatedConstructor: FirDelegatedConstructorCall? - ) : super( - session, psi, NAME, visibility, Modality.FINAL, - isExpect, isActual, isOverride = false, receiverTypeRef = null, returnTypeRef = delegatedSelfTypeRef - ) { - this.symbol = symbol - this.isInner = isInner - this.delegatedConstructor = delegatedConstructor - symbol.bind(this) - } - - constructor( - session: FirSession, - psi: PsiElement?, - symbol: FirConstructorSymbol, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef - ) : super(session, psi, NAME, receiverTypeRef, returnTypeRef) { - this.symbol = symbol - symbol.bind(this) - } - - override val valueParameters = mutableListOf() - - override var body: FirBlock? = null - +) : FirConstructor, FirModifiableConstructor, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() + override val typeParameters: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() + override var body: FirBlock? = null + override val name: Name = Name.special("") + override var containerSource: DeserializedContainerSource? = null + override val annotations: MutableList = mutableListOf() + override var delegatedConstructor: FirDelegatedConstructorCall? = null + override val isPrimary: Boolean get() = false - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - annotations.transformInplace(transformer, data) - valueParameters.transformInplace(transformer, data) - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - status = status.transformSingle(transformer, data) - delegatedConstructor?.transformSingle(transformer, data) - body = body?.transformSingle(transformer, data) - transformControlFlowGraphReference(transformer, data) - - return this + init { + symbol.bind(this) } override fun acceptChildren(visitor: FirVisitor, data: D) { - annotations.forEach { it.accept(visitor, data) } - valueParameters.forEach { it.accept(visitor, data) } returnTypeRef.accept(visitor, data) - status.accept(visitor, data) - delegatedConstructor?.accept(visitor, data) - body?.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) controlFlowGraphReference.accept(visitor, data) + valueParameters.forEach { it.accept(visitor, data) } + body?.accept(visitor, data) + status.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + delegatedConstructor?.accept(visitor, data) } - override fun transformValueParameters(transformer: FirTransformer, data: D): FirConstructorImpl { - valueParameters.transformInplace(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirConstructorImpl { + transformReturnTypeRef(transformer, data) + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + transformControlFlowGraphReference(transformer, data) + transformValueParameters(transformer, data) + body = body?.transformSingle(transformer, data) + status = status.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirConstructorImpl { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) return this } @@ -105,7 +85,12 @@ open class FirConstructorImpl : FirAbstractCallableMember, FirCo return this } - companion object { - val NAME = Name.special("") + override fun transformValueParameters(transformer: FirTransformer, data: D): FirConstructorImpl { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt index a062f128833..5be61c6c2e4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDeclarationStatusImpl.kt @@ -1,20 +1,23 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl.Modifier.* +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor open class FirDeclarationStatusImpl( override val visibility: Visibility, override val modality: Modality? -) : FirAbstractElement(null), FirDeclarationStatus { +) : FirDeclarationStatus { + override val psi: PsiElement? get() = null protected var flags: Int = 0 private operator fun get(modifier: Modifier): Boolean = (flags and modifier.mask) != 0 @@ -135,6 +138,12 @@ open class FirDeclarationStatusImpl( STATIC(0x4000) } + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirDeclarationStatusImpl { + return this + } + fun resolved(visibility: Visibility, modality: Modality): FirDeclarationStatus { return FirResolvedDeclarationStatusImpl(visibility, modality, flags) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index 08d8f1445e2..f2e1c4ee18a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -8,100 +8,60 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirFunction -import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name abstract class FirDefaultPropertyAccessor( - session: FirSession, psi: PsiElement?, - final override val isGetter: Boolean, + session: FirSession, + propertyTypeRef: FirTypeRef, + isGetter: Boolean, visibility: Visibility, symbol: FirPropertyAccessorSymbol -) : FirAbstractPropertyAccessor(session, psi, symbol) { - override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL) - +) : FirPropertyAccessorImpl(psi, session, propertyTypeRef, symbol, isGetter, FirDeclarationStatusImpl(visibility, Modality.FINAL)) { override var resolvePhase = FirResolvePhase.BODY_RESOLVE - final override val body: FirBlock? = null - - abstract override var returnTypeRef: FirTypeRef - - final override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null - - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - } - - override fun transformValueParameters(transformer: FirTransformer, data: D): FirDefaultPropertyAccessor { - return this - } - - override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirFunction { - return this - } + final override var body: FirBlock? + get() = null + set(_) {} } class FirDefaultPropertyGetter( - session: FirSession, psi: PsiElement?, + session: FirSession, propertyTypeRef: FirTypeRef, visibility: Visibility, symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() -) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility, symbol = symbol) { - override val valueParameters: List = emptyList() - - override var returnTypeRef: FirTypeRef = propertyTypeRef - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - status = status.transformSingle(transformer, data) - - return this - } +) : FirDefaultPropertyAccessor(psi, session, propertyTypeRef, isGetter = true, visibility = visibility, symbol = symbol) { + override val valueParameters: MutableList = mutableListOf() } class FirDefaultPropertySetter( - session: FirSession, psi: PsiElement?, + session: FirSession, propertyTypeRef: FirTypeRef, visibility: Visibility, symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol() -) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility, symbol = symbol) { - override val valueParameters = mutableListOf( +) : FirDefaultPropertyAccessor(psi, session, FirImplicitUnitTypeRef(psi), isGetter = false, visibility = visibility, symbol = symbol) { + override val valueParameters: MutableList = mutableListOf( FirDefaultSetterValueParameter( - session, psi, propertyTypeRef, FirVariableSymbol( + psi, + session, + propertyTypeRef, + FirVariableSymbol( CallableId( FqName.ROOT, Name.special("") ) ) ) ) - - override var returnTypeRef: FirTypeRef = FirImplicitUnitTypeRef(psi) - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - valueParameters.transformInplace(transformer, data) - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - status = status.transformSingle(transformer, data) - - return this - } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt index 95ffd21d328..7be25274972 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt @@ -1,64 +1,100 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirDefaultSetterValueParameter( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, override var returnTypeRef: FirTypeRef, - override val symbol: FirVariableSymbol = FirVariableSymbol(name) -) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter { + override val symbol: FirVariableSymbol +) : FirValueParameter, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override var receiverTypeRef: FirTypeRef? = null + override val name: Name = Name.identifier("value") + override var initializer: FirExpression? = null + override var delegate: FirExpression? = null + override val delegateFieldSymbol: FirDelegateFieldSymbol? = null + override val isVar: Boolean = false + override val isVal: Boolean = true + override var getter: FirPropertyAccessor? = null + override var setter: FirPropertyAccessor? = null + override val annotations: MutableList = mutableListOf() + override var defaultValue: FirExpression? = null + override val isCrossinline: Boolean = false + override val isNoinline: Boolean = false + override val isVararg: Boolean = false init { symbol.bind(this) + delegateFieldSymbol?.bind(this) } - override val initializer: FirExpression? - get() = null - override val delegate: FirExpression? - get() = null - override val receiverTypeRef: FirTypeRef? - get() = null - override val delegateFieldSymbol: FirDelegateFieldSymbol? - get() = null + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + initializer?.accept(visitor, data) + delegate?.accept(visitor, data) + getter?.accept(visitor, data) + setter?.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + defaultValue?.accept(visitor, data) + } - override val isCrossinline = false + override fun transformChildren(transformer: FirTransformer, data: D): FirDefaultSetterValueParameter { + transformReturnTypeRef(transformer, data) + transformGetter(transformer, data) + transformSetter(transformer, data) + transformOtherChildren(transformer, data) + return this + } - override val isNoinline = false - - override val isVararg = false - - override val isVar: Boolean = false - override val isVal: Boolean = false - - override val defaultValue: FirExpression? = null - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirDefaultSetterValueParameter { returnTypeRef = returnTypeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) + return this } - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) + override fun transformGetter(transformer: FirTransformer, data: D): FirDefaultSetterValueParameter { + getter = getter?.transformSingle(transformer, data) + return this } - companion object { - val name = Name.identifier("value") + override fun transformSetter(transformer: FirTransformer, data: D): FirDefaultSetterValueParameter { + setter = setter?.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirDefaultSetterValueParameter { + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + initializer = initializer?.transformSingle(transformer, data) + delegate = delegate?.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + defaultValue = defaultValue?.transformSingle(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt index 900be137105..92e7a3526da 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -10,79 +10,84 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.expressions.FirCall +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirEnumEntry +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirEnumEntryImpl( - session: FirSession, - psi: PsiElement?, - override val symbol: FirClassSymbol, - override val name: Name -) : FirEnumEntry(session, psi), FirModifiableClass { + override val psi: PsiElement?, + override val session: FirSession, + override val name: Name, + override val symbol: FirClassSymbol +) : FirEnumEntry, FirModifiableClass, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val annotations: MutableList = mutableListOf() + override val typeParameters: MutableList = mutableListOf() + override var status: FirDeclarationStatus = FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL) + override var supertypesComputationStatus: SupertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED + override val classKind: ClassKind get() = ClassKind.ENUM_ENTRY + override val declarations: MutableList = mutableListOf() + override val companionObject: FirRegularClass? get() = null + override val superTypeRefs: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() + override var typeRef: FirTypeRef = session.builtinTypes.enumType + init { symbol.bind(this) } - override var status = FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL) - - override val classKind: ClassKind - get() = ClassKind.ENUM_ENTRY - - override val typeParameters = mutableListOf() - - override val superTypeRefs = mutableListOf() - - override val declarations = mutableListOf() - - override val companionObject: FirRegularClass? - get() = null - - override var typeRef: FirTypeRef = session.builtinTypes.enumType - - override val arguments = mutableListOf() - - override var resolvePhase = FirResolvePhase.RAW_FIR - - override fun replaceSupertypes(newSupertypes: List): FirRegularClass { - superTypeRefs.clear() - superTypeRefs.addAll(newSupertypes) - return this + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + typeParameters.forEach { it.accept(visitor, data) } + status.accept(visitor, data) + declarations.forEach { it.accept(visitor, data) } + superTypeRefs.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + typeRef.accept(visitor, data) } - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } - - fun addDeclaration(declaration: FirDeclaration) { - declarations += declaration - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirRegularClass { - superTypeRefs.transformInplace(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirEnumEntryImpl { + annotations.transformInplace(transformer, data) typeParameters.transformInplace(transformer, data) status = status.transformSingle(transformer, data) - - declarations.firstIsInstanceOrNull()?.typeParameters?.transformInplace(transformer, data) - // Transform declarations in last turn declarations.transformInplace(transformer, data) - + superTypeRefs.transformInplace(transformer, data) + transformArguments(transformer, data) typeRef = typeRef.transformSingle(transformer, data) - arguments.transformInplace(transformer, data) - - return super.transformChildren(transformer, data) as FirRegularClass - } - - override fun transformArguments(transformer: FirTransformer, data: D): FirCall { - arguments.transformInplace(transformer, data) - return this } -} + + override fun transformArguments(transformer: FirTransformer, data: D): FirEnumEntryImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) { + supertypesComputationStatus = newSupertypesComputationStatus + } + + override fun replaceSuperTypeRefs(newSuperTypeRefs: List) { + superTypeRefs.clear() + superTypeRefs.addAll(newSuperTypeRefs) + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt deleted file mode 100644 index 49f67c93bb7..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2010-2019 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirErrorDeclaration -import org.jetbrains.kotlin.fir.declarations.FirFunction -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner -import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -class FirErrorFunction( - override val session: FirSession, - psi: PsiElement?, - override val reason: String, - override val symbol: FirErrorFunctionSymbol = FirErrorFunctionSymbol() -) : FirAbstractElement(psi), FirErrorDeclaration, FirFunction, FirSymbolOwner { - init { - symbol.bind(this) - } - - override val receiverTypeRef: FirTypeRef? get() = null - - override val returnTypeRef: FirTypeRef - get() = TODO("not implemented") - - override val annotations: List - get() = emptyList() - - override val valueParameters: List - get() = emptyList() - - override val body: FirBlock? - get() = null - - override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null - - override var resolvePhase = FirResolvePhase.BODY_RESOLVE - - override fun accept(visitor: FirVisitor, data: D): R = - super.accept(visitor, data) - - override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorFunction { - return this - } - - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) {} - - override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirErrorFunction { - return this - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunctionImpl.kt new file mode 100644 index 00000000000..68e9373dccf --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunctionImpl.kt @@ -0,0 +1,83 @@ +/* + * Copyright 2010-2019 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.declarations.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirErrorFunction +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirErrorFunctionImpl( + override val psi: PsiElement?, + override val session: FirSession, + override val reason: String, + override val symbol: FirErrorFunctionSymbol +) : FirErrorFunction, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val annotations: MutableList = mutableListOf() + override var returnTypeRef: FirTypeRef = FirErrorTypeRefImpl(null, reason) + override val receiverTypeRef: FirTypeRef? get() = null + override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() + override val typeParameters: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() + override val body: FirBlock? get() = null + + init { + symbol.bind(this) + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + returnTypeRef.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorFunctionImpl { + annotations.transformInplace(transformer, data) + transformReturnTypeRef(transformer, data) + transformControlFlowGraphReference(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirErrorFunctionImpl { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirErrorFunctionImpl { + controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) + return this + } + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorFunctionImpl { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorLoop.kt deleted file mode 100644 index 8ee634de24c..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorLoop.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2019 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock -import org.jetbrains.kotlin.fir.expressions.impl.FirErrorExpressionImpl -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -class FirErrorLoop( - psi: PsiElement?, - override val reason: String -) : FirAbstractElement(psi), FirErrorStatement, FirLoop { - override val annotations: List = listOf() - - override val condition: FirExpression = FirErrorExpressionImpl(psi, reason) - - override val block: FirBlock = FirEmptyExpressionBlock() - - override fun accept(visitor: FirVisitor, data: D): R { - return super.accept(visitor, data) - } - - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - } - - override fun transformCondition(transformer: FirTransformer, data: D): FirLoop { - return this - } - - override fun transformBlock(transformer: FirTransformer, data: D): FirLoop { - return this - } - - override fun transformRestChildren(transformer: FirTransformer, data: D): FirLoop { - return this - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt index 4171479c3b9..f6ada873b5c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirFileImpl.kt @@ -1,33 +1,51 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -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.declarations.FirImport +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirFileImpl( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, override val name: String, override val packageFqName: FqName -) : FirAbstractAnnotatedDeclaration(session, psi), FirFile { - override val imports = mutableListOf() +) : FirFile, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val imports: MutableList = mutableListOf() + override val declarations: MutableList = mutableListOf() - override val declarations = mutableListOf() + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + imports.forEach { it.accept(visitor, data) } + declarations.forEach { it.accept(visitor, data) } + } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirFileImpl { + annotations.transformInplace(transformer, data) imports.transformInplace(transformer, data) declarations.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt index f2e1a5f5b21..adf6cfc66d1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirImportImpl.kt @@ -1,19 +1,30 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirImportImpl( - psi: PsiElement?, + override val psi: PsiElement?, override val importedFqName: FqName?, override val isAllUnder: Boolean, override val aliasName: Name? -) : FirImport, FirAbstractElement(psi) \ No newline at end of file +) : FirImport { + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirImportImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt deleted file mode 100644 index d91d8aeefa5..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirNamedFunction -import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference -import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.name.Name - -open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirModifiableFunction { - - // NB: FirAccessorSymbol can be here - override val symbol: FirFunctionSymbol - - constructor( - session: FirSession, - psi: PsiElement?, - symbol: FirFunctionSymbol, - name: Name, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef - ) : super(session, psi, name, receiverTypeRef, returnTypeRef) { - this.symbol = symbol - symbol.bind(this) - } - - constructor( - session: FirSession, - psi: PsiElement?, - symbol: FirNamedFunctionSymbol, - name: Name, - visibility: Visibility, - modality: Modality?, - isExpect: Boolean, - isActual: Boolean, - isOverride: Boolean, - isOperator: Boolean, - isInfix: Boolean, - isInline: Boolean, - isTailRec: Boolean, - isExternal: Boolean, - isSuspend: Boolean, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef - ) : super( - session, psi, name, visibility, modality, - isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef - ) { - status.isOperator = isOperator - status.isInfix = isInfix - status.isInline = isInline - status.isTailRec = isTailRec - status.isExternal = isExternal - status.isSuspend = isSuspend - this.symbol = symbol - symbol.bind(this) - } - - override val valueParameters = mutableListOf() - - override var body: FirBlock? = null - - override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - valueParameters.transformInplace(transformer, data) - body = body?.transformSingle(transformer, data) - transformControlFlowGraphReference(transformer, data) - - return super.transformChildren(transformer, data) - } - - override fun transformValueParameters(transformer: FirTransformer, data: D): FirMemberFunctionImpl { - valueParameters.transformInplace(transformer, data) - return this - } - - override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirMemberFunctionImpl { - controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) - return this - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt deleted file mode 100644 index 36a12606dde..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberPropertyImpl.kt +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2000-2018 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirProperty -import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference -import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.name.Name - -class FirMemberPropertyImpl : FirAbstractCallableMember, FirProperty, FirModifiableAccessorsOwner { - override val symbol: FirPropertySymbol - override val isVar: Boolean - override var initializer: FirExpression? - override var delegate: FirExpression? - - private fun bindSymbols(symbol: FirPropertySymbol) { - symbol.bind(this) - backingFieldSymbol.bind(this) - delegateFieldSymbol?.bind(this) - } - - constructor( - session: FirSession, - psi: PsiElement?, - symbol: FirPropertySymbol, - name: Name, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef, - isVar: Boolean, - initializer: FirExpression?, - delegate: FirExpression? - ) : super(session, psi, name, receiverTypeRef, returnTypeRef) { - this.isVar = isVar - this.initializer = initializer - this.delegate = delegate - this.symbol = symbol - this.backingFieldSymbol = FirBackingFieldSymbol(symbol.callableId) - this.delegateFieldSymbol = delegate?.let { FirDelegateFieldSymbol(symbol.callableId) } - bindSymbols(symbol) - } - - constructor( - session: FirSession, - psi: PsiElement?, - symbol: FirPropertySymbol, - name: Name, - visibility: Visibility, - modality: Modality?, - isExpect: Boolean, - isActual: Boolean, - isOverride: Boolean, - isConst: Boolean, - isLateInit: Boolean, - receiverTypeRef: FirTypeRef?, - returnTypeRef: FirTypeRef, - isVar: Boolean, - initializer: FirExpression?, - delegate: FirExpression? - ) : super( - session, psi, name, visibility, modality, isExpect, isActual, isOverride, receiverTypeRef, returnTypeRef - ) { - this.isVar = isVar - this.initializer = initializer - this.delegate = delegate - status.isConst = isConst - status.isLateInit = isLateInit - this.symbol = symbol - this.backingFieldSymbol = FirBackingFieldSymbol(symbol.callableId) - this.delegateFieldSymbol = delegate?.let { FirDelegateFieldSymbol(symbol.callableId) } - bindSymbols(symbol) - } - - // TODO: backing field may not exist - override val backingFieldSymbol: FirBackingFieldSymbol - - override val delegateFieldSymbol: FirDelegateFieldSymbol? - - override var getter: FirPropertyAccessor? = null - - override var setter: FirPropertyAccessor? = null - - override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() - - override fun transformChildrenWithoutAccessors(transformer: FirTransformer, data: D) { - initializer = initializer?.transformSingle(transformer, data) - delegate = delegate?.transformSingle(transformer, data) - receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - typeParameters.transformInplace(transformer, data) - status = status.transformSingle(transformer, data) - annotations.transformInplace(transformer, data) - transformControlFlowGraphReference(transformer, data) - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - getter = getter?.transformSingle(transformer, data) - setter = setter?.transformSingle(transformer, data) - transformChildrenWithoutAccessors(transformer, data) - // Everything other (annotations, etc.) is done above - return this - } - - override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirMemberPropertyImpl { - controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) - return this - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableAccessorsOwner.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableAccessorsOwner.kt deleted file mode 100644 index c355fa28956..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableAccessorsOwner.kt +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2010-2019 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.declarations.impl - -import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor -import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol - -interface FirModifiableAccessorsOwner { - var getter: FirPropertyAccessor? - - var setter: FirPropertyAccessor? - - val delegateFieldSymbol: FirDelegateFieldSymbol<*>? -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableClass.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableClass.kt index 4b2da1420f7..8523a0d3a12 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableClass.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableClass.kt @@ -5,12 +5,49 @@ package org.jetbrains.kotlin.fir.declarations.impl +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirClass 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.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -interface FirModifiableClass : FirClass { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirModifiableClass : FirClass, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val session: FirSession + override var resolvePhase: FirResolvePhase + override val classKind: ClassKind override val superTypeRefs: MutableList - override val declarations: MutableList + override val annotations: MutableList + override fun acceptChildren(visitor: FirVisitor, data: D) { + superTypeRefs.forEach { it.accept(visitor, data) } + declarations.forEach { it.accept(visitor, data) } + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableClass { + superTypeRefs.transformInplace(transformer, data) + declarations.transformInplace(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } + + override fun replaceSuperTypeRefs(newSuperTypeRefs: List) { + superTypeRefs.clear() + superTypeRefs.addAll(newSuperTypeRefs) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableConstructor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableConstructor.kt new file mode 100644 index 00000000000..f45d5f48386 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableConstructor.kt @@ -0,0 +1,92 @@ +/* + * Copyright 2010-2019 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.declarations.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +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.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirModifiableConstructor : FirConstructor, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val session: FirSession + override var resolvePhase: FirResolvePhase + override var returnTypeRef: FirTypeRef + override var receiverTypeRef: FirTypeRef? + override var controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: MutableList + override val valueParameters: MutableList + override var body: FirBlock? + override val name: Name + override var status: FirDeclarationStatus + override var containerSource: DeserializedContainerSource? + override val annotations: MutableList + override val symbol: FirConstructorSymbol + override var delegatedConstructor: FirDelegatedConstructorCall? + override val isPrimary: Boolean + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + body?.accept(visitor, data) + status.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + delegatedConstructor?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableConstructor { + transformReturnTypeRef(transformer, data) + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + transformControlFlowGraphReference(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) + body = body?.transformSingle(transformer, data) + status = status.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + delegatedConstructor = delegatedConstructor?.transformSingle(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirModifiableConstructor { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirModifiableConstructor { + controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) + return this + } + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirModifiableConstructor { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt index 8686d72fb69..cba374fb4cc 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt @@ -5,12 +5,75 @@ package org.jetbrains.kotlin.fir.declarations.impl +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -interface FirModifiableFunction> : FirFunction { - override var body: FirBlock? +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirModifiableFunction> : FirFunction, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val session: FirSession + override var resolvePhase: FirResolvePhase + override val annotations: MutableList + override var returnTypeRef: FirTypeRef + override var receiverTypeRef: FirTypeRef? + override var controlFlowGraphReference: FirControlFlowGraphReference + override val typeParameters: MutableList + override val symbol: FirFunctionSymbol override val valueParameters: MutableList + override var body: FirBlock? + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + body?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableFunction { + annotations.transformInplace(transformer, data) + transformReturnTypeRef(transformer, data) + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + transformControlFlowGraphReference(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) + body = body?.transformSingle(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirModifiableFunction { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirModifiableFunction { + controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) + return this + } + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirModifiableFunction { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableTypeParametersOwner.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableTypeParametersOwner.kt new file mode 100644 index 00000000000..7a56c650b6e --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableTypeParametersOwner.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2019 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.declarations.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirModifiableTypeParametersOwner : FirTypeParametersOwner { + override val psi: PsiElement? + override val typeParameters: MutableList + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeParameters.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableTypeParametersOwner { + typeParameters.transformInplace(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableVariable.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableVariable.kt new file mode 100644 index 00000000000..ad72eabdba8 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableVariable.kt @@ -0,0 +1,87 @@ +/* + * Copyright 2010-2019 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.declarations.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirModifiableVariable> : FirVariable, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val session: FirSession + override var resolvePhase: FirResolvePhase + override var returnTypeRef: FirTypeRef + override var receiverTypeRef: FirTypeRef? + override val name: Name + override val symbol: FirVariableSymbol + override var initializer: FirExpression? + override var delegate: FirExpression? + override val delegateFieldSymbol: FirDelegateFieldSymbol? + override val isVar: Boolean + override val isVal: Boolean + override var getter: FirPropertyAccessor? + override var setter: FirPropertyAccessor? + override val annotations: MutableList + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + initializer?.accept(visitor, data) + delegate?.accept(visitor, data) + getter?.accept(visitor, data) + setter?.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableVariable { + transformReturnTypeRef(transformer, data) + transformGetter(transformer, data) + transformSetter(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirModifiableVariable { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformGetter(transformer: FirTransformer, data: D): FirModifiableVariable { + getter = getter?.transformSingle(transformer, data) + return this + } + + override fun transformSetter(transformer: FirTransformer, data: D): FirModifiableVariable { + setter = setter?.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirModifiableVariable { + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + initializer = initializer?.transformSingle(transformer, data) + delegate = delegate?.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt index 6d86d7e91a8..c684f904cee 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPrimaryConstructorImpl.kt @@ -1,28 +1,36 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +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.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* class FirPrimaryConstructorImpl( - session: FirSession, psi: PsiElement?, - symbol: FirConstructorSymbol, - visibility: Visibility, - isExpect: Boolean, - isActual: Boolean, - isInner: Boolean, - delegatedSelfTypeRef: FirTypeRef, - delegatedConstructor: FirDelegatedConstructorCall? -) : FirConstructorImpl(session, psi, symbol, visibility, isExpect, isActual, isInner, delegatedSelfTypeRef, delegatedConstructor) { - override val isPrimary: Boolean - get() = true + session: FirSession, + returnTypeRef: FirTypeRef, + receiverTypeRef: FirTypeRef?, + status: FirDeclarationStatus, + symbol: FirConstructorSymbol +) : FirConstructorImpl(psi, session, returnTypeRef, receiverTypeRef, status, symbol) { + override val isPrimary: Boolean get() = true } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt index 5db8dab8696..fe91d46e1af 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -7,50 +7,72 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference -import org.jetbrains.kotlin.fir.references.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* -class FirPropertyAccessorImpl( - session: FirSession, - psi: PsiElement?, - override val isGetter: Boolean, - visibility: Visibility, +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +open class FirPropertyAccessorImpl( + override val psi: PsiElement?, + override val session: FirSession, override var returnTypeRef: FirTypeRef, - symbol: FirPropertyAccessorSymbol -) : FirAbstractPropertyAccessor(session, psi, symbol) { - override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL) - - override var body: FirBlock? = null - - override val valueParameters = mutableListOf() - + override val symbol: FirPropertyAccessorSymbol, + override val isGetter: Boolean, + override var status: FirDeclarationStatus +) : FirPropertyAccessor, FirModifiableFunction, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override var receiverTypeRef: FirTypeRef? = null override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() + override val typeParameters: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() + override var body: FirBlock? = null + override val isSetter: Boolean get() = !isGetter + override val annotations: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - valueParameters.transformInplace(transformer, data) + init { + symbol.bind(this) + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + body?.accept(visitor, data) + status.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { + transformReturnTypeRef(transformer, data) + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + transformControlFlowGraphReference(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) body = body?.transformSingle(transformer, data) status = status.transformSingle(transformer, data) - transformControlFlowGraphReference(transformer, data) - - return super.transformChildren(transformer, data) + annotations.transformInplace(transformer, data) + return this } - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { returnTypeRef = returnTypeRef.transformSingle(transformer, data) - } - - override fun transformValueParameters(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { return this } @@ -58,4 +80,13 @@ class FirPropertyAccessorImpl( controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) return this } + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyImpl.kt new file mode 100644 index 00000000000..9d0e1c28895 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyImpl.kt @@ -0,0 +1,118 @@ +/* + * Copyright 2010-2019 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.declarations.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirPropertyImpl( + override val psi: PsiElement?, + override val session: FirSession, + override var returnTypeRef: FirTypeRef, + override var receiverTypeRef: FirTypeRef?, + override val name: Name, + override var initializer: FirExpression?, + override var delegate: FirExpression?, + override val isVar: Boolean, + override val symbol: FirPropertySymbol, + override val isLocal: Boolean, + override var status: FirDeclarationStatus +) : FirProperty, FirModifiableVariable, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = if (isLocal) FirResolvePhase.DECLARATIONS else FirResolvePhase.RAW_FIR + override val delegateFieldSymbol: FirDelegateFieldSymbol? = delegate?.let { FirDelegateFieldSymbol(symbol.callableId) } + override val isVal: Boolean get() = !isVar + override var getter: FirPropertyAccessor? = null + override var setter: FirPropertyAccessor? = null + override val annotations: MutableList = mutableListOf() + override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() + override var containerSource: DeserializedContainerSource? = null + override val backingFieldSymbol: FirBackingFieldSymbol = FirBackingFieldSymbol(symbol.callableId) + override val typeParameters: MutableList = mutableListOf() + + init { + delegateFieldSymbol?.bind(this) + symbol.bind(this) + backingFieldSymbol.bind(this) + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + initializer?.accept(visitor, data) + delegate?.accept(visitor, data) + getter?.accept(visitor, data) + setter?.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + status.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirPropertyImpl { + transformReturnTypeRef(transformer, data) + transformGetter(transformer, data) + transformSetter(transformer, data) + transformControlFlowGraphReference(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirPropertyImpl { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformGetter(transformer: FirTransformer, data: D): FirPropertyImpl { + getter = getter?.transformSingle(transformer, data) + return this + } + + override fun transformSetter(transformer: FirTransformer, data: D): FirPropertyImpl { + setter = setter?.transformSingle(transformer, data) + return this + } + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirPropertyImpl { + controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirPropertyImpl { + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + initializer = initializer?.transformSingle(transformer, data) + delegate = delegate?.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + status = status.transformSingle(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt index 2e571655b72..dc7b35a22a6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt index 556b40cf9f6..671e2638f83 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedImportImpl.kt @@ -1,27 +1,39 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl -import org.jetbrains.kotlin.fir.FirAbstractElement +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirResolvedImportImpl( - val delegate: FirImport, + override var delegate: FirImport, override val packageFqName: FqName, override val relativeClassName: FqName? -) : FirAbstractElement(delegate.psi), FirResolvedImport, FirImport { - override val aliasName: Name? - get() = delegate.aliasName +) : FirResolvedImport { + override val psi: PsiElement? get() = delegate.psi + override val importedFqName: FqName? get() = delegate.importedFqName + override val isAllUnder: Boolean get() = delegate.isAllUnder + override val aliasName: Name? get() = delegate.aliasName + override val resolvedClassId: ClassId? get() = relativeClassName?.let { ClassId(packageFqName, it, false) } + override val importedName: Name? get() = importedFqName?.shortName() - override val importedFqName: FqName? - get() = delegate.importedFqName + override fun acceptChildren(visitor: FirVisitor, data: D) { + } - override val isAllUnder: Boolean - get() = delegate.isAllUnder -} + override fun transformChildren(transformer: FirTransformer, data: D): FirResolvedImportImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirSimpleFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirSimpleFunctionImpl.kt new file mode 100644 index 00000000000..df17a79fe84 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirSimpleFunctionImpl.kt @@ -0,0 +1,93 @@ +/* + * Copyright 2010-2019 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.declarations.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.impl.FirEmptyControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +open class FirSimpleFunctionImpl( + override val psi: PsiElement?, + override val session: FirSession, + override var returnTypeRef: FirTypeRef, + override var receiverTypeRef: FirTypeRef?, + override val name: Name, + override var status: FirDeclarationStatus, + override val symbol: FirFunctionSymbol +) : FirSimpleFunction, FirModifiableFunction, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override var controlFlowGraphReference: FirControlFlowGraphReference = FirEmptyControlFlowGraphReference() + override val typeParameters: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() + override var body: FirBlock? = null + override var containerSource: DeserializedContainerSource? = null + override val annotations: MutableList = mutableListOf() + + init { + symbol.bind(this) + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + controlFlowGraphReference.accept(visitor, data) + typeParameters.forEach { it.accept(visitor, data) } + valueParameters.forEach { it.accept(visitor, data) } + body?.accept(visitor, data) + status.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirSimpleFunctionImpl { + transformReturnTypeRef(transformer, data) + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + transformControlFlowGraphReference(transformer, data) + typeParameters.transformInplace(transformer, data) + transformValueParameters(transformer, data) + body = body?.transformSingle(transformer, data) + status = status.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirSimpleFunctionImpl { + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformControlFlowGraphReference(transformer: FirTransformer, data: D): FirSimpleFunctionImpl { + controlFlowGraphReference = controlFlowGraphReference.transformSingle(transformer, data) + return this + } + + override fun transformValueParameters(transformer: FirTransformer, data: D): FirSimpleFunctionImpl { + valueParameters.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeAliasImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeAliasImpl.kt index 657b128740d..58f2d95fc2a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeAliasImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeAliasImpl.kt @@ -1,48 +1,70 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibility -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.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirTypeAlias +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.SupertypesComputationStatus +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirTypeAliasImpl( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, + override val name: Name, + override var status: FirDeclarationStatus, override val symbol: FirTypeAliasSymbol, - name: Name, - visibility: Visibility, - isExpect: Boolean, - isActual: Boolean, override var expandedTypeRef: FirTypeRef -) : FirAbstractMemberDeclaration(session, psi, name, visibility, Modality.FINAL, isExpect, isActual), FirTypeAlias { +) : FirTypeAlias, FirModifiableTypeParametersOwner, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val typeParameters: MutableList = mutableListOf() + override var supertypesComputationStatus: SupertypesComputationStatus = SupertypesComputationStatus.NOT_COMPUTED + override val annotations: MutableList = mutableListOf() init { symbol.bind(this) } - override fun replaceExpandTypeRef(typeRef: FirTypeRef): FirTypeAlias { - expandedTypeRef = typeRef + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeParameters.forEach { it.accept(visitor, data) } + status.accept(visitor, data) + expandedTypeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirTypeAliasImpl { + typeParameters.transformInplace(transformer, data) + status = status.transformSingle(transformer, data) + expandedTypeRef = expandedTypeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) return this } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - expandedTypeRef = expandedTypeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } - override var supertypesComputationStatus = FirClassLikeDeclaration.SupertypesComputationStatus.NOT_COMPUTED -} + override fun replaceSupertypesComputationStatus(newSupertypesComputationStatus: SupertypesComputationStatus) { + supertypesComputationStatus = newSupertypesComputationStatus + } + + override fun replaceExpandedTypeRef(newExpandedTypeRef: FirTypeRef) { + expandedTypeRef = newExpandedTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeParameterImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeParameterImpl.kt index a3f5ac7fb54..8112d8afbd7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeParameterImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirTypeParameterImpl.kt @@ -1,49 +1,55 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol -import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirTypeParameterImpl( - session: FirSession, - psi: PsiElement?, + override val psi: PsiElement?, + override val session: FirSession, + override val name: Name, override val symbol: FirTypeParameterSymbol, - name: Name, override val variance: Variance, override val isReified: Boolean -) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirTypeParameter { +) : FirTypeParameter, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override val bounds: MutableList = mutableListOf() + override val annotations: MutableList = mutableListOf() + init { symbol.bind(this) } - /* - * Note that each type parameter have to has at least one upper bound (Any? if there is no other bounds) - * so after initializing FirTypeParameterImpl you should call [addDefaultBoundIfNecessary] to guarantee - * this contract - */ - override val bounds: MutableList = mutableListOf() - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - bounds.transformInplace(transformer, data) - - return super.transformChildren(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + bounds.forEach { it.accept(visitor, data) } + annotations.forEach { it.accept(visitor, data) } } -} -fun FirTypeParameterImpl.addDefaultBoundIfNecessary() { - if (bounds.isEmpty()) { - bounds += session.builtinTypes.nullableAnyType + override fun transformChildren(transformer: FirTransformer, data: D): FirTypeParameterImpl { + bounds.transformInplace(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt index 4acdb8a7fee..48e19e1e15e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt @@ -1,57 +1,100 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ open class FirValueParameterImpl( - session: FirSession, - psi: PsiElement?, - name: Name, + override val psi: PsiElement?, + override val session: FirSession, override var returnTypeRef: FirTypeRef, + override val name: Name, + override val symbol: FirVariableSymbol, override var defaultValue: FirExpression?, override val isCrossinline: Boolean, override val isNoinline: Boolean, - override val isVararg: Boolean, - override val symbol: FirVariableSymbol = FirVariableSymbol(name) -) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirValueParameter { + override val isVararg: Boolean +) : FirValueParameter, FirModifiableVariable, FirAbstractAnnotatedElement { + override var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR + override var receiverTypeRef: FirTypeRef? = null + override var initializer: FirExpression? = null + override var delegate: FirExpression? = null + override val delegateFieldSymbol: FirDelegateFieldSymbol? get() = null + override val isVar: Boolean get() = false + override val isVal: Boolean get() = true + override var getter: FirPropertyAccessor? = null + override var setter: FirPropertyAccessor? = null + override val annotations: MutableList = mutableListOf() init { symbol.bind(this) + delegateFieldSymbol?.bind(this) } - override val isVar: Boolean - get() = false - override val initializer: FirExpression? - get() = null - override val delegate: FirExpression? - get() = null - override val receiverTypeRef: FirTypeRef? - get() = null - override val delegateFieldSymbol: FirDelegateFieldSymbol? - get() = null + override fun acceptChildren(visitor: FirVisitor, data: D) { + returnTypeRef.accept(visitor, data) + receiverTypeRef?.accept(visitor, data) + initializer?.accept(visitor, data) + delegate?.accept(visitor, data) + getter?.accept(visitor, data) + setter?.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + defaultValue?.accept(visitor, data) + } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirValueParameterImpl { + transformReturnTypeRef(transformer, data) + transformGetter(transformer, data) + transformSetter(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D): FirValueParameterImpl { returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this + } + + override fun transformGetter(transformer: FirTransformer, data: D): FirValueParameterImpl { + getter = getter?.transformSingle(transformer, data) + return this + } + + override fun transformSetter(transformer: FirTransformer, data: D): FirValueParameterImpl { + setter = setter?.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirValueParameterImpl { + receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) + initializer = initializer?.transformSingle(transformer, data) + delegate = delegate?.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) defaultValue = defaultValue?.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) + return this } - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) + override fun replaceResolvePhase(newResolvePhase: FirResolvePhase) { + resolvePhase = newResolvePhase } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt deleted file mode 100644 index 41259d61c2a..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirVariableImpl.kt +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2010-2019 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.declarations.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirVariable -import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.name.Name - -class FirVariableImpl( - session: FirSession, - psiElement: PsiElement?, - name: Name, - override var returnTypeRef: FirTypeRef, - override val isVar: Boolean, - override var initializer: FirExpression?, - override val symbol: FirVariableSymbol = FirVariableSymbol(name), - override var delegate: FirExpression? = null -) : FirAbstractNamedAnnotatedDeclaration(session, psiElement, name), FirVariable, FirModifiableAccessorsOwner { - - override val delegateFieldSymbol: FirDelegateFieldSymbol? = - delegate?.let { FirDelegateFieldSymbol(symbol.callableId) } - - override var getter: FirPropertyAccessor? = null - - override var setter: FirPropertyAccessor? = null - - init { - symbol.bind(this) - delegateFieldSymbol?.bind(this) - resolvePhase = FirResolvePhase.DECLARATIONS - } - - override val receiverTypeRef: FirTypeRef? - get() = null - - override fun transformChildrenWithoutAccessors(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - initializer = initializer?.transformSingle(transformer, data) - delegate = delegate?.transformSingle(transformer, data) - annotations.transformInplace(transformer, data) - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - getter = getter?.transformSingle(transformer, data) - setter = setter?.transformSingle(transformer, data) - transformChildrenWithoutAccessors(transformer, data) - // Everything other (annotations, etc.) is done above - return this - } - - override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { - returnTypeRef = returnTypeRef.transformSingle(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt index 8a30acb6921..cdb90da914d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -7,32 +7,23 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList -import org.jetbrains.kotlin.fir.types.ConeClassLikeType -import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.fir.visitors.FirVisitor -import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirAnnotationCall(psi: PsiElement?) : FirCallWithArgumentList(psi) { - abstract val annotationTypeRef: FirTypeRef +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - // May be should be not-null (with correct default target) - abstract val useSiteTarget: AnnotationUseSiteTarget? +interface FirAnnotationCall : FirExpression, FirCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val arguments: List + val useSiteTarget: AnnotationUseSiteTarget? + val annotationTypeRef: FirTypeRef - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAnnotationCall(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnnotationCall(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - annotationTypeRef.accept(visitor, data) - super.acceptChildren(visitor, data) - } -} - -val FirAnnotationCall.coneClassLikeType: ConeClassLikeType? - get() = ((annotationTypeRef as? FirResolvedTypeRef)?.type as? ConeClassLikeType)?.takeIf { it !is ConeClassErrorType } - -val FirAnnotationCall.resolvedFqName: FqName? - get() = coneClassLikeType?.lookupTag?.classId?.asSingleFqName() + override fun transformArguments(transformer: FirTransformer, data: D): FirAnnotationCall +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationContainer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationContainer.kt deleted file mode 100644 index 4b8f6eaef82..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationContainer.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2000-2018 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.expressions - -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -interface FirAnnotationContainer { - val annotations: List - - fun acceptAnnotations(visitor: FirVisitor, data: D) { - for (annotation in annotations) { - annotation.accept(visitor, data) - } - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt index b1bd6c9e031..6c59100bfd4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt @@ -6,10 +6,21 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirArrayOfCall(psi: PsiElement?) : FirUnknownTypeCallWithArgumentList(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitArrayOfCall(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirArrayOfCall : FirExpression, FirCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val arguments: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitArrayOfCall(this, data) + + override fun transformArguments(transformer: FirTransformer, data: D): FirArrayOfCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt index 1371df96af3..831e907528f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt @@ -6,22 +6,41 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirArraySetCall( - psi: PsiElement? -) : @VisitedSupertype FirCall(psi), FirAssignment { - // NB: arguments of this thing are indexes AND rvalue - abstract val indexes: List +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override val arguments get() = indexes + rValue +interface FirArraySetCall : FirQualifiedAccess, FirCall { + override val psi: PsiElement? + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirReference + override val arguments: List + val rValue: FirExpression + val operation: FirOperation + val lValue: FirReference + val indexes: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitArraySetCall(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitArraySetCall(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - calleeReference.accept(visitor, data) - } + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirArraySetCall + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirArraySetCall + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirArraySetCall + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirArraySetCall + + override fun transformArguments(transformer: FirTransformer, data: D): FirArraySetCall + + fun transformRValue(transformer: FirTransformer, data: D): FirArraySetCall + + fun transformIndexes(transformer: FirTransformer, data: D): FirArraySetCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt deleted file mode 100644 index bc88c1cfa8d..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions - -import org.jetbrains.kotlin.fir.FirReference -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -interface FirAssignment : FirQualifiedAccess { - val lValue: FirReference get() = calleeReference - - val rValue: FirExpression - - val operation: FirOperation - - fun transformRValue(transformer: FirTransformer, data: D): FirAssignment - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAssignment(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - rValue.accept(visitor, data) - super.acceptChildren(visitor, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt index d12447d351e..cb25d3a39ea 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBinaryLogicExpression.kt @@ -6,30 +6,27 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirBinaryLogicExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val leftOperand: FirExpression - abstract val rightOperand: FirExpression - abstract val kind: OperationKind +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitBinaryLogicExpression(this, data) - } +interface FirBinaryLogicExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val leftOperand: FirExpression + val rightOperand: FirExpression + val kind: LogicOperationKind - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - leftOperand.accept(visitor, data) - rightOperand.accept(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitBinaryLogicExpression(this, data) - abstract fun transformLeftOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression - abstract fun transformRightOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression - abstract fun transformRestChildren(transformer: FirTransformer, data: D): FirBinaryLogicExpression + fun transformLeftOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression - enum class OperationKind(val token: String) { - AND("&&"), OR("||") - } + fun transformRightOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression + + fun transformOtherChildren(transformer: FirTransformer, data: D): FirBinaryLogicExpression } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt index c7e10fea222..b5341a26857 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt @@ -1,24 +1,26 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirBlock(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val statements: List +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitBlock(this, data) +interface FirBlock : FirExpression { + override val psi: PsiElement? + override val annotations: List + val statements: List + override val typeRef: FirTypeRef - override fun acceptChildren(visitor: FirVisitor, data: D) { - for (statement in statements) { - statement.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitBlock(this, data) + + override fun replaceTypeRef(newTypeRef: FirTypeRef) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt index c88aca7e1e2..6089970ba49 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt @@ -6,10 +6,20 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirLoopJump -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.FirTarget +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirBreakExpression(psi: PsiElement?) : FirLoopJump(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitBreakExpression(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirBreakExpression : FirLoopJump { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val target: FirTarget + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitBreakExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt index 5e0605bf669..0700cadff04 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt @@ -1,28 +1,24 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -abstract class FirCall(psi: PsiElement?) : FirExpression(psi) { - abstract val arguments: List +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitCall(this, data) +interface FirCall : FirStatement { + override val psi: PsiElement? + override val annotations: List + val arguments: List - override fun acceptChildren(visitor: FirVisitor, data: D) { - for (argument in arguments) { - argument.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCall(this, data) - abstract fun transformArguments(transformer: FirTransformer, data: D): FirCall + fun transformArguments(transformer: FirTransformer, data: D): FirCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallLikeControlFlowExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallLikeControlFlowExpression.kt deleted file mode 100644 index 749be77c0fc..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallLikeControlFlowExpression.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor -import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid - -abstract class FirCallLikeControlFlowExpression(psi: PsiElement?) : @VisitedSupertype FirUnknownTypeExpression(psi), FirResolvable { - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - } - - override fun accept(visitor: FirVisitorVoid) { - super.accept(visitor) - } - - override fun acceptChildren(visitor: FirVisitorVoid) { - super.acceptChildren(visitor) - } - - override fun transform(visitor: FirTransformer, data: D): CompositeTransformResult { - return super.transform(visitor, data) - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt index 77ade55bb0c..1823c717436 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt @@ -6,9 +6,32 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirCallableReferenceAccess(psi: PsiElement?) : FirQualifiedAccessExpression(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitCallableReferenceAccess(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirCallableReferenceAccess : FirQualifiedAccessExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirReference + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCallableReferenceAccess(this, data) + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirCallableReferenceAccess + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirCallableReferenceAccess + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirCallableReferenceAccess + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirCallableReferenceAccess } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCatch.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCatch.kt index d570d5bc515..24fc09e87c9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCatch.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCatch.kt @@ -5,27 +5,26 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.BaseTransformedType +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirCatch : FirElement { + override val psi: PsiElement? val parameter: FirValueParameter - val block: FirBlock - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitCatch(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - parameter.accept(visitor, data) - block.accept(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCatch(this, data) fun transformParameter(transformer: FirTransformer, data: D): FirCatch fun transformBlock(transformer: FirTransformer, data: D): FirCatch + + fun transformOtherChildren(transformer: FirTransformer, data: D): FirCatch } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt index bf58a60b301..d40919d1780 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt @@ -6,13 +6,19 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirClassReferenceExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val classTypeRef: FirTypeRef +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitClassReferenceExpression(this, data) +interface FirClassReferenceExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val classTypeRef: FirTypeRef + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitClassReferenceExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt index bfcada7851e..f349c4dfa4f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt @@ -6,14 +6,38 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirComponentCall(psi: PsiElement?) : FirFunctionCall(psi) { - // Starting from 1, not from 0 - abstract val componentIndex: Int +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract override val explicitReceiver: FirExpression +interface FirComponentCall : FirFunctionCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val safe: Boolean + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val arguments: List + override val typeArguments: List + override val calleeReference: FirNamedReference + override val explicitReceiver: FirExpression + val componentIndex: Int - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitComponentCall(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitComponentCall(this, data) + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirComponentCall + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirComponentCall + + override fun transformArguments(transformer: FirTransformer, data: D): FirComponentCall + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirComponentCall + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirComponentCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt index 2367543bd06..b09e5ad1303 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt @@ -1,21 +1,26 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.ir.expressions.IrConstKind +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirConstExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val kind: IrConstKind +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract val value: T +interface FirConstExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val kind: IrConstKind + val value: T - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitConstExpression(this, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitConstExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt index 9d0e4962cbf..c592b40cca1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt @@ -6,10 +6,20 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirLoopJump -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.FirTarget +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirContinueExpression(psi: PsiElement?) : FirLoopJump(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitContinueExpression(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirContinueExpression : FirLoopJump { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val target: FirTarget + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitContinueExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt index c2fec4832ea..1fe51af9ea4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt @@ -1,33 +1,32 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList +import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirDelegatedConstructorCall( - psi: PsiElement? -) : @VisitedSupertype FirCallWithArgumentList(psi), FirQualifiedAccess { - // Do we need 'constructedType: FirType' here? - abstract val constructedTypeRef: FirTypeRef - - abstract val isThis: Boolean +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirDelegatedConstructorCall : FirCall { + override val psi: PsiElement? + override val annotations: List + override val arguments: List + val constructedTypeRef: FirTypeRef + val isThis: Boolean val isSuper: Boolean - get() = !isThis + val calleeReference: FirReference - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDelegatedConstructorCall(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDelegatedConstructorCall(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - constructedTypeRef.accept(visitor, data) - calleeReference.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun transformArguments(transformer: FirTransformer, data: D): FirDelegatedConstructorCall + + fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDoWhileLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDoWhileLoop.kt index 070b1df96a7..f6edc00dd68 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDoWhileLoop.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDoWhileLoop.kt @@ -5,9 +5,27 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirDoWhileLoop : FirLoop { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDoWhileLoop(this, data) + override val psi: PsiElement? + override val annotations: List + override val block: FirBlock + override val condition: FirExpression + override val label: FirLabel? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDoWhileLoop(this, data) + + override fun transformBlock(transformer: FirTransformer, data: D): FirDoWhileLoop + + override fun transformCondition(transformer: FirTransformer, data: D): FirDoWhileLoop + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirDoWhileLoop } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt index daee98a77c3..7e7936057e6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt @@ -1,18 +1,24 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirErrorExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val reason: String +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitErrorExpression(this, data) - } +interface FirErrorExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val reason: String + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitErrorExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorStatement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorStatement.kt deleted file mode 100644 index d700c5101d8..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorStatement.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions - -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -interface FirErrorStatement : FirStatement { - val reason: String - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitErrorStatement(this, data) -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt index f60f5f2b1e0..256230c432f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt @@ -1,38 +1,25 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirResolvedCallableReference -import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotatedStatement -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirExpression( - psi: PsiElement? -) : FirAnnotatedStatement(psi) { - abstract val typeRef: FirTypeRef +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract fun replaceTypeRef(newTypeRef: FirTypeRef) +interface FirExpression : FirStatement { + override val psi: PsiElement? + val typeRef: FirTypeRef + override val annotations: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitExpression(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitExpression(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - typeRef.accept(visitor, data) - } -} - -fun FirExpression.toResolvedCallableReference(): FirResolvedCallableReference? { - return (this as? FirQualifiedAccess)?.calleeReference as? FirResolvedCallableReference -} - - -fun FirExpression.toResolvedCallableSymbol(): FirCallableSymbol<*>? { - return toResolvedCallableReference()?.resolvedSymbol as FirCallableSymbol<*>? + fun replaceTypeRef(newTypeRef: FirTypeRef) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt new file mode 100644 index 00000000000..9abd28de594 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionUtil.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2019 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.expressions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl +import org.jetbrains.kotlin.fir.expressions.impl.FirErrorExpressionImpl +import org.jetbrains.kotlin.fir.expressions.impl.FirErrorLoop +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.types.ConeClassErrorType +import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.ir.expressions.IrConstKind +import org.jetbrains.kotlin.name.FqName + +inline val FirAnnotationCall.coneClassLikeType: ConeClassLikeType? + get() = ((annotationTypeRef as? FirResolvedTypeRef)?.type as? ConeClassLikeType)?.takeIf { it !is ConeClassErrorType } + +inline val FirAnnotationCall.resolvedFqName: FqName? + get() = coneClassLikeType?.lookupTag?.classId?.asSingleFqName() + +fun FirConstExpressionImpl(psi: PsiElement?, kind: IrConstKind, value: T?, errorReason: String): FirExpression = + value?.let { FirConstExpressionImpl(psi, kind, it) } ?: FirErrorExpressionImpl(psi, errorReason) + +inline val FirTypeOperatorCall.argument: FirExpression get() = arguments.first() + +fun FirExpression.toResolvedCallableReference(): FirResolvedCallableReference? { + return (this as? FirQualifiedAccess)?.calleeReference as? FirResolvedCallableReference +} + +fun FirExpression.toResolvedCallableSymbol(): FirCallableSymbol<*>? { + return toResolvedCallableReference()?.resolvedSymbol as FirCallableSymbol<*>? +} + +fun FirErrorLoop(psi: PsiElement?, reason: String): FirErrorLoop = FirErrorLoop(psi).apply { + condition = FirErrorExpressionImpl(psi, reason) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt index 8f3bf403b7e..b0825bb0a0c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt @@ -5,33 +5,37 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.FirReference +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirExpressionWithSmartcast( - open val originalExpression: FirQualifiedAccessExpression, +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirExpressionWithSmartcast : FirQualifiedAccessExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirReference + val originalExpression: FirQualifiedAccessExpression val typesFromSmartcast: Collection -) : FirQualifiedAccessExpression(originalExpression.psi) { - val originalType: FirTypeRef get() = originalExpression.typeRef + val originalType: FirTypeRef - final override val safe: Boolean - get() = originalExpression.safe + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitExpressionWithSmartcast(this, data) - final override val explicitReceiver: FirExpression? - get() = originalExpression.explicitReceiver + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast - final override val dispatchReceiver: FirExpression - get() = originalExpression.dispatchReceiver + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast - final override val extensionReceiver: FirExpression - get() = originalExpression.extensionReceiver + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast - final override val calleeReference: FirReference - get() = originalExpression.calleeReference - - override fun acceptChildren(visitor: FirVisitor, data: D) { - originalExpression.acceptChildren(visitor, data) - } + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirExpressionWithSmartcast } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt index 132f89f88b9..9047ce45f8a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt @@ -6,27 +6,37 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirNamedReference -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList -import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirFunctionCall( - psi: PsiElement? -) : @VisitedSupertype FirUnknownTypeCallWithArgumentList(psi), FirQualifiedAccess, FirTypeProjectionContainer { - abstract override val calleeReference: FirNamedReference +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitFunctionCall(this, data) +interface FirFunctionCall : FirQualifiedAccessExpression, FirCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val arguments: List + val typeArguments: List + override val calleeReference: FirNamedReference - override fun acceptChildren(visitor: FirVisitor, data: D) { - calleeReference.accept(visitor, data) - explicitReceiver?.accept(visitor, data) - for (typeArgument in typeArguments) { - typeArgument.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFunctionCall(this, data) + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirFunctionCall + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirFunctionCall + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirFunctionCall + + override fun transformArguments(transformer: FirTransformer, data: D): FirFunctionCall + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirFunctionCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt index e41d0072a09..79acfd99f93 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt @@ -6,12 +6,22 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirGetClassCall(psi: PsiElement?) : FirUnknownTypeCallWithArgumentList(psi) { - val argument: FirExpression get() = arguments.first() +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitGetClassCall(this, data) +interface FirGetClassCall : FirExpression, FirCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val arguments: List + val argument: FirExpression + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitGetClassCall(this, data) + + override fun transformArguments(transformer: FirTransformer, data: D): FirGetClassCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt index 750a74295d9..4496c044035 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt @@ -8,11 +8,19 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirTarget import org.jetbrains.kotlin.fir.FirTargetElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirJump(psi: PsiElement?) : FirExpression(psi) { - abstract val target: FirTarget +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitJump(this, data) +interface FirJump : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val target: FirTarget + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitJump(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt index 513b68f2188..97121f6481a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt @@ -6,9 +6,20 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirLambdaArgumentExpression(psi: PsiElement?) : FirWrappedArgumentExpression(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitLambdaArgumentExpression(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirLambdaArgumentExpression : FirWrappedArgumentExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val expression: FirExpression + override val isSpread: Boolean + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitLambdaArgumentExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoop.kt index 25574915ec5..1c486d896e0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoop.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoop.kt @@ -5,26 +5,29 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.FirLabeledElement -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.FirTargetElement +import org.jetbrains.kotlin.fir.visitors.* -interface FirLoop : @VisitedSupertype FirStatement, FirLabeledElement, FirAnnotationContainer { - val condition: FirExpression +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirLoop : FirStatement, FirTargetElement, FirAnnotationContainer { + override val psi: PsiElement? + override val annotations: List val block: FirBlock + val condition: FirExpression + val label: FirLabel? - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitLoop(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitLoop(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - condition.accept(visitor, data) - block.accept(visitor, data) - super.acceptChildren(visitor, data) - } + fun transformBlock(transformer: FirTransformer, data: D): FirLoop fun transformCondition(transformer: FirTransformer, data: D): FirLoop - fun transformBlock(transformer: FirTransformer, data: D): FirLoop - fun transformRestChildren(transformer: FirTransformer, data: D): FirLoop + + fun transformOtherChildren(transformer: FirTransformer, data: D): FirLoop } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoopJump.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoopJump.kt new file mode 100644 index 00000000000..78f36ada334 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirLoopJump.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 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.expressions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirTarget +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirLoopJump : FirJump { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val target: FirTarget + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitLoopJump(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt index 8e56278ea16..f3ef78616ba 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirNamedArgumentExpression.kt @@ -6,14 +6,22 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirNamedArgumentExpression( - psi: PsiElement? -) : FirWrappedArgumentExpression(psi) { - abstract val name: Name +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitNamedArgumentExpression(this, data) +interface FirNamedArgumentExpression : FirWrappedArgumentExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val expression: FirExpression + override val isSpread: Boolean + val name: Name + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitNamedArgumentExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt index 0becfe4de2f..1657610ae5f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt @@ -6,12 +6,22 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirOperatorCall(psi: PsiElement?) : FirCallWithArgumentList(psi) { - abstract val operation: FirOperation +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitOperatorCall(this, data) +interface FirOperatorCall : FirExpression, FirCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val arguments: List + val operation: FirOperation + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitOperatorCall(this, data) + + override fun transformArguments(transformer: FirTransformer, data: D): FirOperatorCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt index a4c3385b6fd..9ac4ca1a598 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt @@ -5,39 +5,31 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* -interface FirQualifiedAccess : FirResolvable { - val safe: Boolean get() = false +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - val explicitReceiver: FirExpression? get() = null +interface FirQualifiedAccess : FirQualifiedAccessWithoutCallee, FirResolvable { + override val psi: PsiElement? + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirReference - val dispatchReceiver: FirExpression get() = FirNoReceiverExpression + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccess(this, data) - val extensionReceiver: FirExpression get() = FirNoReceiverExpression + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitQualifiedAccess(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - calleeReference.accept(visitor, data) - explicitReceiver?.accept(visitor, data) - if (dispatchReceiver !== explicitReceiver) { - dispatchReceiver.accept(visitor, data) - } - if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { - extensionReceiver.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } - - fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt index 4de93736a01..9e79e86434f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt @@ -6,21 +6,32 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirQualifiedAccessExpression( - psi: PsiElement? -) : FirQualifiedAccess, @VisitedSupertype FirUnknownTypeExpression(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitQualifiedAccessExpression(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun acceptChildren(visitor: FirVisitor, data: D) { - calleeReference.accept(visitor, data) - explicitReceiver?.accept(visitor, data) - dispatchReceiver.accept(visitor, data) - extensionReceiver.accept(visitor, data) - super.acceptChildren(visitor, data) - } +interface FirQualifiedAccessExpression : FirExpression, FirQualifiedAccess { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirReference + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccessExpression(this, data) + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpression + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpression + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpression + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpression } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt new file mode 100644 index 00000000000..82a15db6972 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2019 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.expressions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirQualifiedAccessWithoutCallee : FirStatement { + override val psi: PsiElement? + override val annotations: List + val safe: Boolean + val explicitReceiver: FirExpression? + val dispatchReceiver: FirExpression + val extensionReceiver: FirExpression + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccessWithoutCallee(this, data) + + fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee + + fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee + + fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt index a60e5d842b1..72269685f9c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvable.kt @@ -5,8 +5,21 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.FirReference +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* -interface FirResolvable : FirStatement { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirResolvable : FirElement { + override val psi: PsiElement? val calleeReference: FirReference + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvable(this, data) + + fun transformCalleeReference(transformer: FirTransformer, data: D): FirResolvable } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt index 836ba99c2bf..8e9b79cd46d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt @@ -6,20 +6,23 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirResolvedQualifier(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val packageFqName: FqName +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract val relativeClassFqName: FqName? +interface FirResolvedQualifier : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val packageFqName: FqName + val relativeClassFqName: FqName? + val classId: ClassId? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedQualifier(this, data) - - val classId - get() = relativeClassFqName?.let { - ClassId(packageFqName, it, false) - } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt index 6a28f136e86..2059ef46b6a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt @@ -6,17 +6,22 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirTarget import org.jetbrains.kotlin.fir.declarations.FirFunction -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirReturnExpression(psi: PsiElement?) : FirJump>(psi) { - abstract val result: FirExpression +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitReturnExpression(this, data) +interface FirReturnExpression : FirJump> { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val target: FirTarget> + val result: FirExpression - override fun acceptChildren(visitor: FirVisitor, data: D) { - result.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitReturnExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt index 99b410dc556..1a62f8e0934 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirSpreadArgumentExpression.kt @@ -6,12 +6,20 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirSpreadArgumentExpression(psi: PsiElement?) : FirWrappedArgumentExpression(psi) { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirSpreadArgumentExpression : FirWrappedArgumentExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val expression: FirExpression override val isSpread: Boolean - get() = true - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitSpreadArgumentExpression(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitSpreadArgumentExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStatement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStatement.kt index e3c2b2b494f..db583b48ee8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStatement.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStatement.kt @@ -1,20 +1,22 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirStatement : FirElement, FirAnnotationContainer { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitStatement(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - } +interface FirStatement : FirAnnotationContainer { + override val psi: PsiElement? + override val annotations: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitStatement(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt index 17c22ae9036..736f57b7aa9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt @@ -6,10 +6,21 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirStringConcatenationCall(psi: PsiElement?) : FirCallWithArgumentList(psi) { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitStringConcatenationCall(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirStringConcatenationCall : FirCall, FirExpression { + override val psi: PsiElement? + override val annotations: List + override val arguments: List + override val typeRef: FirTypeRef + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitStringConcatenationCall(this, data) + + override fun transformArguments(transformer: FirTransformer, data: D): FirStringConcatenationCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt new file mode 100644 index 00000000000..0c03dc098e4 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2019 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.expressions + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirThisReceiverExpression : FirQualifiedAccessExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirThisReference + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitThisReceiverExpression(this, data) + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirThisReceiverExpression + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirThisReceiverExpression + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirThisReceiverExpression + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirThisReceiverExpression +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt index 806486cd1e7..cf2d3150f38 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt @@ -6,16 +6,19 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirThrowExpression(psi: PsiElement?) : FirExpression(psi) { - abstract val exception: FirExpression +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitThrowExpression(this, data) +interface FirThrowExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val exception: FirExpression - override fun acceptChildren(visitor: FirVisitor, data: D) { - exception.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitThrowExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt index cd860504207..67b1bad0080 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt @@ -6,30 +6,33 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirTryExpression( - psi: PsiElement? -) : FirCallLikeControlFlowExpression(psi) { - abstract val tryBlock: FirBlock +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract val catches: List +interface FirTryExpression : FirExpression, FirResolvable { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val calleeReference: FirReference + val tryBlock: FirBlock + val catches: List + val finallyBlock: FirBlock? - abstract val finallyBlock: FirBlock? + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTryExpression(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTryExpression(this, data) + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirTryExpression - override fun acceptChildren(visitor: FirVisitor, data: D) { - calleeReference.accept(visitor, data) - tryBlock.accept(visitor, data) - catches.forEach { it.accept(visitor, data) } - finallyBlock?.accept(visitor, data) - super.acceptChildren(visitor, data) - } + fun transformTryBlock(transformer: FirTransformer, data: D): FirTryExpression - abstract fun transformTryBlock(transformer: FirTransformer, data: D): FirTryExpression - abstract fun transformCatches(transformer: FirTransformer, data: D): FirTryExpression - abstract fun transformFinallyBlock(transformer: FirTransformer, data: D): FirTryExpression + fun transformCatches(transformer: FirTransformer, data: D): FirTryExpression + + fun transformFinallyBlock(transformer: FirTransformer, data: D): FirTryExpression + + fun transformOtherChildren(transformer: FirTransformer, data: D): FirTryExpression } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt index 8c730f4422c..bdd04d46623 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt @@ -6,24 +6,23 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirOperationBasedCall import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -// is/!is/as/as? -abstract class FirTypeOperatorCall( - psi: PsiElement?, - operation: FirOperation -) : FirOperationBasedCall(psi, operation) { - val argument: FirExpression get() = arguments.first() +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - abstract val conversionTypeRef: FirTypeRef +interface FirTypeOperatorCall : FirExpression, FirCall { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val arguments: List + val operation: FirOperation + val conversionTypeRef: FirTypeRef - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeOperatorCall(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeOperatorCall(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { - conversionTypeRef.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun transformArguments(transformer: FirTransformer, data: D): FirTypeOperatorCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt deleted file mode 100644 index 511616fb6b8..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -abstract class FirUncheckedNotNullCast(psi: PsiElement?) : FirUnknownTypeCallWithArgumentList(psi) { - override fun accept(visitor: FirVisitor, data: D): R = visitor.visitUncheckedNotNullCast(this, data) - - val expression: FirExpression get() = arguments[0] -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt deleted file mode 100644 index 32748768e38..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2000-2018 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.expressions - -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor - -interface FirVariable> : - @VisitedSupertype FirDeclaration, FirTypedDeclaration, FirCallableDeclaration, FirNamedDeclaration, FirStatement { - val isVar: Boolean - - val isVal: Boolean - get() = !isVar - - val initializer: FirExpression? - - val delegate: FirExpression? - - override val symbol: FirVariableSymbol - - val getter: FirPropertyAccessor? get() = null - - val setter: FirPropertyAccessor? get() = null - - val delegateFieldSymbol: FirDelegateFieldSymbol? - - fun transformChildrenWithoutAccessors(transformer: FirTransformer, data: D) - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitVariable(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - initializer?.accept(visitor, data) - delegate?.accept(visitor, data) - getter?.accept(visitor, data) - setter?.accept(visitor, data) - super.acceptChildren(visitor, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt index 1656c8c4503..2fd475e6f25 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt @@ -5,10 +5,36 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* -interface FirVariableAssignment : FirAssignment { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitVariableAssignment(this, data) +interface FirVariableAssignment : FirQualifiedAccess { + override val psi: PsiElement? + override val annotations: List + override val safe: Boolean + override val explicitReceiver: FirExpression? + override val dispatchReceiver: FirExpression + override val extensionReceiver: FirExpression + override val calleeReference: FirReference + val lValue: FirReference + val rValue: FirExpression + val operation: FirOperation + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitVariableAssignment(this, data) + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirVariableAssignment + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirVariableAssignment + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirVariableAssignment + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirVariableAssignment + + fun transformRValue(transformer: FirTransformer, data: D): FirVariableAssignment } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenBranch.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenBranch.kt index 703756a80db..bb0df30adf3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenBranch.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenBranch.kt @@ -5,30 +5,25 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.BaseTransformedType +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirWhenBranch : FirElement { - // NB: we can represent subject, if it's inside, as a special kind of expression - // when (mySubject) { - // $subj == 42$ -> doSmth() - // } + override val psi: PsiElement? val condition: FirExpression - val result: FirBlock - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitWhenBranch(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - condition.accept(visitor, data) - result.accept(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWhenBranch(this, data) fun transformCondition(transformer: FirTransformer, data: D): FirWhenBranch fun transformResult(transformer: FirTransformer, data: D): FirWhenBranch + + fun transformOtherChildren(transformer: FirTransformer, data: D): FirWhenBranch } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt index ce112556453..8e5370036c3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt @@ -6,30 +6,32 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirWhenExpression(psi: PsiElement?) : FirCallLikeControlFlowExpression(psi) { - abstract val subject: FirExpression? +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - // when (val subjectVariable = subject()) { ... } - abstract val subjectVariable: FirVariable<*>? +interface FirWhenExpression : FirExpression, FirResolvable { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + override val calleeReference: FirReference + val subject: FirExpression? + val subjectVariable: FirVariable<*>? + val branches: List - abstract val branches: List + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWhenExpression(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitWhenExpression(this, data) + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirWhenExpression - override fun acceptChildren(visitor: FirVisitor, data: D) { - calleeReference.accept(visitor, data) - subjectVariable?.accept(visitor, data) ?: subject?.accept(visitor, data) - for (branch in branches) { - branch.accept(visitor, data) - } - super.acceptChildren(visitor, data) - } + fun transformSubject(transformer: FirTransformer, data: D): FirWhenExpression - abstract fun transformBranches(transformer: FirTransformer, data: D): FirWhenExpression + fun transformBranches(transformer: FirTransformer, data: D): FirWhenExpression - abstract fun transformSubject(transformer: FirTransformer, data: D): FirWhenExpression + fun transformOtherChildren(transformer: FirTransformer, data: D): FirWhenExpression } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt index 64a775d6c32..2dda8f4f9c6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt @@ -1,18 +1,25 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. + * Copyright 2010-2019 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.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirWhenSubject -import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirWhenSubjectExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) { - abstract val whenSubject: FirWhenSubject +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitWhenSubjectExpression(this, data) +interface FirWhenSubjectExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val whenSubject: FirWhenSubject + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWhenSubjectExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhileLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhileLoop.kt index e0009896444..982bf47e236 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhileLoop.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhileLoop.kt @@ -5,9 +5,27 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirWhileLoop : FirLoop { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitWhileLoop(this, data) + override val psi: PsiElement? + override val annotations: List + override val label: FirLabel? + override val condition: FirExpression + override val block: FirBlock + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWhileLoop(this, data) + + override fun transformCondition(transformer: FirTransformer, data: D): FirWhileLoop + + override fun transformBlock(transformer: FirTransformer, data: D): FirWhileLoop + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirWhileLoop } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt index c542e5c587a..9dda5350579 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt @@ -7,15 +7,19 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirWrappedArgumentExpression(psi: PsiElement?) : FirWrappedExpression(psi) { - open val isSpread: Boolean - get() = false +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirWrappedArgumentExpression : FirWrappedExpression { + override val psi: PsiElement? override val typeRef: FirTypeRef - get() = expression.typeRef + override val annotations: List + override val expression: FirExpression + val isSpread: Boolean - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitWrappedArgumentExpression(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWrappedArgumentExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedDelegateExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedDelegateExpression.kt index c63462edc82..7286b4de467 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedDelegateExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedDelegateExpression.kt @@ -7,20 +7,19 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirWrappedDelegateExpression(psi: PsiElement?) : FirWrappedExpression(psi) { - abstract val delegateProvider: FirExpression +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirWrappedDelegateExpression : FirWrappedExpression { + override val psi: PsiElement? override val typeRef: FirTypeRef - get() = expression.typeRef + override val annotations: List + override val expression: FirExpression + val delegateProvider: FirExpression - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitWrappedDelegateExpression(this, data) - } - - override fun acceptChildren(visitor: FirVisitor, data: D) { - delegateProvider.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWrappedDelegateExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedExpression.kt index 94021465772..21500bd571c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedExpression.kt @@ -7,20 +7,18 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirWrappedExpression(psi: PsiElement?) : FirExpression(psi) { - abstract val expression: FirExpression +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - throw AssertionError("We should not try to replace type reference in ${this::class}") - } +interface FirWrappedExpression : FirExpression { + override val psi: PsiElement? + override val typeRef: FirTypeRef + override val annotations: List + val expression: FirExpression - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitWrappedExpression(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - expression.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWrappedExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirEmptyControlFlowGraphReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/LogicOperationKind.kt similarity index 63% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirEmptyControlFlowGraphReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/LogicOperationKind.kt index 55449d1f675..4975d88b4d3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirEmptyControlFlowGraphReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/LogicOperationKind.kt @@ -3,6 +3,8 @@ * 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.references +package org.jetbrains.kotlin.fir.expressions -class FirEmptyControlFlowGraphReference : FirControlFlowGraphReference() \ No newline at end of file +enum class LogicOperationKind(val token: String) { + AND("&&"), OR("||") +} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAnnotatedElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAnnotatedElement.kt deleted file mode 100644 index ca52d801424..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAnnotatedElement.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirAbstractAnnotatedElement(psi: PsiElement?) : FirAbstractElement(psi), FirAnnotationContainer { - final override val annotations = mutableListOf() - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - annotations.transformInplace(transformer, data) - return this - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt deleted file mode 100644 index 21493bfbfe1..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference -import org.jetbrains.kotlin.fir.expressions.FirAssignment -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirOperation -import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirAbstractAssignment( - psi: PsiElement?, - final override var rValue: FirExpression, - final override val operation: FirOperation, - safe: Boolean = false -) : FirAbstractQualifiedAccess(psi, safe), FirVariableAssignment { - - override var lValue: FirReference - get() = calleeReference - set(value) { - calleeReference = value - } - - override fun transformRValue(transformer: FirTransformer, data: D): FirAssignment { - rValue = rValue.transformSingle(transformer, data) - return this - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - rValue = rValue.transformSingle(transformer, data) - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt index c9aebe19a9d..b63c09b90e2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt @@ -6,36 +6,36 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirLoop -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirAbstractLoop( - psi: PsiElement?, +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirAbstractLoop : FirLoop, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val annotations: MutableList + override var block: FirBlock override var condition: FirExpression -) : FirAnnotatedStatement(psi), FirLoop { - override lateinit var block: FirBlock - - override var label: FirLabel? = null - + override var label: FirLabel? override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - super.acceptChildren(visitor, data) + annotations.forEach { it.accept(visitor, data) } + block.accept(visitor, data) + condition.accept(visitor, data) + label?.accept(visitor, data) } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - return transformCondition(transformer, data) - .transformBlock(transformer, data) - .transformRestChildren(transformer, data) - } - - override fun transformCondition(transformer: FirTransformer, data: D): FirAbstractLoop { - condition = condition.transformSingle(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirAbstractLoop { + transformBlock(transformer, data) + transformCondition(transformer, data) + transformOtherChildren(transformer, data) return this } @@ -44,8 +44,14 @@ abstract class FirAbstractLoop( return this } - override fun transformRestChildren(transformer: FirTransformer, data: D): FirAbstractLoop { + override fun transformCondition(transformer: FirTransformer, data: D): FirAbstractLoop { + condition = condition.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirAbstractLoop { + annotations.transformInplace(transformer, data) label = label?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) as FirAbstractLoop + return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt new file mode 100644 index 00000000000..00cb4547bfd --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2019 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.expressions.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirTarget +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.expressions.FirLoopJump +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirAbstractLoopJump : FirLoopJump, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override var typeRef: FirTypeRef + override val annotations: MutableList + override var target: FirTarget + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirAbstractLoopJump { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt deleted file mode 100644 index ef21ebf31cb..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirAbstractQualifiedAccess( - psi: PsiElement?, - final override var safe: Boolean = false -) : FirAnnotatedStatement(psi), FirModifiableQualifiedAccess { - final override lateinit var calleeReference: FirReference - - final override var explicitReceiver: FirExpression? = null - - override var dispatchReceiver: FirExpression = FirNoReceiverExpression - - override var extensionReceiver: FirExpression = FirNoReceiverExpression - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - super.transformChildren(transformer, data) - - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt deleted file mode 100644 index 9607943a361..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.expressions.FirStatement - -abstract class FirAnnotatedStatement(psi: PsiElement?) : FirAbstractAnnotatedElement(psi), FirStatement \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt index ceb0e84537c..c479946e6e0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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. */ @@ -7,27 +7,43 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirAnnotationCallImpl( - psi: PsiElement?, + override val psi: PsiElement?, override val useSiteTarget: AnnotationUseSiteTarget?, override var annotationTypeRef: FirTypeRef -) : FirAnnotationCall(psi) { - override val typeRef: FirTypeRef - get() = annotationTypeRef +) : FirAnnotationCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override val typeRef: FirTypeRef get() = annotationTypeRef + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - throw AssertionError("Attempt to replace type ref for annotation call") + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + annotationTypeRef.accept(visitor, data) } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirAnnotationCallImpl { + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) annotationTypeRef = annotationTypeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) + return this } + + override fun transformArguments(transformer: FirTransformer, data: D): FirAnnotationCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt index a5acc2145a6..ad5c02ce18c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt @@ -6,6 +6,45 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirArrayOfCallImpl(psi: PsiElement?) : FirArrayOfCall(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirArrayOfCallImpl( + override val psi: PsiElement? +) : FirArrayOfCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirArrayOfCallImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirArrayOfCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt index db0750ba725..fd01b8ccfe5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt @@ -6,54 +6,98 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirArraySetCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirOperation +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirArraySetCallImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var rValue: FirExpression, override val operation: FirOperation -) : FirArraySetCall(psi), FirModifiableQualifiedAccess { +) : FirArraySetCall, FirModifiableQualifiedAccess, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override var safe: Boolean = false + override var explicitReceiver: FirExpression? = null + override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override var extensionReceiver: FirExpression = FirNoReceiverExpression override lateinit var calleeReference: FirReference - - override var lValue: FirReference + override val arguments: List get() = indexes + rValue + override var lValue: FirReference get() = calleeReference set(value) { calleeReference = value } + override val indexes: MutableList = mutableListOf() - override var explicitReceiver: FirExpression? - get() = null - set(_) {} - - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + calleeReference.accept(visitor, data) + rValue.accept(visitor, data) + indexes.forEach { it.accept(visitor, data) } } - override val indexes = mutableListOf() - - override fun transformRValue(transformer: FirTransformer, data: D): FirAssignment { - rValue = rValue.transformSingle(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirArraySetCallImpl { + annotations.transformInplace(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + } + transformCalleeReference(transformer, data) + transformRValue(transformer, data) + transformIndexes(transformer, data) return this } - override fun transformArguments(transformer: FirTransformer, data: D): FirCall { - rValue = rValue.transformSingle(transformer, data) - indexes.transformInplace(transformer, data) + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirArraySetCallImpl { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) return this } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirArraySetCallImpl { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirArraySetCallImpl { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirArraySetCallImpl { calleeReference = calleeReference.transformSingle(transformer, data) - rValue = rValue.transformSingle(transformer, data) - typeRef = typeRef.transformSingle(transformer, data) - indexes.transformInplace(transformer, data) + return this + } - return super.transformChildren(transformer, data) + override fun transformArguments(transformer: FirTransformer, data: D): FirArraySetCallImpl { + return this + } + + override fun transformRValue(transformer: FirTransformer, data: D): FirArraySetCallImpl { + rValue = rValue.transformSingle(transformer, data) + return this + } + + override fun transformIndexes(transformer: FirTransformer, data: D): FirArraySetCallImpl { + indexes.transformInplace(transformer, data) + return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt index dfabacfa4b4..b7eb989d1d0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBinaryLogicExpressionImpl.kt @@ -6,35 +6,60 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.expressions.LogicOperationKind +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirBinaryLogicExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var leftOperand: FirExpression, override var rightOperand: FirExpression, - override val kind: OperationKind -) : FirBinaryLogicExpression(psi) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - transformLeftOperand(transformer, data) - transformRightOperand(transformer, data) - return transformRestChildren(transformer, data) + override val kind: LogicOperationKind +) : FirBinaryLogicExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + leftOperand.accept(visitor, data) + rightOperand.accept(visitor, data) } - override fun transformLeftOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression { + override fun transformChildren(transformer: FirTransformer, data: D): FirBinaryLogicExpressionImpl { + transformLeftOperand(transformer, data) + transformRightOperand(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformLeftOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpressionImpl { leftOperand = leftOperand.transformSingle(transformer, data) return this } - override fun transformRightOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpression { + override fun transformRightOperand(transformer: FirTransformer, data: D): FirBinaryLogicExpressionImpl { rightOperand = rightOperand.transformSingle(transformer, data) return this } - override fun transformRestChildren(transformer: FirTransformer, data: D): FirBinaryLogicExpression { - return super.transformChildren(transformer, data) as FirBinaryLogicExpression + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirBinaryLogicExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt index f21dc99b1bf..53b63cd4cde 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt @@ -1,22 +1,45 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirStatement -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirBlockImpl(psi: PsiElement?) : FirBlock(psi) { - override val statements = mutableListOf() +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { +class FirBlockImpl( + override val psi: PsiElement? +) : FirBlock, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val statements: MutableList = mutableListOf() + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + statements.forEach { it.accept(visitor, data) } + typeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirBlockImpl { + annotations.transformInplace(transformer, data) statements.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt index 1b5ea4b7573..8aaa8c3981a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt @@ -6,6 +6,39 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirTarget +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBreakExpression +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef +import org.jetbrains.kotlin.fir.visitors.* -class FirBreakExpressionImpl(psi: PsiElement?) : FirBreakExpression(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirBreakExpressionImpl( + override val psi: PsiElement? +) : FirBreakExpression, FirAbstractLoopJump, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) + override val annotations: MutableList = mutableListOf() + override lateinit var target: FirTarget + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirBreakExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt index 7944633225d..a9c130b110b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt @@ -6,23 +6,34 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.visitors.* -abstract class FirCallWithArgumentList(psi: PsiElement?) : FirCall(psi) { - override val arguments = mutableListOf() +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - arguments.transformInplace(transformer, data) - return super.transformChildren(transformer, data) +interface FirCallWithArgumentList : FirCall, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val annotations: MutableList + override val arguments: MutableList + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } } - override fun transformArguments(transformer: FirTransformer, data: D): FirCall { - arguments.transformInplace(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirCallWithArgumentList { + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) return this } + override fun transformArguments(transformer: FirTransformer, data: D): FirCallWithArgumentList { + arguments.transformInplace(transformer, data) + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt index edf8e6bdf61..93558a8d6af 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt @@ -6,22 +6,79 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirCallableReferenceAccessImpl( - psi: PsiElement? -) : FirCallableReferenceAccess(psi), FirModifiableQualifiedAccess { + override val psi: PsiElement? +) : FirCallableReferenceAccess, FirModifiableQualifiedAccess, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override var safe: Boolean = false + override var explicitReceiver: FirExpression? = null + override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override var extensionReceiver: FirExpression = FirNoReceiverExpression override lateinit var calleeReference: FirReference - override var explicitReceiver: FirExpression? = null + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + calleeReference.accept(visitor, data) + } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - super.transformChildren(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirCallableReferenceAccessImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + } + transformCalleeReference(transformer, data) + return this + } - return super.transformChildren(transformer, data) + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirCallableReferenceAccessImpl { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirCallableReferenceAccessImpl { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirCallableReferenceAccessImpl { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirCallableReferenceAccessImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCatchImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCatchImpl.kt index 9fa426d0a36..345ffd3e1c2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCatchImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCatchImpl.kt @@ -6,32 +6,44 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirCatch -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirCatchImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var parameter: FirValueParameter, override var block: FirBlock -) : FirAbstractElement(psi), FirCatch { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { +) : FirCatch { + override fun acceptChildren(visitor: FirVisitor, data: D) { + parameter.accept(visitor, data) + block.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirCatchImpl { transformParameter(transformer, data) transformBlock(transformer, data) + transformOtherChildren(transformer, data) return this } - override fun transformParameter(transformer: FirTransformer, data: D): FirCatch { + override fun transformParameter(transformer: FirTransformer, data: D): FirCatchImpl { parameter = parameter.transformSingle(transformer, data) return this } - override fun transformBlock(transformer: FirTransformer, data: D): FirCatch { + override fun transformBlock(transformer: FirTransformer, data: D): FirCatchImpl { block = block.transformSingle(transformer, data) return this } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirCatchImpl { + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt index c1663d80dce..1d14ed2609b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt @@ -6,15 +6,39 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirClassReferenceExpressionImpl(psi: PsiElement?, override var classTypeRef: FirTypeRef) : FirClassReferenceExpression(psi) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirClassReferenceExpressionImpl( + override val psi: PsiElement?, + override var classTypeRef: FirTypeRef +) : FirClassReferenceExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + classTypeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirClassReferenceExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) classTypeRef = classTypeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt index 448aebd4fbb..7732fbc0941 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt @@ -6,49 +6,86 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirNamedReference +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirComponentCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess -import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.types.FirTypeProjection -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirComponentCallImpl( - psi: PsiElement?, - override val componentIndex: Int, - override var explicitReceiver: FirExpression -) : FirComponentCall(psi) { - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + override val psi: PsiElement?, + override var explicitReceiver: FirExpression, + override val componentIndex: Int +) : FirComponentCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override val safe: Boolean get() = false + override val dispatchReceiver: FirExpression get() = FirNoReceiverExpression + override val extensionReceiver: FirExpression get() = FirNoReceiverExpression + override val arguments: MutableList = mutableListOf() + override val typeArguments: MutableList = mutableListOf() + override var calleeReference: FirNamedReference = FirSimpleNamedReference(psi, Name.identifier("component$componentIndex"), null) + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + typeArguments.forEach { it.accept(visitor, data) } + calleeReference.accept(visitor, data) + explicitReceiver.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirComponentCallImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) + typeArguments.transformInplace(transformer, data) + transformCalleeReference(transformer, data) explicitReceiver = explicitReceiver.transformSingle(transformer, data) return this } - override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirComponentCallImpl { return this } - override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirComponentCallImpl { return this } - override var calleeReference: FirNamedReference = - FirSimpleNamedReference(psi, Name.identifier("component$componentIndex")) + override fun transformArguments(transformer: FirTransformer, data: D): FirComponentCallImpl { + arguments.transformInplace(transformer, data) + return this + } - override val typeArguments: List - get() = emptyList() - - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirComponentCallImpl { calleeReference = calleeReference.transformSingle(transformer, data) return this } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - calleeReference = calleeReference.transformSingle(transformer, data) + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirComponentCallImpl { explicitReceiver = explicitReceiver.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt index 22f85deed8c..d19d0445da9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt @@ -1,19 +1,44 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirConstExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.ir.expressions.IrConstKind +import org.jetbrains.kotlin.fir.visitors.* -class FirConstExpressionImpl( - psi: PsiElement?, +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirConstExpressionImpl ( + override val psi: PsiElement?, override val kind: IrConstKind, override val value: T -) : FirConstExpression(psi) +) : FirConstExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() -fun FirConstExpressionImpl(psi: PsiElement?, kind: IrConstKind, value: T?, errorReason: String) = - value?.let { FirConstExpressionImpl(psi, kind, it) } ?: FirErrorExpressionImpl(psi, errorReason) \ No newline at end of file + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirConstExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt index cae3155aba4..df526223b7a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt @@ -6,6 +6,39 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirTarget +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirContinueExpression +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef +import org.jetbrains.kotlin.fir.visitors.* -class FirContinueExpressionImpl(psi: PsiElement?) : FirContinueExpression(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirContinueExpressionImpl( + override val psi: PsiElement? +) : FirContinueExpression, FirAbstractLoopJump, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) + override val annotations: MutableList = mutableListOf() + override lateinit var target: FirTarget + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirContinueExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt index 0083fef9fa0..e4fb168e5ef 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt @@ -1,56 +1,58 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess -import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference -import org.jetbrains.kotlin.fir.references.FirExplicitThisReference -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.references.impl.FirExplicitSuperReference +import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirDelegatedConstructorCallImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var constructedTypeRef: FirTypeRef, override val isThis: Boolean -) : FirDelegatedConstructorCall(psi) { - override var calleeReference: FirReference = - if (isThis) FirExplicitThisReference(psi, null) else FirExplicitSuperReference(psi, constructedTypeRef) +) : FirDelegatedConstructorCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() + override val isSuper: Boolean get() = !isThis + override var calleeReference: FirReference = if (isThis) FirExplicitThisReference(psi, null) else FirExplicitSuperReference(psi, constructedTypeRef) - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { - calleeReference = calleeReference.transformSingle(transformer, data) - return this + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + constructedTypeRef.accept(visitor, data) + calleeReference.accept(visitor, data) } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirDelegatedConstructorCallImpl { + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) constructedTypeRef = constructedTypeRef.transformSingle(transformer, data) + transformCalleeReference(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirDelegatedConstructorCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCallImpl { calleeReference = calleeReference.transformSingle(transformer, data) - typeRef = typeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) - } - - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { return this } - - override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - return this - } - - override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - return this - } - - override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(psi) - - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDoWhileLoopImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDoWhileLoopImpl.kt index 22f8af2d65a..15720629b3c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDoWhileLoopImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDoWhileLoopImpl.kt @@ -6,19 +6,54 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.visitors.* -class FirDoWhileLoopImpl(psi: PsiElement?, condition: FirExpression) : FirAbstractLoop(psi, condition), FirDoWhileLoop { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirDoWhileLoopImpl( + override val psi: PsiElement?, + override var condition: FirExpression +) : FirDoWhileLoop, FirAbstractLoop, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override lateinit var block: FirBlock + override var label: FirLabel? = null + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + block.accept(visitor, data) + condition.accept(visitor, data) + label?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirDoWhileLoopImpl { + transformBlock(transformer, data) + transformCondition(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformBlock(transformer: FirTransformer, data: D): FirDoWhileLoopImpl { block = block.transformSingle(transformer, data) + return this + } + + override fun transformCondition(transformer: FirTransformer, data: D): FirDoWhileLoopImpl { condition = condition.transformSingle(transformer, data) - label = label?.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirDoWhileLoopImpl { annotations.transformInplace(transformer, data) + label = label?.transformSingle(transformer, data) return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt index 88a0b584f5e..5584766dc84 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt @@ -6,22 +6,36 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef +import org.jetbrains.kotlin.fir.visitors.* -// Representation of "dummy" condition at else branch -class FirElseIfTrueCondition(psi: PsiElement?) : FirExpression(psi) { +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(psi) +class FirElseIfTrueCondition( + override val psi: PsiElement? +) : FirExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitBooleanTypeRef(psi) + override val annotations: MutableList = mutableListOf() - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirElseIfTrueCondition { typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt index cc01c156441..fb816c71626 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt @@ -5,9 +5,40 @@ package org.jetbrains.kotlin.fir.expressions.impl +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirStatement +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirEmptyExpressionBlock : FirBlock(null) { - override val statements: List = listOf() +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirEmptyExpressionBlock : FirBlock, FirAbstractAnnotatedElement { + override val psi: PsiElement? = null + override val annotations: MutableList = mutableListOf() + override val statements: MutableList = mutableListOf() + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + statements.forEach { it.accept(visitor, data) } + typeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirEmptyExpressionBlock { + annotations.transformInplace(transformer, data) + statements.transformInplace(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt index c566bfad375..aeb6809e3e1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt @@ -1,15 +1,42 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirErrorExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirErrorExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override val reason: String -) : FirErrorExpression(psi) \ No newline at end of file +) : FirErrorExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoop.kt new file mode 100644 index 00000000000..a0daaf0a1c7 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorLoop.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2010-2019 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.expressions.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirErrorLoop( + override val psi: PsiElement? +) : FirLoop, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override var block: FirBlock = FirEmptyExpressionBlock() + override var condition: FirExpression = FirErrorExpressionImpl(psi, "error loop") + override var label: FirLabel? = null + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + block.accept(visitor, data) + condition.accept(visitor, data) + label?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorLoop { + transformBlock(transformer, data) + transformCondition(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformBlock(transformer: FirTransformer, data: D): FirErrorLoop { + block = block.transformSingle(transformer, data) + return this + } + + override fun transformCondition(transformer: FirTransformer, data: D): FirErrorLoop { + condition = condition.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirErrorLoop { + annotations.transformInplace(transformer, data) + label = label?.transformSingle(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt index 29871f57d94..2862a80b5f9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt @@ -1,10 +1,41 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirExpressionStub(psi: PsiElement?) : FirUnknownTypeExpression(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirExpressionStub( + override val psi: PsiElement? +) : FirExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirExpressionStub { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt index 1ccea780ead..ce8749dd6d6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt @@ -5,41 +5,59 @@ package org.jetbrains.kotlin.fir.expressions.impl +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* class FirExpressionWithSmartcastImpl( override var originalExpression: FirQualifiedAccessExpression, - typesFromSmartcast: Collection -) : FirExpressionWithSmartcast(originalExpression, typesFromSmartcast) { + override val typeRef: FirTypeRef, + override val typesFromSmartcast: Collection +) : FirExpressionWithSmartcast { init { assert(originalExpression.typeRef is FirResolvedTypeRef) } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override val psi: PsiElement? get() = originalExpression.psi + override val annotations: List get() = originalExpression.annotations + override val safe: Boolean get() = originalExpression.safe + override val explicitReceiver: FirExpression? get() = originalExpression.explicitReceiver + override val dispatchReceiver: FirExpression get() = originalExpression.dispatchReceiver + override val extensionReceiver: FirExpression get() = originalExpression.extensionReceiver + override val calleeReference: FirReference get() = originalExpression.calleeReference + override val originalType: FirTypeRef get() = originalExpression.typeRef + + override fun transformChildren(transformer: FirTransformer, data: D): FirExpressionWithSmartcast { originalExpression = originalExpression.transformSingle(transformer, data) return this } - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun acceptChildren(visitor: FirVisitor, data: D) { + originalExpression.acceptChildren(visitor, data) + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirExpressionWithSmartcast { throw IllegalStateException() } - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast { throw IllegalStateException() } - override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast { throw IllegalStateException() } - override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast { throw IllegalStateException() } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt index f8d8b2f056b..64a89ce7aaf 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt @@ -6,41 +6,91 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.types.FirTypeProjection -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirFunctionCallImpl( - psi: PsiElement?, + override val psi: PsiElement? +) : FirFunctionCall, FirModifiableQualifiedAccess, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() override var safe: Boolean = false -) : FirFunctionCall(psi), FirModifiableQualifiedAccess { - override val typeArguments = mutableListOf() - + override var explicitReceiver: FirExpression? = null + override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override var extensionReceiver: FirExpression = FirNoReceiverExpression + override val arguments: MutableList = mutableListOf() + override val typeArguments: MutableList = mutableListOf() override lateinit var calleeReference: FirNamedReference - override var explicitReceiver: FirExpression? = null - - override var dispatchReceiver: FirExpression = FirNoReceiverExpression - - override var extensionReceiver: FirExpression = FirNoReceiverExpression - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeArguments.transformInplace(transformer, data) - super.transformChildren(transformer, data) - - return super.transformChildren(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + arguments.forEach { it.accept(visitor, data) } + typeArguments.forEach { it.accept(visitor, data) } + calleeReference.accept(visitor, data) } - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { + override fun transformChildren(transformer: FirTransformer, data: D): FirFunctionCallImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + } + transformArguments(transformer, data) + typeArguments.transformInplace(transformer, data) + transformCalleeReference(transformer, data) + return this + } + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirFunctionCallImpl { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirFunctionCallImpl { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirFunctionCallImpl { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirFunctionCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirFunctionCallImpl { calleeReference = calleeReference.transformSingle(transformer, data) return this } - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - return this + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt index 5305ed5c4fa..f01b4e6582f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt @@ -6,6 +6,46 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirGetClassCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* -class FirGetClassCallImpl(psi: PsiElement?) : FirGetClassCall(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirGetClassCallImpl( + override val psi: PsiElement? +) : FirGetClassCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() + override val argument: FirExpression get() = arguments.first() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirGetClassCallImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirGetClassCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt index e8ce20693f5..667198eb303 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt @@ -6,18 +6,36 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirLambdaArgumentExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var expression: FirExpression -) : FirLambdaArgumentExpression(psi) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - expression = expression.transformSingle(transformer, data) - return super.transformChildren(transformer, data) +) : FirLambdaArgumentExpression, FirAbstractAnnotatedElement { + override val typeRef: FirTypeRef get() = expression.typeRef + override val annotations: MutableList = mutableListOf() + override val isSpread: Boolean get() = false + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + expression.accept(visitor, data) } + + override fun transformChildren(transformer: FirTransformer, data: D): FirLambdaArgumentExpressionImpl { + annotations.transformInplace(transformer, data) + expression = expression.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt deleted file mode 100644 index d75ec24e197..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirTarget -import org.jetbrains.kotlin.fir.expressions.FirJump -import org.jetbrains.kotlin.fir.expressions.FirLoop -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirLoopJump(psi: PsiElement?) : FirJump(psi) { - override lateinit var target: FirTarget - - override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) - - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt index d75f7f39a56..bfdc6a60b9e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt @@ -5,54 +5,38 @@ package org.jetbrains.kotlin.fir.expressions.impl -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirFunctionCall -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.visitors.* -interface FirModifiableQualifiedAccess : FirQualifiedAccess { - override var calleeReference: C +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +interface FirModifiableQualifiedAccess : FirQualifiedAccessWithoutCallee, FirAbstractAnnotatedElement { + override val psi: PsiElement? + override val annotations: MutableList override var safe: Boolean - get() = false - set(_) {} - override var explicitReceiver: FirExpression? - override var dispatchReceiver: FirExpression - get() = super.dispatchReceiver - set(_) {} - override var extensionReceiver: FirExpression - get() = super.extensionReceiver - set(_) {} - - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { - calleeReference = calleeReference.transformSingle(transformer, data) - return this + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } } - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - return this - } - - override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) - return this - } - - override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - extensionReceiver = extensionReceiver.transformSingle(transformer, data) - return this - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - calleeReference = calleeReference.transformSingle(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess { + annotations.transformInplace(transformer, data) explicitReceiver = explicitReceiver?.transformSingle(transformer, data) if (dispatchReceiver !== explicitReceiver) { dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) @@ -60,8 +44,21 @@ interface FirModifiableQualifiedAccess : FirQualifiedAccess { if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { extensionReceiver = extensionReceiver.transformSingle(transformer, data) } - return this } + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt index 78d77341bc3..20b3c1b1115 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNamedArgumentExpressionImpl.kt @@ -6,21 +6,38 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirNamedArgumentExpressionImpl( - psi: PsiElement?, - override val name: Name, + override val psi: PsiElement?, + override var expression: FirExpression, override val isSpread: Boolean, - override var expression: FirExpression -) : FirNamedArgumentExpression(psi) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - expression = expression.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + override val name: Name +) : FirNamedArgumentExpression, FirAbstractAnnotatedElement { + override val typeRef: FirTypeRef get() = expression.typeRef + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + expression.accept(visitor, data) } + + override fun transformChildren(transformer: FirTransformer, data: D): FirNamedArgumentExpressionImpl { + annotations.transformInplace(transformer, data) + expression = expression.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNoReceiverExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNoReceiverExpression.kt index 350cb02781c..b1c75df1426 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNoReceiverExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirNoReceiverExpression.kt @@ -5,15 +5,24 @@ package org.jetbrains.kotlin.fir.expressions.impl +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -object FirNoReceiverExpression : FirExpression(null) { +object FirNoReceiverExpression : FirExpression { + override val psi: PsiElement? = null override val typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + override val annotations: List get() = emptyList() override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirNoReceiverExpression { + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt deleted file mode 100644 index 73d21037942..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.expressions.FirOperation -import org.jetbrains.kotlin.fir.expressions.FirOperatorCall -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirOperationBasedCall( - psi: PsiElement?, - final override val operation: FirOperation -) : FirOperatorCall(psi) { - override var typeRef: FirTypeRef = if (operation in FirOperation.BOOLEANS) { - FirImplicitBooleanTypeRef(null) - } else { - FirImplicitTypeRefImpl(null) - } - - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt index 735d87445e0..c373a05d0fa 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt @@ -6,9 +6,52 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirOperation +import org.jetbrains.kotlin.fir.expressions.FirOperatorCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirOperatorCallImpl( - psi: PsiElement?, - operation: FirOperation -) : FirOperationBasedCall(psi, operation) \ No newline at end of file + override val psi: PsiElement?, + override val operation: FirOperation +) : FirOperatorCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = if (operation in FirOperation.BOOLEANS) { + FirImplicitBooleanTypeRef(null) + } else { + FirImplicitTypeRefImpl(null) + } + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirOperatorCallImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirOperatorCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt index 5f4022e3b7b..93c2bac7e91 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt @@ -6,28 +6,79 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirQualifiedAccessExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement? +) : FirQualifiedAccessExpression, FirModifiableQualifiedAccess, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() override var safe: Boolean = false -) : FirModifiableQualifiedAccess, FirQualifiedAccessExpression(psi) { + override var explicitReceiver: FirExpression? = null + override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override var extensionReceiver: FirExpression = FirNoReceiverExpression override lateinit var calleeReference: FirReference - override var explicitReceiver: FirExpression? = null + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + calleeReference.accept(visitor, data) + } - override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override fun transformChildren(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + } + transformCalleeReference(transformer, data) + return this + } - override var extensionReceiver: FirExpression = FirNoReceiverExpression + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - super.transformChildren(transformer, data) + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } - return super.transformChildren(transformer, data) + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt index d168dc75810..18728696478 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt @@ -6,14 +6,43 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirResolvedQualifierImpl( - psi: PsiElement?, - override val packageFqName: FqName, - override val relativeClassFqName: FqName? -) : FirResolvedQualifier(psi) { - constructor(psi: PsiElement?, classId: ClassId) : this(psi, classId.packageFqName, classId.relativeClassName) + override val psi: PsiElement?, + override var packageFqName: FqName, + override var relativeClassFqName: FqName? +) : FirResolvedQualifier, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override val classId: ClassId? get() = relativeClassFqName?.let { + ClassId(packageFqName, it, false) +} + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirResolvedQualifierImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt index 6935ee33a64..7549972c9d6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt @@ -6,29 +6,43 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirTarget import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirReturnExpression -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirReturnExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var result: FirExpression -) : FirReturnExpression(psi) { +) : FirReturnExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) + override val annotations: MutableList = mutableListOf() override lateinit var target: FirTarget> - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - result = result.transformSingle(transformer, data) - typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + result.accept(visitor, data) } - override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) + override fun transformChildren(transformer: FirTransformer, data: D): FirReturnExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + result = result.transformSingle(transformer, data) + return this + } - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt index c8b2f840de8..c74f77b2b0e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt @@ -1,22 +1,44 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.expressions.impl -import org.jetbrains.kotlin.fir.FirElement +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirStatement -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.transformInplace +import org.jetbrains.kotlin.fir.visitors.transformSingle -class FirSingleExpressionBlock(private var statement: FirStatement) : FirBlock(statement.psi) { - override val statements - get() = listOf(statement) +class FirSingleExpressionBlock( + var statement: FirStatement +) : FirBlock, FirAbstractAnnotatedElement { + override val psi: PsiElement? get() = statement.psi + override val annotations: MutableList = mutableListOf() + override val statements: List get() = listOf(statement) + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + statement.accept(visitor, data) + typeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirSingleExpressionBlock { + annotations.transformInplace(transformer, data) statement = statement.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt index 889d3c76698..11767f37c07 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSpreadArgumentExpressionImpl.kt @@ -6,18 +6,36 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirSpreadArgumentExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var expression: FirExpression -) : FirSpreadArgumentExpression(psi) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - expression = expression.transformSingle(transformer, data) - return super.transformChildren(transformer, data) +) : FirSpreadArgumentExpression, FirAbstractAnnotatedElement { + override val typeRef: FirTypeRef get() = expression.typeRef + override val annotations: MutableList = mutableListOf() + override val isSpread: Boolean get() = true + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + expression.accept(visitor, data) } + + override fun transformChildren(transformer: FirTransformer, data: D): FirSpreadArgumentExpressionImpl { + annotations.transformInplace(transformer, data) + expression = expression.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt index 2b63285a0d2..6810635159d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt @@ -6,20 +6,45 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* -class FirStringConcatenationCallImpl(psi: PsiElement?) : FirStringConcatenationCall(psi) { - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +class FirStringConcatenationCallImpl( + override val psi: PsiElement? +) : FirStringConcatenationCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() override var typeRef: FirTypeRef = FirImplicitStringTypeRef(psi) - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + typeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirStringConcatenationCallImpl { + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirStringConcatenationCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt index bbba0429cfc..15c01b1ddac 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt @@ -6,26 +6,79 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirThisReference +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirThisReceiverExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var calleeReference: FirThisReference -) : FirModifiableQualifiedAccess, FirQualifiedAccessExpression(psi) { - override var explicitReceiver: FirExpression? - get() = null - set(_) {} +) : FirThisReceiverExpression, FirModifiableQualifiedAccess, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override var safe: Boolean = false + override var explicitReceiver: FirExpression? = null + override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override var extensionReceiver: FirExpression = FirNoReceiverExpression - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + calleeReference.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirThisReceiverExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + } + transformCalleeReference(transformer, data) + return this + } + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirThisReceiverExpressionImpl { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirThisReceiverExpressionImpl { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirThisReceiverExpressionImpl { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirThisReceiverExpressionImpl { calleeReference = calleeReference.transformSingle(transformer, data) - dispatchReceiver.transformSingle(transformer, data) - extensionReceiver.transformSingle(transformer, data) + return this + } - return super.transformChildren(transformer, data) + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt index 98e13ba5891..78c6f4a8f47 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt @@ -6,25 +6,40 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirThrowExpression -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirThrowExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var exception: FirExpression -) : FirThrowExpression(psi) { - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} +) : FirThrowExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) + override val annotations: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - exception = exception.transformSingle(transformer, data) - typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + exception.accept(visitor, data) } - override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(psi) + override fun transformChildren(transformer: FirTransformer, data: D): FirThrowExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + exception = exception.transformSingle(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt index 966733c7a75..166b1b1a1ba 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt @@ -6,44 +6,77 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirCatch import org.jetbrains.kotlin.fir.expressions.FirTryExpression -import org.jetbrains.kotlin.fir.references.FirStubReference -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.references.impl.FirStubReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirTryExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var tryBlock: FirBlock, - override var finallyBlock: FirBlock?, + override var finallyBlock: FirBlock? +) : FirTryExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() override var calleeReference: FirReference = FirStubReference() -) : FirTryExpression(psi) { - override val catches = mutableListOf() + override val catches: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - calleeReference = calleeReference.transformSingle(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + calleeReference.accept(visitor, data) + tryBlock.accept(visitor, data) + catches.forEach { it.accept(visitor, data) } + finallyBlock?.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirTryExpressionImpl { + transformCalleeReference(transformer, data) transformTryBlock(transformer, data) transformCatches(transformer, data) transformFinallyBlock(transformer, data) - return super.transformChildren(transformer, data) + transformOtherChildren(transformer, data) + return this } - override fun transformTryBlock(transformer: FirTransformer, data: D): FirTryExpression { + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirTryExpressionImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + + override fun transformTryBlock(transformer: FirTransformer, data: D): FirTryExpressionImpl { tryBlock = tryBlock.transformSingle(transformer, data) return this } - override fun transformCatches(transformer: FirTransformer, data: D): FirTryExpression { + override fun transformCatches(transformer: FirTransformer, data: D): FirTryExpressionImpl { catches.transformInplace(transformer, data) return this } - override fun transformFinallyBlock(transformer: FirTransformer, data: D): FirTryExpression { + override fun transformFinallyBlock(transformer: FirTransformer, data: D): FirTryExpressionImpl { finallyBlock = finallyBlock?.transformSingle(transformer, data) return this } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirTryExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt index e7b1aa38315..4f1e8af5e65 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt @@ -6,20 +6,50 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirOperation import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirTypeOperatorCallImpl( - psi: PsiElement?, - operation: FirOperation, + override val psi: PsiElement?, + override val operation: FirOperation, override var conversionTypeRef: FirTypeRef -) : FirTypeOperatorCall(psi, operation) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { +) : FirTypeOperatorCall, FirCallWithArgumentList, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() + override val arguments: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + arguments.forEach { it.accept(visitor, data) } + conversionTypeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirTypeOperatorCallImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + transformArguments(transformer, data) conversionTypeRef = conversionTypeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return this + } + + override fun transformArguments(transformer: FirTransformer, data: D): FirTypeOperatorCallImpl { + arguments.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt index ef4bb5a7609..9e019ee811a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt @@ -6,20 +6,36 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* -class FirUnitExpression(psi: PsiElement?) : FirExpression(psi) { - override fun replaceTypeRef(newTypeRef: FirTypeRef) {} +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ +class FirUnitExpression( + override val psi: PsiElement? +) : FirExpression, FirAbstractAnnotatedElement { override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(psi) + override val annotations: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirUnitExpression { typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt deleted file mode 100644 index 68937a7afa0..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirUnknownTypeCallWithArgumentList( - psi: PsiElement? -) : FirCallWithArgumentList(psi) { - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt deleted file mode 100644 index ac2de5054a2..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2010-2019 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.expressions.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirUnknownTypeExpression( - psi: PsiElement? -) : FirExpression(psi) { - final override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - - final override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt index e7d77c97c6b..09756d8d179 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt @@ -6,13 +6,85 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirOperation import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirVariableAssignmentImpl( - psi: PsiElement?, - value: FirExpression, - operation: FirOperation, - safe: Boolean = false -) : FirAbstractAssignment(psi, value, operation, safe), FirVariableAssignment \ No newline at end of file + override val psi: PsiElement?, + override var safe: Boolean, + override var rValue: FirExpression, + override var operation: FirOperation +) : FirVariableAssignment, FirModifiableQualifiedAccess, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override var explicitReceiver: FirExpression? = null + override var dispatchReceiver: FirExpression = FirNoReceiverExpression + override var extensionReceiver: FirExpression = FirNoReceiverExpression + override lateinit var calleeReference: FirReference + override var lValue: FirReference + get() = calleeReference + set(value) { + calleeReference = value + } + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + explicitReceiver?.accept(visitor, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver.accept(visitor, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver.accept(visitor, data) + } + calleeReference.accept(visitor, data) + rValue.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + annotations.transformInplace(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + if (dispatchReceiver !== explicitReceiver) { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + } + if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + } + transformCalleeReference(transformer, data) + transformRValue(transformer, data) + return this + } + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } + + override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) + return this + } + + override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + extensionReceiver = extensionReceiver.transformSingle(transformer, data) + return this + } + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + + override fun transformRValue(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + rValue = rValue.transformSingle(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenBranchImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenBranchImpl.kt index d81d47d20d7..88e78f8fcb0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenBranchImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenBranchImpl.kt @@ -6,32 +6,44 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirWhenBranch -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirWhenBranchImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var condition: FirExpression, override var result: FirBlock -) : FirAbstractElement(psi), FirWhenBranch { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { +) : FirWhenBranch { + override fun acceptChildren(visitor: FirVisitor, data: D) { + condition.accept(visitor, data) + result.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirWhenBranchImpl { transformCondition(transformer, data) transformResult(transformer, data) + transformOtherChildren(transformer, data) return this } - override fun transformCondition(transformer: FirTransformer, data: D): FirWhenBranch { + override fun transformCondition(transformer: FirTransformer, data: D): FirWhenBranchImpl { condition = condition.transformSingle(transformer, data) return this } - override fun transformResult(transformer: FirTransformer, data: D): FirWhenBranch { + override fun transformResult(transformer: FirTransformer, data: D): FirWhenBranchImpl { result = result.transformSingle(transformer, data) return this } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirWhenBranchImpl { + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt index 2b592412bc0..3d84a886573 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt @@ -6,39 +6,59 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirReference +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.fir.expressions.FirWhenBranch import org.jetbrains.kotlin.fir.expressions.FirWhenExpression -import org.jetbrains.kotlin.fir.references.FirStubReference -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.compose +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.references.impl.FirStubReference +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirWhenExpressionImpl( - psiElement: PsiElement?, - override var subject: FirExpression? = null, - override var subjectVariable: FirVariable<*>? = null, + override val psi: PsiElement?, + override var subject: FirExpression?, + override var subjectVariable: FirVariable<*>? +) : FirWhenExpression, FirAbstractAnnotatedElement { + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) + override val annotations: MutableList = mutableListOf() override var calleeReference: FirReference = FirStubReference() -) : FirWhenExpression(psiElement) { - override val branches = mutableListOf() + override val branches: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - calleeReference = calleeReference.transformSingle(transformer, data) - transformSubject(transformer, data) - branches.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + annotations.forEach { it.accept(visitor, data) } + calleeReference.accept(visitor, data) + if (subjectVariable != null) { + subjectVariable.accept(visitor, data) + } else { + subject?.accept(visitor, data) + } + branches.forEach { it.accept(visitor, data) } } - override fun transformBranches(transformer: FirTransformer, data: D): FirWhenExpression { - branches.transformInplace(transformer, data) + override fun transformChildren(transformer: FirTransformer, data: D): FirWhenExpressionImpl { + transformCalleeReference(transformer, data) + transformSubject(transformer, data) + transformBranches(transformer, data) + transformOtherChildren(transformer, data) return this } - override fun transformSubject(transformer: FirTransformer, data: D): FirWhenExpression { + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirWhenExpressionImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + + override fun transformSubject(transformer: FirTransformer, data: D): FirWhenExpressionImpl { if (subjectVariable != null) { subjectVariable = subjectVariable?.transformSingle(transformer, data) } else { @@ -46,4 +66,19 @@ class FirWhenExpressionImpl( } return this } + + override fun transformBranches(transformer: FirTransformer, data: D): FirWhenExpressionImpl { + branches.transformInplace(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirWhenExpressionImpl { + typeRef = typeRef.transformSingle(transformer, data) + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt index c88642dbbac..e936ebeb543 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt @@ -7,6 +7,32 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirWhenSubject +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* -class FirWhenSubjectExpressionImpl(psi: PsiElement?, override val whenSubject: FirWhenSubject) : FirWhenSubjectExpression(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirWhenSubjectExpressionImpl( + override val psi: PsiElement?, + override val whenSubject: FirWhenSubject +) : FirWhenSubjectExpression, FirAbstractAnnotatedElement { + override val typeRef: FirTypeRef get() = whenSubject.whenExpression.subject!!.typeRef + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirWhenSubjectExpressionImpl { + annotations.transformInplace(transformer, data) + return this + } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhileLoopImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhileLoopImpl.kt index 64faa2d7c60..dc760b9beff 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhileLoopImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhileLoopImpl.kt @@ -6,7 +6,54 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirWhileLoop +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.visitors.* -class FirWhileLoopImpl(psi: PsiElement?, condition: FirExpression) : FirAbstractLoop(psi, condition), FirWhileLoop \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirWhileLoopImpl( + override val psi: PsiElement?, + override var condition: FirExpression +) : FirWhileLoop, FirAbstractLoop, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override var label: FirLabel? = null + override lateinit var block: FirBlock + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + label?.accept(visitor, data) + condition.accept(visitor, data) + block.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirWhileLoopImpl { + transformCondition(transformer, data) + transformBlock(transformer, data) + transformOtherChildren(transformer, data) + return this + } + + override fun transformCondition(transformer: FirTransformer, data: D): FirWhileLoopImpl { + condition = condition.transformSingle(transformer, data) + return this + } + + override fun transformBlock(transformer: FirTransformer, data: D): FirWhileLoopImpl { + block = block.transformSingle(transformer, data) + return this + } + + override fun transformOtherChildren(transformer: FirTransformer, data: D): FirWhileLoopImpl { + annotations.transformInplace(transformer, data) + label = label?.transformSingle(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWrappedDelegateExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWrappedDelegateExpressionImpl.kt index b222521f0fa..653204404bd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWrappedDelegateExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWrappedDelegateExpressionImpl.kt @@ -6,22 +6,38 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirWrappedDelegateExpressionImpl( - psi: PsiElement?, + override val psi: PsiElement?, override var expression: FirExpression -) : FirWrappedDelegateExpression(psi) { +) : FirWrappedDelegateExpression, FirAbstractAnnotatedElement { + override val typeRef: FirTypeRef get() = expression.typeRef + override val annotations: MutableList = mutableListOf() override lateinit var delegateProvider: FirExpression - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + expression.accept(visitor, data) + delegateProvider.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirWrappedDelegateExpressionImpl { + annotations.transformInplace(transformer, data) expression = expression.transformSingle(transformer, data) delegateProvider = delegateProvider.transformSingle(transformer, data) - - return super.transformChildren(transformer, data) + return this } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirAbstractAnnotatedElement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirAbstractAnnotatedElement.kt new file mode 100644 index 00000000000..009ebb2a5ac --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirAbstractAnnotatedElement.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2019 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.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirAbstractAnnotatedElement : FirAnnotationContainer { + override val psi: PsiElement? + override val annotations: MutableList + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirAbstractAnnotatedElement { + annotations.transformInplace(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirLabelImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirLabelImpl.kt new file mode 100644 index 00000000000..e8c05879a7d --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/impl/FirLabelImpl.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2019 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.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirLabel +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirLabelImpl( + override val psi: PsiElement?, + override val name: String +) : FirLabel { + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirLabelImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/labels/FirLabelImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/labels/FirLabelImpl.kt deleted file mode 100644 index 47f41c6a16d..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/labels/FirLabelImpl.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2010-2019 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.labels - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirLabel - -class FirLabelImpl( - psi: PsiElement?, - override val name: String -) : FirAbstractElement(psi), FirLabel \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirBackingFieldReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReference.kt similarity index 56% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirBackingFieldReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReference.kt index c16ef3354a5..e15d2aaa64f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirBackingFieldReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReference.kt @@ -3,24 +3,24 @@ * 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 +package org.jetbrains.kotlin.fir.references +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirBackingFieldReference : FirResolvedCallableReference { - + override val psi: PsiElement? override val name: Name - get() = NAME - + override val candidateSymbol: AbstractFirBasedSymbol<*>? override val resolvedSymbol: FirBackingFieldSymbol - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitBackingFieldReference(this, data) - } - - companion object { - val NAME = Name.identifier("field") - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitBackingFieldReference(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReferenceImpl.kt deleted file mode 100644 index b464697168c..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirBackingFieldReferenceImpl.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirBackingFieldReference -import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol - -class FirBackingFieldReferenceImpl( - psi: PsiElement?, - override val resolvedSymbol: FirBackingFieldSymbol -) : FirAbstractElement(psi), FirBackingFieldReference \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirControlFlowGraphReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirControlFlowGraphReference.kt index 0b460134f00..8e992ff903c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirControlFlowGraphReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirControlFlowGraphReference.kt @@ -6,18 +6,15 @@ package org.jetbrains.kotlin.fir.references import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.FirPureAbstractElement -import org.jetbrains.kotlin.fir.FirReference -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -abstract class FirControlFlowGraphReference : FirPureAbstractElement(), @VisitedSupertype FirReference { - override val psi: PsiElement? get() = null +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun accept(visitor: FirVisitor, data: D): R { - return visitor.visitControlFlowGraphReference(this, data) - } -} +interface FirControlFlowGraphReference : FirReference { + override val psi: PsiElement? + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitControlFlowGraphReference(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDelegateFieldReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReference.kt similarity index 56% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDelegateFieldReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReference.kt index c08d8a564df..7907b6a6c0f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirDelegateFieldReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReference.kt @@ -3,23 +3,24 @@ * 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 +package org.jetbrains.kotlin.fir.references +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirDelegateFieldReference : FirResolvedCallableReference { - + override val psi: PsiElement? override val name: Name - get() = NAME - + override val candidateSymbol: AbstractFirBasedSymbol<*>? override val resolvedSymbol: FirDelegateFieldSymbol<*> - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDelegateFieldReference(this, data) - - companion object { - val NAME = Name.identifier("\$delegate") - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDelegateFieldReference(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReferenceImpl.kt deleted file mode 100644 index d00c26929ba..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirDelegateFieldReferenceImpl.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirDelegateFieldReference -import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol - -class FirDelegateFieldReferenceImpl( - psi: PsiElement?, - override val resolvedSymbol: FirDelegateFieldSymbol<*> -) : FirAbstractElement(psi), FirDelegateFieldReference \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirErrorNamedReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirErrorNamedReference.kt index f719f5068ea..e3ef24ca2ce 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirErrorNamedReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirErrorNamedReference.kt @@ -6,12 +6,20 @@ package org.jetbrains.kotlin.fir.references import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirNamedReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* -class FirErrorNamedReference( - psi: PsiElement?, - val errorReason: String, - override val name: Name = Name.special("<$errorReason>") -) : FirAbstractElement(psi), FirNamedReference \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirErrorNamedReference : FirNamedReference { + override val psi: PsiElement? + override val name: Name + override val candidateSymbol: AbstractFirBasedSymbol<*>? + val errorReason: String + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitErrorNamedReference(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitThisReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitThisReference.kt deleted file mode 100644 index b9a07080928..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitThisReference.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirThisReference -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol - -class FirExplicitThisReference(psi: PsiElement?, override val labelName: String?) : FirAbstractElement(psi), FirThisReference { - override var boundSymbol: AbstractFirBasedSymbol<*>? = null -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirImplicitThisReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirImplicitThisReference.kt deleted file mode 100644 index 297dc3fae28..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirImplicitThisReference.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirThisReference -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol - -class FirImplicitThisReference(override val boundSymbol: AbstractFirBasedSymbol<*>) : FirAbstractElement(null), FirThisReference { - override val labelName: String? - get() = null -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirNamedReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirNamedReference.kt similarity index 57% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirNamedReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirNamedReference.kt index 0b431edc66d..a72451d5e6f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirNamedReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirNamedReference.kt @@ -3,18 +3,22 @@ * 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 +package org.jetbrains.kotlin.fir.references +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirNamedReference : FirReference { + override val psi: PsiElement? val name: Name + val candidateSymbol: AbstractFirBasedSymbol<*>? - val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitNamedReference(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitNamedReference(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirPropertyFromParameterCallableReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirPropertyFromParameterCallableReference.kt deleted file mode 100644 index 11cb73b83b5..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirPropertyFromParameterCallableReference.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirResolvedCallableReference -import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.name.Name - -class FirPropertyFromParameterCallableReference( - psi: PsiElement?, - override val name: Name, - override val resolvedSymbol: FirVariableSymbol<*> -) : FirAbstractElement(psi), FirResolvedCallableReference \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirReference.kt new file mode 100644 index 00000000000..1da12c5a3c6 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirReference.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2019 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.references + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirReference : FirElement { + override val psi: PsiElement? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitReference(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirResolvedCallableReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReference.kt similarity index 51% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirResolvedCallableReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReference.kt index 80d9c82e2f6..01e6641243e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirResolvedCallableReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReference.kt @@ -3,15 +3,23 @@ * 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 +package org.jetbrains.kotlin.fir.references +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirResolvedCallableReference : FirNamedReference { - // Can't write FirCallableSymbol here because of enums + override val psi: PsiElement? + override val name: Name + override val candidateSymbol: AbstractFirBasedSymbol<*>? val resolvedSymbol: AbstractFirBasedSymbol<*> - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitResolvedCallableReference(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedCallableReference(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReferenceImpl.kt deleted file mode 100644 index 6bbf29341c1..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirResolvedCallableReferenceImpl.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirResolvedCallableReference -import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.name.Name - -class FirResolvedCallableReferenceImpl( - psi: PsiElement?, - override val name: Name, - override val resolvedSymbol: AbstractFirBasedSymbol<*> -) : FirAbstractElement(psi), FirResolvedCallableReference \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSimpleNamedReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSimpleNamedReference.kt deleted file mode 100644 index 5e53f03ce94..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSimpleNamedReference.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirNamedReference -import org.jetbrains.kotlin.name.Name - -open class FirSimpleNamedReference(psi: PsiElement?, override val name: Name) : FirAbstractElement(psi), FirNamedReference \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirStubReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirStubReference.kt deleted file mode 100644 index 0d02d011aa4..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirStubReference.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2010-2019 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.references - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirPureAbstractElement -import org.jetbrains.kotlin.fir.FirReference - -class FirStubReference : FirPureAbstractElement(), FirReference { - override val psi: PsiElement? get() = null -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSuperReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSuperReference.kt similarity index 62% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSuperReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSuperReference.kt index bdf8778b476..1a470d3c901 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirSuperReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirSuperReference.kt @@ -3,20 +3,22 @@ * 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 +package org.jetbrains.kotlin.fir.references +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirSuperReference : FirReference { + override val psi: PsiElement? val superTypeRef: FirTypeRef + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitSuperReference(this, data) + fun replaceSuperTypeRef(newSuperTypeRef: FirTypeRef) - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitSuperReference(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - superTypeRef.accept(visitor, data) - } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirThisReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirThisReference.kt similarity index 50% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirThisReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirThisReference.kt index cc57c2e8bcb..beaee4233d1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirThisReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirThisReference.kt @@ -3,16 +3,23 @@ * 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 +package org.jetbrains.kotlin.fir.references +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirThisReference : FirReference { + override val psi: PsiElement? val labelName: String? + val boundSymbol: AbstractFirBasedSymbol<*>? - val boundSymbol: AbstractFirBasedSymbol<*>? get() = null + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitThisReference(this, data) - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitThisReference(this, data) + fun replaceBoundSymbol(newBoundSymbol: AbstractFirBasedSymbol<*>) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirBackingFieldReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirBackingFieldReferenceImpl.kt new file mode 100644 index 00000000000..39b16377b74 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirBackingFieldReferenceImpl.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirBackingFieldReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirBackingFieldReferenceImpl( + override val psi: PsiElement?, + override val candidateSymbol: AbstractFirBasedSymbol<*>?, + override val resolvedSymbol: FirBackingFieldSymbol +) : FirBackingFieldReference { + override val name: Name get() = Name.identifier("\$field") + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirBackingFieldReferenceImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirDelegateFieldReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirDelegateFieldReferenceImpl.kt new file mode 100644 index 00000000000..9faea4305c5 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirDelegateFieldReferenceImpl.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirDelegateFieldReferenceImpl( + override val psi: PsiElement?, + override val candidateSymbol: AbstractFirBasedSymbol<*>?, + override val resolvedSymbol: FirDelegateFieldSymbol<*> +) : FirDelegateFieldReference { + override val name: Name get() = Name.identifier("\$delegate") + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirDelegateFieldReferenceImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirEmptyControlFlowGraphReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirEmptyControlFlowGraphReference.kt new file mode 100644 index 00000000000..5c1b615218e --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirEmptyControlFlowGraphReference.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirEmptyControlFlowGraphReference : FirControlFlowGraphReference { + override val psi: PsiElement? = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirEmptyControlFlowGraphReference { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirErrorNamedReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirErrorNamedReferenceImpl.kt new file mode 100644 index 00000000000..6c6f8f14be3 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirErrorNamedReferenceImpl.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirErrorNamedReferenceImpl( + override val psi: PsiElement?, + override val errorReason: String +) : FirErrorNamedReference { + override val name: Name = Name.special("<$errorReason>") + override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorNamedReferenceImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitSuperReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitSuperReference.kt similarity index 58% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitSuperReference.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitSuperReference.kt index c4a918c863f..0b45a6f1e3b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/FirExplicitSuperReference.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitSuperReference.kt @@ -3,23 +3,32 @@ * 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.references +package org.jetbrains.kotlin.fir.references.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirExplicitSuperReference( - psi: PsiElement?, + override val psi: PsiElement?, override var superTypeRef: FirTypeRef -) : FirAbstractElement(psi), FirSuperReference { - override fun replaceSuperTypeRef(newSuperTypeRef: FirTypeRef) { - superTypeRef = newSuperTypeRef +) : FirSuperReference { + override fun acceptChildren(visitor: FirVisitor, data: D) { + superTypeRef.accept(visitor, data) } - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun transformChildren(transformer: FirTransformer, data: D): FirExplicitSuperReference { superTypeRef = superTypeRef.transformSingle(transformer, data) return this } + + override fun replaceSuperTypeRef(newSuperTypeRef: FirTypeRef) { + superTypeRef = newSuperTypeRef + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitThisReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitThisReference.kt new file mode 100644 index 00000000000..d148c769e74 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirExplicitThisReference.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirExplicitThisReference( + override val psi: PsiElement?, + override val labelName: String? +) : FirThisReference { + override var boundSymbol: AbstractFirBasedSymbol<*>? = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirExplicitThisReference { + return this + } + + override fun replaceBoundSymbol(newBoundSymbol: AbstractFirBasedSymbol<*>) { + boundSymbol = newBoundSymbol + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirImplicitThisReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirImplicitThisReference.kt new file mode 100644 index 00000000000..bd013977cda --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirImplicitThisReference.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirImplicitThisReference( + override val boundSymbol: AbstractFirBasedSymbol<*>? +) : FirThisReference { + override val psi: PsiElement? = null + override val labelName: String? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirImplicitThisReference { + return this + } + + override fun replaceBoundSymbol(newBoundSymbol: AbstractFirBasedSymbol<*>) {} +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirPropertyFromParameterCallableReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirPropertyFromParameterCallableReference.kt new file mode 100644 index 00000000000..40868be6c4a --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirPropertyFromParameterCallableReference.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirPropertyFromParameterCallableReference( + override val psi: PsiElement?, + override val name: Name, + override val resolvedSymbol: AbstractFirBasedSymbol<*> +) : FirResolvedCallableReference { + override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirPropertyFromParameterCallableReference { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirResolvedCallableReferenceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirResolvedCallableReferenceImpl.kt new file mode 100644 index 00000000000..80adb28d1d4 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirResolvedCallableReferenceImpl.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirResolvedCallableReferenceImpl( + override val psi: PsiElement?, + override val name: Name, + override val resolvedSymbol: AbstractFirBasedSymbol<*> +) : FirResolvedCallableReference { + override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirResolvedCallableReferenceImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirSimpleNamedReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirSimpleNamedReference.kt new file mode 100644 index 00000000000..38a2e4b971c --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirSimpleNamedReference.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +open class FirSimpleNamedReference( + override val psi: PsiElement?, + override val name: Name, + override val candidateSymbol: AbstractFirBasedSymbol<*>? +) : FirNamedReference { + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirSimpleNamedReference { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirStubReference.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirStubReference.kt new file mode 100644 index 00000000000..9386bede2c2 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/references/impl/FirStubReference.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 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.references.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.references.FirReference +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirStubReference : FirReference { + override val psi: PsiElement? get() = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirStubReference { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt index b1111ad8d2c..0573d86a570 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/AbstractFirBasedSymbol.kt @@ -5,9 +5,10 @@ package org.jetbrains.kotlin.fir.symbols +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration -abstract class AbstractFirBasedSymbol : FirBasedSymbol where E : FirDeclaration, E : FirSymbolOwner { +abstract class AbstractFirBasedSymbol : FirBasedSymbol where E : FirSymbolOwner, E : FirDeclaration { override lateinit var fir: E 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 62f69b1d59a..b49678eeea8 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,11 @@ package org.jetbrains.kotlin.fir.symbols +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.types.model.TypeConstructorMarker -interface FirBasedSymbol : TypeConstructorMarker where E : FirDeclaration, E : FirSymbolOwner { +interface FirBasedSymbol : TypeConstructorMarker where E : FirSymbolOwner, E : FirDeclaration { val fir: E fun bind(e: E) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirSymbolOwner.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirSymbolOwner.kt index 974d5485262..3ff17f95852 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirSymbolOwner.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/FirSymbolOwner.kt @@ -5,8 +5,7 @@ package org.jetbrains.kotlin.fir.symbols -import org.jetbrains.kotlin.fir.declarations.FirDeclaration - -interface FirSymbolOwner where E : FirDeclaration, E : FirSymbolOwner { +/* +interface FirSymbolOwner where E : FirSymbolOwner { val symbol: AbstractFirBasedSymbol -} \ No newline at end of file +}*/ 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 e9fe5c5f72d..84e49156928 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,15 +5,17 @@ package org.jetbrains.kotlin.fir.symbols.impl +import org.jetbrains.kotlin.fir.FirSymbolOwner import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirTypeAlias -import org.jetbrains.kotlin.fir.symbols.* +import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag +import org.jetbrains.kotlin.fir.symbols.ConeTypeAliasLookupTag import org.jetbrains.kotlin.name.ClassId -sealed class FirClassLikeSymbol>( +sealed class FirClassLikeSymbol( val classId: ClassId -) : FirClassifierSymbol() { +) : FirClassifierSymbol() where D : FirClassLikeDeclaration, D : FirSymbolOwner { abstract override fun toLookupTag(): ConeClassLikeLookupTag override fun equals(other: Any?): Boolean = 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 43fc36df8bf..5e31c2a99e4 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,13 +5,13 @@ package org.jetbrains.kotlin.fir.symbols.impl -import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration +import org.jetbrains.kotlin.fir.FirSymbolOwner +import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag -import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner import org.jetbrains.kotlin.types.model.TypeParameterMarker -abstract class FirClassifierSymbol : - AbstractFirBasedSymbol(), TypeParameterMarker where E : FirNamedDeclaration, E : FirSymbolOwner { +abstract class FirClassifierSymbol : AbstractFirBasedSymbol(), TypeParameterMarker + where E : FirSymbolOwner, E : FirDeclaration { abstract fun toLookupTag(): ConeClassifierLookupTag } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt index 5dcf073a672..cd5e33ebe4d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.symbols.impl import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunction import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.name.FqName @@ -26,7 +25,7 @@ open class FirNamedFunctionSymbol( val isFakeOverride: Boolean = false, // Actual for fake override only override val overriddenSymbol: FirNamedFunctionSymbol? = null -) : FirFunctionSymbol(callableId) +) : FirFunctionSymbol(callableId) class FirConstructorSymbol( callableId: CallableId @@ -35,7 +34,7 @@ class FirConstructorSymbol( class FirAccessorSymbol( callableId: CallableId, val accessorId: CallableId -) : FirFunctionSymbol(callableId) +) : FirFunctionSymbol(callableId) // ------------------------ unnamed ------------------------ 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 14c2252ac97..83f9c13a588 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 @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.symbols.impl import org.jetbrains.kotlin.fir.declarations.FirField import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirVariable import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.name.Name diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDelegatedTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDelegatedTypeRef.kt index 7c1eb6f1233..efa935d7157 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDelegatedTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDelegatedTypeRef.kt @@ -1,24 +1,25 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirDelegatedTypeRef : FirTypeRef { + override val psi: PsiElement? + override val annotations: List val delegate: FirExpression? - val typeRef: FirTypeRef - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDelegatedTypeRef(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - delegate?.accept(visitor, data) - typeRef.accept(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDelegatedTypeRef(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDynamicTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDynamicTypeRef.kt index 75828cc85b4..b48f13cefe5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDynamicTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirDynamicTypeRef.kt @@ -1,13 +1,23 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirDynamicTypeRef : FirTypeRefWithNullability { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitDynamicTypeRef(this, data) + override val psi: PsiElement? + override val annotations: List + override val isMarkedNullable: Boolean + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDynamicTypeRef(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirErrorTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirErrorTypeRef.kt index ebafaa7e830..1fdfd0edbe5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirErrorTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirErrorTypeRef.kt @@ -1,15 +1,24 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirErrorTypeRef : FirResolvedTypeRef { + override val psi: PsiElement? + override val annotations: List + override val type: ConeKotlinType val reason: String - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitErrorTypeRef(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitErrorTypeRef(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt index dfa4949fbf0..c646541327a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirFunctionTypeRef.kt @@ -1,37 +1,27 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirFunctionTypeRef : FirTypeRefWithNullability { + override val psi: PsiElement? + override val annotations: List + override val isMarkedNullable: Boolean val receiverTypeRef: FirTypeRef? - - // May be it should inherit FirFunction? val valueParameters: List - val returnTypeRef: FirTypeRef - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitFunctionTypeRef(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - receiverTypeRef?.accept(visitor, data) - returnTypeRef.accept(visitor, data) - super.acceptChildren(visitor, data) - for (parameter in valueParameters) { - parameter.accept(visitor, data) - } - } -} - - -val FirFunctionTypeRef.parametersCount: Int - get() = if (receiverTypeRef != null) - valueParameters.size + 1 - else - valueParameters.size \ No newline at end of file + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFunctionTypeRef(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirImplicitTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirImplicitTypeRef.kt index ee66ce2a036..b9786234519 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirImplicitTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirImplicitTypeRef.kt @@ -1,13 +1,22 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirImplicitTypeRef : FirTypeRef { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitImplicitTypeRef(this, data) + override val psi: PsiElement? + override val annotations: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitImplicitTypeRef(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionContainer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirQualifierPart.kt similarity index 60% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionContainer.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirQualifierPart.kt index 4acebe0e247..508e1a4e846 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionContainer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirQualifierPart.kt @@ -1,10 +1,13 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -interface FirTypeProjectionContainer { +import org.jetbrains.kotlin.name.Name + +interface FirQualifierPart { + val name: Name val typeArguments: List } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedFunctionTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedFunctionTypeRef.kt new file mode 100644 index 00000000000..e00e0ad71ac --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedFunctionTypeRef.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2019 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.types + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +interface FirResolvedFunctionTypeRef : FirResolvedTypeRef, FirFunctionTypeRef { + override val psi: PsiElement? + override val annotations: List + override val type: ConeKotlinType + override val isMarkedNullable: Boolean + override val receiverTypeRef: FirTypeRef? + override val valueParameters: List + override val returnTypeRef: FirTypeRef + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedFunctionTypeRef(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedTypeRef.kt index 7b04974f4fe..90762b60e68 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirResolvedTypeRef.kt @@ -1,24 +1,23 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirResolvedTypeRef : FirTypeRef { + override val psi: PsiElement? + override val annotations: List val type: ConeKotlinType - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitResolvedTypeRef(this, data) -} - -interface FirResolvedFunctionTypeRef : @VisitedSupertype FirResolvedTypeRef, FirFunctionTypeRef { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitResolvedFunctionTypeRef(this, data) -} - -inline fun FirTypeRef.coneTypeUnsafe() = (this as FirResolvedTypeRef).type as T -inline fun FirTypeRef.coneTypeSafe() = (this as? FirResolvedTypeRef)?.type as? T \ No newline at end of file + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedTypeRef(this, data) +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirStarProjection.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirStarProjection.kt index 14aeb65b3d9..d5ae69aa412 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirStarProjection.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirStarProjection.kt @@ -1,13 +1,20 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirStarProjection : FirTypeProjection { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitStarProjection(this, data) + override val psi: PsiElement? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitStarProjection(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjection.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjection.kt index 5a42db93759..f4b387bde9a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjection.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjection.kt @@ -1,16 +1,21 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.BaseTransformedType +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -@BaseTransformedType interface FirTypeProjection : FirElement { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeProjection(this, data) + override val psi: PsiElement? + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeProjection(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionWithVariance.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionWithVariance.kt index 9d43b86f044..0e67b3d5a49 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionWithVariance.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeProjectionWithVariance.kt @@ -1,23 +1,23 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirTypeProjectionWithVariance : FirTypeProjection { + override val psi: PsiElement? + val typeRef: FirTypeRef val variance: Variance - val typeRef: FirTypeRef - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeProjectionWithVariance(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - typeRef.accept(visitor, data) - super.acceptChildren(visitor, data) - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeProjectionWithVariance(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRef.kt index dc673a6b332..5569ba1e02a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRef.kt @@ -1,22 +1,23 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.BaseTransformedType -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirAnnotationContainer +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* -@BaseTransformedType -interface FirTypeRef : FirElement, FirAnnotationContainer { - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeRef(this, data) +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ - override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) - super.acceptChildren(visitor, data) - } +interface FirTypeRef : FirAnnotationContainer { + override val psi: PsiElement? + override val annotations: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeRef(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRefWithNullability.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRefWithNullability.kt index e3b932c9fb7..03c1209c14c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRefWithNullability.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeRefWithNullability.kt @@ -1,15 +1,23 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirTypeRefWithNullability : FirTypeRef { + override val psi: PsiElement? + override val annotations: List val isMarkedNullable: Boolean - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitTypeRefWithNullability(this, data) + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeRefWithNullability(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt index b4b062a5668..77f7f1250cd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirTypeUtils.kt @@ -9,6 +9,9 @@ import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef import org.jetbrains.kotlin.name.ClassId +inline fun FirTypeRef.coneTypeUnsafe() = (this as FirResolvedTypeRef).type as T +inline fun FirTypeRef.coneTypeSafe() = (this as? FirResolvedTypeRef)?.type as? T + val FirTypeRef.isAny: Boolean get() = isBuiltinType(StandardClassIds.Any, false) val FirTypeRef.isNullableAny: Boolean get() = isBuiltinType(StandardClassIds.Any, true) val FirTypeRef.isNothing: Boolean get() = isBuiltinType(StandardClassIds.Nothing, false) @@ -16,4 +19,10 @@ val FirTypeRef.isNullableNothing: Boolean get() = isBuiltinType(StandardClassIds val FirTypeRef.isUnit: Boolean get() = isBuiltinType(StandardClassIds.Unit, false) private fun FirTypeRef.isBuiltinType(classId: ClassId, isNullable: Boolean): Boolean = - this is FirImplicitBuiltinTypeRef && type.lookupTag.classId == classId && type.isNullable == isNullable \ No newline at end of file + this is FirImplicitBuiltinTypeRef && type.lookupTag.classId == classId && type.isNullable == isNullable + +val FirFunctionTypeRef.parametersCount: Int + get() = if (receiverTypeRef != null) + valueParameters.size + 1 + else + valueParameters.size \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirUserTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirUserTypeRef.kt index 9b12d217361..4cee105de1d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirUserTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/FirUserTypeRef.kt @@ -1,29 +1,24 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types -import org.jetbrains.kotlin.fir.visitors.FirVisitor -import org.jetbrains.kotlin.name.Name +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* -interface FirQualifierPart : FirTypeProjectionContainer { - val name: Name -} +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ interface FirUserTypeRef : FirTypeRefWithNullability { + override val psi: PsiElement? + override val annotations: List + override val isMarkedNullable: Boolean val qualifier: List - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitUserTypeRef(this, data) - - override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - for (qualifier in qualifier.reversed()) { - for (argument in qualifier.typeArguments) { - argument.accept(visitor, data) - } - } - } + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitUserTypeRef(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt deleted file mode 100644 index 4fb6e5b99ca..00000000000 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirAbstractAnnotatedTypeRef.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2018 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.types.impl - -import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.types.FirTypeRefWithNullability -import org.jetbrains.kotlin.fir.visitors.FirTransformer - -abstract class FirAbstractAnnotatedTypeRef( - psi: PsiElement?, - final override val isMarkedNullable: Boolean -) : FirTypeRefWithNullability, FirAbstractElement(psi) { - override val annotations = mutableListOf() - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - annotations.transformInplace(transformer, data) - - return this - } -} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt new file mode 100644 index 00000000000..1b0ba555b9b --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2019 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.types.impl + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +object FirComputingImplicitTypeRef : FirImplicitTypeRef, FirAbstractAnnotatedElement { + override val psi: PsiElement? get() = null + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirComputingImplicitTypeRef { + annotations.transformInplace(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt index a1965c6e823..0970949ffdc 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDelegatedTypeRefImpl.kt @@ -1,30 +1,37 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirDelegatedTypeRefImpl( - override var typeRef: FirTypeRef, - override var delegate: FirExpression? -) : FirAbstractElement(typeRef.psi), FirDelegatedTypeRef { - override val annotations: List - get() = typeRef.annotations + override var delegate: FirExpression?, + override var typeRef: FirTypeRef +) : FirDelegatedTypeRef { + override val psi: PsiElement? get() = typeRef.psi + override val annotations: List get() = typeRef.annotations - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + delegate?.accept(visitor, data) + typeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirDelegatedTypeRefImpl { delegate = delegate?.transformSingle(transformer, data) - + typeRef = typeRef.transformSingle(transformer, data) return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDynamicTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDynamicTypeRefImpl.kt index 708cbd7c198..ca4c3b534b4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDynamicTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirDynamicTypeRefImpl.kt @@ -1,14 +1,33 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirDynamicTypeRefImpl( - psi: PsiElement?, - isNullable: Boolean -) : FirAbstractAnnotatedTypeRef(psi, isNullable), FirDynamicTypeRef \ No newline at end of file + override val psi: PsiElement?, + override val isMarkedNullable: Boolean +) : FirDynamicTypeRef, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirDynamicTypeRefImpl { + annotations.transformInplace(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt index f7763fd5a44..cd1e76dba5b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirErrorTypeRefImpl.kt @@ -1,23 +1,36 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.types.ConeKotlinErrorType +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirErrorTypeRef -import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirErrorTypeRefImpl( - psi: PsiElement?, + override val psi: PsiElement?, override val reason: String -) : FirAbstractAnnotatedTypeRef(psi, false), FirErrorTypeRef { - override val type: ConeKotlinType = ConeKotlinErrorType(reason) +) : FirErrorTypeRef, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val type: ConeKotlinType = ConeClassErrorType(reason) - override fun accept(visitor: FirVisitor, data: D): R { - return super.accept(visitor, data) + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirErrorTypeRefImpl { + annotations.transformInplace(transformer, data) + return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirFunctionTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirFunctionTypeRefImpl.kt index dca53d43286..caf21e4e2a6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirFunctionTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirFunctionTypeRefImpl.kt @@ -1,32 +1,44 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirValueParameter -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirFunctionTypeRefImpl( - psi: PsiElement?, - isNullable: Boolean, + override val psi: PsiElement?, + override val isMarkedNullable: Boolean, override var receiverTypeRef: FirTypeRef?, override var returnTypeRef: FirTypeRef -) : FirAbstractAnnotatedTypeRef(psi, isNullable), FirFunctionTypeRef { - override val valueParameters = mutableListOf() +) : FirFunctionTypeRef, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + receiverTypeRef?.accept(visitor, data) + valueParameters.forEach { it.accept(visitor, data) } + returnTypeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirFunctionTypeRefImpl { + annotations.transformInplace(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) - returnTypeRef = returnTypeRef.transformSingle(transformer, data) valueParameters.transformInplace(transformer, data) - - return super.transformChildren(transformer, data) + returnTypeRef = returnTypeRef.transformSingle(transformer, data) + return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt index 42dbcd62063..37d42eabd0a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitBuiltinTypeRef.kt @@ -1,30 +1,38 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeKotlinTypeProjection import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.ClassId sealed class FirImplicitBuiltinTypeRef( - psi: PsiElement?, + override val psi: PsiElement?, val id: ClassId, typeArguments: Array = emptyArray(), isNullable: Boolean = false -) : FirResolvedTypeRef, FirAbstractElement(psi) { +) : FirResolvedTypeRef { override val annotations: List get() = emptyList() override val type: ConeClassLikeType = ConeClassTypeImpl(ConeClassLikeLookupTagImpl(id), typeArguments, isNullable) + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + return this + } } class FirImplicitUnitTypeRef( diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt index d021104efc4..666cd00d8d4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirImplicitTypeRefImpl.kt @@ -1,27 +1,29 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirImplicitTypeRefImpl( - psi: PsiElement? -) : FirImplicitTypeRef, FirAbstractElement(psi) { - override val annotations: List - get() = emptyList() -} - -object FirComputingImplicitTypeRef : FirImplicitTypeRef, FirPureAbstractElement() { override val psi: PsiElement? - get() = null - override val annotations: List - get() = emptyList() +) : FirImplicitTypeRef { + override val annotations: List get() = emptyList() + override fun acceptChildren(visitor: FirVisitor, data: D) { + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirImplicitTypeRefImpl { + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt index a14ba56a0ca..b93f8b15902 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedFunctionTypeRefImpl.kt @@ -1,34 +1,46 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirResolvedFunctionTypeRefImpl( - psi: PsiElement?, + override val psi: PsiElement?, + override val type: ConeKotlinType, override val isMarkedNullable: Boolean, - override val annotations: MutableList, override var receiverTypeRef: FirTypeRef?, - override val valueParameters: MutableList, - override var returnTypeRef: FirTypeRef, - override val type: ConeKotlinType -) : FirResolvedFunctionTypeRef, FirAbstractElement(psi) { + override var returnTypeRef: FirTypeRef +) : FirResolvedFunctionTypeRef, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val valueParameters: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + receiverTypeRef?.accept(visitor, data) + valueParameters.forEach { it.accept(visitor, data) } + returnTypeRef.accept(visitor, data) + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirResolvedFunctionTypeRefImpl { + annotations.transformInplace(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) - returnTypeRef = returnTypeRef.transformSingle(transformer, data) valueParameters.transformInplace(transformer, data) - + returnTypeRef = returnTypeRef.transformSingle(transformer, data) return this } -} +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt index c100e706407..3bf30d5d20d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirResolvedTypeRefImpl.kt @@ -1,18 +1,34 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirResolvedTypeRefImpl( - psi: PsiElement?, - override val type: ConeKotlinType, - override val annotations: List = emptyList() -) : FirResolvedTypeRef, FirAbstractElement(psi) \ No newline at end of file + override val psi: PsiElement?, + override val type: ConeKotlinType +) : FirResolvedTypeRef, FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirResolvedTypeRefImpl { + annotations.transformInplace(transformer, data) + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt index 8d21e9ad6a7..5549d3c0df1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirStarProjectionImpl.kt @@ -1,12 +1,25 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.types.FirStarProjection +import org.jetbrains.kotlin.fir.visitors.* -class FirStarProjectionImpl(psi: PsiElement?) : FirStarProjection, FirAbstractElement(psi) \ No newline at end of file +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirStarProjectionImpl( + override val psi: PsiElement? +) : FirStarProjection { + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirStarProjectionImpl { + return this + } +} \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypePlaceholderProjection.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypePlaceholderProjection.kt index 7fd3d1cd435..85a942bf7e8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypePlaceholderProjection.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypePlaceholderProjection.kt @@ -1,14 +1,25 @@ /* - * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ object FirTypePlaceholderProjection : FirTypeProjection { - override val psi: PsiElement? - get() = null // TODO + override val psi: PsiElement? = null + + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirTypePlaceholderProjection { + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt index 23ef03d0186..f7a6e5150bc 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirTypeProjectionWithVarianceImpl.kt @@ -1,27 +1,32 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ class FirTypeProjectionWithVarianceImpl( - psi: PsiElement?, - override val variance: Variance, - override var typeRef: FirTypeRef -) : FirTypeProjectionWithVariance, FirAbstractElement(psi) { - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) + override val psi: PsiElement?, + override var typeRef: FirTypeRef, + override val variance: Variance +) : FirTypeProjectionWithVariance { + override fun acceptChildren(visitor: FirVisitor, data: D) { + typeRef.accept(visitor, data) + } + override fun transformChildren(transformer: FirTransformer, data: D): FirTypeProjectionWithVarianceImpl { + typeRef = typeRef.transformSingle(transformer, data) return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirUserTypeRefImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirUserTypeRefImpl.kt index e5d51b2aea9..a1e65788685 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirUserTypeRefImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/types/impl/FirUserTypeRefImpl.kt @@ -1,29 +1,39 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.types.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.transformInplace +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.types.FirQualifierPart import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirUserTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.visitors.FirVisitor +import org.jetbrains.kotlin.fir.visitors.transformInplace open class FirUserTypeRefImpl( - psi: PsiElement?, - isMarkedNullable: Boolean -) : FirAbstractAnnotatedTypeRef(psi, isMarkedNullable), FirUserTypeRef { - override val qualifier = mutableListOf() + override val psi: PsiElement?, + override val isMarkedNullable: Boolean +) : FirUserTypeRef, FirAbstractAnnotatedElement { + override val qualifier: MutableList = mutableListOf() + override val annotations: MutableList = mutableListOf() - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + override fun acceptChildren(visitor: FirVisitor, data: D) { + for (part in qualifier) { + part.typeArguments.forEach { it.accept(visitor, data) } + } + annotations.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirUserTypeRefImpl { for (part in qualifier) { (part.typeArguments as MutableList).transformInplace(transformer, data) } - - return super.transformChildren(transformer, data) + annotations.transformInplace(transformer, data) + return this } } \ No newline at end of file diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt similarity index 66% rename from compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index efe7bc82493..185ed096daf 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -2,131 +2,140 @@ * Copyright 2010-2019 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.visitors -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* -import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.* -import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.FirElement +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.declarations.FirImport +import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.fir.FirSymbolOwner +import org.jetbrains.kotlin.fir.expressions.FirResolvable +import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner +import org.jetbrains.kotlin.fir.FirTargetElement +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus +import org.jetbrains.kotlin.fir.expressions.FirStatement +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer +import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirField +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirTypeAlias +import org.jetbrains.kotlin.fir.declarations.FirEnumEntry +import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.declarations.FirMemberFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction +import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop +import org.jetbrains.kotlin.fir.expressions.FirWhileLoop +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression +import org.jetbrains.kotlin.fir.expressions.FirJump +import org.jetbrains.kotlin.fir.expressions.FirLoopJump +import org.jetbrains.kotlin.fir.expressions.FirBreakExpression +import org.jetbrains.kotlin.fir.expressions.FirContinueExpression +import org.jetbrains.kotlin.fir.expressions.FirCatch +import org.jetbrains.kotlin.fir.expressions.FirTryExpression +import org.jetbrains.kotlin.fir.expressions.FirConstExpression +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirStarProjection +import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance +import org.jetbrains.kotlin.fir.expressions.FirCall +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirOperatorCall +import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall +import org.jetbrains.kotlin.fir.expressions.FirWhenExpression +import org.jetbrains.kotlin.fir.expressions.FirWhenBranch +import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall +import org.jetbrains.kotlin.fir.expressions.FirArraySetCall +import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression +import org.jetbrains.kotlin.fir.expressions.FirErrorExpression +import org.jetbrains.kotlin.fir.declarations.FirErrorFunction +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.expressions.FirComponentCall +import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess +import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression +import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast +import org.jetbrains.kotlin.fir.expressions.FirGetClassCall +import org.jetbrains.kotlin.fir.expressions.FirWrappedExpression +import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.FirReturnExpression +import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall +import org.jetbrains.kotlin.fir.expressions.FirThrowExpression +import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment +import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression +import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirSuperReference +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference +import org.jetbrains.kotlin.fir.references.FirBackingFieldReference +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.types.FirErrorTypeRef +import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef +import org.jetbrains.kotlin.fir.types.FirTypeRefWithNullability +import org.jetbrains.kotlin.fir.types.FirUserTypeRef +import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef +import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef +import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef +import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -/** This file generated by :compiler:fir:tree:generateVisitors. DO NOT MODIFY MANUALLY! */ abstract class FirTransformer : FirVisitor, D>() { + abstract fun transformElement(element: E, data: D): CompositeTransformResult - open fun transformCatch(catch: FirCatch, data: D): CompositeTransformResult { - return transformElement(catch, data) + open fun transformAnnotationContainer(annotationContainer: FirAnnotationContainer, data: D): CompositeTransformResult { + return transformElement(annotationContainer, data) } - open fun transformDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult { - return transformElement(declaration, data) + open fun transformTypeRef(typeRef: FirTypeRef, data: D): CompositeTransformResult { + return transformElement(typeRef, data) } - open fun > transformCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult { - return transformElement(callableDeclaration, data) + open fun transformReference(reference: FirReference, data: D): CompositeTransformResult { + return transformElement(reference, data) } - open fun > transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult { - return transformElement(callableMemberDeclaration, data) - } - - open fun transformDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult { - return transformElement(declarationWithBody, data) - } - - open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult { - return transformElement(anonymousInitializer, data) - } - - open fun > transformFunction(function: FirFunction, data: D): CompositeTransformResult { - return transformElement(function, data) - } - - open fun transformAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): CompositeTransformResult { - return transformElement(anonymousFunction, data) - } - - open fun > transformMemberFunction(memberFunction: FirMemberFunction, data: D): CompositeTransformResult { - return transformElement(memberFunction, data) - } - - open fun transformConstructor(constructor: FirConstructor, data: D): CompositeTransformResult { - return transformElement(constructor, data) - } - - open fun transformNamedFunction(namedFunction: FirNamedFunction, data: D): CompositeTransformResult { - return transformElement(namedFunction, data) - } - - open fun > transformModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult { - return transformElement(modifiableFunction, data) - } - - open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult { - return transformElement(propertyAccessor, data) - } - - open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult { - return transformElement(errorDeclaration, data) - } - - open fun transformField(field: FirField, data: D): CompositeTransformResult { - return transformElement(field, data) - } - - open fun transformNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult { - return transformElement(namedDeclaration, data) - } - - open fun transformMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): CompositeTransformResult { - return transformElement(memberDeclaration, data) - } - - open fun > transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult { - return transformElement(classLikeDeclaration, data) - } - - open fun transformRegularClass(regularClass: FirRegularClass, data: D): CompositeTransformResult { - return transformElement(regularClass, data) - } - - open fun transformEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult { - return transformElement(enumEntry, data) - } - - open fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult { - return transformElement(typeAlias, data) - } - - open fun transformTypeParameter(typeParameter: FirTypeParameter, data: D): CompositeTransformResult { - return transformElement(typeParameter, data) - } - - open fun transformProperty(property: FirProperty, data: D): CompositeTransformResult { - return transformElement(property, data) - } - - open fun transformTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): CompositeTransformResult { - return transformElement(typedDeclaration, data) - } - - open fun transformValueParameter(valueParameter: FirValueParameter, data: D): CompositeTransformResult { - return transformElement(valueParameter, data) - } - - open fun > transformVariable(variable: FirVariable, data: D): CompositeTransformResult { - return transformElement(variable, data) - } - - open fun transformDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): CompositeTransformResult { - return transformElement(declarationStatus, data) - } - - open fun transformResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): CompositeTransformResult { - return transformElement(resolvedDeclarationStatus, data) + open fun transformLabel(label: FirLabel, data: D): CompositeTransformResult { + return transformElement(label, data) } open fun transformImport(import: FirImport, data: D): CompositeTransformResult { @@ -137,120 +146,160 @@ abstract class FirTransformer : FirVisitor transformLabel(label: E, data: D): CompositeTransformResult { - return transformElement(label, data) + open fun transformSymbolOwner(symbolOwner: FirSymbolOwner, data: D): CompositeTransformResult> where E : FirSymbolOwner, E : FirDeclaration { + return transformElement(symbolOwner, data) } - open fun transformPackageFragment(packageFragment: E, data: D): CompositeTransformResult { - return transformElement(packageFragment, data) + open fun transformResolvable(resolvable: FirResolvable, data: D): CompositeTransformResult { + return transformElement(resolvable, data) } - open fun transformFile(file: FirFile, data: D): CompositeTransformResult { - return transformElement(file, data) + open fun transformControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner, data: D): CompositeTransformResult { + return transformElement(controlFlowGraphOwner, data) } - open fun transformReference(reference: E, data: D): CompositeTransformResult { - return transformElement(reference, data) + open fun transformTargetElement(targetElement: FirTargetElement, data: D): CompositeTransformResult { + return transformElement(targetElement, data) } - open fun transformControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): CompositeTransformResult { - return transformElement(controlFlowGraphReference, data) + open fun transformDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): CompositeTransformResult { + return transformElement(declarationStatus, data) } - open fun transformNamedReference(namedReference: FirNamedReference, data: D): CompositeTransformResult { - return transformElement(namedReference, data) - } - - open fun transformResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: D): CompositeTransformResult { - return transformElement(resolvedCallableReference, data) - } - - open fun transformBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): CompositeTransformResult { - return transformElement(backingFieldReference, data) - } - - open fun transformDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult { - return transformElement(delegateFieldReference, data) - } - - open fun transformSuperReference(superReference: E, data: D): CompositeTransformResult { - return transformElement(superReference, data) - } - - open fun transformThisReference(thisReference: E, data: D): CompositeTransformResult { - return transformElement(thisReference, data) + open fun transformResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): CompositeTransformResult { + return transformElement(resolvedDeclarationStatus, data) } open fun transformStatement(statement: FirStatement, data: D): CompositeTransformResult { return transformElement(statement, data) } - open fun transformAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: D): CompositeTransformResult { - return transformElement(annotatedStatement, data) - } - open fun transformExpression(expression: FirExpression, data: D): CompositeTransformResult { return transformElement(expression, data) } - open fun transformCall(call: FirCall, data: D): CompositeTransformResult { - return transformElement(call, data) + open fun transformDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult { + return transformElement(declaration, data) } - open fun transformArraySetCall(arraySetCall: FirArraySetCall, data: D): CompositeTransformResult { - return transformElement(arraySetCall, data) + open fun transformAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult { + return transformElement(anonymousInitializer, data) } - open fun transformCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: D): CompositeTransformResult { - return transformElement(callWithArgumentList, data) + open fun transformTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): CompositeTransformResult { + return transformElement(typedDeclaration, data) } - open fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { - return transformElement(annotationCall, data) + open fun > transformCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult { + return transformElement(callableDeclaration, data) } - open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult { - return transformElement(delegatedConstructorCall, data) + open fun transformNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult { + return transformElement(namedDeclaration, data) } - open fun transformOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { - return transformElement(operatorCall, data) + open fun transformTypeParameter(typeParameter: FirTypeParameter, data: D): CompositeTransformResult { + return transformElement(typeParameter, data) } - open fun transformOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: D): CompositeTransformResult { - return transformElement(operationBasedCall, data) + open fun transformTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: D): CompositeTransformResult { + return transformElement(typeParametersOwner, data) } - open fun transformTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): CompositeTransformResult { - return transformElement(typeOperatorCall, data) + open fun transformMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): CompositeTransformResult { + return transformElement(memberDeclaration, data) } - open fun transformStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): CompositeTransformResult { - return transformElement(stringConcatenationCall, data) + open fun > transformCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult { + return transformElement(callableMemberDeclaration, data) } - open fun transformUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: D): CompositeTransformResult { - return transformElement(unknownTypeCallWithArgumentList, data) + open fun > transformVariable(variable: FirVariable, data: D): CompositeTransformResult { + return transformElement(variable, data) } - open fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): CompositeTransformResult { - return transformElement(arrayOfCall, data) + open fun transformValueParameter(valueParameter: FirValueParameter, data: D): CompositeTransformResult { + return transformElement(valueParameter, data) } - open fun transformFunctionCall(functionCall: FirFunctionCall, data: D): CompositeTransformResult { - return transformElement(functionCall, data) + open fun transformProperty(property: FirProperty, data: D): CompositeTransformResult { + return transformElement(property, data) } - open fun transformComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult { - return transformElement(componentCall, data) + open fun transformField(field: FirField, data: D): CompositeTransformResult { + return transformElement(field, data) } - open fun transformGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult { - return transformElement(getClassCall, data) + open fun transformClass(klass: FirClass, data: D): CompositeTransformResult { + return transformElement(klass, data) } - open fun transformUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): CompositeTransformResult { - return transformElement(uncheckedNotNullCast, data) + open fun > transformClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult { + return transformElement(classLikeDeclaration, data) + } + + open fun transformRegularClass(regularClass: FirRegularClass, data: D): CompositeTransformResult { + return transformElement(regularClass, data) + } + + open fun transformTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult { + return transformElement(typeAlias, data) + } + + open fun transformEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult { + return transformElement(enumEntry, data) + } + + open fun > transformFunction(function: FirFunction, data: D): CompositeTransformResult { + return transformElement(function, data) + } + + open fun > transformMemberFunction(memberFunction: FirMemberFunction, data: D): CompositeTransformResult { + return transformElement(memberFunction, data) + } + + open fun transformSimpleFunction(simpleFunction: FirSimpleFunction, data: D): CompositeTransformResult { + return transformElement(simpleFunction, data) + } + + open fun transformPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult { + return transformElement(propertyAccessor, data) + } + + open fun transformConstructor(constructor: FirConstructor, data: D): CompositeTransformResult { + return transformElement(constructor, data) + } + + open fun transformFile(file: FirFile, data: D): CompositeTransformResult { + return transformElement(file, data) + } + + open fun transformAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): CompositeTransformResult { + return transformElement(anonymousFunction, data) + } + + open fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: D): CompositeTransformResult { + return transformElement(anonymousObject, data) + } + + open fun transformLoop(loop: FirLoop, data: D): CompositeTransformResult { + return transformElement(loop, data) + } + + open fun transformDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): CompositeTransformResult { + return transformElement(doWhileLoop, data) + } + + open fun transformWhileLoop(whileLoop: FirWhileLoop, data: D): CompositeTransformResult { + return transformElement(whileLoop, data) + } + + open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult { + return transformElement(block, data) + } + + open fun transformBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult { + return transformElement(binaryLogicExpression, data) } open fun transformJump(jump: FirJump, data: D): CompositeTransformResult { @@ -269,150 +318,18 @@ abstract class FirTransformer : FirVisitor { - return transformElement(returnExpression, data) - } - - open fun transformThrowExpression(throwExpression: FirThrowExpression, data: D): CompositeTransformResult { - return transformElement(throwExpression, data) - } - - open fun transformUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: D): CompositeTransformResult { - return transformElement(unknownTypeExpression, data) - } - - open fun transformBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult { - return transformElement(binaryLogicExpression, data) - } - - open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult { - return transformElement(block, data) - } - - open fun transformCallLikeControlFlowExpression(callLikeControlFlowExpression: FirCallLikeControlFlowExpression, data: D): CompositeTransformResult { - return transformElement(callLikeControlFlowExpression, data) + open fun transformCatch(catch: FirCatch, data: D): CompositeTransformResult { + return transformElement(catch, data) } open fun transformTryExpression(tryExpression: FirTryExpression, data: D): CompositeTransformResult { return transformElement(tryExpression, data) } - open fun transformWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult { - return transformElement(whenExpression, data) - } - - open fun transformClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult { - return transformElement(classReferenceExpression, data) - } - open fun transformConstExpression(constExpression: FirConstExpression, data: D): CompositeTransformResult { return transformElement(constExpression, data) } - open fun transformErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult { - return transformElement(errorExpression, data) - } - - open fun transformQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { - return transformElement(qualifiedAccessExpression, data) - } - - open fun transformCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { - return transformElement(callableReferenceAccess, data) - } - - open fun transformExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): CompositeTransformResult { - return transformElement(expressionWithSmartcast, data) - } - - open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult { - return transformElement(resolvedQualifier, data) - } - - open fun transformWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): CompositeTransformResult { - return transformElement(whenSubjectExpression, data) - } - - open fun transformWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): CompositeTransformResult { - return transformElement(wrappedExpression, data) - } - - open fun transformWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): CompositeTransformResult { - return transformElement(wrappedArgumentExpression, data) - } - - open fun transformLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): CompositeTransformResult { - return transformElement(lambdaArgumentExpression, data) - } - - open fun transformNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): CompositeTransformResult { - return transformElement(namedArgumentExpression, data) - } - - open fun transformSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): CompositeTransformResult { - return transformElement(spreadArgumentExpression, data) - } - - open fun transformWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): CompositeTransformResult { - return transformElement(wrappedDelegateExpression, data) - } - - open fun transformClass(klass: FirClass, data: D): CompositeTransformResult { - return transformElement(klass, data) - } - - open fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: D): CompositeTransformResult { - return transformElement(anonymousObject, data) - } - - open fun transformModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult { - return transformElement(modifiableClass, data) - } - - open fun transformErrorStatement(errorStatement: FirErrorStatement, data: D): CompositeTransformResult { - return transformElement(errorStatement, data) - } - - open fun transformLoop(loop: FirLoop, data: D): CompositeTransformResult { - return transformElement(loop, data) - } - - open fun transformDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): CompositeTransformResult { - return transformElement(doWhileLoop, data) - } - - open fun transformWhileLoop(whileLoop: FirWhileLoop, data: D): CompositeTransformResult { - return transformElement(whileLoop, data) - } - - open fun transformResolvable(resolvable: FirResolvable, data: D): CompositeTransformResult { - return transformElement(resolvable, data) - } - - open fun transformQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { - return transformElement(qualifiedAccess, data) - } - - open fun transformAssignment(assignment: FirAssignment, data: D): CompositeTransformResult { - return transformElement(assignment, data) - } - - open fun transformVariableAssignment(variableAssignment: FirVariableAssignment, data: D): CompositeTransformResult { - return transformElement(variableAssignment, data) - } - - open fun transformModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): CompositeTransformResult { - return transformElement(modifiableQualifiedAccess, data) - } - - open fun transformTargetElement(targetElement: E, data: D): CompositeTransformResult { - return transformElement(targetElement, data) - } - - open fun transformLabeledElement(labeledElement: E, data: D): CompositeTransformResult { - return transformElement(labeledElement, data) - } - open fun transformTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult { return transformElement(typeProjection, data) } @@ -425,16 +342,168 @@ abstract class FirTransformer : FirVisitor { - return transformElement(typeRef, data) + open fun transformCall(call: FirCall, data: D): CompositeTransformResult { + return transformElement(call, data) } - open fun transformDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): CompositeTransformResult { - return transformElement(delegatedTypeRef, data) + open fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { + return transformElement(annotationCall, data) } - open fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult { - return transformElement(implicitTypeRef, data) + open fun transformOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { + return transformElement(operatorCall, data) + } + + open fun transformTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): CompositeTransformResult { + return transformElement(typeOperatorCall, data) + } + + open fun transformWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult { + return transformElement(whenExpression, data) + } + + open fun transformWhenBranch(whenBranch: FirWhenBranch, data: D): CompositeTransformResult { + return transformElement(whenBranch, data) + } + + open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult { + return transformElement(delegatedConstructorCall, data) + } + + open fun transformQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): CompositeTransformResult { + return transformElement(qualifiedAccessWithoutCallee, data) + } + + open fun transformQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { + return transformElement(qualifiedAccess, data) + } + + open fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): CompositeTransformResult { + return transformElement(arrayOfCall, data) + } + + open fun transformArraySetCall(arraySetCall: FirArraySetCall, data: D): CompositeTransformResult { + return transformElement(arraySetCall, data) + } + + open fun transformClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult { + return transformElement(classReferenceExpression, data) + } + + open fun transformErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult { + return transformElement(errorExpression, data) + } + + open fun transformErrorFunction(errorFunction: FirErrorFunction, data: D): CompositeTransformResult { + return transformElement(errorFunction, data) + } + + open fun transformQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { + return transformElement(qualifiedAccessExpression, data) + } + + open fun transformFunctionCall(functionCall: FirFunctionCall, data: D): CompositeTransformResult { + return transformElement(functionCall, data) + } + + open fun transformComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult { + return transformElement(componentCall, data) + } + + open fun transformCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { + return transformElement(callableReferenceAccess, data) + } + + open fun transformThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: D): CompositeTransformResult { + return transformElement(thisReceiverExpression, data) + } + + open fun transformExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): CompositeTransformResult { + return transformElement(expressionWithSmartcast, data) + } + + open fun transformGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult { + return transformElement(getClassCall, data) + } + + open fun transformWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): CompositeTransformResult { + return transformElement(wrappedExpression, data) + } + + open fun transformWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): CompositeTransformResult { + return transformElement(wrappedArgumentExpression, data) + } + + open fun transformLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): CompositeTransformResult { + return transformElement(lambdaArgumentExpression, data) + } + + open fun transformSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): CompositeTransformResult { + return transformElement(spreadArgumentExpression, data) + } + + open fun transformNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): CompositeTransformResult { + return transformElement(namedArgumentExpression, data) + } + + open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult { + return transformElement(resolvedQualifier, data) + } + + open fun transformReturnExpression(returnExpression: FirReturnExpression, data: D): CompositeTransformResult { + return transformElement(returnExpression, data) + } + + open fun transformStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): CompositeTransformResult { + return transformElement(stringConcatenationCall, data) + } + + open fun transformThrowExpression(throwExpression: FirThrowExpression, data: D): CompositeTransformResult { + return transformElement(throwExpression, data) + } + + open fun transformVariableAssignment(variableAssignment: FirVariableAssignment, data: D): CompositeTransformResult { + return transformElement(variableAssignment, data) + } + + open fun transformWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): CompositeTransformResult { + return transformElement(whenSubjectExpression, data) + } + + open fun transformWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): CompositeTransformResult { + return transformElement(wrappedDelegateExpression, data) + } + + open fun transformNamedReference(namedReference: FirNamedReference, data: D): CompositeTransformResult { + return transformElement(namedReference, data) + } + + open fun transformErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): CompositeTransformResult { + return transformElement(errorNamedReference, data) + } + + open fun transformSuperReference(superReference: FirSuperReference, data: D): CompositeTransformResult { + return transformElement(superReference, data) + } + + open fun transformThisReference(thisReference: FirThisReference, data: D): CompositeTransformResult { + return transformElement(thisReference, data) + } + + open fun transformControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): CompositeTransformResult { + return transformElement(controlFlowGraphReference, data) + } + + open fun transformResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: D): CompositeTransformResult { + return transformElement(resolvedCallableReference, data) + } + + open fun transformDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult { + return transformElement(delegateFieldReference, data) + } + + open fun transformBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): CompositeTransformResult { + return transformElement(backingFieldReference, data) } open fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult { @@ -445,14 +514,18 @@ abstract class FirTransformer : FirVisitor { - return transformElement(resolvedFunctionTypeRef, data) + open fun transformDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): CompositeTransformResult { + return transformElement(delegatedTypeRef, data) } open fun transformTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult { return transformElement(typeRefWithNullability, data) } + open fun transformUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult { + return transformElement(userTypeRef, data) + } + open fun transformDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): CompositeTransformResult { return transformElement(dynamicTypeRef, data) } @@ -461,468 +534,436 @@ abstract class FirTransformer : FirVisitor { - return transformElement(userTypeRef, data) + open fun transformResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult { + return transformElement(resolvedFunctionTypeRef, data) } - open fun transformWhenBranch(whenBranch: FirWhenBranch, data: D): CompositeTransformResult { - return transformElement(whenBranch, data) - } - - final override fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: D): CompositeTransformResult { - return transformAnnotatedStatement(annotatedStatement, data) - } - - final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { - return transformAnnotationCall(annotationCall, data) - } - - final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): CompositeTransformResult { - return transformAnonymousFunction(anonymousFunction, data) - } - - final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult { - return transformAnonymousInitializer(anonymousInitializer, data) - } - - final override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): CompositeTransformResult { - return transformAnonymousObject(anonymousObject, data) - } - - final override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): CompositeTransformResult { - return transformArrayOfCall(arrayOfCall, data) - } - - final override fun visitArraySetCall(arraySetCall: FirArraySetCall, data: D): CompositeTransformResult { - return transformArraySetCall(arraySetCall, data) - } - - final override fun visitAssignment(assignment: FirAssignment, data: D): CompositeTransformResult { - return transformAssignment(assignment, data) - } - - final override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): CompositeTransformResult { - return transformBackingFieldReference(backingFieldReference, data) - } - - final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult { - return transformBinaryLogicExpression(binaryLogicExpression, data) - } - - final override fun visitBlock(block: FirBlock, data: D): CompositeTransformResult { - return transformBlock(block, data) - } - - final override fun visitBreakExpression(breakExpression: FirBreakExpression, data: D): CompositeTransformResult { - return transformBreakExpression(breakExpression, data) - } - - final override fun visitCall(call: FirCall, data: D): CompositeTransformResult { - return transformCall(call, data) - } - - final override fun visitCallLikeControlFlowExpression(callLikeControlFlowExpression: FirCallLikeControlFlowExpression, data: D): CompositeTransformResult { - return transformCallLikeControlFlowExpression(callLikeControlFlowExpression, data) - } - - final override fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: D): CompositeTransformResult { - return transformCallWithArgumentList(callWithArgumentList, data) - } - - final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult { - return transformCallableDeclaration(callableDeclaration, data) - } - - final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult { - return transformCallableMemberDeclaration(callableMemberDeclaration, data) - } - - final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { - return transformCallableReferenceAccess(callableReferenceAccess, data) - } - - final override fun visitCatch(catch: FirCatch, data: D): CompositeTransformResult { - return transformCatch(catch, data) - } - - final override fun visitClass(klass: FirClass, data: D): CompositeTransformResult { - return transformClass(klass, data) - } - - final override fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult { - return transformClassLikeDeclaration(classLikeDeclaration, data) - } - - final override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult { - return transformClassReferenceExpression(classReferenceExpression, data) - } - - final override fun visitComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult { - return transformComponentCall(componentCall, data) - } - - final override fun visitConstExpression(constExpression: FirConstExpression, data: D): CompositeTransformResult { - return transformConstExpression(constExpression, data) - } - - final override fun visitConstructor(constructor: FirConstructor, data: D): CompositeTransformResult { - return transformConstructor(constructor, data) - } - - final override fun visitContinueExpression(continueExpression: FirContinueExpression, data: D): CompositeTransformResult { - return transformContinueExpression(continueExpression, data) - } - - final override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): CompositeTransformResult { - return transformControlFlowGraphReference(controlFlowGraphReference, data) - } - - final override fun visitDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult { - return transformDeclaration(declaration, data) - } - - final override fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): CompositeTransformResult { - return transformDeclarationStatus(declarationStatus, data) - } - - final override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): CompositeTransformResult { - return transformDeclarationWithBody(declarationWithBody, data) - } - - final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult { - return transformDelegateFieldReference(delegateFieldReference, data) - } - - final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult { - return transformDelegatedConstructorCall(delegatedConstructorCall, data) - } - - final override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): CompositeTransformResult { - return transformDelegatedTypeRef(delegatedTypeRef, data) - } - - final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): CompositeTransformResult { - return transformDoWhileLoop(doWhileLoop, data) - } - - final override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): CompositeTransformResult { - return transformDynamicTypeRef(dynamicTypeRef, data) - } - - final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult { - return transformEnumEntry(enumEntry, data) - } - - final override fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult { - return transformErrorDeclaration(errorDeclaration, data) - } - - final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult { - return transformErrorExpression(errorExpression, data) - } - - final override fun visitErrorStatement(errorStatement: FirErrorStatement, data: D): CompositeTransformResult { - return transformErrorStatement(errorStatement, data) - } - - final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult { - return transformErrorTypeRef(errorTypeRef, data) - } - - final override fun visitExpression(expression: FirExpression, data: D): CompositeTransformResult { - return transformExpression(expression, data) - } - - final override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): CompositeTransformResult { - return transformExpressionWithSmartcast(expressionWithSmartcast, data) - } - - final override fun visitField(field: FirField, data: D): CompositeTransformResult { - return transformField(field, data) - } - - final override fun visitFile(file: FirFile, data: D): CompositeTransformResult { - return transformFile(file, data) - } - - final override fun > visitFunction(function: FirFunction, data: D): CompositeTransformResult { - return transformFunction(function, data) - } - - final override fun visitFunctionCall(functionCall: FirFunctionCall, data: D): CompositeTransformResult { - return transformFunctionCall(functionCall, data) - } - - final override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): CompositeTransformResult { - return transformFunctionTypeRef(functionTypeRef, data) - } - - final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult { - return transformGetClassCall(getClassCall, data) - } - - final override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult { - return transformImplicitTypeRef(implicitTypeRef, data) - } - - final override fun visitImport(import: FirImport, data: D): CompositeTransformResult { - return transformImport(import, data) - } - - final override fun visitJump(jump: FirJump, data: D): CompositeTransformResult { - return transformJump(jump, data) - } - - final override fun visitLabel(label: FirLabel, data: D): CompositeTransformResult { - return transformLabel(label, data) - } - - final override fun visitLabeledElement(labeledElement: FirLabeledElement, data: D): CompositeTransformResult { - return transformLabeledElement(labeledElement, data) - } - - final override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): CompositeTransformResult { - return transformLambdaArgumentExpression(lambdaArgumentExpression, data) - } - - final override fun visitLoop(loop: FirLoop, data: D): CompositeTransformResult { - return transformLoop(loop, data) - } - - final override fun visitLoopJump(loopJump: FirLoopJump, data: D): CompositeTransformResult { - return transformLoopJump(loopJump, data) - } - - final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): CompositeTransformResult { - return transformMemberDeclaration(memberDeclaration, data) - } - - final override fun > visitMemberFunction(memberFunction: FirMemberFunction, data: D): CompositeTransformResult { - return transformMemberFunction(memberFunction, data) - } - - final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult { - return transformModifiableClass(modifiableClass, data) - } - - final override fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult { - return transformModifiableFunction(modifiableFunction, data) - } - - final override fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): CompositeTransformResult { - return transformModifiableQualifiedAccess(modifiableQualifiedAccess, data) - } - - final override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): CompositeTransformResult { - return transformNamedArgumentExpression(namedArgumentExpression, data) - } - - final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult { - return transformNamedDeclaration(namedDeclaration, data) - } - - final override fun visitNamedFunction(namedFunction: FirNamedFunction, data: D): CompositeTransformResult { - return transformNamedFunction(namedFunction, data) - } - - final override fun visitNamedReference(namedReference: FirNamedReference, data: D): CompositeTransformResult { - return transformNamedReference(namedReference, data) - } - - final override fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: D): CompositeTransformResult { - return transformOperationBasedCall(operationBasedCall, data) - } - - final override fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { - return transformOperatorCall(operatorCall, data) - } - - final override fun visitPackageFragment(packageFragment: FirPackageFragment, data: D): CompositeTransformResult { - return transformPackageFragment(packageFragment, data) - } - - final override fun visitProperty(property: FirProperty, data: D): CompositeTransformResult { - return transformProperty(property, data) - } - - final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult { - return transformPropertyAccessor(propertyAccessor, data) - } - - final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { - return transformQualifiedAccess(qualifiedAccess, data) - } - - final override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { - return transformQualifiedAccessExpression(qualifiedAccessExpression, data) - } - - final override fun visitReference(reference: FirReference, data: D): CompositeTransformResult { - return transformReference(reference, data) - } - - final override fun visitRegularClass(regularClass: FirRegularClass, data: D): CompositeTransformResult { - return transformRegularClass(regularClass, data) - } - - final override fun visitResolvable(resolvable: FirResolvable, data: D): CompositeTransformResult { - return transformResolvable(resolvable, data) - } - - final override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: D): CompositeTransformResult { - return transformResolvedCallableReference(resolvedCallableReference, data) - } - - final override fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): CompositeTransformResult { - return transformResolvedDeclarationStatus(resolvedDeclarationStatus, data) - } - - final override fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult { - return transformResolvedFunctionTypeRef(resolvedFunctionTypeRef, data) - } - - final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): CompositeTransformResult { - return transformResolvedImport(resolvedImport, data) - } - - final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult { - return transformResolvedQualifier(resolvedQualifier, data) - } - - final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult { - return transformResolvedTypeRef(resolvedTypeRef, data) - } - - final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): CompositeTransformResult { - return transformReturnExpression(returnExpression, data) - } - - final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): CompositeTransformResult { - return transformSpreadArgumentExpression(spreadArgumentExpression, data) - } - - final override fun visitStarProjection(starProjection: FirStarProjection, data: D): CompositeTransformResult { - return transformStarProjection(starProjection, data) - } - - final override fun visitStatement(statement: FirStatement, data: D): CompositeTransformResult { - return transformStatement(statement, data) - } - - final override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): CompositeTransformResult { - return transformStringConcatenationCall(stringConcatenationCall, data) - } - - final override fun visitSuperReference(superReference: FirSuperReference, data: D): CompositeTransformResult { - return transformSuperReference(superReference, data) - } - - final override fun visitTargetElement(targetElement: FirTargetElement, data: D): CompositeTransformResult { - return transformTargetElement(targetElement, data) - } - - final override fun visitThisReference(thisReference: FirThisReference, data: D): CompositeTransformResult { - return transformThisReference(thisReference, data) - } - - final override fun visitThrowExpression(throwExpression: FirThrowExpression, data: D): CompositeTransformResult { - return transformThrowExpression(throwExpression, data) - } - - final override fun visitTryExpression(tryExpression: FirTryExpression, data: D): CompositeTransformResult { - return transformTryExpression(tryExpression, data) - } - - final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult { - return transformTypeAlias(typeAlias, data) - } - - final override fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): CompositeTransformResult { - return transformTypeOperatorCall(typeOperatorCall, data) - } - - final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): CompositeTransformResult { - return transformTypeParameter(typeParameter, data) - } - - final override fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult { - return transformTypeProjection(typeProjection, data) - } - - final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): CompositeTransformResult { - return transformTypeProjectionWithVariance(typeProjectionWithVariance, data) - } - - final override fun visitTypeRef(typeRef: FirTypeRef, data: D): CompositeTransformResult { - return transformTypeRef(typeRef, data) - } - - final override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult { - return transformTypeRefWithNullability(typeRefWithNullability, data) - } - - final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): CompositeTransformResult { - return transformTypedDeclaration(typedDeclaration, data) - } - - final override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): CompositeTransformResult { - return transformUncheckedNotNullCast(uncheckedNotNullCast, data) - } - - final override fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: D): CompositeTransformResult { - return transformUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList, data) - } - - final override fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: D): CompositeTransformResult { - return transformUnknownTypeExpression(unknownTypeExpression, data) - } - - final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult { - return transformUserTypeRef(userTypeRef, data) - } - - final override fun visitValueParameter(valueParameter: FirValueParameter, data: D): CompositeTransformResult { - return transformValueParameter(valueParameter, data) - } - - final override fun > visitVariable(variable: FirVariable, data: D): CompositeTransformResult { - return transformVariable(variable, data) - } - - final override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: D): CompositeTransformResult { - return transformVariableAssignment(variableAssignment, data) - } - - final override fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): CompositeTransformResult { - return transformWhenBranch(whenBranch, data) - } - - final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult { - return transformWhenExpression(whenExpression, data) - } - - final override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): CompositeTransformResult { - return transformWhenSubjectExpression(whenSubjectExpression, data) - } - - final override fun visitWhileLoop(whileLoop: FirWhileLoop, data: D): CompositeTransformResult { - return transformWhileLoop(whileLoop, data) - } - - final override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): CompositeTransformResult { - return transformWrappedArgumentExpression(wrappedArgumentExpression, data) - } - - final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): CompositeTransformResult { - return transformWrappedDelegateExpression(wrappedDelegateExpression, data) - } - - final override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): CompositeTransformResult { - return transformWrappedExpression(wrappedExpression, data) + open fun transformImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult { + return transformElement(implicitTypeRef, data) } final override fun visitElement(element: FirElement, data: D): CompositeTransformResult { return transformElement(element, data) } + final override fun visitAnnotationContainer(annotationContainer: FirAnnotationContainer, data: D): CompositeTransformResult { + return transformAnnotationContainer(annotationContainer, data) + } + + final override fun visitTypeRef(typeRef: FirTypeRef, data: D): CompositeTransformResult { + return transformTypeRef(typeRef, data) + } + + final override fun visitReference(reference: FirReference, data: D): CompositeTransformResult { + return transformReference(reference, data) + } + + final override fun visitLabel(label: FirLabel, data: D): CompositeTransformResult { + return transformLabel(label, data) + } + + final override fun visitImport(import: FirImport, data: D): CompositeTransformResult { + return transformImport(import, data) + } + + final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): CompositeTransformResult { + return transformResolvedImport(resolvedImport, data) + } + + final override fun visitSymbolOwner(symbolOwner: FirSymbolOwner, data: D): CompositeTransformResult> where E : FirSymbolOwner, E : FirDeclaration { + return transformSymbolOwner(symbolOwner, data) + } + + final override fun visitResolvable(resolvable: FirResolvable, data: D): CompositeTransformResult { + return transformResolvable(resolvable, data) + } + + final override fun visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner, data: D): CompositeTransformResult { + return transformControlFlowGraphOwner(controlFlowGraphOwner, data) + } + + final override fun visitTargetElement(targetElement: FirTargetElement, data: D): CompositeTransformResult { + return transformTargetElement(targetElement, data) + } + + final override fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): CompositeTransformResult { + return transformDeclarationStatus(declarationStatus, data) + } + + final override fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): CompositeTransformResult { + return transformResolvedDeclarationStatus(resolvedDeclarationStatus, data) + } + + final override fun visitStatement(statement: FirStatement, data: D): CompositeTransformResult { + return transformStatement(statement, data) + } + + final override fun visitExpression(expression: FirExpression, data: D): CompositeTransformResult { + return transformExpression(expression, data) + } + + final override fun visitDeclaration(declaration: FirDeclaration, data: D): CompositeTransformResult { + return transformDeclaration(declaration, data) + } + + final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): CompositeTransformResult { + return transformAnonymousInitializer(anonymousInitializer, data) + } + + final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): CompositeTransformResult { + return transformTypedDeclaration(typedDeclaration, data) + } + + final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult { + return transformCallableDeclaration(callableDeclaration, data) + } + + final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult { + return transformNamedDeclaration(namedDeclaration, data) + } + + final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): CompositeTransformResult { + return transformTypeParameter(typeParameter, data) + } + + final override fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: D): CompositeTransformResult { + return transformTypeParametersOwner(typeParametersOwner, data) + } + + final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): CompositeTransformResult { + return transformMemberDeclaration(memberDeclaration, data) + } + + final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): CompositeTransformResult { + return transformCallableMemberDeclaration(callableMemberDeclaration, data) + } + + final override fun > visitVariable(variable: FirVariable, data: D): CompositeTransformResult { + return transformVariable(variable, data) + } + + final override fun visitValueParameter(valueParameter: FirValueParameter, data: D): CompositeTransformResult { + return transformValueParameter(valueParameter, data) + } + + final override fun visitProperty(property: FirProperty, data: D): CompositeTransformResult { + return transformProperty(property, data) + } + + final override fun visitField(field: FirField, data: D): CompositeTransformResult { + return transformField(field, data) + } + + final override fun visitClass(klass: FirClass, data: D): CompositeTransformResult { + return transformClass(klass, data) + } + + final override fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): CompositeTransformResult { + return transformClassLikeDeclaration(classLikeDeclaration, data) + } + + final override fun visitRegularClass(regularClass: FirRegularClass, data: D): CompositeTransformResult { + return transformRegularClass(regularClass, data) + } + + final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): CompositeTransformResult { + return transformTypeAlias(typeAlias, data) + } + + final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult { + return transformEnumEntry(enumEntry, data) + } + + final override fun > visitFunction(function: FirFunction, data: D): CompositeTransformResult { + return transformFunction(function, data) + } + + final override fun > visitMemberFunction(memberFunction: FirMemberFunction, data: D): CompositeTransformResult { + return transformMemberFunction(memberFunction, data) + } + + final override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: D): CompositeTransformResult { + return transformSimpleFunction(simpleFunction, data) + } + + final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): CompositeTransformResult { + return transformPropertyAccessor(propertyAccessor, data) + } + + final override fun visitConstructor(constructor: FirConstructor, data: D): CompositeTransformResult { + return transformConstructor(constructor, data) + } + + final override fun visitFile(file: FirFile, data: D): CompositeTransformResult { + return transformFile(file, data) + } + + final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): CompositeTransformResult { + return transformAnonymousFunction(anonymousFunction, data) + } + + final override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): CompositeTransformResult { + return transformAnonymousObject(anonymousObject, data) + } + + final override fun visitLoop(loop: FirLoop, data: D): CompositeTransformResult { + return transformLoop(loop, data) + } + + final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): CompositeTransformResult { + return transformDoWhileLoop(doWhileLoop, data) + } + + final override fun visitWhileLoop(whileLoop: FirWhileLoop, data: D): CompositeTransformResult { + return transformWhileLoop(whileLoop, data) + } + + final override fun visitBlock(block: FirBlock, data: D): CompositeTransformResult { + return transformBlock(block, data) + } + + final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult { + return transformBinaryLogicExpression(binaryLogicExpression, data) + } + + final override fun visitJump(jump: FirJump, data: D): CompositeTransformResult { + return transformJump(jump, data) + } + + final override fun visitLoopJump(loopJump: FirLoopJump, data: D): CompositeTransformResult { + return transformLoopJump(loopJump, data) + } + + final override fun visitBreakExpression(breakExpression: FirBreakExpression, data: D): CompositeTransformResult { + return transformBreakExpression(breakExpression, data) + } + + final override fun visitContinueExpression(continueExpression: FirContinueExpression, data: D): CompositeTransformResult { + return transformContinueExpression(continueExpression, data) + } + + final override fun visitCatch(catch: FirCatch, data: D): CompositeTransformResult { + return transformCatch(catch, data) + } + + final override fun visitTryExpression(tryExpression: FirTryExpression, data: D): CompositeTransformResult { + return transformTryExpression(tryExpression, data) + } + + final override fun visitConstExpression(constExpression: FirConstExpression, data: D): CompositeTransformResult { + return transformConstExpression(constExpression, data) + } + + final override fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): CompositeTransformResult { + return transformTypeProjection(typeProjection, data) + } + + final override fun visitStarProjection(starProjection: FirStarProjection, data: D): CompositeTransformResult { + return transformStarProjection(starProjection, data) + } + + final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): CompositeTransformResult { + return transformTypeProjectionWithVariance(typeProjectionWithVariance, data) + } + + final override fun visitCall(call: FirCall, data: D): CompositeTransformResult { + return transformCall(call, data) + } + + final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { + return transformAnnotationCall(annotationCall, data) + } + + final override fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { + return transformOperatorCall(operatorCall, data) + } + + final override fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): CompositeTransformResult { + return transformTypeOperatorCall(typeOperatorCall, data) + } + + final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult { + return transformWhenExpression(whenExpression, data) + } + + final override fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): CompositeTransformResult { + return transformWhenBranch(whenBranch, data) + } + + final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult { + return transformDelegatedConstructorCall(delegatedConstructorCall, data) + } + + final override fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): CompositeTransformResult { + return transformQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee, data) + } + + final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { + return transformQualifiedAccess(qualifiedAccess, data) + } + + final override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): CompositeTransformResult { + return transformArrayOfCall(arrayOfCall, data) + } + + final override fun visitArraySetCall(arraySetCall: FirArraySetCall, data: D): CompositeTransformResult { + return transformArraySetCall(arraySetCall, data) + } + + final override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult { + return transformClassReferenceExpression(classReferenceExpression, data) + } + + final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult { + return transformErrorExpression(errorExpression, data) + } + + final override fun visitErrorFunction(errorFunction: FirErrorFunction, data: D): CompositeTransformResult { + return transformErrorFunction(errorFunction, data) + } + + final override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { + return transformQualifiedAccessExpression(qualifiedAccessExpression, data) + } + + final override fun visitFunctionCall(functionCall: FirFunctionCall, data: D): CompositeTransformResult { + return transformFunctionCall(functionCall, data) + } + + final override fun visitComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult { + return transformComponentCall(componentCall, data) + } + + final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { + return transformCallableReferenceAccess(callableReferenceAccess, data) + } + + final override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: D): CompositeTransformResult { + return transformThisReceiverExpression(thisReceiverExpression, data) + } + + final override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): CompositeTransformResult { + return transformExpressionWithSmartcast(expressionWithSmartcast, data) + } + + final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): CompositeTransformResult { + return transformGetClassCall(getClassCall, data) + } + + final override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): CompositeTransformResult { + return transformWrappedExpression(wrappedExpression, data) + } + + final override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): CompositeTransformResult { + return transformWrappedArgumentExpression(wrappedArgumentExpression, data) + } + + final override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): CompositeTransformResult { + return transformLambdaArgumentExpression(lambdaArgumentExpression, data) + } + + final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): CompositeTransformResult { + return transformSpreadArgumentExpression(spreadArgumentExpression, data) + } + + final override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): CompositeTransformResult { + return transformNamedArgumentExpression(namedArgumentExpression, data) + } + + final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult { + return transformResolvedQualifier(resolvedQualifier, data) + } + + final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): CompositeTransformResult { + return transformReturnExpression(returnExpression, data) + } + + final override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): CompositeTransformResult { + return transformStringConcatenationCall(stringConcatenationCall, data) + } + + final override fun visitThrowExpression(throwExpression: FirThrowExpression, data: D): CompositeTransformResult { + return transformThrowExpression(throwExpression, data) + } + + final override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: D): CompositeTransformResult { + return transformVariableAssignment(variableAssignment, data) + } + + final override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): CompositeTransformResult { + return transformWhenSubjectExpression(whenSubjectExpression, data) + } + + final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): CompositeTransformResult { + return transformWrappedDelegateExpression(wrappedDelegateExpression, data) + } + + final override fun visitNamedReference(namedReference: FirNamedReference, data: D): CompositeTransformResult { + return transformNamedReference(namedReference, data) + } + + final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): CompositeTransformResult { + return transformErrorNamedReference(errorNamedReference, data) + } + + final override fun visitSuperReference(superReference: FirSuperReference, data: D): CompositeTransformResult { + return transformSuperReference(superReference, data) + } + + final override fun visitThisReference(thisReference: FirThisReference, data: D): CompositeTransformResult { + return transformThisReference(thisReference, data) + } + + final override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): CompositeTransformResult { + return transformControlFlowGraphReference(controlFlowGraphReference, data) + } + + final override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: D): CompositeTransformResult { + return transformResolvedCallableReference(resolvedCallableReference, data) + } + + final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult { + return transformDelegateFieldReference(delegateFieldReference, data) + } + + final override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): CompositeTransformResult { + return transformBackingFieldReference(backingFieldReference, data) + } + + final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult { + return transformResolvedTypeRef(resolvedTypeRef, data) + } + + final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult { + return transformErrorTypeRef(errorTypeRef, data) + } + + final override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): CompositeTransformResult { + return transformDelegatedTypeRef(delegatedTypeRef, data) + } + + final override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult { + return transformTypeRefWithNullability(typeRefWithNullability, data) + } + + final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult { + return transformUserTypeRef(userTypeRef, data) + } + + final override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): CompositeTransformResult { + return transformDynamicTypeRef(dynamicTypeRef, data) + } + + final override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): CompositeTransformResult { + return transformFunctionTypeRef(functionTypeRef, data) + } + + final override fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult { + return transformResolvedFunctionTypeRef(resolvedFunctionTypeRef, data) + } + + final override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): CompositeTransformResult { + return transformImplicitTypeRef(implicitTypeRef, data) + } + } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformerUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformerUtil.kt new file mode 100644 index 00000000000..29e3537b1d3 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirTransformerUtil.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2019 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.visitors + +import org.jetbrains.kotlin.fir.FirElement + +fun T.transformSingle(transformer: FirTransformer, data: D): T { + return transform(transformer, data).single +} + +fun MutableList.transformInplace(transformer: FirTransformer, data: D) { + val iterator = this.listIterator() + while (iterator.hasNext()) { + val next = iterator.next() + val result = next.transform(transformer, data) + if (result.isSingle) { + iterator.set(result.single) + } else { + val resultIterator = result.list.listIterator() + if (!resultIterator.hasNext()) { + iterator.remove() + } else { + iterator.set(resultIterator.next()) + } + while (resultIterator.hasNext()) { + iterator.add(resultIterator.next()) + } + } + + } +} + diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt new file mode 100644 index 00000000000..0c350cb258f --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -0,0 +1,333 @@ +/* + * Copyright 2010-2019 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.visitors + +import org.jetbrains.kotlin.fir.FirElement +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.declarations.FirImport +import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.fir.FirSymbolOwner +import org.jetbrains.kotlin.fir.expressions.FirResolvable +import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner +import org.jetbrains.kotlin.fir.FirTargetElement +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus +import org.jetbrains.kotlin.fir.expressions.FirStatement +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer +import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirField +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirTypeAlias +import org.jetbrains.kotlin.fir.declarations.FirEnumEntry +import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.declarations.FirMemberFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction +import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop +import org.jetbrains.kotlin.fir.expressions.FirWhileLoop +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression +import org.jetbrains.kotlin.fir.expressions.FirJump +import org.jetbrains.kotlin.fir.expressions.FirLoopJump +import org.jetbrains.kotlin.fir.expressions.FirBreakExpression +import org.jetbrains.kotlin.fir.expressions.FirContinueExpression +import org.jetbrains.kotlin.fir.expressions.FirCatch +import org.jetbrains.kotlin.fir.expressions.FirTryExpression +import org.jetbrains.kotlin.fir.expressions.FirConstExpression +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirStarProjection +import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance +import org.jetbrains.kotlin.fir.expressions.FirCall +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirOperatorCall +import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall +import org.jetbrains.kotlin.fir.expressions.FirWhenExpression +import org.jetbrains.kotlin.fir.expressions.FirWhenBranch +import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall +import org.jetbrains.kotlin.fir.expressions.FirArraySetCall +import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression +import org.jetbrains.kotlin.fir.expressions.FirErrorExpression +import org.jetbrains.kotlin.fir.declarations.FirErrorFunction +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.expressions.FirComponentCall +import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess +import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression +import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast +import org.jetbrains.kotlin.fir.expressions.FirGetClassCall +import org.jetbrains.kotlin.fir.expressions.FirWrappedExpression +import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.FirReturnExpression +import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall +import org.jetbrains.kotlin.fir.expressions.FirThrowExpression +import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment +import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression +import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirSuperReference +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference +import org.jetbrains.kotlin.fir.references.FirBackingFieldReference +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.types.FirErrorTypeRef +import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef +import org.jetbrains.kotlin.fir.types.FirTypeRefWithNullability +import org.jetbrains.kotlin.fir.types.FirUserTypeRef +import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef +import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef +import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef +import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +abstract class FirVisitor { + abstract fun visitElement(element: FirElement, data: D): R + + open fun visitAnnotationContainer(annotationContainer: FirAnnotationContainer, data: D): R = visitElement(annotationContainer, data) + + open fun visitTypeRef(typeRef: FirTypeRef, data: D): R = visitElement(typeRef, data) + + open fun visitReference(reference: FirReference, data: D): R = visitElement(reference, data) + + open fun visitLabel(label: FirLabel, data: D): R = visitElement(label, data) + + open fun visitImport(import: FirImport, data: D): R = visitElement(import, data) + + open fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): R = visitElement(resolvedImport, 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 visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner, data: D): R = visitElement(controlFlowGraphOwner, data) + + open fun visitTargetElement(targetElement: FirTargetElement, data: D): R = visitElement(targetElement, data) + + open fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): R = visitElement(declarationStatus, data) + + open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): R = visitElement(resolvedDeclarationStatus, data) + + open fun visitStatement(statement: FirStatement, data: D): R = visitElement(statement, data) + + open fun visitExpression(expression: FirExpression, data: D): R = visitElement(expression, data) + + open fun visitDeclaration(declaration: FirDeclaration, data: D): R = visitElement(declaration, 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 > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R = visitElement(callableDeclaration, data) + + open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): R = visitElement(namedDeclaration, data) + + open fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): R = visitElement(typeParameter, data) + + open fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: D): R = visitElement(typeParametersOwner, 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 > visitVariable(variable: FirVariable, data: D): R = visitElement(variable, data) + + open fun visitValueParameter(valueParameter: FirValueParameter, data: D): R = visitElement(valueParameter, data) + + open fun visitProperty(property: FirProperty, data: D): R = visitElement(property, data) + + open fun visitField(field: FirField, data: D): R = visitElement(field, data) + + open fun visitClass(klass: FirClass, data: D): R = visitElement(klass, data) + + open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R = visitElement(classLikeDeclaration, 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 visitEnumEntry(enumEntry: FirEnumEntry, data: D): R = visitElement(enumEntry, data) + + open fun > visitFunction(function: FirFunction, data: D): R = visitElement(function, data) + + open fun > visitMemberFunction(memberFunction: FirMemberFunction, data: D): R = visitElement(memberFunction, data) + + open fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: D): R = visitElement(simpleFunction, data) + + open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): R = visitElement(propertyAccessor, data) + + open fun visitConstructor(constructor: FirConstructor, data: D): R = visitElement(constructor, data) + + open fun visitFile(file: FirFile, data: D): R = visitElement(file, data) + + open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): R = visitElement(anonymousFunction, data) + + open fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): R = visitElement(anonymousObject, data) + + open fun visitLoop(loop: FirLoop, data: D): R = visitElement(loop, data) + + open fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): R = visitElement(doWhileLoop, data) + + open fun visitWhileLoop(whileLoop: FirWhileLoop, data: D): R = visitElement(whileLoop, data) + + open fun visitBlock(block: FirBlock, data: D): R = visitElement(block, data) + + open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): R = visitElement(binaryLogicExpression, data) + + open fun visitJump(jump: FirJump, data: D): R = visitElement(jump, data) + + open fun visitLoopJump(loopJump: FirLoopJump, data: D): R = visitElement(loopJump, data) + + open fun visitBreakExpression(breakExpression: FirBreakExpression, data: D): R = visitElement(breakExpression, data) + + open fun visitContinueExpression(continueExpression: FirContinueExpression, data: D): R = visitElement(continueExpression, data) + + open fun visitCatch(catch: FirCatch, data: D): R = visitElement(catch, data) + + open fun visitTryExpression(tryExpression: FirTryExpression, data: D): R = visitElement(tryExpression, data) + + open fun visitConstExpression(constExpression: FirConstExpression, data: D): R = visitElement(constExpression, data) + + open fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): R = visitElement(typeProjection, data) + + open fun visitStarProjection(starProjection: FirStarProjection, data: D): R = visitElement(starProjection, data) + + open fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): R = visitElement(typeProjectionWithVariance, data) + + open fun visitCall(call: FirCall, data: D): R = visitElement(call, data) + + open fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): R = visitElement(annotationCall, data) + + open fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): R = visitElement(operatorCall, data) + + open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): R = visitElement(typeOperatorCall, data) + + open fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): R = visitElement(whenExpression, data) + + open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R = visitElement(whenBranch, data) + + open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R = visitElement(delegatedConstructorCall, data) + + open fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): R = visitElement(qualifiedAccessWithoutCallee, data) + + open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): R = visitElement(qualifiedAccess, data) + + open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): R = visitElement(arrayOfCall, data) + + open fun visitArraySetCall(arraySetCall: FirArraySetCall, data: D): R = visitElement(arraySetCall, data) + + open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): R = visitElement(classReferenceExpression, data) + + open fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): R = visitElement(errorExpression, data) + + open fun visitErrorFunction(errorFunction: FirErrorFunction, data: D): R = visitElement(errorFunction, data) + + open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R = visitElement(qualifiedAccessExpression, data) + + open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R = visitElement(functionCall, data) + + open fun visitComponentCall(componentCall: FirComponentCall, data: D): R = visitElement(componentCall, data) + + open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R = visitElement(callableReferenceAccess, data) + + open fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: D): R = visitElement(thisReceiverExpression, data) + + open fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): R = visitElement(expressionWithSmartcast, data) + + open fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): R = visitElement(getClassCall, data) + + open fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): R = visitElement(wrappedExpression, data) + + open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): R = visitElement(wrappedArgumentExpression, data) + + open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): R = visitElement(lambdaArgumentExpression, data) + + open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): R = visitElement(spreadArgumentExpression, data) + + open fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): R = visitElement(namedArgumentExpression, data) + + open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R = visitElement(resolvedQualifier, data) + + open fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): R = visitElement(returnExpression, data) + + open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): R = visitElement(stringConcatenationCall, data) + + open fun visitThrowExpression(throwExpression: FirThrowExpression, data: D): R = visitElement(throwExpression, data) + + open fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: D): R = visitElement(variableAssignment, data) + + open fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): R = visitElement(whenSubjectExpression, data) + + open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): R = visitElement(wrappedDelegateExpression, data) + + open fun visitNamedReference(namedReference: FirNamedReference, data: D): R = visitElement(namedReference, data) + + open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): R = visitElement(errorNamedReference, data) + + open fun visitSuperReference(superReference: FirSuperReference, data: D): R = visitElement(superReference, data) + + open fun visitThisReference(thisReference: FirThisReference, data: D): R = visitElement(thisReference, data) + + open fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): R = visitElement(controlFlowGraphReference, data) + + open fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: D): R = visitElement(resolvedCallableReference, data) + + open fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): R = visitElement(delegateFieldReference, data) + + open fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): R = visitElement(backingFieldReference, data) + + open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R = visitElement(resolvedTypeRef, data) + + open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R = visitElement(errorTypeRef, data) + + open fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): R = visitElement(delegatedTypeRef, data) + + open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): R = visitElement(typeRefWithNullability, data) + + open fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): R = visitElement(userTypeRef, data) + + open fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): R = visitElement(dynamicTypeRef, data) + + open fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): R = visitElement(functionTypeRef, data) + + open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): R = visitElement(resolvedFunctionTypeRef, data) + + open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): R = visitElement(implicitTypeRef, data) + +} diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt similarity index 64% rename from compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index 98f4bfa5e41..4699daab4e1 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -2,547 +2,654 @@ * Copyright 2010-2019 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.visitors -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* -import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.* -import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.FirElement +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.declarations.FirImport +import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.fir.FirSymbolOwner +import org.jetbrains.kotlin.fir.expressions.FirResolvable +import org.jetbrains.kotlin.fir.FirControlFlowGraphOwner +import org.jetbrains.kotlin.fir.FirTargetElement +import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus +import org.jetbrains.kotlin.fir.declarations.FirResolvedDeclarationStatus +import org.jetbrains.kotlin.fir.expressions.FirStatement +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirAnonymousInitializer +import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirNamedDeclaration +import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration +import org.jetbrains.kotlin.fir.declarations.FirVariable +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirField +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration +import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirTypeAlias +import org.jetbrains.kotlin.fir.declarations.FirEnumEntry +import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.declarations.FirMemberFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.FirConstructor +import org.jetbrains.kotlin.fir.declarations.FirFile +import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction +import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop +import org.jetbrains.kotlin.fir.expressions.FirWhileLoop +import org.jetbrains.kotlin.fir.expressions.FirBlock +import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression +import org.jetbrains.kotlin.fir.expressions.FirJump +import org.jetbrains.kotlin.fir.expressions.FirLoopJump +import org.jetbrains.kotlin.fir.expressions.FirBreakExpression +import org.jetbrains.kotlin.fir.expressions.FirContinueExpression +import org.jetbrains.kotlin.fir.expressions.FirCatch +import org.jetbrains.kotlin.fir.expressions.FirTryExpression +import org.jetbrains.kotlin.fir.expressions.FirConstExpression +import org.jetbrains.kotlin.fir.types.FirTypeProjection +import org.jetbrains.kotlin.fir.types.FirStarProjection +import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance +import org.jetbrains.kotlin.fir.expressions.FirCall +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.FirOperatorCall +import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall +import org.jetbrains.kotlin.fir.expressions.FirWhenExpression +import org.jetbrains.kotlin.fir.expressions.FirWhenBranch +import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall +import org.jetbrains.kotlin.fir.expressions.FirArraySetCall +import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression +import org.jetbrains.kotlin.fir.expressions.FirErrorExpression +import org.jetbrains.kotlin.fir.declarations.FirErrorFunction +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression +import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.expressions.FirComponentCall +import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess +import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression +import org.jetbrains.kotlin.fir.expressions.FirExpressionWithSmartcast +import org.jetbrains.kotlin.fir.expressions.FirGetClassCall +import org.jetbrains.kotlin.fir.expressions.FirWrappedExpression +import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirSpreadArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.expressions.FirReturnExpression +import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall +import org.jetbrains.kotlin.fir.expressions.FirThrowExpression +import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment +import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression +import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirSuperReference +import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference +import org.jetbrains.kotlin.fir.references.FirBackingFieldReference +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.types.FirErrorTypeRef +import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef +import org.jetbrains.kotlin.fir.types.FirTypeRefWithNullability +import org.jetbrains.kotlin.fir.types.FirUserTypeRef +import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef +import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef +import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef +import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ -/** This file generated by :compiler:fir:tree:generateVisitors. DO NOT MODIFY MANUALLY! */ abstract class FirVisitorVoid : FirVisitor() { abstract fun visitElement(element: FirElement) - open fun visitCatch(catch: FirCatch) { - visitElement(catch, null) - } - - open fun visitDeclaration(declaration: FirDeclaration) { - visitElement(declaration, null) - } - - open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) { - visitElement(callableDeclaration, null) - } - - open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) { - visitElement(callableMemberDeclaration, null) - } - - open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody) { - visitElement(declarationWithBody, null) - } - - open fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer) { - visitElement(anonymousInitializer, null) - } - - open fun > visitFunction(function: FirFunction) { - visitElement(function, null) - } - - open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) { - visitElement(anonymousFunction, null) - } - - open fun > visitMemberFunction(memberFunction: FirMemberFunction) { - visitElement(memberFunction, null) - } - - open fun visitConstructor(constructor: FirConstructor) { - visitElement(constructor, null) - } - - open fun visitNamedFunction(namedFunction: FirNamedFunction) { - visitElement(namedFunction, null) - } - - open fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction) { - visitElement(modifiableFunction, null) - } - - open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) { - visitElement(propertyAccessor, null) - } - - open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) { - visitElement(errorDeclaration, null) - } - - open fun visitField(field: FirField) { - visitElement(field, null) - } - - open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) { - visitElement(namedDeclaration, null) - } - - open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { - visitElement(memberDeclaration, null) - } - - open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) { - visitElement(classLikeDeclaration, null) - } - - open fun visitRegularClass(regularClass: FirRegularClass) { - visitElement(regularClass, null) - } - - open fun visitEnumEntry(enumEntry: FirEnumEntry) { - visitElement(enumEntry, null) - } - - open fun visitTypeAlias(typeAlias: FirTypeAlias) { - visitElement(typeAlias, null) - } - - open fun visitTypeParameter(typeParameter: FirTypeParameter) { - visitElement(typeParameter, null) - } - - open fun visitProperty(property: FirProperty) { - visitElement(property, null) - } - - open fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration) { - visitElement(typedDeclaration, null) - } - - open fun visitValueParameter(valueParameter: FirValueParameter) { - visitElement(valueParameter, null) - } - - open fun > visitVariable(variable: FirVariable) { - visitElement(variable, null) - } - - open fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus) { - visitElement(declarationStatus, null) - } - - open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus) { - visitElement(resolvedDeclarationStatus, null) - } - - open fun visitImport(import: FirImport) { - visitElement(import, null) - } - - open fun visitResolvedImport(resolvedImport: FirResolvedImport) { - visitElement(resolvedImport, null) - } - - open fun visitLabel(label: FirLabel) { - visitElement(label, null) - } - - open fun visitPackageFragment(packageFragment: FirPackageFragment) { - visitElement(packageFragment, null) - } - - open fun visitFile(file: FirFile) { - visitElement(file, null) - } - - open fun visitReference(reference: FirReference) { - visitElement(reference, null) - } - - open fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference) { - visitElement(controlFlowGraphReference, null) - } - - open fun visitNamedReference(namedReference: FirNamedReference) { - visitElement(namedReference, null) - } - - open fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference) { - visitElement(resolvedCallableReference, null) - } - - open fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference) { - visitElement(backingFieldReference, null) - } - - open fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference) { - visitElement(delegateFieldReference, null) - } - - open fun visitSuperReference(superReference: FirSuperReference) { - visitElement(superReference, null) - } - - open fun visitThisReference(thisReference: FirThisReference) { - visitElement(thisReference, null) - } - - open fun visitStatement(statement: FirStatement) { - visitElement(statement, null) - } - - open fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement) { - visitElement(annotatedStatement, null) - } - - open fun visitExpression(expression: FirExpression) { - visitElement(expression, null) - } - - open fun visitCall(call: FirCall) { - visitElement(call, null) - } - - open fun visitArraySetCall(arraySetCall: FirArraySetCall) { - visitElement(arraySetCall, null) - } - - open fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList) { - visitElement(callWithArgumentList, null) - } - - open fun visitAnnotationCall(annotationCall: FirAnnotationCall) { - visitElement(annotationCall, null) - } - - open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) { - visitElement(delegatedConstructorCall, null) - } - - open fun visitOperatorCall(operatorCall: FirOperatorCall) { - visitElement(operatorCall, null) - } - - open fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall) { - visitElement(operationBasedCall, null) - } - - open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall) { - visitElement(typeOperatorCall, null) - } - - open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall) { - visitElement(stringConcatenationCall, null) - } - - open fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList) { - visitElement(unknownTypeCallWithArgumentList, null) - } - - open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall) { - visitElement(arrayOfCall, null) - } - - open fun visitFunctionCall(functionCall: FirFunctionCall) { - visitElement(functionCall, null) - } - - open fun visitComponentCall(componentCall: FirComponentCall) { - visitElement(componentCall, null) - } - - open fun visitGetClassCall(getClassCall: FirGetClassCall) { - visitElement(getClassCall, null) - } - - open fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast) { - visitElement(uncheckedNotNullCast, null) - } - - open fun visitJump(jump: FirJump) { - visitElement(jump, null) - } - - open fun visitLoopJump(loopJump: FirLoopJump) { - visitElement(loopJump, null) - } - - open fun visitBreakExpression(breakExpression: FirBreakExpression) { - visitElement(breakExpression, null) - } - - open fun visitContinueExpression(continueExpression: FirContinueExpression) { - visitElement(continueExpression, null) - } - - open fun visitReturnExpression(returnExpression: FirReturnExpression) { - visitElement(returnExpression, null) - } - - open fun visitThrowExpression(throwExpression: FirThrowExpression) { - visitElement(throwExpression, null) - } - - open fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression) { - visitElement(unknownTypeExpression, null) - } - - open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) { - visitElement(binaryLogicExpression, null) - } - - open fun visitBlock(block: FirBlock) { - visitElement(block, null) - } - - open fun visitCallLikeControlFlowExpression(callLikeControlFlowExpression: FirCallLikeControlFlowExpression) { - visitElement(callLikeControlFlowExpression, null) - } - - open fun visitTryExpression(tryExpression: FirTryExpression) { - visitElement(tryExpression, null) - } - - open fun visitWhenExpression(whenExpression: FirWhenExpression) { - visitElement(whenExpression, null) - } - - open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression) { - visitElement(classReferenceExpression, null) - } - - open fun visitConstExpression(constExpression: FirConstExpression) { - visitElement(constExpression, null) - } - - open fun visitErrorExpression(errorExpression: FirErrorExpression) { - visitElement(errorExpression, null) - } - - open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression) { - visitElement(qualifiedAccessExpression, null) - } - - open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess) { - visitElement(callableReferenceAccess, null) - } - - open fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast) { - visitElement(expressionWithSmartcast, null) - } - - open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) { - visitElement(resolvedQualifier, null) - } - - open fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression) { - visitElement(whenSubjectExpression, null) - } - - open fun visitWrappedExpression(wrappedExpression: FirWrappedExpression) { - visitElement(wrappedExpression, null) - } - - open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression) { - visitElement(wrappedArgumentExpression, null) - } - - open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) { - visitElement(lambdaArgumentExpression, null) - } - - open fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) { - visitElement(namedArgumentExpression, null) - } - - open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression) { - visitElement(spreadArgumentExpression, null) - } - - open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression) { - visitElement(wrappedDelegateExpression, null) - } - - open fun visitClass(klass: FirClass) { - visitElement(klass, null) - } - - open fun visitAnonymousObject(anonymousObject: FirAnonymousObject) { - visitElement(anonymousObject, null) - } - - open fun visitModifiableClass(modifiableClass: FirModifiableClass) { - visitElement(modifiableClass, null) - } - - open fun visitErrorStatement(errorStatement: FirErrorStatement) { - visitElement(errorStatement, null) - } - - open fun visitLoop(loop: FirLoop) { - visitElement(loop, null) - } - - open fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop) { - visitElement(doWhileLoop, null) - } - - open fun visitWhileLoop(whileLoop: FirWhileLoop) { - visitElement(whileLoop, null) - } - - open fun visitResolvable(resolvable: FirResolvable) { - visitElement(resolvable, null) - } - - open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { - visitElement(qualifiedAccess, null) - } - - open fun visitAssignment(assignment: FirAssignment) { - visitElement(assignment, null) - } - - open fun visitVariableAssignment(variableAssignment: FirVariableAssignment) { - visitElement(variableAssignment, null) - } - - open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess) { - visitElement(modifiableQualifiedAccess, null) - } - - open fun visitTargetElement(targetElement: FirTargetElement) { - visitElement(targetElement, null) - } - - open fun visitLabeledElement(labeledElement: FirLabeledElement) { - visitElement(labeledElement, null) - } - - open fun visitTypeProjection(typeProjection: FirTypeProjection) { - visitElement(typeProjection, null) - } - - open fun visitStarProjection(starProjection: FirStarProjection) { - visitElement(starProjection, null) - } - - open fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance) { - visitElement(typeProjectionWithVariance, null) + open fun visitAnnotationContainer(annotationContainer: FirAnnotationContainer) { + visitElement(annotationContainer) } open fun visitTypeRef(typeRef: FirTypeRef) { - visitElement(typeRef, null) + visitElement(typeRef) } - open fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef) { - visitElement(delegatedTypeRef, null) + open fun visitReference(reference: FirReference) { + visitElement(reference) } - open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) { - visitElement(implicitTypeRef, null) + open fun visitLabel(label: FirLabel) { + visitElement(label) } - open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { - visitElement(resolvedTypeRef, null) + open fun visitImport(import: FirImport) { + visitElement(import) } - open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) { - visitElement(errorTypeRef, null) + open fun visitResolvedImport(resolvedImport: FirResolvedImport) { + visitElement(resolvedImport) } - open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef) { - visitElement(resolvedFunctionTypeRef, null) + open fun visitSymbolOwner(symbolOwner: FirSymbolOwner) where E : FirSymbolOwner, E : FirDeclaration { + visitElement(symbolOwner) } - open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) { - visitElement(typeRefWithNullability, null) + open fun visitResolvable(resolvable: FirResolvable) { + visitElement(resolvable) } - open fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef) { - visitElement(dynamicTypeRef, null) + open fun visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner) { + visitElement(controlFlowGraphOwner) } - open fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef) { - visitElement(functionTypeRef, null) + open fun visitTargetElement(targetElement: FirTargetElement) { + visitElement(targetElement) } - open fun visitUserTypeRef(userTypeRef: FirUserTypeRef) { - visitElement(userTypeRef, null) + open fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus) { + visitElement(declarationStatus) + } + + open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus) { + visitElement(resolvedDeclarationStatus) + } + + open fun visitStatement(statement: FirStatement) { + visitElement(statement) + } + + open fun visitExpression(expression: FirExpression) { + visitElement(expression) + } + + open fun visitDeclaration(declaration: FirDeclaration) { + visitElement(declaration) + } + + open fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer) { + visitElement(anonymousInitializer) + } + + open fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration) { + visitElement(typedDeclaration) + } + + open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration) { + visitElement(callableDeclaration) + } + + open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration) { + visitElement(namedDeclaration) + } + + open fun visitTypeParameter(typeParameter: FirTypeParameter) { + visitElement(typeParameter) + } + + open fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner) { + visitElement(typeParametersOwner) + } + + open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) { + visitElement(memberDeclaration) + } + + open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration) { + visitElement(callableMemberDeclaration) + } + + open fun > visitVariable(variable: FirVariable) { + visitElement(variable) + } + + open fun visitValueParameter(valueParameter: FirValueParameter) { + visitElement(valueParameter) + } + + open fun visitProperty(property: FirProperty) { + visitElement(property) + } + + open fun visitField(field: FirField) { + visitElement(field) + } + + open fun visitClass(klass: FirClass) { + visitElement(klass) + } + + open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration) { + visitElement(classLikeDeclaration) + } + + open fun visitRegularClass(regularClass: FirRegularClass) { + visitElement(regularClass) + } + + open fun visitTypeAlias(typeAlias: FirTypeAlias) { + visitElement(typeAlias) + } + + open fun visitEnumEntry(enumEntry: FirEnumEntry) { + visitElement(enumEntry) + } + + open fun > visitFunction(function: FirFunction) { + visitElement(function) + } + + open fun > visitMemberFunction(memberFunction: FirMemberFunction) { + visitElement(memberFunction) + } + + open fun visitSimpleFunction(simpleFunction: FirSimpleFunction) { + visitElement(simpleFunction) + } + + open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) { + visitElement(propertyAccessor) + } + + open fun visitConstructor(constructor: FirConstructor) { + visitElement(constructor) + } + + open fun visitFile(file: FirFile) { + visitElement(file) + } + + open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) { + visitElement(anonymousFunction) + } + + open fun visitAnonymousObject(anonymousObject: FirAnonymousObject) { + visitElement(anonymousObject) + } + + open fun visitLoop(loop: FirLoop) { + visitElement(loop) + } + + open fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop) { + visitElement(doWhileLoop) + } + + open fun visitWhileLoop(whileLoop: FirWhileLoop) { + visitElement(whileLoop) + } + + open fun visitBlock(block: FirBlock) { + visitElement(block) + } + + open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) { + visitElement(binaryLogicExpression) + } + + open fun visitJump(jump: FirJump) { + visitElement(jump) + } + + open fun visitLoopJump(loopJump: FirLoopJump) { + visitElement(loopJump) + } + + open fun visitBreakExpression(breakExpression: FirBreakExpression) { + visitElement(breakExpression) + } + + open fun visitContinueExpression(continueExpression: FirContinueExpression) { + visitElement(continueExpression) + } + + open fun visitCatch(catch: FirCatch) { + visitElement(catch) + } + + open fun visitTryExpression(tryExpression: FirTryExpression) { + visitElement(tryExpression) + } + + open fun visitConstExpression(constExpression: FirConstExpression) { + visitElement(constExpression) + } + + open fun visitTypeProjection(typeProjection: FirTypeProjection) { + visitElement(typeProjection) + } + + open fun visitStarProjection(starProjection: FirStarProjection) { + visitElement(starProjection) + } + + open fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance) { + visitElement(typeProjectionWithVariance) + } + + open fun visitCall(call: FirCall) { + visitElement(call) + } + + open fun visitAnnotationCall(annotationCall: FirAnnotationCall) { + visitElement(annotationCall) + } + + open fun visitOperatorCall(operatorCall: FirOperatorCall) { + visitElement(operatorCall) + } + + open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall) { + visitElement(typeOperatorCall) + } + + open fun visitWhenExpression(whenExpression: FirWhenExpression) { + visitElement(whenExpression) } open fun visitWhenBranch(whenBranch: FirWhenBranch) { - visitElement(whenBranch, null) + visitElement(whenBranch) } - final override fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: Nothing?) { - visitAnnotatedStatement(annotatedStatement) + open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) { + visitElement(delegatedConstructorCall) } - final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) { - visitAnnotationCall(annotationCall) + open fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee) { + visitElement(qualifiedAccessWithoutCallee) } - final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Nothing?) { - visitAnonymousFunction(anonymousFunction) + open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { + visitElement(qualifiedAccess) + } + + open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall) { + visitElement(arrayOfCall) + } + + open fun visitArraySetCall(arraySetCall: FirArraySetCall) { + visitElement(arraySetCall) + } + + open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression) { + visitElement(classReferenceExpression) + } + + open fun visitErrorExpression(errorExpression: FirErrorExpression) { + visitElement(errorExpression) + } + + open fun visitErrorFunction(errorFunction: FirErrorFunction) { + visitElement(errorFunction) + } + + open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression) { + visitElement(qualifiedAccessExpression) + } + + open fun visitFunctionCall(functionCall: FirFunctionCall) { + visitElement(functionCall) + } + + open fun visitComponentCall(componentCall: FirComponentCall) { + visitElement(componentCall) + } + + open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess) { + visitElement(callableReferenceAccess) + } + + open fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression) { + visitElement(thisReceiverExpression) + } + + open fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast) { + visitElement(expressionWithSmartcast) + } + + open fun visitGetClassCall(getClassCall: FirGetClassCall) { + visitElement(getClassCall) + } + + open fun visitWrappedExpression(wrappedExpression: FirWrappedExpression) { + visitElement(wrappedExpression) + } + + open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression) { + visitElement(wrappedArgumentExpression) + } + + open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) { + visitElement(lambdaArgumentExpression) + } + + open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression) { + visitElement(spreadArgumentExpression) + } + + open fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) { + visitElement(namedArgumentExpression) + } + + open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) { + visitElement(resolvedQualifier) + } + + open fun visitReturnExpression(returnExpression: FirReturnExpression) { + visitElement(returnExpression) + } + + open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall) { + visitElement(stringConcatenationCall) + } + + open fun visitThrowExpression(throwExpression: FirThrowExpression) { + visitElement(throwExpression) + } + + open fun visitVariableAssignment(variableAssignment: FirVariableAssignment) { + visitElement(variableAssignment) + } + + open fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression) { + visitElement(whenSubjectExpression) + } + + open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression) { + visitElement(wrappedDelegateExpression) + } + + open fun visitNamedReference(namedReference: FirNamedReference) { + visitElement(namedReference) + } + + open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) { + visitElement(errorNamedReference) + } + + open fun visitSuperReference(superReference: FirSuperReference) { + visitElement(superReference) + } + + open fun visitThisReference(thisReference: FirThisReference) { + visitElement(thisReference) + } + + open fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference) { + visitElement(controlFlowGraphReference) + } + + open fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference) { + visitElement(resolvedCallableReference) + } + + open fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference) { + visitElement(delegateFieldReference) + } + + open fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference) { + visitElement(backingFieldReference) + } + + open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { + visitElement(resolvedTypeRef) + } + + open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) { + visitElement(errorTypeRef) + } + + open fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef) { + visitElement(delegatedTypeRef) + } + + open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) { + visitElement(typeRefWithNullability) + } + + open fun visitUserTypeRef(userTypeRef: FirUserTypeRef) { + visitElement(userTypeRef) + } + + open fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef) { + visitElement(dynamicTypeRef) + } + + open fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef) { + visitElement(functionTypeRef) + } + + open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef) { + visitElement(resolvedFunctionTypeRef) + } + + open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef) { + visitElement(implicitTypeRef) + } + + final override fun visitElement(element: FirElement, data: Nothing?) { + visitElement(element) + } + + final override fun visitAnnotationContainer(annotationContainer: FirAnnotationContainer, data: Nothing?) { + visitAnnotationContainer(annotationContainer) + } + + final override fun visitTypeRef(typeRef: FirTypeRef, data: Nothing?) { + visitTypeRef(typeRef) + } + + final override fun visitReference(reference: FirReference, data: Nothing?) { + visitReference(reference) + } + + final override fun visitLabel(label: FirLabel, data: Nothing?) { + visitLabel(label) + } + + final override fun visitImport(import: FirImport, data: Nothing?) { + visitImport(import) + } + + final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) { + visitResolvedImport(resolvedImport) + } + + 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) + } + + final override fun visitControlFlowGraphOwner(controlFlowGraphOwner: FirControlFlowGraphOwner, data: Nothing?) { + visitControlFlowGraphOwner(controlFlowGraphOwner) + } + + final override fun visitTargetElement(targetElement: FirTargetElement, data: Nothing?) { + visitTargetElement(targetElement) + } + + final override fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: Nothing?) { + visitDeclarationStatus(declarationStatus) + } + + final override fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: Nothing?) { + visitResolvedDeclarationStatus(resolvedDeclarationStatus) + } + + final override fun visitStatement(statement: FirStatement, data: Nothing?) { + visitStatement(statement) + } + + final override fun visitExpression(expression: FirExpression, data: Nothing?) { + visitExpression(expression) + } + + final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) { + visitDeclaration(declaration) } final override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: Nothing?) { visitAnonymousInitializer(anonymousInitializer) } - final override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: Nothing?) { - visitAnonymousObject(anonymousObject) - } - - final override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: Nothing?) { - visitArrayOfCall(arrayOfCall) - } - - final override fun visitArraySetCall(arraySetCall: FirArraySetCall, data: Nothing?) { - visitArraySetCall(arraySetCall) - } - - final override fun visitAssignment(assignment: FirAssignment, data: Nothing?) { - visitAssignment(assignment) - } - - final override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: Nothing?) { - visitBackingFieldReference(backingFieldReference) - } - - final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: Nothing?) { - visitBinaryLogicExpression(binaryLogicExpression) - } - - final override fun visitBlock(block: FirBlock, data: Nothing?) { - visitBlock(block) - } - - final override fun visitBreakExpression(breakExpression: FirBreakExpression, data: Nothing?) { - visitBreakExpression(breakExpression) - } - - final override fun visitCall(call: FirCall, data: Nothing?) { - visitCall(call) - } - - final override fun visitCallLikeControlFlowExpression(callLikeControlFlowExpression: FirCallLikeControlFlowExpression, data: Nothing?) { - visitCallLikeControlFlowExpression(callLikeControlFlowExpression) - } - - final override fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: Nothing?) { - visitCallWithArgumentList(callWithArgumentList) + final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: Nothing?) { + visitTypedDeclaration(typedDeclaration) } final override fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: Nothing?) { visitCallableDeclaration(callableDeclaration) } + final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: Nothing?) { + visitNamedDeclaration(namedDeclaration) + } + + final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: Nothing?) { + visitTypeParameter(typeParameter) + } + + final override fun visitTypeParametersOwner(typeParametersOwner: FirTypeParametersOwner, data: Nothing?) { + visitTypeParametersOwner(typeParametersOwner) + } + + final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) { + visitMemberDeclaration(memberDeclaration) + } + final override fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: Nothing?) { visitCallableMemberDeclaration(callableMemberDeclaration) } - final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: Nothing?) { - visitCallableReferenceAccess(callableReferenceAccess) + final override fun > visitVariable(variable: FirVariable, data: Nothing?) { + visitVariable(variable) } - final override fun visitCatch(catch: FirCatch, data: Nothing?) { - visitCatch(catch) + final override fun visitValueParameter(valueParameter: FirValueParameter, data: Nothing?) { + visitValueParameter(valueParameter) + } + + final override fun visitProperty(property: FirProperty, data: Nothing?) { + visitProperty(property) + } + + final override fun visitField(field: FirField, data: Nothing?) { + visitField(field) } final override fun visitClass(klass: FirClass, data: Nothing?) { @@ -553,376 +660,308 @@ abstract class FirVisitorVoid : FirVisitor() { visitClassLikeDeclaration(classLikeDeclaration) } - final override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: Nothing?) { - visitClassReferenceExpression(classReferenceExpression) - } - - final override fun visitComponentCall(componentCall: FirComponentCall, data: Nothing?) { - visitComponentCall(componentCall) - } - - final override fun visitConstExpression(constExpression: FirConstExpression, data: Nothing?) { - visitConstExpression(constExpression) - } - - final override fun visitConstructor(constructor: FirConstructor, data: Nothing?) { - visitConstructor(constructor) - } - - final override fun visitContinueExpression(continueExpression: FirContinueExpression, data: Nothing?) { - visitContinueExpression(continueExpression) - } - - final override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: Nothing?) { - visitControlFlowGraphReference(controlFlowGraphReference) - } - - final override fun visitDeclaration(declaration: FirDeclaration, data: Nothing?) { - visitDeclaration(declaration) - } - - final override fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: Nothing?) { - visitDeclarationStatus(declarationStatus) - } - - final override fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: Nothing?) { - visitDeclarationWithBody(declarationWithBody) - } - - final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) { - visitDelegateFieldReference(delegateFieldReference) - } - - final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) { - visitDelegatedConstructorCall(delegatedConstructorCall) - } - - final override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: Nothing?) { - visitDelegatedTypeRef(delegatedTypeRef) - } - - final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: Nothing?) { - visitDoWhileLoop(doWhileLoop) - } - - final override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: Nothing?) { - visitDynamicTypeRef(dynamicTypeRef) - } - - final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) { - visitEnumEntry(enumEntry) - } - - final override fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: Nothing?) { - visitErrorDeclaration(errorDeclaration) - } - - final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: Nothing?) { - visitErrorExpression(errorExpression) - } - - final override fun visitErrorStatement(errorStatement: FirErrorStatement, data: Nothing?) { - visitErrorStatement(errorStatement) - } - - final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: Nothing?) { - visitErrorTypeRef(errorTypeRef) - } - - final override fun visitExpression(expression: FirExpression, data: Nothing?) { - visitExpression(expression) - } - - final override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: Nothing?) { - visitExpressionWithSmartcast(expressionWithSmartcast) - } - - final override fun visitField(field: FirField, data: Nothing?) { - visitField(field) - } - - final override fun visitFile(file: FirFile, data: Nothing?) { - visitFile(file) - } - - final override fun > visitFunction(function: FirFunction, data: Nothing?) { - visitFunction(function) - } - - final override fun visitFunctionCall(functionCall: FirFunctionCall, data: Nothing?) { - visitFunctionCall(functionCall) - } - - final override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?) { - visitFunctionTypeRef(functionTypeRef) - } - - final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Nothing?) { - visitGetClassCall(getClassCall) - } - - final override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Nothing?) { - visitImplicitTypeRef(implicitTypeRef) - } - - final override fun visitImport(import: FirImport, data: Nothing?) { - visitImport(import) - } - - final override fun visitJump(jump: FirJump, data: Nothing?) { - visitJump(jump) - } - - final override fun visitLabel(label: FirLabel, data: Nothing?) { - visitLabel(label) - } - - final override fun visitLabeledElement(labeledElement: FirLabeledElement, data: Nothing?) { - visitLabeledElement(labeledElement) - } - - final override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: Nothing?) { - visitLambdaArgumentExpression(lambdaArgumentExpression) - } - - final override fun visitLoop(loop: FirLoop, data: Nothing?) { - visitLoop(loop) - } - - final override fun visitLoopJump(loopJump: FirLoopJump, data: Nothing?) { - visitLoopJump(loopJump) - } - - final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) { - visitMemberDeclaration(memberDeclaration) - } - - final override fun > visitMemberFunction(memberFunction: FirMemberFunction, data: Nothing?) { - visitMemberFunction(memberFunction) - } - - final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: Nothing?) { - visitModifiableClass(modifiableClass) - } - - final override fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: Nothing?) { - visitModifiableFunction(modifiableFunction) - } - - final override fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: Nothing?) { - visitModifiableQualifiedAccess(modifiableQualifiedAccess) - } - - final override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: Nothing?) { - visitNamedArgumentExpression(namedArgumentExpression) - } - - final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: Nothing?) { - visitNamedDeclaration(namedDeclaration) - } - - final override fun visitNamedFunction(namedFunction: FirNamedFunction, data: Nothing?) { - visitNamedFunction(namedFunction) - } - - final override fun visitNamedReference(namedReference: FirNamedReference, data: Nothing?) { - visitNamedReference(namedReference) - } - - final override fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: Nothing?) { - visitOperationBasedCall(operationBasedCall) - } - - final override fun visitOperatorCall(operatorCall: FirOperatorCall, data: Nothing?) { - visitOperatorCall(operatorCall) - } - - final override fun visitPackageFragment(packageFragment: FirPackageFragment, data: Nothing?) { - visitPackageFragment(packageFragment) - } - - final override fun visitProperty(property: FirProperty, data: Nothing?) { - visitProperty(property) - } - - final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: Nothing?) { - visitPropertyAccessor(propertyAccessor) - } - - final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: Nothing?) { - visitQualifiedAccess(qualifiedAccess) - } - - final override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: Nothing?) { - visitQualifiedAccessExpression(qualifiedAccessExpression) - } - - final override fun visitReference(reference: FirReference, data: Nothing?) { - visitReference(reference) - } - final override fun visitRegularClass(regularClass: FirRegularClass, data: Nothing?) { visitRegularClass(regularClass) } - final override fun visitResolvable(resolvable: FirResolvable, data: Nothing?) { - visitResolvable(resolvable) - } - - final override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: Nothing?) { - visitResolvedCallableReference(resolvedCallableReference) - } - - final override fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: Nothing?) { - visitResolvedDeclarationStatus(resolvedDeclarationStatus) - } - - final override fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: Nothing?) { - visitResolvedFunctionTypeRef(resolvedFunctionTypeRef) - } - - final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) { - visitResolvedImport(resolvedImport) - } - - final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: Nothing?) { - visitResolvedQualifier(resolvedQualifier) - } - - final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) { - visitResolvedTypeRef(resolvedTypeRef) - } - - final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: Nothing?) { - visitReturnExpression(returnExpression) - } - - final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: Nothing?) { - visitSpreadArgumentExpression(spreadArgumentExpression) - } - - final override fun visitStarProjection(starProjection: FirStarProjection, data: Nothing?) { - visitStarProjection(starProjection) - } - - final override fun visitStatement(statement: FirStatement, data: Nothing?) { - visitStatement(statement) - } - - final override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: Nothing?) { - visitStringConcatenationCall(stringConcatenationCall) - } - - final override fun visitSuperReference(superReference: FirSuperReference, data: Nothing?) { - visitSuperReference(superReference) - } - - final override fun visitTargetElement(targetElement: FirTargetElement, data: Nothing?) { - visitTargetElement(targetElement) - } - - final override fun visitThisReference(thisReference: FirThisReference, data: Nothing?) { - visitThisReference(thisReference) - } - - final override fun visitThrowExpression(throwExpression: FirThrowExpression, data: Nothing?) { - visitThrowExpression(throwExpression) - } - - final override fun visitTryExpression(tryExpression: FirTryExpression, data: Nothing?) { - visitTryExpression(tryExpression) - } - final override fun visitTypeAlias(typeAlias: FirTypeAlias, data: Nothing?) { visitTypeAlias(typeAlias) } - final override fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: Nothing?) { - visitTypeOperatorCall(typeOperatorCall) + final override fun visitEnumEntry(enumEntry: FirEnumEntry, data: Nothing?) { + visitEnumEntry(enumEntry) } - final override fun visitTypeParameter(typeParameter: FirTypeParameter, data: Nothing?) { - visitTypeParameter(typeParameter) + final override fun > visitFunction(function: FirFunction, data: Nothing?) { + visitFunction(function) } - final override fun visitTypeProjection(typeProjection: FirTypeProjection, data: Nothing?) { - visitTypeProjection(typeProjection) + final override fun > visitMemberFunction(memberFunction: FirMemberFunction, data: Nothing?) { + visitMemberFunction(memberFunction) } - final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: Nothing?) { - visitTypeProjectionWithVariance(typeProjectionWithVariance) + final override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: Nothing?) { + visitSimpleFunction(simpleFunction) } - final override fun visitTypeRef(typeRef: FirTypeRef, data: Nothing?) { - visitTypeRef(typeRef) + final override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: Nothing?) { + visitPropertyAccessor(propertyAccessor) } - final override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: Nothing?) { - visitTypeRefWithNullability(typeRefWithNullability) + final override fun visitConstructor(constructor: FirConstructor, data: Nothing?) { + visitConstructor(constructor) } - final override fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: Nothing?) { - visitTypedDeclaration(typedDeclaration) + final override fun visitFile(file: FirFile, data: Nothing?) { + visitFile(file) } - final override fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: Nothing?) { - visitUncheckedNotNullCast(uncheckedNotNullCast) + final override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Nothing?) { + visitAnonymousFunction(anonymousFunction) } - final override fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: Nothing?) { - visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList) + final override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: Nothing?) { + visitAnonymousObject(anonymousObject) } - final override fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: Nothing?) { - visitUnknownTypeExpression(unknownTypeExpression) + final override fun visitLoop(loop: FirLoop, data: Nothing?) { + visitLoop(loop) } - final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: Nothing?) { - visitUserTypeRef(userTypeRef) - } - - final override fun visitValueParameter(valueParameter: FirValueParameter, data: Nothing?) { - visitValueParameter(valueParameter) - } - - final override fun > visitVariable(variable: FirVariable, data: Nothing?) { - visitVariable(variable) - } - - final override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: Nothing?) { - visitVariableAssignment(variableAssignment) - } - - final override fun visitWhenBranch(whenBranch: FirWhenBranch, data: Nothing?) { - visitWhenBranch(whenBranch) - } - - final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Nothing?) { - visitWhenExpression(whenExpression) - } - - final override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: Nothing?) { - visitWhenSubjectExpression(whenSubjectExpression) + final override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: Nothing?) { + visitDoWhileLoop(doWhileLoop) } final override fun visitWhileLoop(whileLoop: FirWhileLoop, data: Nothing?) { visitWhileLoop(whileLoop) } - final override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: Nothing?) { - visitWrappedArgumentExpression(wrappedArgumentExpression) + final override fun visitBlock(block: FirBlock, data: Nothing?) { + visitBlock(block) } - final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: Nothing?) { - visitWrappedDelegateExpression(wrappedDelegateExpression) + final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: Nothing?) { + visitBinaryLogicExpression(binaryLogicExpression) + } + + final override fun visitJump(jump: FirJump, data: Nothing?) { + visitJump(jump) + } + + final override fun visitLoopJump(loopJump: FirLoopJump, data: Nothing?) { + visitLoopJump(loopJump) + } + + final override fun visitBreakExpression(breakExpression: FirBreakExpression, data: Nothing?) { + visitBreakExpression(breakExpression) + } + + final override fun visitContinueExpression(continueExpression: FirContinueExpression, data: Nothing?) { + visitContinueExpression(continueExpression) + } + + final override fun visitCatch(catch: FirCatch, data: Nothing?) { + visitCatch(catch) + } + + final override fun visitTryExpression(tryExpression: FirTryExpression, data: Nothing?) { + visitTryExpression(tryExpression) + } + + final override fun visitConstExpression(constExpression: FirConstExpression, data: Nothing?) { + visitConstExpression(constExpression) + } + + final override fun visitTypeProjection(typeProjection: FirTypeProjection, data: Nothing?) { + visitTypeProjection(typeProjection) + } + + final override fun visitStarProjection(starProjection: FirStarProjection, data: Nothing?) { + visitStarProjection(starProjection) + } + + final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: Nothing?) { + visitTypeProjectionWithVariance(typeProjectionWithVariance) + } + + final override fun visitCall(call: FirCall, data: Nothing?) { + visitCall(call) + } + + final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) { + visitAnnotationCall(annotationCall) + } + + final override fun visitOperatorCall(operatorCall: FirOperatorCall, data: Nothing?) { + visitOperatorCall(operatorCall) + } + + final override fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: Nothing?) { + visitTypeOperatorCall(typeOperatorCall) + } + + final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Nothing?) { + visitWhenExpression(whenExpression) + } + + final override fun visitWhenBranch(whenBranch: FirWhenBranch, data: Nothing?) { + visitWhenBranch(whenBranch) + } + + final override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: Nothing?) { + visitDelegatedConstructorCall(delegatedConstructorCall) + } + + final override fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: Nothing?) { + visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee) + } + + final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: Nothing?) { + visitQualifiedAccess(qualifiedAccess) + } + + final override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: Nothing?) { + visitArrayOfCall(arrayOfCall) + } + + final override fun visitArraySetCall(arraySetCall: FirArraySetCall, data: Nothing?) { + visitArraySetCall(arraySetCall) + } + + final override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: Nothing?) { + visitClassReferenceExpression(classReferenceExpression) + } + + final override fun visitErrorExpression(errorExpression: FirErrorExpression, data: Nothing?) { + visitErrorExpression(errorExpression) + } + + final override fun visitErrorFunction(errorFunction: FirErrorFunction, data: Nothing?) { + visitErrorFunction(errorFunction) + } + + final override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: Nothing?) { + visitQualifiedAccessExpression(qualifiedAccessExpression) + } + + final override fun visitFunctionCall(functionCall: FirFunctionCall, data: Nothing?) { + visitFunctionCall(functionCall) + } + + final override fun visitComponentCall(componentCall: FirComponentCall, data: Nothing?) { + visitComponentCall(componentCall) + } + + final override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: Nothing?) { + visitCallableReferenceAccess(callableReferenceAccess) + } + + final override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: Nothing?) { + visitThisReceiverExpression(thisReceiverExpression) + } + + final override fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: Nothing?) { + visitExpressionWithSmartcast(expressionWithSmartcast) + } + + final override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Nothing?) { + visitGetClassCall(getClassCall) } final override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: Nothing?) { visitWrappedExpression(wrappedExpression) } - final override fun visitElement(element: FirElement, data: Nothing?) { - visitElement(element) + final override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: Nothing?) { + visitWrappedArgumentExpression(wrappedArgumentExpression) + } + + final override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: Nothing?) { + visitLambdaArgumentExpression(lambdaArgumentExpression) + } + + final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: Nothing?) { + visitSpreadArgumentExpression(spreadArgumentExpression) + } + + final override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: Nothing?) { + visitNamedArgumentExpression(namedArgumentExpression) + } + + final override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: Nothing?) { + visitResolvedQualifier(resolvedQualifier) + } + + final override fun visitReturnExpression(returnExpression: FirReturnExpression, data: Nothing?) { + visitReturnExpression(returnExpression) + } + + final override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: Nothing?) { + visitStringConcatenationCall(stringConcatenationCall) + } + + final override fun visitThrowExpression(throwExpression: FirThrowExpression, data: Nothing?) { + visitThrowExpression(throwExpression) + } + + final override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: Nothing?) { + visitVariableAssignment(variableAssignment) + } + + final override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: Nothing?) { + visitWhenSubjectExpression(whenSubjectExpression) + } + + final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: Nothing?) { + visitWrappedDelegateExpression(wrappedDelegateExpression) + } + + final override fun visitNamedReference(namedReference: FirNamedReference, data: Nothing?) { + visitNamedReference(namedReference) + } + + final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: Nothing?) { + visitErrorNamedReference(errorNamedReference) + } + + final override fun visitSuperReference(superReference: FirSuperReference, data: Nothing?) { + visitSuperReference(superReference) + } + + final override fun visitThisReference(thisReference: FirThisReference, data: Nothing?) { + visitThisReference(thisReference) + } + + final override fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: Nothing?) { + visitControlFlowGraphReference(controlFlowGraphReference) + } + + final override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: Nothing?) { + visitResolvedCallableReference(resolvedCallableReference) + } + + final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) { + visitDelegateFieldReference(delegateFieldReference) + } + + final override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: Nothing?) { + visitBackingFieldReference(backingFieldReference) + } + + final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) { + visitResolvedTypeRef(resolvedTypeRef) + } + + final override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: Nothing?) { + visitErrorTypeRef(errorTypeRef) + } + + final override fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: Nothing?) { + visitDelegatedTypeRef(delegatedTypeRef) + } + + final override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: Nothing?) { + visitTypeRefWithNullability(typeRefWithNullability) + } + + final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: Nothing?) { + visitUserTypeRef(userTypeRef) + } + + final override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: Nothing?) { + visitDynamicTypeRef(dynamicTypeRef) + } + + final override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?) { + visitFunctionTypeRef(functionTypeRef) + } + + final override fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: Nothing?) { + visitResolvedFunctionTypeRef(resolvedFunctionTypeRef) + } + + final override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: Nothing?) { + visitImplicitTypeRef(implicitTypeRef) } } diff --git a/compiler/fir/tree/visitors-generator/src/VisitorsGenerator.kt b/compiler/fir/tree/visitors-generator/src/VisitorsGenerator.kt index 8dbb0137e15..5061e1aa70c 100644 --- a/compiler/fir/tree/visitors-generator/src/VisitorsGenerator.kt +++ b/compiler/fir/tree/visitors-generator/src/VisitorsGenerator.kt @@ -29,38 +29,38 @@ const val WARNING_GENERATED_FILE = fun main(args: Array) { - val rootPath = File(args[0]) - val output = File(args[1]) - - val packageDirectory = output.resolve(VISITOR_PACKAGE.replace('.', '/')) - packageDirectory.mkdirs() - - withPsiSetup { - val psiManager = PsiManager.getInstance(project) - val vfm = VirtualFileManager.getInstance() - - - val dataCollector = DataCollector() - - rootPath.walkTopDown() - .filter { - it.extension == "kt" - }.map { - (vfm.getFileSystem(StandardFileSystems.FILE_PROTOCOL) as CoreLocalFileSystem).findFileByIoFile(it) - }.flatMap { - SingleRootFileViewProvider(psiManager, it!!).allFiles.asSequence() - } - .filterIsInstance() - .forEach(dataCollector::readFile) - - - val data = dataCollector.computeResult() - - - SimpleVisitorGenerator(data).runGenerator(packageDirectory.resolve("${SIMPLE_VISITOR_NAME}Generated.kt")) - UnitVisitorGenerator(data).runGenerator(packageDirectory.resolve("${UNIT_VISITOR_NAME}Generated.kt")) - ParametricTransformerGenerator(data).runGenerator(packageDirectory.resolve("${PARAMETRIC_TRANSFORMER_NAME}Generated.kt")) - } +// val rootPath = File(args[0]) +// val output = File(args[1]) +// +// val packageDirectory = output.resolve(VISITOR_PACKAGE.replace('.', '/')) +// packageDirectory.mkdirs() +// +// withPsiSetup { +// val psiManager = PsiManager.getInstance(project) +// val vfm = VirtualFileManager.getInstance() +// +// +// val dataCollector = DataCollector() +// +// rootPath.walkTopDown() +// .filter { +// it.extension == "kt" +// }.map { +// (vfm.getFileSystem(StandardFileSystems.FILE_PROTOCOL) as CoreLocalFileSystem).findFileByIoFile(it) +// }.flatMap { +// SingleRootFileViewProvider(psiManager, it!!).allFiles.asSequence() +// } +// .filterIsInstance() +// .forEach(dataCollector::readFile) +// +// +// val data = dataCollector.computeResult() +// +// +// SimpleVisitorGenerator(data).runGenerator(packageDirectory.resolve("${SIMPLE_VISITOR_NAME}Generated.kt")) +// UnitVisitorGenerator(data).runGenerator(packageDirectory.resolve("${UNIT_VISITOR_NAME}Generated.kt")) +// ParametricTransformerGenerator(data).runGenerator(packageDirectory.resolve("${PARAMETRIC_TRANSFORMER_NAME}Generated.kt")) +// } } fun AbstractVisitorGenerator.runGenerator(file: File) { diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt index eea501a3a13..bce2f00b83d 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt @@ -70,7 +70,7 @@ abstract class FirDefaultTransformer : FirTransformer() { return transformJump(breakExpression, data) } - override fun transformEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult { + override fun transformEnumEntry(enumEntry: FirEnumEntry, data: D): CompositeTransformResult { return transformRegularClass(enumEntry, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt deleted file mode 100644 index 737c8da0331..00000000000 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ /dev/null @@ -1,472 +0,0 @@ -/* - * Copyright 2010-2019 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.visitors - -import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.* -import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.impl.* -import org.jetbrains.kotlin.fir.references.* -import org.jetbrains.kotlin.fir.types.* - - -/** This file generated by :compiler:fir:tree:generateVisitors. DO NOT MODIFY MANUALLY! */ -abstract class FirVisitor { - abstract fun visitElement(element: FirElement, data: D): R - - open fun visitCatch(catch: FirCatch, data: D): R { - return visitElement(catch, data) - } - - open fun visitDeclaration(declaration: FirDeclaration, data: D): R { - return visitElement(declaration, data) - } - - open fun > visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): R { - return visitElement(callableDeclaration, data) - } - - open fun > visitCallableMemberDeclaration(callableMemberDeclaration: FirCallableMemberDeclaration, data: D): R { - return visitElement(callableMemberDeclaration, data) - } - - open fun visitDeclarationWithBody(declarationWithBody: FirDeclarationWithBody, data: D): R { - return visitElement(declarationWithBody, data) - } - - open fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: D): R { - return visitElement(anonymousInitializer, data) - } - - open fun > visitFunction(function: FirFunction, data: D): R { - return visitElement(function, data) - } - - open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): R { - return visitElement(anonymousFunction, data) - } - - open fun > visitMemberFunction(memberFunction: FirMemberFunction, data: D): R { - return visitElement(memberFunction, data) - } - - open fun visitConstructor(constructor: FirConstructor, data: D): R { - return visitElement(constructor, data) - } - - open fun visitNamedFunction(namedFunction: FirNamedFunction, data: D): R { - return visitElement(namedFunction, data) - } - - open fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R { - return visitElement(modifiableFunction, data) - } - - open fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: D): R { - return visitElement(propertyAccessor, data) - } - - open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): R { - return visitElement(errorDeclaration, data) - } - - open fun visitField(field: FirField, data: D): R { - return visitElement(field, data) - } - - open fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): R { - return visitElement(namedDeclaration, data) - } - - open fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): R { - return visitElement(memberDeclaration, data) - } - - open fun > visitClassLikeDeclaration(classLikeDeclaration: FirClassLikeDeclaration, data: D): R { - return visitElement(classLikeDeclaration, data) - } - - open fun visitRegularClass(regularClass: FirRegularClass, data: D): R { - return visitElement(regularClass, data) - } - - open fun visitEnumEntry(enumEntry: FirEnumEntry, data: D): R { - return visitElement(enumEntry, data) - } - - open fun visitTypeAlias(typeAlias: FirTypeAlias, data: D): R { - return visitElement(typeAlias, data) - } - - open fun visitTypeParameter(typeParameter: FirTypeParameter, data: D): R { - return visitElement(typeParameter, data) - } - - open fun visitProperty(property: FirProperty, data: D): R { - return visitElement(property, data) - } - - open fun visitTypedDeclaration(typedDeclaration: FirTypedDeclaration, data: D): R { - return visitElement(typedDeclaration, data) - } - - open fun visitValueParameter(valueParameter: FirValueParameter, data: D): R { - return visitElement(valueParameter, data) - } - - open fun > visitVariable(variable: FirVariable, data: D): R { - return visitElement(variable, data) - } - - open fun visitDeclarationStatus(declarationStatus: FirDeclarationStatus, data: D): R { - return visitElement(declarationStatus, data) - } - - open fun visitResolvedDeclarationStatus(resolvedDeclarationStatus: FirResolvedDeclarationStatus, data: D): R { - return visitElement(resolvedDeclarationStatus, data) - } - - open fun visitImport(import: FirImport, data: D): R { - return visitElement(import, data) - } - - open fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): R { - return visitElement(resolvedImport, data) - } - - open fun visitLabel(label: FirLabel, data: D): R { - return visitElement(label, data) - } - - open fun visitPackageFragment(packageFragment: FirPackageFragment, data: D): R { - return visitElement(packageFragment, data) - } - - open fun visitFile(file: FirFile, data: D): R { - return visitElement(file, data) - } - - open fun visitReference(reference: FirReference, data: D): R { - return visitElement(reference, data) - } - - open fun visitControlFlowGraphReference(controlFlowGraphReference: FirControlFlowGraphReference, data: D): R { - return visitElement(controlFlowGraphReference, data) - } - - open fun visitNamedReference(namedReference: FirNamedReference, data: D): R { - return visitElement(namedReference, data) - } - - open fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference, data: D): R { - return visitElement(resolvedCallableReference, data) - } - - open fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): R { - return visitElement(backingFieldReference, data) - } - - open fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): R { - return visitElement(delegateFieldReference, data) - } - - open fun visitSuperReference(superReference: FirSuperReference, data: D): R { - return visitElement(superReference, data) - } - - open fun visitThisReference(thisReference: FirThisReference, data: D): R { - return visitElement(thisReference, data) - } - - open fun visitStatement(statement: FirStatement, data: D): R { - return visitElement(statement, data) - } - - open fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: D): R { - return visitElement(annotatedStatement, data) - } - - open fun visitExpression(expression: FirExpression, data: D): R { - return visitElement(expression, data) - } - - open fun visitCall(call: FirCall, data: D): R { - return visitElement(call, data) - } - - open fun visitArraySetCall(arraySetCall: FirArraySetCall, data: D): R { - return visitElement(arraySetCall, data) - } - - open fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: D): R { - return visitElement(callWithArgumentList, data) - } - - open fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): R { - return visitElement(annotationCall, data) - } - - open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R { - return visitElement(delegatedConstructorCall, data) - } - - open fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): R { - return visitElement(operatorCall, data) - } - - open fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: D): R { - return visitElement(operationBasedCall, data) - } - - open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): R { - return visitElement(typeOperatorCall, data) - } - - open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): R { - return visitElement(stringConcatenationCall, data) - } - - open fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: D): R { - return visitElement(unknownTypeCallWithArgumentList, data) - } - - open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): R { - return visitElement(arrayOfCall, data) - } - - open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R { - return visitElement(functionCall, data) - } - - open fun visitComponentCall(componentCall: FirComponentCall, data: D): R { - return visitElement(componentCall, data) - } - - open fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): R { - return visitElement(getClassCall, data) - } - - open fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): R { - return visitElement(uncheckedNotNullCast, data) - } - - open fun visitJump(jump: FirJump, data: D): R { - return visitElement(jump, data) - } - - open fun visitLoopJump(loopJump: FirLoopJump, data: D): R { - return visitElement(loopJump, data) - } - - open fun visitBreakExpression(breakExpression: FirBreakExpression, data: D): R { - return visitElement(breakExpression, data) - } - - open fun visitContinueExpression(continueExpression: FirContinueExpression, data: D): R { - return visitElement(continueExpression, data) - } - - open fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): R { - return visitElement(returnExpression, data) - } - - open fun visitThrowExpression(throwExpression: FirThrowExpression, data: D): R { - return visitElement(throwExpression, data) - } - - open fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: D): R { - return visitElement(unknownTypeExpression, data) - } - - open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): R { - return visitElement(binaryLogicExpression, data) - } - - open fun visitBlock(block: FirBlock, data: D): R { - return visitElement(block, data) - } - - open fun visitCallLikeControlFlowExpression(callLikeControlFlowExpression: FirCallLikeControlFlowExpression, data: D): R { - return visitElement(callLikeControlFlowExpression, data) - } - - open fun visitTryExpression(tryExpression: FirTryExpression, data: D): R { - return visitElement(tryExpression, data) - } - - open fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): R { - return visitElement(whenExpression, data) - } - - open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): R { - return visitElement(classReferenceExpression, data) - } - - open fun visitConstExpression(constExpression: FirConstExpression, data: D): R { - return visitElement(constExpression, data) - } - - open fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): R { - return visitElement(errorExpression, data) - } - - open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R { - return visitElement(qualifiedAccessExpression, data) - } - - open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R { - return visitElement(callableReferenceAccess, data) - } - - open fun visitExpressionWithSmartcast(expressionWithSmartcast: FirExpressionWithSmartcast, data: D): R { - return visitElement(expressionWithSmartcast, data) - } - - open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R { - return visitElement(resolvedQualifier, data) - } - - open fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): R { - return visitElement(whenSubjectExpression, data) - } - - open fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): R { - return visitElement(wrappedExpression, data) - } - - open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): R { - return visitElement(wrappedArgumentExpression, data) - } - - open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): R { - return visitElement(lambdaArgumentExpression, data) - } - - open fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: D): R { - return visitElement(namedArgumentExpression, data) - } - - open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): R { - return visitElement(spreadArgumentExpression, data) - } - - open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): R { - return visitElement(wrappedDelegateExpression, data) - } - - open fun visitClass(klass: FirClass, data: D): R { - return visitElement(klass, data) - } - - open fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): R { - return visitElement(anonymousObject, data) - } - - open fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): R { - return visitElement(modifiableClass, data) - } - - open fun visitErrorStatement(errorStatement: FirErrorStatement, data: D): R { - return visitElement(errorStatement, data) - } - - open fun visitLoop(loop: FirLoop, data: D): R { - return visitElement(loop, data) - } - - open fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: D): R { - return visitElement(doWhileLoop, data) - } - - open fun visitWhileLoop(whileLoop: FirWhileLoop, data: D): R { - return visitElement(whileLoop, data) - } - - open fun visitResolvable(resolvable: FirResolvable, data: D): R { - return visitElement(resolvable, data) - } - - open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): R { - return visitElement(qualifiedAccess, data) - } - - open fun visitAssignment(assignment: FirAssignment, data: D): R { - return visitElement(assignment, data) - } - - open fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: D): R { - return visitElement(variableAssignment, data) - } - - open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): R { - return visitElement(modifiableQualifiedAccess, data) - } - - open fun visitTargetElement(targetElement: FirTargetElement, data: D): R { - return visitElement(targetElement, data) - } - - open fun visitLabeledElement(labeledElement: FirLabeledElement, data: D): R { - return visitElement(labeledElement, data) - } - - open fun visitTypeProjection(typeProjection: FirTypeProjection, data: D): R { - return visitElement(typeProjection, data) - } - - open fun visitStarProjection(starProjection: FirStarProjection, data: D): R { - return visitElement(starProjection, data) - } - - open fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): R { - return visitElement(typeProjectionWithVariance, data) - } - - open fun visitTypeRef(typeRef: FirTypeRef, data: D): R { - return visitElement(typeRef, data) - } - - open fun visitDelegatedTypeRef(delegatedTypeRef: FirDelegatedTypeRef, data: D): R { - return visitElement(delegatedTypeRef, data) - } - - open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): R { - return visitElement(implicitTypeRef, data) - } - - open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R { - return visitElement(resolvedTypeRef, data) - } - - open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R { - return visitElement(errorTypeRef, data) - } - - open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): R { - return visitElement(resolvedFunctionTypeRef, data) - } - - open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): R { - return visitElement(typeRefWithNullability, data) - } - - open fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: D): R { - return visitElement(dynamicTypeRef, data) - } - - open fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: D): R { - return visitElement(functionTypeRef, data) - } - - open fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): R { - return visitElement(userTypeRef, data) - } - - open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R { - return visitElement(whenBranch, data) - } - -} 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 39f93f00672..23ee5d4545c 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 @@ -9,13 +9,11 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirLabel -import org.jetbrains.kotlin.fir.FirNamedReference -import org.jetbrains.kotlin.fir.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.references.FirNamedReference +import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractMemberDeclaration import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.transformers.firUnsafe @@ -407,7 +405,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { visitArguments(functionCall.arguments, data) } else { data.append("fun ") - val firFunction = callee.resolvedSymbol.fir as? FirAbstractMemberDeclaration + val firFunction = callee.resolvedSymbol.fir as? FirTypeParametersOwner firFunction?.let { renderListInTriangles(it.typeParameters, data, true) } data.append(renderSymbol(callee.resolvedSymbol)) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt index 7e0f42a2782..e67102f428e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.fir import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.transformers.FirDesignatedBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.runResolve