diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CodeFragmentCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CodeFragmentCodegen.kt index 44578467873..67696d79764 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CodeFragmentCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CodeFragmentCodegen.kt @@ -176,6 +176,10 @@ class CodeFragmentCodegen private constructor( codeFragment.putUserData(INFO_USERDATA_KEY, info) } + fun clearCodeFragmentInfo(codeFragment: KtCodeFragment) { + codeFragment.putUserData(INFO_USERDATA_KEY, null) + } + @JvmStatic fun getCodeFragmentInfo(codeFragment: KtCodeFragment): CodeFragmentCodegenInfo { return codeFragment.getUserData(INFO_USERDATA_KEY) ?: error("Codegen info user data is not set") diff --git a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/CodeFragmentCompiler.kt b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/CodeFragmentCompiler.kt index f8149adf03f..80575daf7ab 100644 --- a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/CodeFragmentCompiler.kt +++ b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/compilation/CodeFragmentCompiler.kt @@ -89,17 +89,21 @@ class CodeFragmentCompiler(private val executionContext: ExecutionContext) { val codegenInfo = CodeFragmentCodegenInfo(classDescriptor, methodDescriptor, parameterInfo.parameters) CodeFragmentCodegen.setCodeFragmentInfo(codeFragment, codegenInfo) - KotlinCodegenFacade.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION) + try { + KotlinCodegenFacade.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION) - val classes = generationState.factory.asList().filterClassFiles() - .map { ClassToLoad(it.internalClassName, it.relativePath, it.asByteArray()) } + val classes = generationState.factory.asList().filterClassFiles() + .map { ClassToLoad(it.internalClassName, it.relativePath, it.asByteArray()) } - val methodSignature = getMethodSignature(methodDescriptor, parameterInfo, generationState) - val functionSuffixes = getLocalFunctionSuffixes(parameterInfo.parameters, generationState.typeMapper) + val methodSignature = getMethodSignature(methodDescriptor, parameterInfo, generationState) + val functionSuffixes = getLocalFunctionSuffixes(parameterInfo.parameters, generationState.typeMapper) - generationState.destroy() + generationState.destroy() - return CompilationResult(classes, parameterInfo, functionSuffixes, methodSignature) + return CompilationResult(classes, parameterInfo, functionSuffixes, methodSignature) + } finally { + CodeFragmentCodegen.clearCodeFragmentInfo(codeFragment) + } } private fun getLocalFunctionSuffixes(