From d5cfea330b9b87506155ac094dc78098d2aa1849 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Fri, 1 Mar 2024 19:01:39 +0100 Subject: [PATCH] [LL FIR] support parameters resolution Script parameters now can be resolved independently of the script. But, as parameters are part of the script, their resolve will be called before the script. ^KT-66276 Fixed --- .../api/fir/lazy/resolve/LLFirPhaseUpdater.kt | 1 - .../fir/transformers/LLFirBodyLazyResolver.kt | 23 +--------- .../fir/transformers/LLFirTargetResolver.kt | 3 ++ .../fir/transformers/LLFirTypeLazyResolver.kt | 4 +- .../level/api/fir/util/FirElementFinder.kt | 5 +++ .../level/api/fir/util/declarationUtils.kt | 7 ++++ .../scripts/insideClassBody.txt | 2 +- .../scripts/insideClassMember.txt | 2 +- .../scripts/insideTopLevelFunction.txt | 2 +- .../scripts/lastStatement.txt | 2 +- .../scripts/scriptInsideLastStatement.txt | 2 +- .../contextCollector/scripts/statement.txt | 2 +- .../contextCollector/scripts/topLevel.txt | 2 +- ...notationApplicationArgumentOnStatement.txt | 4 +- .../annotationApplicationArgumentScript.txt | 2 +- ...otationApplicationCallExpressionScript.txt | 2 +- .../annotationOnReturnTypeScript.txt | 2 +- .../annotations/destructuringAnnotation.txt | 4 +- .../destructuringEntryAnnotation.txt | 2 +- .../annotations/retentionValueScript.txt | 2 +- .../annotations/statementAnnotation.txt | 4 +- .../annotations/superCallAnnotationScript.txt | 4 +- ...OnConstructorParameterExpressionScript.txt | 4 +- ...AnnotationOnConstructorParameterScript.txt | 4 +- ...nAnnotationOnConstructorPropertyScript.txt | 4 +- ...ConstructorPropertyWithArgumentsScript.txt | 4 +- ...eOnAnnotationOnFunctionParameterScript.txt | 4 +- ...OnFunctionParameterWithArgumentsScript.txt | 4 +- ...peOnAnnotationOnReceiverFunctionScript.txt | 2 +- ...eOnAnnotationOnReceiverParameterScript.txt | 2 +- ...AnnotationOnReceiverPropertyCallScript.txt | 2 +- ...peOnAnnotationOnReceiverPropertyScript.txt | 2 +- ...typeOnAnnotationOnReturnFunctionScript.txt | 2 +- ...typeOnAnnotationOnReturnPropertyScript.txt | 2 +- .../annotations/useSite/delegateScript.txt | 2 +- .../annotations/useSite/fieldScript.txt | 4 +- .../annotations/useSite/getterScript.txt | 4 +- .../annotations/useSite/paramScript.txt | 4 +- .../annotations/useSite/propertyScript.txt | 4 +- .../annotations/useSite/setParamScript.txt | 4 +- .../annotations/useSite/setterScript.txt | 4 +- .../getOrBuildFir/calls/argsFromFunction.txt | 2 +- .../getOrBuildFir/calls/argsFromInit.txt | 4 +- .../calls/argsFromMemberFunction.txt | 2 +- .../calls/argsFromMemberProperty.txt | 2 +- .../getOrBuildFir/calls/argsFromProperty.txt | 2 +- .../getOrBuildFir/calls/argsFromStatement.txt | 4 +- .../calls/callArgumentScript.txt | 2 +- ...eSuperCallAndExplicitConstructorScript.txt | 4 +- .../calls/callOnePropertyFromAnother.txt | 2 +- .../calls/calllTypeArgumentsScript.txt | 2 +- .../calls/compoundAssignOnVarScript.txt | 4 +- ...dAssignWithArrayAccessConventionScript.txt | 2 +- ...oundAssignWithArrayGetConventionScript.txt | 2 +- .../constructorDelegationSuperCallScript.txt | 2 +- .../calls/functionCallArgumentListScript.txt | 2 +- .../calls/invokeCallArgumentListScript.txt | 2 +- .../qualifiedCallInsideSuperCallScript.txt | 2 +- .../getOrBuildFir/calls/setOperatorScript.txt | 4 +- .../getOrBuildFir/calls/superTypeScript.txt | 4 +- .../calls/syntheticResultDeclaration.txt | 4 +- .../syntheticResultDeclarationInitializer.txt | 4 +- .../constructorParameterScript.txt | 4 +- .../constructorPropertyScript.txt | 4 +- .../destructionWithNoRValueScript.txt | 4 +- .../declarations/destructuringEntryScript.txt | 4 +- .../declarations/destructuringScript.txt | 2 +- .../objectLiteralExpressionScript.txt | 2 +- .../declarations/objectLiteralScript.txt | 2 +- .../declarations/propertyDelegateScript.txt | 2 +- .../declarations/whereClause1Script.txt | 2 +- .../declarations/whereClause2Script.txt | 2 +- .../arrayAccessExpressionScript.txt | 2 +- .../arrayIndexExpressionWithIncScript.txt | 2 +- .../getOrBuildFir/expressions/assignment.txt | 4 +- .../binaryExpressionOperatorScript.txt | 2 +- .../expressions/binaryExpressionScript.txt | 2 +- .../expressions/blockExpressionScript.txt | 2 +- .../expressions/boolLiteralScript.txt | 2 +- .../expressions/callInsideFunction.txt | 4 +- .../expressions/callInsideStatement.txt | 4 +- .../expressions/firstStatement.txt | 4 +- .../expressions/firstStatementCall.txt | 4 +- .../expressions/forExpressionRangeScript.txt | 2 +- .../expressions/forExpressionScript.txt | 2 +- .../forExpressionVariableScript.txt | 2 +- .../expressions/ifExpressionScript.txt | 2 +- .../expressions/incExpressionScript.txt | 2 +- .../insidePlusAssignTargetScript.txt | 2 +- .../expressions/intLiteralScript.txt | 2 +- .../expressions/isExpressionScript.txt | 2 +- .../objectLiteralExpressionScript.txt | 2 +- .../parenthesizedExpressionScript.txt | 2 +- .../expressions/secondStatement.txt | 4 +- .../expressions/secondStatementCall.txt | 4 +- .../expressions/stringLiteralScript.txt | 2 +- .../stringTemplateExpressionEntryScript.txt | 2 +- .../expressions/throwExpressionScript.txt | 2 +- .../expressions/tryExpressionScript.txt | 2 +- .../expressions/whenExpressionScript.txt | 2 +- .../expressions/whileExpressionScript.txt | 2 +- .../expressions/wholeStringTemplateScript.txt | 2 +- ...OfQualifiedCallWithNestedClassesScript.txt | 2 +- ...iedPartOfQualifiedCallUnresolvedScript.txt | 2 +- .../types/functionalTypeScript.txt | 2 +- .../types/nestedClassTypeScript.txt | 4 +- .../types/nullableTypeScript.txt | 2 +- .../types/receiverTypeScript.txt | 2 +- .../getOrBuildFir/types/wholeTypeScript.txt | 2 +- .../wholeDeclaration/assignmentStatement.txt | 4 +- .../getOrBuildFir/wholeDeclaration/class.txt | 4 +- .../classTypeParemeterScript.txt | 2 +- .../wholeDeclaration/enumEntryScript.txt | 2 +- .../wholeDeclaration/function.txt | 4 +- .../wholeDeclaration/getterScript.txt | 2 +- .../wholeDeclaration/localClassScript.txt | 2 +- .../wholeDeclaration/localFunctionScript.txt | 2 +- .../wholeDeclaration/localPropertyScript.txt | 2 +- .../wholeDeclaration/memberFunctionScript.txt | 2 +- .../wholeDeclaration/memberPropertyScript.txt | 2 +- .../memberTypeAliasScript.txt | 2 +- .../wholeDeclaration/nestedClassScript.txt | 2 +- ...primaryConstructorValueParameterScript.txt | 4 +- .../wholeDeclaration/scriptInitializer.txt | 4 +- ...condaryConstructorValueParameterScript.txt | 4 +- .../wholeDeclaration/setterScript.txt | 2 +- .../wholeDeclaration/statement.txt | 4 +- .../topLevelPropertyScript.txt | 2 +- .../topLevelTypelTypeAliasScript.txt | 2 +- .../annotationArgumentsMixScript.txt | 10 ++--- .../annotationClassWithJavaTargetScript.txt | 10 ++--- .../annotationOnLocalClassScript.txt | 10 ++--- .../annotationParametersScript.txt | 10 ++--- .../annotationWithTypeArgumentScript.txt | 10 ++--- .../lazyResolve/annotationsScript.txt | 11 +++-- ...sFunctionWithAnnotatedParameter2Script.txt | 10 ++--- ...atedParameterOnImplicitTypePhaseScript.txt | 10 ++--- ...usFunctionWithAnnotatedParameterScript.txt | 10 ++--- .../lazyResolve/classMembersScript.txt | 10 ++--- .../classes/annotationWithTargetScript.txt | 10 ++--- .../classes/classWithTypeParametersScript.txt | 11 +++-- .../component1TypeCollisionScript.txt | 11 +++-- .../dataClass/copyTypeCollisionScript.txt | 10 ++--- .../parameterTypeCollisionScript.txt | 10 ++--- .../dataClass/propertyTypeCollisionScript.txt | 10 ++--- .../classes/functionInValueClassScript.txt | 10 ++--- ...archyWithOverrideAndNestedClass2Script.txt | 10 ++--- ...archyWithOverrideAndNestedClass3Script.txt | 10 ++--- ...archyWithOverrideAndNestedClass4Script.txt | 11 +++-- ...rarchyWithOverrideAndNestedClassScript.txt | 10 ++--- .../classes/hierarchyWithOverrideScript.txt | 10 ++--- .../lazyResolve/classes/nestedClassScript.txt | 10 ++--- ...stedClassWithPropertiesOverridesScript.txt | 10 ++--- .../classes/simpleLoopInOverride2Script.txt | 10 ++--- .../classes/simpleLoopInOverrideScript.txt | 10 ++--- ...CallNameClashImplicitConstructorScript.txt | 10 ++--- .../classes/superTypeCallNameClashScript.txt | 11 +++-- ...stedNameClashImplicitConstructorScript.txt | 11 +++-- .../superTypeCallNestedNameClashScript.txt | 10 ++--- ...erRequiredAnnotationOnLocalClassScript.txt | 10 ++--- ...AnnotationsOnConstructorPropertyScript.txt | 10 ++--- ...RequiredAnnotationsOnConstructorScript.txt | 10 ++--- ...lerRequiredAnnotationsOnFunctionScript.txt | 10 ++--- ...redAnnotationsOnPropertyDelegateScript.txt | 10 ++--- ...lerRequiredAnnotationsOnPropertyScript.txt | 10 ++--- .../complexLocalHierarchyScript.txt | 10 ++--- .../complexRedeclarationScript.txt | 10 ++--- .../lazyResolve/cyclicHierarchy2Script.txt | 10 ++--- .../lazyResolve/cyclicHierarchy3Script.txt | 10 ++--- .../lazyResolve/cyclicHierarchyScript.txt | 10 ++--- .../cyclicNestedHierarchy2Script.txt | 10 ++--- .../cyclicNestedHierarchyScript.txt | 10 ++--- .../lazyResolve/dataClassCopyScript.txt | 10 ++--- .../lazyResolve/dataComponent2Script.txt | 10 ++--- .../delegateWithImplicitTypeScript.txt | 10 ++--- .../delegatedFieldNestedNameClashScript.txt | 10 ++--- ...ldNestedNameClashWithNestedTypesScript.txt | 10 ++--- .../lazyResolve/delegatedFieldScript.txt | 10 ++--- .../testData/lazyResolve/delegatesScript.txt | 10 ++--- .../testData/lazyResolve/destructuring.txt | 10 ++--- .../lazyResolve/destructuringFirstEntry.txt | 10 ++--- .../lazyResolve/destructuringSecondEntry.txt | 10 ++--- .../lazyResolve/enumEntriesScript.txt | 10 ++--- .../testData/lazyResolve/enumEntryScript.txt | 10 ++--- .../lazyResolve/enumValueOfScript.txt | 10 ++--- .../testData/lazyResolve/enumValuesScript.txt | 10 ++--- ...icitSubstitutionOverridePropertyScript.txt | 10 ++--- .../lazyResolve/fakeOverrideScript.txt | 10 ++--- .../fakePrimaryConstructorScript.txt | 10 ++--- .../fromLocalHierarchyToOuterScript.txt | 11 ++--- ...onWithImplicitTypeAndAnnotationsScript.txt | 10 ++--- ...eAndStringTemplateAsDefaultValueScript.txt | 10 ++--- .../functionWithParameterScript.txt | 10 ++--- .../lazyResolve/functions/contractScript.txt | 10 ++--- .../lazyResolve/functions/contractScript2.txt | 22 +++++----- .../functionCallWithGenericResultScript.txt | 10 ++--- .../functions/functionParameterScript.txt | 10 ++--- ...ionWithGenericExpectedTypeInsideScript.txt | 10 ++--- .../functionWithTypeParametersScript.txt | 10 ++--- ...archyWithOverrideAndNestedClass2Script.txt | 10 ++--- ...archyWithOverrideAndNestedClass3Script.txt | 10 ++--- ...rarchyWithOverrideAndNestedClassScript.txt | 10 ++--- .../functions/hierarchyWithOverrideScript.txt | 10 ++--- .../functions/simpleLoopInOverride2Script.txt | 10 ++--- .../functions/simpleLoopInOverrideScript.txt | 10 ++--- ...CallNameClashImplicitConstructorScript.txt | 10 ++--- .../superTypeCallNameClashScript.txt | 10 ++--- ...stedNameClashImplicitConstructorScript.txt | 10 ++--- .../superTypeCallNestedNameClashScript.txt | 10 ++--- ...icitSubstitutionOverridePropertyScript.txt | 10 ++--- .../lambdaAsSAMInterfaceScript.txt | 10 ++--- ...tWithDestructuringDeclarationReference.txt | 10 ++--- .../lazyResolve/lazyPropertyScript.txt | 10 ++--- .../lazyResolve/localConstructorScript.txt | 10 ++--- ...ocalFunctionInsideAnnotationCallScript.txt | 26 ++++++------ ...calFunctionInsideFunctionLiteralScript.txt | 26 ++++++------ ...deLambdaCallInsideStringTemplateScript.txt | 26 ++++++------ .../localFunctionInsideStatement.txt | 3 +- ...ocalFunctionInsideStringTemplateScript.txt | 26 ++++++------ ...ocalFunctionInsideSuperEntryCallScript.txt | 26 ++++++------ .../lazyResolve/localNestedClassScript.txt | 10 ++--- ...calParameterInsideSuperEntryCallScript.txt | 26 ++++++------ ...ilerRequiredAnnotationsForMemberScript.txt | 10 ++--- ...lerRequiredAnnotationsInsideBodyScript.txt | 10 ++--- ...estedCompilerRequiredAnnotationsScript.txt | 10 ++--- .../lazyResolve/nestedTypeAlias2Script.txt | 10 ++--- .../lazyResolve/nestedTypeAliasScript.txt | 10 ++--- .../parameterOfNonLocalSetterScript.txt | 10 ++--- .../parameterOfTopSetterScript.txt | 10 ++--- .../primaryConstructorParameterScript.txt | 10 ++--- .../primaryConstructorPropertyScript.txt | 10 ++--- .../lazyResolve/primaryConstructorScript.txt | 10 ++--- .../properties/getterWithDelegationScript.txt | 10 ++--- ...archyWithOverrideAndNestedClass2Script.txt | 10 ++--- ...archyWithOverrideAndNestedClass3Script.txt | 10 ++--- ...archyWithOverrideAndNestedClass4Script.txt | 10 ++--- ...rarchyWithOverrideAndNestedClassScript.txt | 10 ++--- .../hierarchyWithOverrideScript.txt | 10 ++--- ...rtyGetterWithExplicitTypeAndBodyScript.txt | 10 ++--- .../propertyGetterWithExplicitTypeScript.txt | 10 ++--- .../propertyGetterWithImplicitTypeScript.txt | 10 ++--- .../properties/propertySetterScript.txt | 10 ++--- .../propertyWithTypeParametersScript.txt | 10 ++--- .../properties/resultWithPropagatedType.txt | 10 ++--- .../scriptWithResultWithPropagatedType.txt | 22 +++++----- ...scriptWithTypeAnnotationsOnDeclaration.txt | 22 +++++----- .../simpleLoopInOverride2Script.txt | 10 ++--- .../properties/simpleLoopInOverrideScript.txt | 10 ++--- ...propertyDelegateWithImplicitTypeScript.txt | 10 ++--- .../propertyWithGetterAndSetterScript.txt | 10 ++--- .../lazyResolve/propertyWithGetterScript.txt | 10 ++--- ...tyWithImplicitTypeAndAnnotationsScript.txt | 10 ++--- ...hImplicitTypeAndFieldAnnotationsScript.txt | 10 ++--- .../propertyWithInitializerScript.txt | 10 ++--- .../lazyResolve/redeclarationScript.txt | 10 ++--- .../resolveSuperTypeFromLocalClassScript.txt | 10 ++--- ...lveTypeFromLocalClassConstructorScript.txt | 10 ++--- .../resolveTypeFromLocalFunctionScript.txt | 10 ++--- .../testData/lazyResolve/script.txt | 22 +++++----- .../testData/lazyResolve/script2.txt | 22 +++++----- .../testData/lazyResolve/script3.txt | 22 +++++----- .../testData/lazyResolve/script4.txt | 22 +++++----- .../testData/lazyResolve/scriptArgument.txt | 42 +++++++++---------- .../secondaryConstructorParameterScript.txt | 10 ++--- .../secondaryConstructorScript.txt | 10 ++--- .../testData/lazyResolve/statement.txt | 10 ++--- .../testData/lazyResolve/statement2.txt | 10 ++--- .../lazyResolve/statementTransformation.txt | 22 +++++----- ...stitutionFakeOverrideConstructorScript.txt | 10 ++--- ...substitutionFakeOverrideFunctionScript.txt | 10 ++--- ...OverrideFunctionWithImplicitTypeScript.txt | 10 ++--- .../substitutionFakeOverrideScript.txt | 10 ++--- ...rrideWithImplicitTypeAndReceiverScript.txt | 10 ++--- ...tionFakeOverrideWithImplicitTypeScript.txt | 10 ++--- .../lazyResolve/superTypesLoopScript.txt | 10 ++--- .../testData/lazyResolve/superTypesScript.txt | 10 ++--- .../syntheticResultDeclaration.txt | 10 ++--- .../syntheticResultDeclarationWithBigBody.txt | 10 ++--- .../lazyResolve/topLevelFunctionsScript.txt | 10 ++--- ...ithExpressionBodyAndExplicitTypeScript.txt | 10 ++--- ...opLevelFunctionsWithImplicitTypeScript.txt | 10 ++--- .../typeAliasWithTypeParametersScript.txt | 10 ++--- .../lazyResolve/typeParameterBoundsScript.txt | 10 ++--- .../typeParameterOfClass2Script.txt | 10 ++--- .../typeParameterOfClassScript.txt | 10 ++--- .../typeParameterOfNonLocalFunctionScript.txt | 10 ++--- .../typeParameterOfTopFunctionScript.txt | 10 ++--- .../typeParameterOfTopSetterScript.txt | 10 ++--- .../typeParameterOfTypeAliasScript.txt | 10 ++--- ...assAnnotationsInLocalClassScript.after.txt | 3 +- ...ssAnnotationsInLocalClassScript.before.txt | 3 +- ...otationsInLocalClassScript.lazyResolve.txt | 10 ++--- ...teFieldWithAnnotationClashScript.after.txt | 3 +- ...dWithAnnotationClashScript.lazyResolve.txt | 10 ++--- ...tedNameClashAndAnnotationsScript.after.txt | 3 +- ...eClashAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...hNestedTypesAndAnnotationsScript.after.txt | 3 +- ...dTypesAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...ypeCollisionAndAnnotationsScript.after.txt | 3 +- ...lisionAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...otationImplicitConstructorScript.after.txt | 3 +- ...nImplicitConstructorScript.lazyResolve.txt | 10 ++--- ...allNameClashWithAnnotationScript.after.txt | 3 +- ...eClashWithAnnotationScript.lazyResolve.txt | 10 ++--- ...otationImplicitConstructorScript.after.txt | 3 +- ...nImplicitConstructorScript.lazyResolve.txt | 10 ++--- ...tedNameClashWithAnnotationScript.after.txt | 3 +- ...eClashWithAnnotationScript.lazyResolve.txt | 10 ++--- .../constructor/callScript.after.txt | 3 +- .../constructor/callScript.before.txt | 3 +- .../constructor/callScript.lazyResolve.txt | 10 ++--- .../callWithConstructorScript.after.txt | 3 +- .../callWithConstructorScript.before.txt | 3 +- .../callWithConstructorScript.lazyResolve.txt | 10 ++--- .../parameterWithAnnotationsScript.after.txt | 3 +- ...meterWithAnnotationsScript.lazyResolve.txt | 10 ++--- ...WithAnnotationsScriptBodyResolve.after.txt | 3 +- ...ithAnnotationsScriptBodyResolve.before.txt | 3 +- ...notationsScriptBodyResolve.lazyResolve.txt | 10 ++--- ...ationToLocalMemberFunctionScript.after.txt | 2 +- ...tionToLocalMemberFunctionScript.before.txt | 2 +- ...oLocalMemberFunctionScript.lazyResolve.txt | 10 ++--- .../constructor/referenceScript.after.txt | 3 +- .../constructor/referenceScript.before.txt | 3 +- .../referenceScript.lazyResolve.txt | 10 ++--- .../referenceWithConstructorScript.after.txt | 3 +- .../referenceWithConstructorScript.before.txt | 3 +- ...renceWithConstructorScript.lazyResolve.txt | 10 ++--- .../secondaryConstructorScript.after.txt | 2 +- .../secondaryConstructorScript.before.txt | 2 +- ...secondaryConstructorScript.lazyResolve.txt | 10 ++--- ...teFieldWithAnnotationClashScript.after.txt | 3 +- ...dWithAnnotationClashScript.lazyResolve.txt | 10 ++--- .../delegateWithExplicitTypeScript.after.txt | 3 +- ...gateWithExplicitTypeScript.lazyResolve.txt | 10 ++--- ...ithExplicitTypeUnavailableScript.after.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- .../delegateWithImplicitTypeScript.after.txt | 3 +- .../delegateWithImplicitTypeScript.before.txt | 3 +- ...gateWithImplicitTypeScript.lazyResolve.txt | 10 ++--- ...ithImplicitTypeUnavailableScript.after.txt | 3 +- ...thImplicitTypeUnavailableScript.before.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- ...tedNameClashAndAnnotationsScript.after.txt | 3 +- ...eClashAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...hNestedTypesAndAnnotationsScript.after.txt | 3 +- ...dTypesAndAnnotationsScript.lazyResolve.txt | 10 ++--- .../delegatedFieldNestedNameScript.after.txt | 3 +- ...gatedFieldNestedNameScript.lazyResolve.txt | 10 ++--- .../delegate/fieldScript.after.txt | 3 +- .../delegate/fieldScript.lazyResolve.txt | 10 ++--- .../propertyWithExplicitTypeScript.after.txt | 2 +- .../propertyWithExplicitTypeScript.before.txt | 3 +- ...ertyWithExplicitTypeScript.lazyResolve.txt | 10 ++--- ...ithExplicitTypeUnavailableScript.after.txt | 3 +- ...thExplicitTypeUnavailableScript.before.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- .../propertyWithImplicitTypeScript.after.txt | 3 +- .../propertyWithImplicitTypeScript.before.txt | 3 +- ...ertyWithImplicitTypeScript.lazyResolve.txt | 10 ++--- ...ithImplicitTypeUnavailableScript.after.txt | 3 +- ...thImplicitTypeUnavailableScript.before.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- .../destruct.after.txt | 2 +- .../destruct.before.txt | 2 +- .../destruct.lazyResolve.txt | 10 ++--- .../destructEntry.after.txt | 2 +- .../destructEntry.before.txt | 2 +- .../destructEntry.lazyResolve.txt | 10 ++--- .../destructEntryUsage.after.txt | 2 +- .../destructEntryUsage.before.txt | 2 +- .../destructEntryUsage.lazyResolve.txt | 10 ++--- .../destructEntryWithType.after.txt | 2 +- .../destructEntryWithType.lazyResolve.txt | 10 ++--- .../destructEntryWithTypeUsage.after.txt | 2 +- .../destructEntryWithTypeUsage.before.txt | 2 +- ...destructEntryWithTypeUsage.lazyResolve.txt | 10 ++--- .../scriptClassLevel.lazyResolve.txt | 10 ++--- .../scriptLevel.after.txt | 3 +- .../scriptLevel.before.txt | 3 +- .../scriptLevel.lazyResolve.txt | 22 +++++----- .../scriptStatementLevel.after.txt | 3 +- .../scriptStatementLevel.before.txt | 3 +- .../scriptStatementLevel.lazyResolve.txt | 22 +++++----- ...iptStatementLevelAsLastStatement.after.txt | 3 +- ...ptStatementLevelAsLastStatement.before.txt | 3 +- ...tementLevelAsLastStatement.lazyResolve.txt | 10 ++--- .../errorType/errorTypeScript.after.txt | 3 +- .../errorType/errorTypeScript.lazyResolve.txt | 10 ++--- .../nestedErrorReturnTypeScript.after.txt | 3 +- ...estedErrorReturnTypeScript.lazyResolve.txt | 10 ++--- ...ypeCollisionAndAnnotationsScript.after.txt | 3 +- ...lisionAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...ypeCollisionAndAnnotationsScript.after.txt | 3 +- ...lisionAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...ndAnnotationsAsConstructorScript.after.txt | 3 +- ...tationsAsConstructorScript.lazyResolve.txt | 10 ++--- ...ndAnnotationsAsConstructorScript.after.txt | 3 +- ...tationsAsConstructorScript.lazyResolve.txt | 10 ++--- .../function/explicitTypeScript.after.txt | 3 +- .../explicitTypeScript.lazyResolve.txt | 10 ++--- .../generatedComponentNScript.after.txt | 3 +- .../generatedComponentNScript.lazyResolve.txt | 10 ++--- .../function/generatedCopyScript.after.txt | 3 +- .../generatedCopyScript.lazyResolve.txt | 10 ++--- .../function/implicitTypeScript.after.txt | 3 +- .../function/implicitTypeScript.before.txt | 3 +- .../implicitTypeScript.lazyResolve.txt | 10 ++--- .../implicitTypeUnavailableScript.after.txt | 3 +- .../implicitTypeUnavailableScript.before.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- ...eUnavailableInImplicitBodyScript.after.txt | 3 +- ...UnavailableInImplicitBodyScript.before.txt | 3 +- ...ilableInImplicitBodyScript.lazyResolve.txt | 10 ++--- ...calImplicitTypeUnavailableScript.after.txt | 3 +- ...alImplicitTypeUnavailableScript.before.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- .../function/multiDeclarationScript.after.txt | 3 +- .../multiDeclarationScript.before.txt | 3 +- .../multiDeclarationScript.lazyResolve.txt | 10 ++--- ...licitReturnTypePropagationScript.after.txt | 3 +- ...icitReturnTypePropagationScript.before.txt | 3 +- ...eturnTypePropagationScript.lazyResolve.txt | 10 ++--- ...ameterAsImplicitReturnTypeScript.after.txt | 3 +- ...meterAsImplicitReturnTypeScript.before.txt | 3 +- ...AsImplicitReturnTypeScript.lazyResolve.txt | 10 ++--- ...licitReturnTypeScriptBodyResolve.after.txt | 3 +- ...icitReturnTypeScriptBodyResolve.before.txt | 2 +- ...eturnTypeScriptBodyResolve.lazyResolve.txt | 10 ++--- ...emberFunctionsImplicitBodyScript.after.txt | 3 +- ...mberFunctionsImplicitBodyScript.before.txt | 3 +- ...unctionsImplicitBodyScript.lazyResolve.txt | 10 ++--- ...etweenLocalMemberFunctionsScript.after.txt | 3 +- ...tweenLocalMemberFunctionsScript.before.txt | 3 +- ...LocalMemberFunctionsScript.lazyResolve.txt | 10 ++--- ...MemberFunctionImplicitBodyScript.after.txt | 3 +- ...emberFunctionImplicitBodyScript.before.txt | 3 +- ...FunctionImplicitBodyScript.lazyResolve.txt | 10 ++--- ...ationToLocalMemberFunctionScript.after.txt | 2 +- ...tionToLocalMemberFunctionScript.before.txt | 3 +- ...oLocalMemberFunctionScript.lazyResolve.txt | 10 ++--- ...licitReturnTypePropagationScript.after.txt | 2 +- ...icitReturnTypePropagationScript.before.txt | 2 +- ...eturnTypePropagationScript.lazyResolve.txt | 10 ++--- ...ceiverAsImplicitReturnTypeScript.after.txt | 2 +- ...eiverAsImplicitReturnTypeScript.before.txt | 2 +- ...AsImplicitReturnTypeScript.lazyResolve.txt | 10 ++--- ...otationImplicitConstructorScript.after.txt | 3 +- ...nImplicitConstructorScript.lazyResolve.txt | 10 ++--- ...allNameClashWithAnnotationScript.after.txt | 3 +- ...eClashWithAnnotationScript.lazyResolve.txt | 10 ++--- ...otationImplicitConstructorScript.after.txt | 3 +- ...nImplicitConstructorScript.lazyResolve.txt | 10 ++--- ...tedNameClashWithAnnotationScript.after.txt | 3 +- ...eClashWithAnnotationScript.lazyResolve.txt | 10 ++--- ...terAnnotationsInLocalClassScript.after.txt | 3 +- ...erAnnotationsInLocalClassScript.before.txt | 3 +- ...otationsInLocalClassScript.lazyResolve.txt | 10 ++--- .../classInitializerScript.after.txt | 2 +- .../classInitializerScript.before.txt | 2 +- .../classInitializerScript.lazyResolve.txt | 10 ++--- .../constructorParameterScript.after.txt | 3 +- ...constructorParameterScript.lazyResolve.txt | 10 ++--- .../property/explicitTypeScript.after.txt | 3 +- .../explicitTypeScript.lazyResolve.txt | 10 ++--- ...tedPropertyFromConstructorScript.after.txt | 3 +- ...pertyFromConstructorScript.lazyResolve.txt | 10 ++--- ...orrectAccessorsPropagationScript.after.txt | 3 +- ...rrectAccessorsPropagationScript.before.txt | 3 +- ...AccessorsPropagationScript.lazyResolve.txt | 10 ++--- ...TypeFromIncorrectAccessorsScript.after.txt | 3 +- ...ypeFromIncorrectAccessorsScript.before.txt | 3 +- ...omIncorrectAccessorsScript.lazyResolve.txt | 10 ++--- ...IncorrectSetterPropagationScript.after.txt | 3 +- ...ncorrectSetterPropagationScript.before.txt | 3 +- ...ectSetterPropagationScript.lazyResolve.txt | 10 ++--- ...citTypeFromIncorrectSetterScript.after.txt | 2 +- ...itTypeFromIncorrectSetterScript.before.txt | 3 +- ...eFromIncorrectSetterScript.lazyResolve.txt | 10 ++--- .../property/implicitTypeScript.after.txt | 3 +- .../property/implicitTypeScript.before.txt | 3 +- .../implicitTypeScript.lazyResolve.txt | 10 ++--- ...PropertyWithPropagatedTypeScript.after.txt | 2 +- ...ropertyWithPropagatedTypeScript.before.txt | 3 +- ...tyWithPropagatedTypeScript.lazyResolve.txt | 10 ++--- ...hPropagatedTypeUnavailableScript.after.txt | 3 +- ...PropagatedTypeUnavailableScript.before.txt | 3 +- ...gatedTypeUnavailableScript.lazyResolve.txt | 10 ++--- ...eUnavailableInImplicitBodyScript.after.txt | 3 +- ...UnavailableInImplicitBodyScript.before.txt | 3 +- ...ilableInImplicitBodyScript.lazyResolve.txt | 10 ++--- ...calImplicitTypeUnavailableScript.after.txt | 3 +- ...alImplicitTypeUnavailableScript.before.txt | 3 +- ...licitTypeUnavailableScript.lazyResolve.txt | 10 ++--- ...PropertyWithPropagatedTypeScript.after.txt | 2 +- ...ropertyWithPropagatedTypeScript.before.txt | 3 +- ...tyWithPropagatedTypeScript.lazyResolve.txt | 10 ++--- ...mberPropertiesImplicitBodyScript.after.txt | 3 +- ...berPropertiesImplicitBodyScript.before.txt | 3 +- ...opertiesImplicitBodyScript.lazyResolve.txt | 10 ++--- ...tweenLocalMemberPropertiesScript.after.txt | 2 +- ...weenLocalMemberPropertiesScript.before.txt | 2 +- ...ocalMemberPropertiesScript.lazyResolve.txt | 10 ++--- ...MemberPropertyImplicitBodyScript.after.txt | 3 +- ...emberPropertyImplicitBodyScript.before.txt | 3 +- ...PropertyImplicitBodyScript.lazyResolve.txt | 10 ++--- ...ationToLocalMemberPropertyScript.after.txt | 2 +- ...tionToLocalMemberPropertyScript.before.txt | 3 +- ...oLocalMemberPropertyScript.lazyResolve.txt | 10 ++--- ...ypeCollisionAndAnnotationsScript.after.txt | 3 +- ...lisionAndAnnotationsScript.lazyResolve.txt | 10 ++--- ...licitReturnTypePropagationScript.after.txt | 2 +- ...icitReturnTypePropagationScript.before.txt | 2 +- ...eturnTypePropagationScript.lazyResolve.txt | 10 ++--- ...ceiverAsImplicitReturnTypeScript.after.txt | 2 +- ...eiverAsImplicitReturnTypeScript.before.txt | 2 +- ...AsImplicitReturnTypeScript.lazyResolve.txt | 10 ++--- .../property/resultBodyAnnotation.after.txt | 2 +- .../property/resultBodyAnnotation.before.txt | 2 +- .../resultBodyAnnotation.lazyResolve.txt | 10 ++--- .../resultWithPropagatedType.after.txt | 3 +- .../resultWithPropagatedType.before.txt | 3 +- .../resultWithPropagatedType.lazyResolve.txt | 10 ++--- ...ultWithPropagatedTypeUnavailable.after.txt | 3 +- ...ltWithPropagatedTypeUnavailable.before.txt | 3 +- ...hPropagatedTypeUnavailable.lazyResolve.txt | 10 ++--- ...terAnnotationsInLocalClassScript.after.txt | 3 +- ...erAnnotationsInLocalClassScript.before.txt | 3 +- ...otationsInLocalClassScript.lazyResolve.txt | 10 ++--- .../constructorCallSiteScript.after.txt | 3 +- .../constructorCallSiteScript.before.txt | 3 +- .../constructorCallSiteScript.lazyResolve.txt | 10 ++--- .../constructorScript.after.txt | 3 +- .../constructorScript.lazyResolve.txt | 10 ++--- .../functionScript.after.txt | 3 +- .../functionScript.lazyResolve.txt | 10 ++--- .../functionUnavailableScript.after.txt | 3 +- .../functionUnavailableScript.lazyResolve.txt | 10 ++--- .../implicitFunctionScript.after.txt | 3 +- .../implicitFunctionScript.before.txt | 3 +- .../implicitFunctionScript.lazyResolve.txt | 10 ++--- ...mplicitFunctionUnavailableScript.after.txt | 3 +- ...plicitFunctionUnavailableScript.before.txt | 3 +- ...tFunctionUnavailableScript.lazyResolve.txt | 10 ++--- ...mplicitPropertyAndReceiverScript.after.txt | 3 +- ...plicitPropertyAndReceiverScript.before.txt | 3 +- ...tPropertyAndReceiverScript.lazyResolve.txt | 10 ++--- .../implicitPropertyScript.after.txt | 3 +- .../implicitPropertyScript.before.txt | 3 +- .../implicitPropertyScript.lazyResolve.txt | 10 ++--- ...mplicitPropertyUnavailableScript.after.txt | 3 +- ...plicitPropertyUnavailableScript.before.txt | 3 +- ...tPropertyUnavailableScript.lazyResolve.txt | 10 ++--- .../propertyScript.after.txt | 3 +- .../propertyScript.lazyResolve.txt | 10 ++--- .../propertyUnavailableScript.after.txt | 3 +- .../propertyUnavailableScript.lazyResolve.txt | 10 ++--- .../insideFunctionComplexScript.after.txt | 3 +- ...nsideFunctionComplexScript.lazyResolve.txt | 10 ++--- .../insideFunctionScript.lazyResolve.txt | 10 ++--- ...stedAnnotationInLocalClassScript.after.txt | 3 +- ...tedAnnotationInLocalClassScript.before.txt | 3 +- ...notationInLocalClassScript.lazyResolve.txt | 10 ++--- .../typeAlias/simpleScript.after.txt | 2 +- .../typeAlias/simpleScript.lazyResolve.txt | 10 ++--- .../withMissedArgumentsScript.after.txt | 3 +- .../withMissedArgumentsScript.lazyResolve.txt | 10 ++--- .../testScripts/providedProperties.test.kts | 1 - .../providedPropertiesShadowing.test.kts | 1 - 569 files changed, 1816 insertions(+), 1964 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt index e218a4a9f34..d7431e57648 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirPhaseUpdater.kt @@ -30,7 +30,6 @@ internal object LLFirPhaseUpdater { } is FirAnonymousInitializer -> target.body?.accept(PhaseUpdatingTransformer, newPhase) - is FirScript -> target.parameters.forEach { it.accept(PhaseUpdatingTransformer, newPhase) } is FirCodeFragment -> target.block.accept(PhaseUpdatingTransformer, newPhase) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt index 3a19c6af47b..94cdc2b192f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt @@ -42,7 +42,6 @@ import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.isResolved import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry -import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment @@ -154,7 +153,7 @@ private class LLFirBodyTargetResolver(target: LLFirResolveTarget) : LLFirAbstrac // resolve properties so they are available for CFG building in resolveScript resolveMembersForControlFlowGraph(target) performCustomResolveUnderLock(target) { - resolve(target, BodyStateKeepers.SCRIPT) + calculateControlFlowGraph(target) } return true @@ -318,31 +317,13 @@ private class LLFirBodyTargetResolver(target: LLFirResolveTarget) : LLFirAbstrac } override fun rawResolve(target: FirElementWithResolveState) { - when (target) { - is FirScript -> { - resolveScript(target) - calculateControlFlowGraph(target) - } - - else -> super.rawResolve(target) - } + super.rawResolve(target) LLFirDeclarationModificationService.bodyResolved(target, resolverPhase) } - - private fun resolveScript(script: FirScript) { - transformer.declarationsTransformer.withScript(script) { - script.parameters.forEach { it.transformSingle(transformer, ResolutionMode.ContextIndependent) } - script - } - } } internal object BodyStateKeepers { - val SCRIPT: StateKeeper = stateKeeper { _, _ -> - add(FirScript::controlFlowGraphReference, FirScript::replaceControlFlowGraphReference) - } - val CODE_FRAGMENT: StateKeeper = stateKeeper { _, _ -> add(FirCodeFragment::block, FirCodeFragment::replaceBlock, ::blockGuard) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt index 0fa02b68d0c..874a4e348c1 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt @@ -164,6 +164,9 @@ internal sealed class LLFirTargetResolver( target is FirField && target.origin == FirDeclarationOrigin.Synthetic.DelegateField || target is FirConstructor -> { containingClass(target).lazyResolveToPhase(resolverPhase) } + + // We should resolve all script parameters for consistency as they are part of the script and visible from the beginning + target is FirScript -> target.parameters.forEach { it.lazyResolveToPhase(resolverPhase) } } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt index e307aa9228b..01fdd82e40a 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt @@ -175,8 +175,8 @@ private class LLFirTypeTargetResolver(target: LLFirResolveTarget) : LLFirTargetR } private fun resolveScriptTypes(firScript: FirScript) { - firScript.annotations.forEach { it.accept(transformer, null) } - firScript.contextReceivers.forEach { it.accept(transformer, null) } + firScript.transformAnnotations(transformer, null) + firScript.transformContextReceivers(transformer, null) } private fun resolveClassTypes(firClass: FirRegularClass) { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/FirElementFinder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/FirElementFinder.kt index 8dd87706309..a084c10b847 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/FirElementFinder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/FirElementFinder.kt @@ -104,6 +104,11 @@ internal object FirElementFinder { subDeclaration is FirScript -> { path += subDeclaration + val scriptParameters = subDeclaration.parameters + if (find(scriptParameters, classIdPathIndex)) { + return true + } + val scriptDeclarations = subDeclaration.declarations if (find(scriptDeclarations, classIdPathIndex)) { return true diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt index bf4795cb365..95e5a37d8f1 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/declarationUtils.kt @@ -204,6 +204,10 @@ val FirDeclaration.isGeneratedDeclaration get() = realPsi == null internal inline fun FirScript.forEachDeclaration(action: (FirDeclaration) -> Unit) { + for (property in parameters) { + action(property) + } + for (statement in declarations) { action(statement) } @@ -240,6 +244,9 @@ internal val FirCallableSymbol<*>.isLocalForLazyResolutionPurposes: Boolean // Destructuring declaration container should be treated as a non-local as it is a top-level script declaration fir.origin == FirDeclarationOrigin.Synthetic.ScriptTopLevelDestructuringDeclarationContainer -> false + // Script parameters should be treated as non-locals as they are visible from FirScript + fir.origin == FirDeclarationOrigin.ScriptCustomization.Parameter || fir.origin == FirDeclarationOrigin.ScriptCustomization.ParameterFromBaseClass -> false + // We should treat destructuring declaration entries as non-local explicitly as its CallableId is local // TODO: can be dropped after KT-65727 (fir as? FirProperty)?.destructuringDeclarationContainerVariable != null -> false diff --git a/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.txt b/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.txt index 6d6061db3ac..db1d918d5c1 100644 --- a/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.txt +++ b/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.txt @@ -42,7 +42,7 @@ Tower Data Context: FILE: [ResolvedTo(IMPORTS)] insideClassBody.kts context(