Script refactoring, frontend: Treat scripts as classes (as opposed to function bodies)
ScriptDescriptor implements ClassDescriptor Scripts are accessible in IDE via stub index Replace special treatment of scripts with generic mechanism in several cases Scripts to longer generate 'rv' property for storing result value (changes in repl required)
This commit is contained in:
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.resolve.*
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.kotlin.resolve.lazy.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.check
|
||||
|
||||
@@ -491,8 +492,7 @@ public class ResolveElementCache(
|
||||
private fun initializerAdditionalResolve(resolveSession: ResolveSession, classInitializer: KtClassInitializer, file: KtFile, statementFilter: StatementFilter): BindingTrace {
|
||||
val trace = createDelegatingTrace(classInitializer)
|
||||
|
||||
val classOrObject = classInitializer.getParentOfType<KtClassOrObject>(true)!!
|
||||
val classOrObjectDescriptor = resolveSession.resolveToDescriptor(classOrObject) as LazyClassDescriptor
|
||||
val classOrObjectDescriptor = resolveSession.resolveToDescriptor(classInitializer.containingDeclaration) as LazyClassDescriptor
|
||||
|
||||
val bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter)
|
||||
bodyResolver.resolveAnonymousInitializer(DataFlowInfo.EMPTY, classInitializer, classOrObjectDescriptor)
|
||||
@@ -550,7 +550,7 @@ public class ResolveElementCache(
|
||||
|
||||
override fun getDeclaringScope(declaration: KtDeclaration): LexicalScope? = declaringScopes(declaration)
|
||||
|
||||
override fun getScripts(): MutableMap<KtScript, ScriptDescriptor> = hashMapOf()
|
||||
override fun getScripts(): MutableMap<KtScript, LazyScriptDescriptor> = hashMapOf()
|
||||
|
||||
override fun getOuterDataFlowInfo(): DataFlowInfo = DataFlowInfo.EMPTY
|
||||
|
||||
|
||||
+9
-9
@@ -22,19 +22,14 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.PackageMemberDeclarationProvider
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
|
||||
import org.jetbrains.kotlin.resolve.lazy.data.JetClassLikeInfo
|
||||
import org.jetbrains.kotlin.resolve.lazy.data.JetClassInfoUtil
|
||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils
|
||||
import java.util.ArrayList
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionByPackageIndex
|
||||
import com.intellij.psi.stubs.StringStubIndexExtension
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyByPackageIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyFqnNameIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelClassByPackageIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.*
|
||||
import org.jetbrains.kotlin.resolve.lazy.data.JetScriptInfo
|
||||
|
||||
public class StubBasedPackageMemberDeclarationProvider(
|
||||
private val fqName: FqName,
|
||||
@@ -65,8 +60,13 @@ public class StubBasedPackageMemberDeclarationProvider(
|
||||
}
|
||||
|
||||
override fun getClassOrObjectDeclarations(name: Name): Collection<JetClassLikeInfo> {
|
||||
return KotlinFullClassNameIndex.getInstance().get(childName(name), project, searchScope)
|
||||
.map { JetClassInfoUtil.createClassLikeInfo(it) }
|
||||
val result = ArrayList<JetClassLikeInfo>()
|
||||
KotlinFullClassNameIndex.getInstance().get(childName(name), project, searchScope)
|
||||
.mapTo(result) { JetClassInfoUtil.createClassLikeInfo(it) }
|
||||
|
||||
KotlinScriptFqnIndex.instance.get(childName(name), project, searchScope)
|
||||
.mapTo(result) { JetScriptInfo(it) }
|
||||
return result
|
||||
}
|
||||
|
||||
override fun getFunctionDeclarations(name: Name): Collection<KtNamedFunction> {
|
||||
|
||||
Reference in New Issue
Block a user