From 0839b44ebb814e8ec2ed02d2b7e88ff1fad620f5 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 11 Feb 2019 16:18:13 +0100 Subject: [PATCH] Replace explicit ScriptDescriptor in resolver with appropriate superclass --- .../kotlin/cli/jvm/repl/ReplCodeAnalyzer.kt | 13 ++++++------- .../kotlin/resolve/BodiesResolveContext.java | 3 +-- .../kotlin/resolve/TopDownAnalysisContext.java | 5 ++--- .../kotlin/resolve/lazy/LazyDeclarationResolver.kt | 4 ++-- .../kotlin/resolve/lazy/ResolveSession.java | 2 +- .../lazy/descriptors/LazyScriptDescriptor.kt | 6 +++--- .../kotlin/idea/project/ResolveElementCache.kt | 2 +- 7 files changed, 16 insertions(+), 19 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplCodeAnalyzer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplCodeAnalyzer.kt index 49a2a6c6eb1..0a477661bad 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplCodeAnalyzer.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/ReplCodeAnalyzer.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.container.get -import org.jetbrains.kotlin.descriptors.ScriptDescriptor +import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.name.FqName @@ -40,7 +40,6 @@ import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.resolve.lazy.* import org.jetbrains.kotlin.resolve.lazy.data.KtClassLikeInfo import org.jetbrains.kotlin.resolve.lazy.declarations.* -import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor import org.jetbrains.kotlin.resolve.scopes.ImportingScope import org.jetbrains.kotlin.resolve.scopes.utils.parentsWithSelf import org.jetbrains.kotlin.resolve.scopes.utils.replaceImportingScopes @@ -80,14 +79,14 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) { } interface ReplLineAnalysisResult { - val scriptDescriptor: ScriptDescriptor? + val scriptDescriptor: ClassDescriptorWithResolutionScopes? val diagnostics: Diagnostics - data class Successful(override val scriptDescriptor: ScriptDescriptor, override val diagnostics: Diagnostics) : + data class Successful(override val scriptDescriptor: ClassDescriptorWithResolutionScopes, override val diagnostics: Diagnostics) : ReplLineAnalysisResult data class WithErrors(override val diagnostics: Diagnostics) : ReplLineAnalysisResult { - override val scriptDescriptor: ScriptDescriptor? get() = null + override val scriptDescriptor: ClassDescriptorWithResolutionScopes? get() = null } } @@ -192,7 +191,7 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) { } } - fun lineSuccess(ktFile: KtFile, codeLine: ReplCodeLine, scriptDescriptor: LazyScriptDescriptor) { + fun lineSuccess(ktFile: KtFile, codeLine: ReplCodeLine, scriptDescriptor: ClassDescriptorWithResolutionScopes) { val successfulLine = LineInfo.SuccessfulLine(ktFile, successfulLines.lastValue(), scriptDescriptor) submittedLines[ktFile] = successfulLine successfulLines.add(CompiledReplCodeLine(ktFile.name, codeLine), successfulLine) @@ -213,7 +212,7 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) { class SuccessfulLine( override val linePsi: KtFile, override val parentLine: SuccessfulLine?, - val lineDescriptor: LazyScriptDescriptor + val lineDescriptor: ClassDescriptorWithResolutionScopes ) : LineInfo() class FailedLine(override val linePsi: KtFile, override val parentLine: SuccessfulLine?) : LineInfo() diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodiesResolveContext.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodiesResolveContext.java index 4d0b6bf4f1e..1a148c41237 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodiesResolveContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodiesResolveContext.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; -import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor; import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import java.util.Collection; @@ -40,7 +39,7 @@ public interface BodiesResolveContext { @Mutable Map getSecondaryConstructors(); @Mutable - Map getScripts(); + Map getScripts(); @Mutable Map getProperties(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TopDownAnalysisContext.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TopDownAnalysisContext.java index 41b13810719..e792e46db9c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TopDownAnalysisContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TopDownAnalysisContext.java @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProvider; -import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor; import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import java.io.PrintStream; @@ -46,7 +45,7 @@ public class TopDownAnalysisContext implements BodiesResolveContext { private final Map destructuringDeclarationEntries = Maps.newLinkedHashMap(); private Map members = null; - private final Map scripts = Maps.newLinkedHashMap(); + private final Map scripts = Maps.newLinkedHashMap(); private final TopDownAnalysisMode topDownAnalysisMode; private final DeclarationScopeProvider declarationScopeProvider; @@ -114,7 +113,7 @@ public class TopDownAnalysisContext implements BodiesResolveContext { @Override @NotNull - public Map getScripts() { + public Map getScripts() { return scripts; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyDeclarationResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyDeclarationResolver.kt index 3445c857df5..bcee698351b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyDeclarationResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyDeclarationResolver.kt @@ -61,8 +61,8 @@ open class LazyDeclarationResolver @Deprecated("") constructor( open fun getClassDescriptor(classOrObject: KtClassOrObject, location: LookupLocation): ClassDescriptor = findClassDescriptor(classOrObject, location) - fun getScriptDescriptor(script: KtScript, location: LookupLocation): ScriptDescriptor = - findClassDescriptor(script, location) as ScriptDescriptor + fun getScriptDescriptor(script: KtScript, location: LookupLocation): ClassDescriptorWithResolutionScopes = + findClassDescriptor(script, location) as ClassDescriptorWithResolutionScopes private fun findClassDescriptorIfAny( classObjectOrScript: KtNamedDeclaration, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java index 784fb3dbac9..b23b7db005d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSession.java @@ -294,7 +294,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext { } @NotNull - public ScriptDescriptor getScriptDescriptor(@NotNull KtScript script) { + public ClassDescriptorWithResolutionScopes getScriptDescriptor(@NotNull KtScript script) { return lazyDeclarationResolver.getScriptDescriptor(script, NoLookupLocation.FOR_SCRIPT); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt index ac9f50d1280..faca9c0547e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.VirtualFileManager -import com.intellij.openapi.vfs.local.CoreLocalFileSystem import com.intellij.psi.PsiElement import com.intellij.psi.PsiManager import org.jetbrains.kotlin.descriptors.* @@ -26,7 +25,8 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.annotations.FilteredAnnotations import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1 import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.diagnostics.Errors.* +import org.jetbrains.kotlin.diagnostics.Errors.MISSING_IMPORTED_SCRIPT_FILE +import org.jetbrains.kotlin.diagnostics.Errors.MISSING_IMPORTED_SCRIPT_PSI import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* @@ -170,7 +170,7 @@ class LazyScriptDescriptor( // TODO: check if this is the behavior we want to have - see #KT-28916 val ktScript = (psiFile as? KtFile)?.declarations?.firstIsInstanceOrNull() ?: return null - return resolveSession.getScriptDescriptor(ktScript) + return resolveSession.getScriptDescriptor(ktScript) as ScriptDescriptor } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt index b1618456643..53c7c481aa4 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt @@ -758,7 +758,7 @@ class ResolveElementCache( override fun getDeclaringScope(declaration: KtDeclaration): LexicalScope? = declaringScopes(declaration) - override fun getScripts(): MutableMap = hashMapOf() + override fun getScripts(): MutableMap = hashMapOf() override fun getOuterDataFlowInfo(): DataFlowInfo = DataFlowInfo.EMPTY