Replace unnecessary direct usages of the LazyScriptDescriptor with ScriptDescriptor interface
lift result property to the interface to implement it
This commit is contained in:
@@ -27,8 +27,8 @@ import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
|||||||
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
|
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -88,7 +88,7 @@ open class GenericReplCompiler(
|
|||||||
else -> error("Unexpected result ${analysisResult::class.java}")
|
else -> error("Unexpected result ${analysisResult::class.java}")
|
||||||
}
|
}
|
||||||
|
|
||||||
val type = (scriptDescriptor as LazyScriptDescriptor).resultValue?.returnType
|
val type = (scriptDescriptor as ScriptDescriptor).resultValue?.returnType
|
||||||
|
|
||||||
val generationState = GenerationState.Builder(
|
val generationState = GenerationState.Builder(
|
||||||
psiFile.project,
|
psiFile.project,
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.resolve.checkers.checkClassifierUsages
|
|||||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
||||||
import org.jetbrains.kotlin.resolve.lazy.*
|
import org.jetbrains.kotlin.resolve.lazy.*
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class LazyTopDownAnalyzer(
|
class LazyTopDownAnalyzer(
|
||||||
@@ -87,7 +86,7 @@ class LazyTopDownAnalyzer(
|
|||||||
override fun visitScript(script: KtScript) {
|
override fun visitScript(script: KtScript) {
|
||||||
c.scripts.put(
|
c.scripts.put(
|
||||||
script,
|
script,
|
||||||
lazyDeclarationResolver.getScriptDescriptor(script, KotlinLookupLocation(script)) as LazyScriptDescriptor
|
lazyDeclarationResolver.getScriptDescriptor(script, KotlinLookupLocation(script))
|
||||||
)
|
)
|
||||||
registerDeclarations(script.declarations)
|
registerDeclarations(script.declarations)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -18,13 +18,13 @@ package org.jetbrains.kotlin.resolve.lazy;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes;
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt;
|
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfoFactory;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor;
|
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.resolve.scopes.LexicalScope;
|
||||||
|
|
||||||
public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {
|
public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {
|
||||||
@@ -81,7 +81,8 @@ public class DeclarationScopeProviderImpl implements DeclarationScopeProvider {
|
|||||||
}
|
}
|
||||||
//TODO: this is not how it works for classes and for exact parity we can try to use the code above
|
//TODO: this is not how it works for classes and for exact parity we can try to use the code above
|
||||||
if (parentDeclaration instanceof KtScript) {
|
if (parentDeclaration instanceof KtScript) {
|
||||||
LazyScriptDescriptor scriptDescriptor = (LazyScriptDescriptor) lazyDeclarationResolver.resolveToDescriptor(parentDeclaration);
|
ClassDescriptorWithResolutionScopes
|
||||||
|
scriptDescriptor = (ClassDescriptorWithResolutionScopes) lazyDeclarationResolver.resolveToDescriptor(parentDeclaration);
|
||||||
return scriptDescriptor.getScopeForInitializerResolution();
|
return scriptDescriptor.getScopeForInitializerResolution();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -73,9 +73,7 @@ class LazyScriptDescriptor(
|
|||||||
resolveSession.trace.record(BindingContext.SCRIPT, scriptInfo.script, this)
|
resolveSession.trace.record(BindingContext.SCRIPT, scriptInfo.script, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
val resultValue: ReplResultPropertyDescriptor? by lazy { provideResultValue() }
|
override fun getResultValue(): ReplResultPropertyDescriptor? {
|
||||||
|
|
||||||
private fun provideResultValue(): ReplResultPropertyDescriptor? {
|
|
||||||
val expression = scriptInfo.script
|
val expression = scriptInfo.script
|
||||||
.getChildOfType<KtBlockExpression>()
|
.getChildOfType<KtBlockExpression>()
|
||||||
?.getChildrenOfType<KtScriptInitializer>()?.lastOrNull()
|
?.getChildrenOfType<KtScriptInitializer>()?.lastOrNull()
|
||||||
|
|||||||
+1
-2
@@ -9,14 +9,13 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class ReplResultPropertyDescriptor(
|
class ReplResultPropertyDescriptor(
|
||||||
name: Name,
|
name: Name,
|
||||||
kotlinType: KotlinType,
|
kotlinType: KotlinType,
|
||||||
receiver: ReceiverParameterDescriptor?,
|
receiver: ReceiverParameterDescriptor?,
|
||||||
script: LazyScriptDescriptor,
|
script: ScriptDescriptor,
|
||||||
source: SourceElement
|
source: SourceElement
|
||||||
) : PropertyDescriptorImpl(
|
) : PropertyDescriptorImpl(
|
||||||
script,
|
script,
|
||||||
|
|||||||
+1
-2
@@ -12,14 +12,13 @@ import org.jetbrains.kotlin.descriptors.impl.PropertyGetterDescriptorImpl
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.PropertySetterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.PropertySetterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
|
||||||
|
|
||||||
class ScriptProvidedPropertyDescriptor(
|
class ScriptProvidedPropertyDescriptor(
|
||||||
name: Name,
|
name: Name,
|
||||||
typeDescriptor: ClassDescriptor,
|
typeDescriptor: ClassDescriptor,
|
||||||
receiver: ReceiverParameterDescriptor?,
|
receiver: ReceiverParameterDescriptor?,
|
||||||
isVar: Boolean,
|
isVar: Boolean,
|
||||||
script: LazyScriptDescriptor
|
script: ScriptDescriptor
|
||||||
) : PropertyDescriptorImpl(
|
) : PropertyDescriptorImpl(
|
||||||
script,
|
script,
|
||||||
null,
|
null,
|
||||||
|
|||||||
@@ -16,11 +16,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.repl
|
package org.jetbrains.kotlin.resolve.repl
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes
|
||||||
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.lazy.FileScopeFactory
|
import org.jetbrains.kotlin.resolve.lazy.FileScopeFactory
|
||||||
import org.jetbrains.kotlin.resolve.lazy.FileScopes
|
import org.jetbrains.kotlin.resolve.lazy.FileScopes
|
||||||
import org.jetbrains.kotlin.resolve.lazy.FileScopesCustomizer
|
import org.jetbrains.kotlin.resolve.lazy.FileScopesCustomizer
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
|
||||||
import org.jetbrains.kotlin.resolve.lazy.fileScopesCustomizer
|
import org.jetbrains.kotlin.resolve.lazy.fileScopesCustomizer
|
||||||
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
|
||||||
@@ -44,7 +45,7 @@ class ReplState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun lineSuccess(ktFile: KtFile, scriptDescriptor: LazyScriptDescriptor) {
|
fun lineSuccess(ktFile: KtFile, scriptDescriptor: ScriptDescriptor) {
|
||||||
val successfulLine = LineInfo.SuccessfulLine(ktFile, successfulLines.lastOrNull(), scriptDescriptor)
|
val successfulLine = LineInfo.SuccessfulLine(ktFile, successfulLines.lastOrNull(), scriptDescriptor)
|
||||||
lines[ktFile] = successfulLine
|
lines[ktFile] = successfulLine
|
||||||
successfulLines.add(successfulLine)
|
successfulLines.add(successfulLine)
|
||||||
@@ -65,7 +66,7 @@ class ReplState {
|
|||||||
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: ScriptDescriptor
|
||||||
) : LineInfo()
|
) : LineInfo()
|
||||||
|
|
||||||
class FailedLine(override val linePsi: KtFile, override val parentLine: SuccessfulLine?) : LineInfo()
|
class FailedLine(override val linePsi: KtFile, override val parentLine: SuccessfulLine?) : LineInfo()
|
||||||
@@ -73,7 +74,8 @@ class ReplState {
|
|||||||
|
|
||||||
private fun computeFileScopes(lineInfo: LineInfo, fileScopeFactory: FileScopeFactory): FileScopes? {
|
private fun computeFileScopes(lineInfo: LineInfo, fileScopeFactory: FileScopeFactory): FileScopes? {
|
||||||
// create scope that wraps previous line lexical scope and adds imports from this line
|
// create scope that wraps previous line lexical scope and adds imports from this line
|
||||||
val lexicalScopeAfterLastLine = lineInfo.parentLine?.lineDescriptor?.scopeForInitializerResolution ?: return null
|
val lexicalScopeAfterLastLine =
|
||||||
|
(lineInfo.parentLine?.lineDescriptor as? ClassDescriptorWithResolutionScopes)?.scopeForInitializerResolution ?: return null
|
||||||
val lastLineImports = lexicalScopeAfterLastLine.parentsWithSelf.firstIsInstance<ImportingScope>()
|
val lastLineImports = lexicalScopeAfterLastLine.parentsWithSelf.firstIsInstance<ImportingScope>()
|
||||||
val scopesForThisLine = fileScopeFactory.createScopesForFile(lineInfo.linePsi, lastLineImports)
|
val scopesForThisLine = fileScopeFactory.createScopesForFile(lineInfo.linePsi, lastLineImports)
|
||||||
val combinedLexicalScopes = lexicalScopeAfterLastLine.replaceImportingScopes(scopesForThisLine.importingScope)
|
val combinedLexicalScopes = lexicalScopeAfterLastLine.replaceImportingScopes(scopesForThisLine.importingScope)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.descriptors;
|
package org.jetbrains.kotlin.descriptors;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -32,4 +33,7 @@ public interface ScriptDescriptor extends ClassDescriptor {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
List<PropertyDescriptor> getScriptProvidedProperties();
|
List<PropertyDescriptor> getScriptProvidedProperties();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
PropertyDescriptor getResultValue();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,12 +33,14 @@ import org.jetbrains.kotlin.frontend.di.createContainerForBodyResolve
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.CodeFragmentAnalyzer
|
import org.jetbrains.kotlin.idea.caches.resolve.CodeFragmentAnalyzer
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.lazy.*
|
import org.jetbrains.kotlin.resolve.lazy.*
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
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.resolve.scopes.LexicalScope
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ import org.jetbrains.kotlin.console.gutter.ConsoleGutterContentProvider
|
|||||||
import org.jetbrains.kotlin.console.gutter.ConsoleIndicatorRenderer
|
import org.jetbrains.kotlin.console.gutter.ConsoleIndicatorRenderer
|
||||||
import org.jetbrains.kotlin.console.gutter.IconWithTooltip
|
import org.jetbrains.kotlin.console.gutter.IconWithTooltip
|
||||||
import org.jetbrains.kotlin.console.gutter.ReplIcons
|
import org.jetbrains.kotlin.console.gutter.ReplIcons
|
||||||
|
import org.jetbrains.kotlin.descriptors.ScriptDescriptor
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.idea.caches.project.NotUnderContentRootModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.NotUnderContentRootModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.forcedModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.forcedModuleInfo
|
||||||
@@ -69,7 +70,6 @@ import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtScript
|
import org.jetbrains.kotlin.psi.KtScript
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
|
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
|
||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
|
||||||
import org.jetbrains.kotlin.resolve.repl.ReplState
|
import org.jetbrains.kotlin.resolve.repl.ReplState
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
import java.awt.Color
|
import java.awt.Color
|
||||||
@@ -284,7 +284,8 @@ class KotlinConsoleRunner(
|
|||||||
|
|
||||||
replState.submitLine(psiFile)
|
replState.submitLine(psiFile)
|
||||||
configureFileDependencies(psiFile)
|
configureFileDependencies(psiFile)
|
||||||
val scriptDescriptor = psiFile.script!!.unsafeResolveToDescriptor() as? LazyScriptDescriptor ?: error("Failed to analyze line:\n$text")
|
val scriptDescriptor =
|
||||||
|
psiFile.script!!.unsafeResolveToDescriptor() as? ScriptDescriptor ?: error("Failed to analyze line:\n$text")
|
||||||
ForceResolveUtil.forceResolveAllContents(scriptDescriptor)
|
ForceResolveUtil.forceResolveAllContents(scriptDescriptor)
|
||||||
replState.lineSuccess(psiFile, scriptDescriptor)
|
replState.lineSuccess(psiFile, scriptDescriptor)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user