From 35f9cb54055527bce36cb14337ac437d8b3915f7 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 28 Apr 2015 12:04:24 +0300 Subject: [PATCH] Extract function: capture only local functions, not from local declarations --- .../idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt | 3 ++- .../introduce/extractionEngine/extractableAnalysisUtil.kt | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt index 3ed7e28b939..15717a3203d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/extractFunctionForDebuggerUtil.kt @@ -90,7 +90,8 @@ fun getFunctionForExtractedFragment( val options = ExtractionOptions(inferUnitTypeForUnusedValues = false, enableListBoxing = true, - allowSpecialClassNames = true) + allowSpecialClassNames = true, + captureLocalFunctions = true) val analysisResult = ExtractionData(tmpFile, newDebugExpression.toRange(), targetSibling, null, options).performAnalysis() if (analysisResult.status != Status.SUCCESS) { throw EvaluateExceptionUtil.createEvaluateException(getErrorMessageForExtractFunctionResult(analysisResult)) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index e81e024c927..73bf75de8cd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -642,8 +642,7 @@ private fun ExtractionData.inferParametersInfo( val extractFunctionRef = options.captureLocalFunctions && originalRef.getReferencedName() == originalDescriptor.getName().asString() // to forbid calls by convention - && originalDescriptor is FunctionDescriptor - && DescriptorUtils.isLocal(originalDescriptor) + && originalDeclaration is JetNamedFunction && originalDeclaration.isLocal() && (targetScope == null || originalDescriptor !in targetScope.getFunctions(originalDescriptor.getName())) val descriptorToExtract = (if (extractThis) thisDescriptor else null) ?: originalDescriptor