From 7baa7a72e2eac062a67fd5b48081583292c8685a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 28 Apr 2015 01:41:02 +0300 Subject: [PATCH] Avoid extension functions in Java-facing code in project This is to workaround the coming functions / extension functions global refactoring and move --- .../kotlin/codegen/ExpressionCodegen.java | 7 +++--- .../jetbrains/kotlin/codegen/StackValue.kt | 5 ++--- .../ConvertParameterToReceiverIntention.kt | 19 ++++++++-------- .../ConvertReceiverToParameterIntention.kt | 16 +++++++------- .../quickfix/AddFunctionParametersFix.java | 4 ++-- .../ChangeFunctionLiteralSignatureFix.java | 4 ++-- .../quickfix/RemoveFunctionParametersFix.java | 4 ++-- .../CreateParameterFromUsageFix.kt | 22 ++++++++----------- .../changeSignature/JetChangeSignature.kt | 4 ++-- .../KotlinIntroduceParameterHandler.kt | 6 ++--- .../rename/RenameKotlinParameterProcessor.kt | 2 +- 11 files changed, 43 insertions(+), 50 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 788342333c6..13165efe0c9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -24,7 +24,6 @@ import com.intellij.psi.tree.IElementType; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.containers.Stack; -import kotlin.ExtensionFunction0; import kotlin.Function1; import kotlin.KotlinPackage; import kotlin.Unit; @@ -1584,14 +1583,14 @@ public class ExpressionCodegen extends JetVisitor implem addLeaveTaskToRemoveDescriptorFromFrameMap(statement, blockEnd, leaveTasks); } - return new StackValueWithLeaveTask(answer, new ExtensionFunction0() { + return new StackValueWithLeaveTask(answer, new Function1() { @Override - public Unit invoke(StackValueWithLeaveTask wrapper) { + public Unit invoke(StackValue value) { if (labelBlockEnd == null) { v.mark(blockEnd); } for (Function task : Lists.reverse(leaveTasks)) { - task.fun(wrapper.getStackValue()); + task.fun(value); } return Unit.INSTANCE$; } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.kt index 6d03eb287be..00e99b1a641 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.codegen import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter -import org.jetbrains.org.objectweb.asm.Label class CoercionValue( val value: StackValue, @@ -47,7 +46,7 @@ class CoercionValue( public class StackValueWithLeaveTask( val stackValue: StackValue, - val leaveTasks: StackValueWithLeaveTask.() -> Unit + val leaveTasks: (StackValue) -> Unit ) : StackValue(stackValue.type) { override fun putReceiver(v: InstructionAdapter, isRead: Boolean) { @@ -56,7 +55,7 @@ public class StackValueWithLeaveTask( override fun putSelector(type: Type, v: InstructionAdapter) { stackValue.putSelector(type, v) - leaveTasks() + leaveTasks(stackValue) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertParameterToReceiverIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertParameterToReceiverIntention.kt index aa28bcbf03c..cb680e84dee 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertParameterToReceiverIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertParameterToReceiverIntention.kt @@ -16,20 +16,19 @@ package org.jetbrains.kotlin.idea.intentions -import org.jetbrains.kotlin.psi.JetNamedFunction import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration -import org.jetbrains.kotlin.psi.JetParameter -import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify -import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully +import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature +import org.jetbrains.kotlin.psi.JetNamedFunction +import org.jetbrains.kotlin.psi.JetParameter +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType +import org.jetbrains.kotlin.resolve.BindingContext -public class ConvertParameterToReceiverIntention: JetSelfTargetingIntention(javaClass(), "Convert parameter to receiver") { +public class ConvertParameterToReceiverIntention : JetSelfTargetingIntention(javaClass(), "Convert parameter to receiver") { override fun isApplicableTo(element: JetParameter, caretOffset: Int): Boolean { val identifier = element.getNameIdentifier() ?: return false if (!identifier.getTextRange().containsOffset(caretOffset)) return false @@ -39,9 +38,9 @@ public class ConvertParameterToReceiverIntention: JetSelfTargetingIntention(javaClass(), "Convert receiver to parameter") { +public class ConvertReceiverToParameterIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Convert receiver to parameter") { override fun isApplicableTo(element: JetTypeReference): Boolean { return (element.getParent() as? JetNamedFunction)?.getReceiverTypeReference() == element } private fun configureChangeSignature(): JetChangeSignatureConfiguration { - return object: JetChangeSignatureConfiguration { + return object : JetChangeSignatureConfiguration { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { - return originalDescriptor.modify { receiver = null } + return originalDescriptor.modify { it.receiver = null } } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.java index a55220ced5d..da81d38bfee 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionParametersFix.java @@ -23,7 +23,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; -import kotlin.ExtensionFunction0; +import kotlin.Function1; import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.ConstructorDescriptor; @@ -125,7 +125,7 @@ public class AddFunctionParametersFix extends ChangeFunctionSignatureFix { public JetMethodDescriptor configure(@NotNull final JetMethodDescriptor originalDescriptor, @NotNull final BindingContext bindingContext) { return ChangeSignaturePackage.modify( originalDescriptor, - new ExtensionFunction0() { + new Function1() { @Override public Unit invoke(JetMutableMethodDescriptor descriptor) { List parameters = functionDescriptor.getValueParameters(); diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java index e8e367f0760..8b05962609a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; -import kotlin.ExtensionFunction0; +import kotlin.Function1; import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.FunctionDescriptor; @@ -65,7 +65,7 @@ public class ChangeFunctionLiteralSignatureFix extends ChangeFunctionSignatureFi public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) { return ChangeSignaturePackage.modify( originalDescriptor, - new ExtensionFunction0() { + new Function1() { @Override public Unit invoke(JetMutableMethodDescriptor descriptor) { JetNameValidator validator = new SimpleCollectingValidator(); diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java index ca3f14c5cf7..9c27a669997 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; -import kotlin.ExtensionFunction0; +import kotlin.Function1; import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.FunctionDescriptor; @@ -64,7 +64,7 @@ public class RemoveFunctionParametersFix extends ChangeFunctionSignatureFix { public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) { return ChangeSignaturePackage.modify( originalDescriptor, - new ExtensionFunction0() { + new Function1() { @Override public Unit invoke(JetMutableMethodDescriptor descriptor) { int index = functionDescriptor.getValueParameters().indexOf(parameterToRemove); diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt index 49bfc790ee5..ceecb9c301d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterFromUsageFix.kt @@ -16,27 +16,23 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createVariable -import org.jetbrains.kotlin.psi.JetElement -import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase -import org.jetbrains.kotlin.idea.JetBundle -import com.intellij.openapi.project.Project import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration -import org.jetbrains.kotlin.resolve.BindingContext +import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature -import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor -import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify +import org.jetbrains.kotlin.idea.JetBundle +import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase +import org.jetbrains.kotlin.idea.refactoring.changeSignature.* +import org.jetbrains.kotlin.psi.JetElement +import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.resolve.BindingContext public class CreateParameterFromUsageFix( val functionDescriptor: FunctionDescriptor, val bindingContext: BindingContext, val parameterInfo: JetParameterInfo, val defaultValueContext: JetElement -): CreateFromUsageFixBase(defaultValueContext) { +) : CreateFromUsageFixBase(defaultValueContext) { override fun getText(): String { return JetBundle.message("create.parameter.from.usage", parameterInfo.getName()) } @@ -44,7 +40,7 @@ public class CreateParameterFromUsageFix( override fun invoke(project: Project, editor: Editor?, file: JetFile?) { val config = object : JetChangeSignatureConfiguration { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { - return originalDescriptor.modify { addParameter(parameterInfo) } + return originalDescriptor.modify { it.addParameter(parameterInfo) } } override fun performSilently(affectedFunctions: Collection): Boolean = false diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignature.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignature.kt index 663e8596712..69b1082d332 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignature.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetChangeSignature.kt @@ -43,9 +43,9 @@ public trait JetChangeSignatureConfiguration { } } -fun JetMethodDescriptor.modify(action: JetMutableMethodDescriptor.() -> Unit): JetMethodDescriptor { +fun JetMethodDescriptor.modify(action: (JetMutableMethodDescriptor) -> Unit): JetMethodDescriptor { val newDescriptor = JetMutableMethodDescriptor(this) - newDescriptor.action() + action(newDescriptor) return newDescriptor } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index 11958de7af1..3bc1f69c6b8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -118,10 +118,10 @@ fun IntroduceParameterDescriptor.performRefactoring() { runWriteAction { val config = object : JetChangeSignatureConfiguration { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { - return originalDescriptor.modify { + return originalDescriptor.modify { methodDescriptor -> if (!withDefaultValue) { val parameters = callable.getValueParameters() - parametersToRemove.map { parameters.indexOf(it) }.sortDescending().forEach { removeParameter(it) } + parametersToRemove.map { parameters.indexOf(it) }.sortDescending().forEach { methodDescriptor.removeParameter(it) } } val parameterInfo = JetParameterInfo(functionDescriptor = callableDescriptor, @@ -130,7 +130,7 @@ fun IntroduceParameterDescriptor.performRefactoring() { defaultValueForParameter = if (withDefaultValue) newArgumentValue else null, valOrVar = valVar) parameterInfo.currentTypeText = newParameterTypeText - addParameter(parameterInfo) + methodDescriptor.addParameter(parameterInfo) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt index 127f3b1a5c5..64786d503b3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinParameterProcessor.kt @@ -51,7 +51,7 @@ public class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() { val changeSignatureConfiguration = object : JetChangeSignatureConfiguration { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { - return originalDescriptor.modify { renameParameter(paramIndex, newName) } + return originalDescriptor.modify { it.renameParameter(paramIndex, newName) } } override fun performSilently(affectedFunctions: Collection) = true