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
This commit is contained in:
Ilya Chernikov
2024-02-14 16:49:48 +01:00
committed by Space Team
parent 49559d2a5a
commit 9037975758
33 changed files with 138 additions and 58 deletions
@@ -1,2 +1,2 @@
Resolved to: Resolved to:
0: (in <local>: <script-ScriptArgument.kts>) val args: kotlin.Array<kotlin.String> 0: (in kotlin.script.templates.standard.ScriptTemplateWithArgs) val args: kotlin.Array<kotlin.String>
@@ -1,5 +1,3 @@
// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE
fun foo() { fun foo() {
ar<caret>gs ar<caret>gs
} }
@@ -1,11 +1,82 @@
KtLocalVariableSymbol: KtKotlinPropertySymbol:
annotationsList: [] 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<kotlin/String>
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: [] 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<kotlin/String>
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 isExtension: false
isFromPrimaryConstructor: false
isLateInit: false
isOverride: false
isStatic: false
isVal: true isVal: true
modality: FINAL
name: args name: args
origin: PLUGIN origin: LIBRARY
receiverParameter: null receiverParameter: null
returnType: KtUsualClassType: returnType: KtUsualClassType:
annotationsList: [] annotationsList: []
@@ -16,9 +87,19 @@ KtLocalVariableSymbol:
type: kotlin/String type: kotlin/String
] ]
type: kotlin/Array<kotlin/String> type: kotlin/Array<kotlin/String>
symbolKind: LOCAL setter: null
symbolKind: CLASS_MEMBER
typeParameters: [] typeParameters: []
getContainingFileSymbol: KtFileSymbol(scriptArgument.kts) visibility: Public
getContainingJvmClassName: null getDispatchReceiver(): KtUsualClassType:
getContainingModule: KtScriptModule "Script scriptArgument.kts" annotationsList: []
ownTypeArguments: []
type: kotlin/script/templates/standard/ScriptTemplateWithArgs
getContainingFileSymbol: null
getContainingJvmClassName: kotlin.script.templates.standard.ScriptTemplateWithArgs
getContainingModule: KtLibraryModule "Library kotlin-script-runtime"
deprecationStatus: null deprecationStatus: null
getterDeprecationStatus: null
javaGetterName: getArgs
javaSetterName: null
setterDeprecationStatus: null
@@ -19,8 +19,6 @@ Tower Data Context:
Scope: FirLocalScope Scope: FirLocalScope
Classifiers: Classifiers:
FirRegularClassSymbol public final class Foo : R|kotlin/Any| FirRegularClassSymbol public final class Foo : R|kotlin/Any|
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -19,8 +19,6 @@ Tower Data Context:
Scope: FirLocalScope Scope: FirLocalScope
Classifiers: Classifiers:
FirRegularClassSymbol public final class Foo : R|kotlin/Any| FirRegularClassSymbol public final class Foo : R|kotlin/Any|
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -29,8 +29,6 @@ Tower Data Context:
Scope: FirLocalScope Scope: FirLocalScope
Classifiers: Classifiers:
FirRegularClassSymbol public final class MyClass : R|kotlin/Any| FirRegularClassSymbol public final class MyClass : R|kotlin/Any|
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -29,8 +29,6 @@ Tower Data Context:
Scope: FirLocalScope Scope: FirLocalScope
Classifiers: Classifiers:
FirRegularClassSymbol public final class MyClass : R|kotlin/Any| FirRegularClassSymbol public final class MyClass : R|kotlin/Any|
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -29,8 +29,6 @@ Tower Data Context:
Scope: FirLocalScope Scope: FirLocalScope
Functions Functions
FirNamedFunctionSymbol public final fun usage(foo: R|kotlin/Int|): R|kotlin/Unit| FirNamedFunctionSymbol public final fun usage(foo: R|kotlin/Int|): R|kotlin/Unit|
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -29,8 +29,6 @@ Tower Data Context:
Scope: FirLocalScope Scope: FirLocalScope
Functions Functions
FirNamedFunctionSymbol public final fun usage(foo: R|kotlin/Int|): R|kotlin/Unit| FirNamedFunctionSymbol public final fun usage(foo: R|kotlin/Int|): R|kotlin/Unit|
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -24,8 +24,6 @@ Tower Data Context:
public get(): R|kotlin/Unit| public get(): R|kotlin/Unit|
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -24,8 +24,6 @@ Tower Data Context:
public get(): R|kotlin/Unit| public get(): R|kotlin/Unit|
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -24,8 +24,6 @@ Tower Data Context:
public get(): R|kotlin/Unit| public get(): R|kotlin/Unit|
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -24,8 +24,6 @@ Tower Data Context:
public get(): R|kotlin/Unit| public get(): R|kotlin/Unit|
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -24,8 +24,6 @@ Tower Data Context:
public get(): R|kotlin/Unit| public get(): R|kotlin/Unit|
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -24,8 +24,6 @@ Tower Data Context:
public get(): <implicit> public get(): <implicit>
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -26,8 +26,6 @@ Tower Data Context:
public get(): R|kotlin/Int| public get(): R|kotlin/Int|
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -70,7 +68,7 @@ FILE: [ResolvedTo(IMPORTS)] topLevel.kts
} }
[ResolvedTo(BODY_RESOLVE)] init { [ResolvedTo(BODY_RESOLVE)] init {
R|<local>/args| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|
} }
public? final? [ResolvedTo(RAW_FIR)] fun after_Fun(): R|kotlin/Unit| { LAZY_BLOCK } public? final? [ResolvedTo(RAW_FIR)] fun after_Fun(): R|kotlin/Unit| { LAZY_BLOCK }
@@ -26,8 +26,6 @@ Tower Data Context:
public? get(): <implicit> public? get(): <implicit>
Element 7 Element 7
Scope: FirLocalScope Scope: FirLocalScope
Properties:
FirPropertySymbol lval args: R|kotlin/Array<kotlin/String>|
Element 8 Element 8
Context receivers: Context receivers:
FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|) FirScriptSymbol context(<script>@R|kotlin/script/templates/standard/ScriptTemplateWithArgs|)
@@ -70,7 +68,7 @@ FILE: [ResolvedTo(IMPORTS)] topLevel.kts
} }
[ResolvedTo(BODY_RESOLVE)] init { [ResolvedTo(BODY_RESOLVE)] init {
R|<local>/args| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|
} }
public? final? [ResolvedTo(RAW_FIR)] fun after_Fun(): R|kotlin/Unit| { LAZY_BLOCK } public? final? [ResolvedTo(RAW_FIR)] fun after_Fun(): R|kotlin/Unit| { LAZY_BLOCK }
@@ -3,7 +3,7 @@ FIR element: FirPropertyAccessExpressionImpl
FIR source kind: KtRealSourceElementKind FIR source kind: KtRealSourceElementKind
FIR element rendered: FIR element rendered:
R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
FIR FILE: FIR FILE:
FILE: [ResolvedTo(IMPORTS)] argsFromFunction.kts FILE: [ResolvedTo(IMPORTS)] argsFromFunction.kts
@@ -12,5 +12,5 @@ FILE: [ResolvedTo(IMPORTS)] argsFromFunction.kts
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>| [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(BODY_RESOLVE)] fun foo(): R|kotlin/Int| { public final [ResolvedTo(BODY_RESOLVE)] fun foo(): R|kotlin/Int| {
^foo R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| ^foo this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
} }
@@ -4,7 +4,7 @@ FIR source kind: KtRealSourceElementKind
FIR element rendered: FIR element rendered:
{ {
^ R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| ^ this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
} }
FIR FILE: FIR FILE:
@@ -20,7 +20,7 @@ FILE: [ResolvedTo(IMPORTS)] argsFromInit.kts
[ResolvedTo(BODY_RESOLVE)] init { [ResolvedTo(BODY_RESOLVE)] init {
<Unresolved name: foo>#(<L> = [ResolvedTo(BODY_RESOLVE)] foo@fun <anonymous>(): R|kotlin/Int| <inline=Unknown> { <Unresolved name: foo>#(<L> = [ResolvedTo(BODY_RESOLVE)] foo@fun <anonymous>(): R|kotlin/Int| <inline=Unknown> {
^ R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| ^ this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
} }
) )
} }
@@ -3,7 +3,7 @@ FIR element: FirPropertyAccessExpressionImpl
FIR source kind: KtRealSourceElementKind FIR source kind: KtRealSourceElementKind
FIR element rendered: FIR element rendered:
R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
FIR FILE: FIR FILE:
FILE: [ResolvedTo(IMPORTS)] argsFromMemberFunction.kts FILE: [ResolvedTo(IMPORTS)] argsFromMemberFunction.kts
@@ -17,7 +17,7 @@ FILE: [ResolvedTo(IMPORTS)] argsFromMemberFunction.kts
} }
public final [ResolvedTo(BODY_RESOLVE)] fun foo(): R|kotlin/Unit| { public final [ResolvedTo(BODY_RESOLVE)] fun foo(): R|kotlin/Unit| {
R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
} }
} }
@@ -3,7 +3,7 @@ FIR element: FirPropertyAccessExpressionImpl
FIR source kind: KtRealSourceElementKind FIR source kind: KtRealSourceElementKind
FIR element rendered: FIR element rendered:
R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
FIR FILE: FIR FILE:
FILE: [ResolvedTo(IMPORTS)] argsFromMemberProperty.kts FILE: [ResolvedTo(IMPORTS)] argsFromMemberProperty.kts
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] argsFromMemberProperty.kts
public final [ResolvedTo(BODY_RESOLVE)] val i: R|kotlin/Int| public final [ResolvedTo(BODY_RESOLVE)] val i: R|kotlin/Int|
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] get(): R|kotlin/Int| { public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=A] get(): R|kotlin/Int| {
^ R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| ^ this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
} }
} }
@@ -3,7 +3,7 @@ FIR element: FirPropertyAccessExpressionImpl
FIR source kind: KtRealSourceElementKind FIR source kind: KtRealSourceElementKind
FIR element rendered: FIR element rendered:
R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
FIR FILE: FIR FILE:
FILE: [ResolvedTo(IMPORTS)] argsFromProperty.kts FILE: [ResolvedTo(IMPORTS)] argsFromProperty.kts
@@ -11,5 +11,5 @@ FILE: [ResolvedTo(IMPORTS)] argsFromProperty.kts
SCRIPT: [ResolvedTo(TYPES)] <script-argsFromProperty.kts> SCRIPT: [ResolvedTo(TYPES)] <script-argsFromProperty.kts>
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>| [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(BODY_RESOLVE)] val bar: R|kotlin/Int| = R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| public final [ResolvedTo(BODY_RESOLVE)] val bar: R|kotlin/Int| = this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
public [ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/Int| public [ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/Int|
@@ -3,7 +3,7 @@ FIR element: FirPropertyAccessExpressionImpl
FIR source kind: KtRealSourceElementKind FIR source kind: KtRealSourceElementKind
FIR element rendered: FIR element rendered:
R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
FIR FILE: FIR FILE:
FILE: [ResolvedTo(IMPORTS)] argsFromStatement.kts FILE: [ResolvedTo(IMPORTS)] argsFromStatement.kts
@@ -12,7 +12,7 @@ FILE: [ResolvedTo(IMPORTS)] argsFromStatement.kts
[ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>| [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array<kotlin/String>|
public final [ResolvedTo(BODY_RESOLVE)] val $$result: <ERROR TYPE REF: Unresolved name: foo> = <Unresolved name: foo>#(<L> = [ResolvedTo(BODY_RESOLVE)] foo@fun <anonymous>(): R|kotlin/Int| <inline=Unknown> { public final [ResolvedTo(BODY_RESOLVE)] val $$result: <ERROR TYPE REF: Unresolved name: foo> = <Unresolved name: foo>#(<L> = [ResolvedTo(BODY_RESOLVE)] foo@fun <anonymous>(): R|kotlin/Int| <inline=Unknown> {
^ R|<local>/args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>| ^ this@R|?|.R|kotlin/script/templates/standard/ScriptTemplateWithArgs.args|.R|SubstitutionOverride<kotlin/Array.size: R|kotlin/Int|>|
} }
) )
public [ResolvedTo(BODY_RESOLVE)] get(): <ERROR TYPE REF: Unresolved name: foo> public [ResolvedTo(BODY_RESOLVE)] get(): <ERROR TYPE REF: Unresolved name: foo>
@@ -534,7 +534,11 @@ class BodyResolveContext(
val statics = base val statics = base
.addNonLocalScopeIfNotNull(towerElementsForScript.staticScope) .addNonLocalScopeIfNotNull(towerElementsForScript.staticScope)
val parameterScope = owner.parameters.fold(FirLocalScope(holder.session)) { scope, parameter -> val parameterScope = owner.parameters.filter {
// for compatibility with old script resolve, the parameters that implicitly copied from the base class c-tor are ignored here
// this quirk should be removed after removing base class support (KT-60449)
it.origin != FirDeclarationOrigin.ScriptCustomization.ParameterFromBaseClass
}.fold(FirLocalScope(holder.session)) { scope, parameter ->
scope.storeVariable(parameter, holder.session) scope.storeVariable(parameter, holder.session)
} }
@@ -555,7 +555,9 @@ open class FirDeclarationsResolveTransformer(
.transformOtherChildren(transformer, ResolutionMode.ContextIndependent) .transformOtherChildren(transformer, ResolutionMode.ContextIndependent)
context.storeVariable(variable, session) context.storeVariable(variable, session)
if (variable.origin != FirDeclarationOrigin.ScriptCustomization.Parameter) { if (variable.origin != FirDeclarationOrigin.ScriptCustomization.Parameter &&
variable.origin != FirDeclarationOrigin.ScriptCustomization.ParameterFromBaseClass)
{
// script parameters should not be added to CFG to avoid graph building compilations // script parameters should not be added to CFG to avoid graph building compilations
dataFlowAnalyzer.exitLocalVariableDeclaration(variable, hadExplicitType) dataFlowAnalyzer.exitLocalVariableDeclaration(variable, hadExplicitType)
} }
@@ -54,6 +54,7 @@ sealed class FirDeclarationOrigin(
object Default : ScriptCustomization(FirScriptCustomizationKind.DEFAULT) object Default : ScriptCustomization(FirScriptCustomizationKind.DEFAULT)
object ResultProperty : ScriptCustomization(FirScriptCustomizationKind.RESULT_PROPERTY) object ResultProperty : ScriptCustomization(FirScriptCustomizationKind.RESULT_PROPERTY)
object Parameter : ScriptCustomization(FirScriptCustomizationKind.PARAMETER) object Parameter : ScriptCustomization(FirScriptCustomizationKind.PARAMETER)
object ParameterFromBaseClass : ScriptCustomization(FirScriptCustomizationKind.PARAMETER_FROM_BASE_CLASS)
} }
class Plugin(val key: GeneratedDeclarationKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true) class Plugin(val key: GeneratedDeclarationKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true)
@@ -11,5 +11,6 @@ const val SCRIPT_RECEIVER_NAME_PREFIX = "\$script_receiver"
enum class FirScriptCustomizationKind { enum class FirScriptCustomizationKind {
DEFAULT, DEFAULT,
RESULT_PROPERTY, RESULT_PROPERTY,
PARAMETER PARAMETER,
PARAMETER_FROM_BASE_CLASS, // TODO: remove after fixing KT-60449
} }
@@ -93,7 +93,7 @@ class FirScriptConfiguratorExtensionImpl(
buildProperty { buildProperty {
moduleData = session.moduleData moduleData = session.moduleData
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter) source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
origin = FirDeclarationOrigin.ScriptCustomization.Parameter origin = FirDeclarationOrigin.ScriptCustomization.ParameterFromBaseClass
// TODO: copy type parameters? // TODO: copy type parameters?
returnTypeRef = baseCtorParameter.returnTypeRef returnTypeRef = baseCtorParameter.returnTypeRef
name = baseCtorParameter.name name = baseCtorParameter.name
@@ -119,8 +119,7 @@ class ScriptTemplateTest : TestCase() {
assertEqualsTrimmed(NUM_4_LINE + FIB_SCRIPT_OUTPUT_TAIL, out) assertEqualsTrimmed(NUM_4_LINE + FIB_SCRIPT_OUTPUT_TAIL, out)
} }
// Fails on K2, see KT-60452 fun testScriptWithoutParams() {
fun testScriptWithoutParams() = expectTestToFailOnK2 {
val messageCollector = TestMessageCollector() val messageCollector = TestMessageCollector()
val aClass = compileScript("without_params.kts", ScriptWithoutParams::class, null, messageCollector = messageCollector) val aClass = compileScript("without_params.kts", ScriptWithoutParams::class, null, messageCollector = messageCollector)
Assert.assertNotNull("Compilation failed:\n$messageCollector", aClass) Assert.assertNotNull("Compilation failed:\n$messageCollector", aClass)
@@ -0,0 +1,5 @@
// param: O K
val rv = args[0] + args[1]
// expected: rv: OK
@@ -0,0 +1,5 @@
// SCRIPT_PROVIDED_PROPERTIES: prop1: kotlin.String
val prop1 = 42 // TODO: Error should be reported on this shadowing, see KT-65809
val rv = 0 <!NONE_APPLICABLE!>+<!> prop1
@@ -25,6 +25,12 @@ public class ScriptWithCustomDefBlackBoxCodegenTestGenerated extends AbstractScr
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/scripting/scripting-tests/testData/codegen/testScripts"), Pattern.compile("^(.+)\\.kts$"), null, TargetBackend.JVM_IR, true); KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/scripting/scripting-tests/testData/codegen/testScripts"), Pattern.compile("^(.+)\\.kts$"), null, TargetBackend.JVM_IR, true);
} }
@Test
@TestMetadata("params.test.kts")
public void testParams_test() {
runTest("plugins/scripting/scripting-tests/testData/codegen/testScripts/params.test.kts");
}
@Test @Test
@TestMetadata("simple.test.kts") @TestMetadata("simple.test.kts")
public void testSimple_test() { public void testSimple_test() {
@@ -24,6 +24,12 @@ public class ScriptWithCustomDefDiagnosticsTestBaseGenerated extends AbstractScr
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/scripting/scripting-tests/testData/diagnostics/testScripts"), Pattern.compile("^(.+)\\.kts$"), null, true); KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("plugins/scripting/scripting-tests/testData/diagnostics/testScripts"), Pattern.compile("^(.+)\\.kts$"), null, true);
} }
@Test
@TestMetadata("providedPropertiesShadowing.test.kts")
public void testProvidedPropertiesShadowing_test() {
runTest("plugins/scripting/scripting-tests/testData/diagnostics/testScripts/providedPropertiesShadowing.test.kts");
}
@Test @Test
@TestMetadata("providedProperties.test.kts") @TestMetadata("providedProperties.test.kts")
public void testProvidedProperties_test() { public void testProvidedProperties_test() {