Extract function: capture only local functions, not from local declarations

This commit is contained in:
Natalia Ukhorskaya
2015-04-28 12:04:24 +03:00
parent 35bacb4ac7
commit 35f9cb5405
2 changed files with 3 additions and 3 deletions
@@ -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))
@@ -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