diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt index 58a99da61f2..953a4d19204 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/AbstractLazyMemberScope.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.lazy.LazyClassContext -import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.data.KtScriptInfo import org.jetbrains.kotlin.resolve.lazy.declarations.AbstractPsiBasedDeclarationProvider import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProvider @@ -55,9 +54,8 @@ protected constructor( private fun doGetClasses(name: Name): List { val result = linkedSetOf() - declarationProvider.getClassOrObjectDeclarations(name).mapTo(result) { - if (it is KtScriptInfo) - LazyScriptDescriptor(c as ResolveSession, thisDescriptor, name, it) + declarationProvider.getClassOrObjectDeclarations(name).mapNotNullTo(result) { + if (it is KtScriptInfo) null else { val isExternal = it.modifierList?.hasModifier(KtTokens.EXTERNAL_KEYWORD) ?: false LazyClassDescriptor(c, thisDescriptor, name, it, isExternal) diff --git a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt index 15f784e2529..518d551b5aa 100644 --- a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt +++ b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerConfigurationExtension.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.extensions.CompilerConfigurationExtension import org.jetbrains.kotlin.idea.KotlinFileType +import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension import org.jetbrains.kotlin.script.ScriptDefinitionProvider import org.jetbrains.kotlin.script.ScriptDependenciesProvider import org.jetbrains.kotlin.script.ScriptReportSink @@ -105,6 +106,7 @@ class ScriptingCompilerConfigurationComponentRegistrar : ComponentRegistrar { ScriptDependenciesProvider::class.java, CliScriptDependenciesProvider(project) ) + SyntheticResolveExtension.registerExtension(project, ScriptingResolveExtension()) val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) if (messageCollector != null) { diff --git a/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/scriptingResolveExtension.kt b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/scriptingResolveExtension.kt new file mode 100644 index 00000000000..46622764ef2 --- /dev/null +++ b/plugins/scripting/scripting-cli/src/org/jetbrains/kotlin/scripting/compiler/plugin/scriptingResolveExtension.kt @@ -0,0 +1,34 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.scripting.compiler.plugin + +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension +import org.jetbrains.kotlin.resolve.lazy.LazyClassContext +import org.jetbrains.kotlin.resolve.lazy.ResolveSession +import org.jetbrains.kotlin.resolve.lazy.data.KtScriptInfo +import org.jetbrains.kotlin.resolve.lazy.declarations.PackageMemberDeclarationProvider +import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor + +class ScriptingResolveExtension : SyntheticResolveExtension { + override fun generateSyntheticClasses( + thisDescriptor: PackageFragmentDescriptor, + name: Name, + ctx: LazyClassContext, + declarationProvider: PackageMemberDeclarationProvider, + result: MutableSet + ) { + declarationProvider.getClassOrObjectDeclarations(name).mapNotNullTo(result) { + if (it is KtScriptInfo) { + LazyScriptDescriptor(ctx as ResolveSession, thisDescriptor, name, it) + } else null + } + + super.generateSyntheticClasses(thisDescriptor, name, ctx, declarationProvider, result) + } +}