diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt index d2ab58602ef..4aa80468357 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt @@ -83,6 +83,7 @@ fun LexicalScope.getImplicitReceiversWithInstanceToExpression( val owner = receiver.containingDeclaration if (owner is ScriptDescriptor) { result[receiver] = null + outerDeclarationsWithInstance.addAll(owner.implicitReceivers) continue } val (expressionText, isImmediateThis) = if (owner in outerDeclarationsWithInstance) { diff --git a/idea/testData/script/definition/completion/implicitReceiver/script.kts b/idea/testData/script/definition/completion/implicitReceiver/script.kts new file mode 100644 index 00000000000..88956825802 --- /dev/null +++ b/idea/testData/script/definition/completion/implicitReceiver/script.kts @@ -0,0 +1,4 @@ +foo + +// EXIST: fooBase, fooImplicitBase +// NOTHING_ELSE \ No newline at end of file diff --git a/idea/testData/script/definition/completion/implicitReceiver/template/template.kt b/idea/testData/script/definition/completion/implicitReceiver/template/template.kt new file mode 100644 index 00000000000..9e10a49487c --- /dev/null +++ b/idea/testData/script/definition/completion/implicitReceiver/template/template.kt @@ -0,0 +1,41 @@ +package custom.scriptDefinition + +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.jvm.dependenciesFromClassContext +import kotlin.script.experimental.jvm.jvm +import kotlin.script.experimental.api.* + +@KotlinScript( + displayName = "Definition for tests", + fileExtension = "kts", + compilationConfiguration = TemplateDefinition::class +) +open class Template(val args: Array) + +@Suppress("UNCHECKED_CAST") +object TemplateDefinition : ScriptCompilationConfiguration( + { + baseClass(Base::class) + jvm { + dependenciesFromClassContext(TemplateDefinition::class) + } + ide { + acceptedLocations(ScriptAcceptedLocation.Everywhere) + } + refineConfiguration { + beforeCompiling { (_, config, _) -> + config.with { + implicitReceivers(ImplicitBase::class) + }.asSuccess() + } + } + } +) + +open class Base { + fun fooBase() {} +} + +class ImplicitBase { + fun fooImplicitBase() {} +} \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/implicitReceiver/script.kts b/idea/testData/script/definition/highlighting/implicitReceiver/script.kts new file mode 100644 index 00000000000..44eeb217a34 --- /dev/null +++ b/idea/testData/script/definition/highlighting/implicitReceiver/script.kts @@ -0,0 +1,2 @@ +fooBase() +fooImplicitBase() diff --git a/idea/testData/script/definition/highlighting/implicitReceiver/template/template.kt b/idea/testData/script/definition/highlighting/implicitReceiver/template/template.kt new file mode 100644 index 00000000000..9e10a49487c --- /dev/null +++ b/idea/testData/script/definition/highlighting/implicitReceiver/template/template.kt @@ -0,0 +1,41 @@ +package custom.scriptDefinition + +import kotlin.script.experimental.annotations.KotlinScript +import kotlin.script.experimental.jvm.dependenciesFromClassContext +import kotlin.script.experimental.jvm.jvm +import kotlin.script.experimental.api.* + +@KotlinScript( + displayName = "Definition for tests", + fileExtension = "kts", + compilationConfiguration = TemplateDefinition::class +) +open class Template(val args: Array) + +@Suppress("UNCHECKED_CAST") +object TemplateDefinition : ScriptCompilationConfiguration( + { + baseClass(Base::class) + jvm { + dependenciesFromClassContext(TemplateDefinition::class) + } + ide { + acceptedLocations(ScriptAcceptedLocation.Everywhere) + } + refineConfiguration { + beforeCompiling { (_, config, _) -> + config.with { + implicitReceivers(ImplicitBase::class) + }.asSuccess() + } + } + } +) + +open class Base { + fun fooBase() {} +} + +class ImplicitBase { + fun fooImplicitBase() {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationCompletionTestGenerated.java index 52589ae7be2..81c413a5fd9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationCompletionTestGenerated.java @@ -37,4 +37,9 @@ public class ScriptConfigurationCompletionTestGenerated extends AbstractScriptCo public void testConflictingModuleJavaLib() throws Exception { runTest("idea/testData/script/definition/completion/conflictingModuleJavaLib/"); } + + @TestMetadata("implicitReceiver") + public void testImplicitReceiver() throws Exception { + runTest("idea/testData/script/definition/completion/implicitReceiver/"); + } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java index b590fa1b1d2..8b0f2742b3c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java @@ -95,6 +95,11 @@ public class ScriptConfigurationHighlightingTestGenerated extends AbstractScript runTest("idea/testData/script/definition/highlighting/errorResolver/"); } + @TestMetadata("implicitReceiver") + public void testImplicitReceiver() throws Exception { + runTest("idea/testData/script/definition/highlighting/implicitReceiver/"); + } + @TestMetadata("javaNestedClass") public void testJavaNestedClass() throws Exception { runTest("idea/testData/script/definition/highlighting/javaNestedClass/");