From 903797575830b375196b9d2aa268884bc566481e Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Wed, 14 Feb 2024 16:49:48 +0100 Subject: [PATCH] K2 Scripting: Skip base class params from resolution scope The base class in scripting considered obsolete and therefore supported via some ad-hoc mechanisms. In particular parameters to the base class c-tor are passed via script provided properties. But in combination with the resolution logic, this leads to issues described in KT-60452 This commits filters out such parameters from script resolution scope and avoids this problem for now. Bot it should be noted that proper diagnostics for properties shadowing should still be implemented - see #KT-65809 #KT-60452 fixed --- .../referenceResolve/ScriptArgument.txt | 2 +- .../symbolByReference/scriptArgument.kts | 2 - .../symbolByReference/scriptArgument.txt | 95 +++++++++++++++++-- .../scripts/insideClassBody.copy.txt | 2 - .../scripts/insideClassBody.txt | 2 - .../scripts/insideClassMember.copy.txt | 2 - .../scripts/insideClassMember.txt | 2 - .../scripts/insideTopLevelFunction.copy.txt | 2 - .../scripts/insideTopLevelFunction.txt | 2 - .../scripts/lastStatement.copy.txt | 2 - .../scripts/lastStatement.txt | 2 - .../scriptInsideLastStatement.copy.txt | 2 - .../scripts/scriptInsideLastStatement.txt | 2 - .../scripts/statement.copy.txt | 2 - .../contextCollector/scripts/statement.txt | 2 - .../scripts/topLevel.copy.txt | 4 +- .../contextCollector/scripts/topLevel.txt | 4 +- .../getOrBuildFir/calls/argsFromFunction.txt | 4 +- .../getOrBuildFir/calls/argsFromInit.txt | 4 +- .../calls/argsFromMemberFunction.txt | 4 +- .../calls/argsFromMemberProperty.txt | 4 +- .../getOrBuildFir/calls/argsFromProperty.txt | 4 +- .../getOrBuildFir/calls/argsFromStatement.txt | 4 +- .../body/resolve/BodyResolveContext.kt | 6 +- .../FirDeclarationsResolveTransformer.kt | 4 +- .../fir/declarations/FirDeclarationOrigin.kt | 1 + .../fir/declarations/utils/FirScriptUtils.kt | 3 +- .../FirScriptConfigurationExtensionImpl.kt | 2 +- .../compiler/test/ScriptTemplateTest.kt | 3 +- .../codegen/testScripts/params.test.kts | 5 + .../providedPropertiesShadowing.test.kts | 5 + ...CustomDefBlackBoxCodegenTestGenerated.java | 6 ++ ...CustomDefDiagnosticsTestBaseGenerated.java | 6 ++ 33 files changed, 138 insertions(+), 58 deletions(-) create mode 100644 plugins/scripting/scripting-tests/testData/codegen/testScripts/params.test.kts create mode 100644 plugins/scripting/scripting-tests/testData/diagnostics/testScripts/providedPropertiesShadowing.test.kts diff --git a/analysis/analysis-api/testData/referenceResolve/ScriptArgument.txt b/analysis/analysis-api/testData/referenceResolve/ScriptArgument.txt index 72e9cb91a16..54d4c1ac363 100644 --- a/analysis/analysis-api/testData/referenceResolve/ScriptArgument.txt +++ b/analysis/analysis-api/testData/referenceResolve/ScriptArgument.txt @@ -1,2 +1,2 @@ Resolved to: -0: (in : ) val args: kotlin.Array +0: (in kotlin.script.templates.standard.ScriptTemplateWithArgs) val args: kotlin.Array \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.kts b/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.kts index d1ed375ceef..8e496fe14c2 100644 --- a/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.kts +++ b/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.kts @@ -1,5 +1,3 @@ -// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE - fun foo() { args } diff --git a/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.txt b/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.txt index ecc43aba234..7ea231ee779 100644 --- a/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.txt +++ b/analysis/analysis-api/testData/symbols/symbolByReference/scriptArgument.txt @@ -1,11 +1,82 @@ -KtLocalVariableSymbol: +KtKotlinPropertySymbol: annotationsList: [] - callableIdIfNonLocal: null + backingFieldSymbol: KtBackingFieldSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + isExtension: false + name: field + origin: PROPERTY_BACKING_FIELD + owningProperty: KtKotlinPropertySymbol(kotlin/script/templates/standard/ScriptTemplateWithArgs.args) + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [ + KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/String + ] + type: kotlin/Array + symbolKind: LOCAL + typeParameters: [] + getContainingFileSymbol: null + getContainingJvmClassName: kotlin.script.templates.standard.ScriptTemplateWithArgs + getContainingModule: KtLibraryModule "Library kotlin-script-runtime" + deprecationStatus: null + callableIdIfNonLocal: kotlin/script/templates/standard/ScriptTemplateWithArgs.args contextReceivers: [] + getter: KtPropertyGetterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasBody: false + hasStableParameterNames: true + isDefault: true + isExtension: false + isInline: false + isOverride: false + modality: FINAL + origin: LIBRARY + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [ + KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/String + ] + type: kotlin/Array + symbolKind: ACCESSOR + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/script/templates/standard/ScriptTemplateWithArgs + getContainingFileSymbol: null + getContainingJvmClassName: kotlin.script.templates.standard.ScriptTemplateWithArgs + getContainingModule: KtLibraryModule "Library kotlin-script-runtime" + deprecationStatus: null + hasBackingField: true + hasGetter: true + hasSetter: false + initializer: null + isActual: false + isConst: false + isDelegatedProperty: false + isExpect: false isExtension: false + isFromPrimaryConstructor: false + isLateInit: false + isOverride: false + isStatic: false isVal: true + modality: FINAL name: args - origin: PLUGIN + origin: LIBRARY receiverParameter: null returnType: KtUsualClassType: annotationsList: [] @@ -16,9 +87,19 @@ KtLocalVariableSymbol: type: kotlin/String ] type: kotlin/Array - symbolKind: LOCAL + setter: null + symbolKind: CLASS_MEMBER typeParameters: [] - getContainingFileSymbol: KtFileSymbol(scriptArgument.kts) - getContainingJvmClassName: null - getContainingModule: KtScriptModule "Script scriptArgument.kts" + visibility: Public + getDispatchReceiver(): KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/script/templates/standard/ScriptTemplateWithArgs + getContainingFileSymbol: null + getContainingJvmClassName: kotlin.script.templates.standard.ScriptTemplateWithArgs + getContainingModule: KtLibraryModule "Library kotlin-script-runtime" deprecationStatus: null + getterDeprecationStatus: null + javaGetterName: getArgs + javaSetterName: null + setterDeprecationStatus: null \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.copy.txt b/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.copy.txt index 4487be620b6..96a55f9e3ec 100644 --- a/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.copy.txt +++ b/analysis/low-level-api-fir/testData/contextCollector/scripts/insideClassBody.copy.txt @@ -19,8 +19,6 @@ Tower Data Context: Scope: FirLocalScope Classifiers: FirRegularClassSymbol public final class Foo : R|kotlin/Any| - Properties: - FirPropertySymbol lval args: R|kotlin/Array| Element 8 Context receivers: FirScriptSymbol context(