diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/GenericReplEvaluator.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/GenericReplEvaluator.kt index f1c979e0aa8..bf4642f3f5d 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/GenericReplEvaluator.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/GenericReplEvaluator.kt @@ -110,7 +110,7 @@ open class GenericReplEvaluator(val baseClasspath: Iterable, val resultField = scriptClass.getDeclaredField(SCRIPT_RESULT_FIELD_NAME).apply { isAccessible = true } val resultValue: Any? = resultField.get(scriptInstance) - return if (compileResult.hasResult) ReplEvalResult.ValueResult(resultValue) + return if (compileResult.hasResult) ReplEvalResult.ValueResult(resultValue, compileResult.type) else ReplEvalResult.UnitResult() } } diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/ReplApi.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/ReplApi.kt index 8e0072be080..c3c0f040dd0 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/ReplApi.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/repl/ReplApi.kt @@ -83,7 +83,8 @@ sealed class ReplCompileResult : Serializable { val mainClassName: String, val classes: List, val hasResult: Boolean, - val classpathAddendum: List) : ReplCompileResult() + val classpathAddendum: List, + val type: String?) : ReplCompileResult() class Incomplete : ReplCompileResult() @@ -110,8 +111,8 @@ interface ReplEvalAction { } sealed class ReplEvalResult : Serializable { - class ValueResult(val value: Any?) : ReplEvalResult() { - override fun toString(): String = "Result: $value" + class ValueResult(val value: Any?, val type: String?) : ReplEvalResult() { + override fun toString(): String = "$value : $type" } class UnitResult : ReplEvalResult() diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/GenericReplCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/GenericReplCompiler.kt index 961a0d4109b..7fae7ffd808 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/GenericReplCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/repl/GenericReplCompiler.kt @@ -26,6 +26,12 @@ import org.jetbrains.kotlin.codegen.ClassBuilderFactories import org.jetbrains.kotlin.codegen.KotlinCodegenFacade import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.psi.KtBlockExpression +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtScript +import org.jetbrains.kotlin.psi.KtScriptInitializer +import org.jetbrains.kotlin.psi.psiUtil.getChildOfType +import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.script.KotlinScriptDefinition import java.io.File import java.util.concurrent.locks.ReentrantReadWriteLock @@ -96,12 +102,24 @@ open class GenericReplCompiler(disposable: Disposable, val generatedClassname = makeScriptBaseName(codeLine) compilerState.history.push(LineId(codeLine), scriptDescriptor) + val expression = psiFile.getChildOfType()?. + getChildOfType()?. + getChildOfType()?. + getChildOfType() + + val type = expression?.let { + compilerState.analyzerEngine.trace.bindingContext.getType(it) + }?.let { + DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(it) + } + return ReplCompileResult.CompiledClasses(LineId(codeLine), compilerState.history.map { it.id }, generatedClassname, generationState.factory.asList().map { CompiledClassData(it.relativePath, it.asByteArray()) }, generationState.replSpecific.hasResult, - classpathAddendum ?: emptyList()) + classpathAddendum ?: emptyList(), + type) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/TypeInfoFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/TypeInfoFactory.kt index d25ce2f8000..f5726ee2386 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/TypeInfoFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/TypeInfoFactory.kt @@ -16,11 +16,9 @@ package org.jetbrains.kotlin.types.expressions.typeInfoFactory -import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.types.expressions.DataFlowAnalyzer import org.jetbrains.kotlin.types.expressions.KotlinTypeInfo /* @@ -38,4 +36,4 @@ fun createTypeInfo(type: KotlinType?, context: ResolutionContext<*>): KotlinType fun noTypeInfo(dataFlowInfo: DataFlowInfo): KotlinTypeInfo = createTypeInfo(null, dataFlowInfo) -fun noTypeInfo(context: ResolutionContext<*>): KotlinTypeInfo = noTypeInfo(context.dataFlowInfo) +fun noTypeInfo(context: ResolutionContext<*>): KotlinTypeInfo = noTypeInfo(context.dataFlowInfo) \ No newline at end of file