Replace explicit ScriptDescriptor in resolver with appropriate superclass

This commit is contained in:
Ilya Chernikov
2019-02-11 16:18:13 +01:00
parent 6e120b2173
commit 0839b44ebb
7 changed files with 16 additions and 19 deletions
@@ -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.NoScopeRecordCliBindingTrace
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.container.get 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.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.name.FqName 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.*
import org.jetbrains.kotlin.resolve.lazy.data.KtClassLikeInfo import org.jetbrains.kotlin.resolve.lazy.data.KtClassLikeInfo
import org.jetbrains.kotlin.resolve.lazy.declarations.* 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.ImportingScope
import org.jetbrains.kotlin.resolve.scopes.utils.parentsWithSelf import org.jetbrains.kotlin.resolve.scopes.utils.parentsWithSelf
import org.jetbrains.kotlin.resolve.scopes.utils.replaceImportingScopes import org.jetbrains.kotlin.resolve.scopes.utils.replaceImportingScopes
@@ -80,14 +79,14 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) {
} }
interface ReplLineAnalysisResult { interface ReplLineAnalysisResult {
val scriptDescriptor: ScriptDescriptor? val scriptDescriptor: ClassDescriptorWithResolutionScopes?
val diagnostics: Diagnostics 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 ReplLineAnalysisResult
data class WithErrors(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) val successfulLine = LineInfo.SuccessfulLine(ktFile, successfulLines.lastValue(), scriptDescriptor)
submittedLines[ktFile] = successfulLine submittedLines[ktFile] = successfulLine
successfulLines.add(CompiledReplCodeLine(ktFile.name, codeLine), successfulLine) successfulLines.add(CompiledReplCodeLine(ktFile.name, codeLine), successfulLine)
@@ -213,7 +212,7 @@ class ReplCodeAnalyzer(environment: KotlinCoreEnvironment) {
class SuccessfulLine( class SuccessfulLine(
override val linePsi: KtFile, override val linePsi: KtFile,
override val parentLine: SuccessfulLine?, override val parentLine: SuccessfulLine?,
val lineDescriptor: LazyScriptDescriptor val lineDescriptor: ClassDescriptorWithResolutionScopes
) : LineInfo() ) : LineInfo()
class FailedLine(override val linePsi: KtFile, override val parentLine: SuccessfulLine?) : LineInfo() class FailedLine(override val linePsi: KtFile, override val parentLine: SuccessfulLine?) : LineInfo()
@@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor;
import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
import java.util.Collection; import java.util.Collection;
@@ -40,7 +39,7 @@ public interface BodiesResolveContext {
@Mutable @Mutable
Map<KtSecondaryConstructor, ClassConstructorDescriptor> getSecondaryConstructors(); Map<KtSecondaryConstructor, ClassConstructorDescriptor> getSecondaryConstructors();
@Mutable @Mutable
Map<KtScript, LazyScriptDescriptor> getScripts(); Map<KtScript, ClassDescriptorWithResolutionScopes> getScripts();
@Mutable @Mutable
Map<KtProperty, PropertyDescriptor> getProperties(); Map<KtProperty, PropertyDescriptor> getProperties();
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProvider; import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProvider;
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor;
import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.resolve.scopes.LexicalScope;
import java.io.PrintStream; import java.io.PrintStream;
@@ -46,7 +45,7 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
private final Map<KtDestructuringDeclarationEntry, PropertyDescriptor> destructuringDeclarationEntries = Maps.newLinkedHashMap(); private final Map<KtDestructuringDeclarationEntry, PropertyDescriptor> destructuringDeclarationEntries = Maps.newLinkedHashMap();
private Map<KtCallableDeclaration, CallableMemberDescriptor> members = null; private Map<KtCallableDeclaration, CallableMemberDescriptor> members = null;
private final Map<KtScript, LazyScriptDescriptor> scripts = Maps.newLinkedHashMap(); private final Map<KtScript, ClassDescriptorWithResolutionScopes> scripts = Maps.newLinkedHashMap();
private final TopDownAnalysisMode topDownAnalysisMode; private final TopDownAnalysisMode topDownAnalysisMode;
private final DeclarationScopeProvider declarationScopeProvider; private final DeclarationScopeProvider declarationScopeProvider;
@@ -114,7 +113,7 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
@Override @Override
@NotNull @NotNull
public Map<KtScript, LazyScriptDescriptor> getScripts() { public Map<KtScript, ClassDescriptorWithResolutionScopes> getScripts() {
return scripts; return scripts;
} }
@@ -61,8 +61,8 @@ open class LazyDeclarationResolver @Deprecated("") constructor(
open fun getClassDescriptor(classOrObject: KtClassOrObject, location: LookupLocation): ClassDescriptor = open fun getClassDescriptor(classOrObject: KtClassOrObject, location: LookupLocation): ClassDescriptor =
findClassDescriptor(classOrObject, location) findClassDescriptor(classOrObject, location)
fun getScriptDescriptor(script: KtScript, location: LookupLocation): ScriptDescriptor = fun getScriptDescriptor(script: KtScript, location: LookupLocation): ClassDescriptorWithResolutionScopes =
findClassDescriptor(script, location) as ScriptDescriptor findClassDescriptor(script, location) as ClassDescriptorWithResolutionScopes
private fun findClassDescriptorIfAny( private fun findClassDescriptorIfAny(
classObjectOrScript: KtNamedDeclaration, classObjectOrScript: KtNamedDeclaration,
@@ -294,7 +294,7 @@ public class ResolveSession implements KotlinCodeAnalyzer, LazyClassContext {
} }
@NotNull @NotNull
public ScriptDescriptor getScriptDescriptor(@NotNull KtScript script) { public ClassDescriptorWithResolutionScopes getScriptDescriptor(@NotNull KtScript script) {
return lazyDeclarationResolver.getScriptDescriptor(script, NoLookupLocation.FOR_SCRIPT); return lazyDeclarationResolver.getScriptDescriptor(script, NoLookupLocation.FOR_SCRIPT);
} }
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.resolve.lazy.descriptors
import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.local.CoreLocalFileSystem
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.descriptors.* 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.descriptors.annotations.FilteredAnnotations
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1 import org.jetbrains.kotlin.diagnostics.DiagnosticFactory1
import org.jetbrains.kotlin.diagnostics.Errors 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.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.* 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 // TODO: check if this is the behavior we want to have - see #KT-28916
val ktScript = (psiFile as? KtFile)?.declarations?.firstIsInstanceOrNull<KtScript>() val ktScript = (psiFile as? KtFile)?.declarations?.firstIsInstanceOrNull<KtScript>()
?: return null ?: return null
return resolveSession.getScriptDescriptor(ktScript) return resolveSession.getScriptDescriptor(ktScript) as ScriptDescriptor
} }
} }
@@ -758,7 +758,7 @@ class ResolveElementCache(
override fun getDeclaringScope(declaration: KtDeclaration): LexicalScope? = declaringScopes(declaration) override fun getDeclaringScope(declaration: KtDeclaration): LexicalScope? = declaringScopes(declaration)
override fun getScripts(): MutableMap<KtScript, LazyScriptDescriptor> = hashMapOf() override fun getScripts(): MutableMap<KtScript, ClassDescriptorWithResolutionScopes> = hashMapOf()
override fun getOuterDataFlowInfo(): DataFlowInfo = DataFlowInfo.EMPTY override fun getOuterDataFlowInfo(): DataFlowInfo = DataFlowInfo.EMPTY