Avoid extension functions in Java-facing code in project

This is to workaround the coming functions / extension functions global
refactoring and move
This commit is contained in:
Alexander Udalov
2015-04-28 01:41:02 +03:00
parent b574c1d205
commit 7baa7a72e2
11 changed files with 43 additions and 50 deletions
@@ -24,7 +24,6 @@ import com.intellij.psi.tree.IElementType;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.containers.Stack; import com.intellij.util.containers.Stack;
import kotlin.ExtensionFunction0;
import kotlin.Function1; import kotlin.Function1;
import kotlin.KotlinPackage; import kotlin.KotlinPackage;
import kotlin.Unit; import kotlin.Unit;
@@ -1584,14 +1583,14 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
addLeaveTaskToRemoveDescriptorFromFrameMap(statement, blockEnd, leaveTasks); addLeaveTaskToRemoveDescriptorFromFrameMap(statement, blockEnd, leaveTasks);
} }
return new StackValueWithLeaveTask(answer, new ExtensionFunction0<StackValueWithLeaveTask, Unit>() { return new StackValueWithLeaveTask(answer, new Function1<StackValue, Unit>() {
@Override @Override
public Unit invoke(StackValueWithLeaveTask wrapper) { public Unit invoke(StackValue value) {
if (labelBlockEnd == null) { if (labelBlockEnd == null) {
v.mark(blockEnd); v.mark(blockEnd);
} }
for (Function<StackValue, Void> task : Lists.reverse(leaveTasks)) { for (Function<StackValue, Void> task : Lists.reverse(leaveTasks)) {
task.fun(wrapper.getStackValue()); task.fun(value);
} }
return Unit.INSTANCE$; return Unit.INSTANCE$;
} }
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.codegen
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
import org.jetbrains.org.objectweb.asm.Label
class CoercionValue( class CoercionValue(
val value: StackValue, val value: StackValue,
@@ -47,7 +46,7 @@ class CoercionValue(
public class StackValueWithLeaveTask( public class StackValueWithLeaveTask(
val stackValue: StackValue, val stackValue: StackValue,
val leaveTasks: StackValueWithLeaveTask.() -> Unit val leaveTasks: (StackValue) -> Unit
) : StackValue(stackValue.type) { ) : StackValue(stackValue.type) {
override fun putReceiver(v: InstructionAdapter, isRead: Boolean) { override fun putReceiver(v: InstructionAdapter, isRead: Boolean) {
@@ -56,7 +55,7 @@ public class StackValueWithLeaveTask(
override fun putSelector(type: Type, v: InstructionAdapter) { override fun putSelector(type: Type, v: InstructionAdapter) {
stackValue.putSelector(type, v) stackValue.putSelector(type, v)
leaveTasks() leaveTasks(stackValue)
} }
} }
@@ -16,20 +16,19 @@
package org.jetbrains.kotlin.idea.intentions package org.jetbrains.kotlin.idea.intentions
import org.jetbrains.kotlin.psi.JetNamedFunction
import com.intellij.openapi.editor.Editor 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.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration 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.JetMethodDescriptor
import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify 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<JetParameter>(javaClass(), "Convert parameter to receiver") { public class ConvertParameterToReceiverIntention : JetSelfTargetingIntention<JetParameter>(javaClass(), "Convert parameter to receiver") {
override fun isApplicableTo(element: JetParameter, caretOffset: Int): Boolean { override fun isApplicableTo(element: JetParameter, caretOffset: Int): Boolean {
val identifier = element.getNameIdentifier() ?: return false val identifier = element.getNameIdentifier() ?: return false
if (!identifier.getTextRange().containsOffset(caretOffset)) return false if (!identifier.getTextRange().containsOffset(caretOffset)) return false
@@ -39,9 +38,9 @@ public class ConvertParameterToReceiverIntention: JetSelfTargetingIntention<JetP
} }
private fun configureChangeSignature(parameterIndex: Int): JetChangeSignatureConfiguration { private fun configureChangeSignature(parameterIndex: Int): JetChangeSignatureConfiguration {
return object: JetChangeSignatureConfiguration { return object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor {
return originalDescriptor.modify { receiver = originalDescriptor.getParameters()[parameterIndex] } return originalDescriptor.modify { it.receiver = originalDescriptor.getParameters()[parameterIndex] }
} }
} }
} }
@@ -16,26 +16,26 @@
package org.jetbrains.kotlin.idea.intentions package org.jetbrains.kotlin.idea.intentions
import org.jetbrains.kotlin.psi.JetNamedFunction
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.psi.JetTypeReference
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.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor
import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify
import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature
import org.jetbrains.kotlin.psi.JetNamedFunction
import org.jetbrains.kotlin.psi.JetTypeReference
import org.jetbrains.kotlin.resolve.BindingContext
public class ConvertReceiverToParameterIntention: JetSelfTargetingOffsetIndependentIntention<JetTypeReference>(javaClass(), "Convert receiver to parameter") { public class ConvertReceiverToParameterIntention : JetSelfTargetingOffsetIndependentIntention<JetTypeReference>(javaClass(), "Convert receiver to parameter") {
override fun isApplicableTo(element: JetTypeReference): Boolean { override fun isApplicableTo(element: JetTypeReference): Boolean {
return (element.getParent() as? JetNamedFunction)?.getReceiverTypeReference() == element return (element.getParent() as? JetNamedFunction)?.getReceiverTypeReference() == element
} }
private fun configureChangeSignature(): JetChangeSignatureConfiguration { private fun configureChangeSignature(): JetChangeSignatureConfiguration {
return object: JetChangeSignatureConfiguration { return object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor {
return originalDescriptor.modify { receiver = null } return originalDescriptor.modify { it.receiver = null }
} }
} }
} }
@@ -23,7 +23,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference; import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import kotlin.ExtensionFunction0; import kotlin.Function1;
import kotlin.Unit; import kotlin.Unit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor; 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) { public JetMethodDescriptor configure(@NotNull final JetMethodDescriptor originalDescriptor, @NotNull final BindingContext bindingContext) {
return ChangeSignaturePackage.modify( return ChangeSignaturePackage.modify(
originalDescriptor, originalDescriptor,
new ExtensionFunction0<JetMutableMethodDescriptor, Unit>() { new Function1<JetMutableMethodDescriptor, Unit>() {
@Override @Override
public Unit invoke(JetMutableMethodDescriptor descriptor) { public Unit invoke(JetMutableMethodDescriptor descriptor) {
List<ValueParameterDescriptor> parameters = functionDescriptor.getValueParameters(); List<ValueParameterDescriptor> parameters = functionDescriptor.getValueParameters();
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import kotlin.ExtensionFunction0; import kotlin.Function1;
import kotlin.Unit; import kotlin.Unit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor; import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
@@ -65,7 +65,7 @@ public class ChangeFunctionLiteralSignatureFix extends ChangeFunctionSignatureFi
public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) { public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) {
return ChangeSignaturePackage.modify( return ChangeSignaturePackage.modify(
originalDescriptor, originalDescriptor,
new ExtensionFunction0<JetMutableMethodDescriptor, Unit>() { new Function1<JetMutableMethodDescriptor, Unit>() {
@Override @Override
public Unit invoke(JetMutableMethodDescriptor descriptor) { public Unit invoke(JetMutableMethodDescriptor descriptor) {
JetNameValidator validator = new SimpleCollectingValidator(); JetNameValidator validator = new SimpleCollectingValidator();
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import kotlin.ExtensionFunction0; import kotlin.Function1;
import kotlin.Unit; import kotlin.Unit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.FunctionDescriptor; import org.jetbrains.kotlin.descriptors.FunctionDescriptor;
@@ -64,7 +64,7 @@ public class RemoveFunctionParametersFix extends ChangeFunctionSignatureFix {
public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) { public JetMethodDescriptor configure(@NotNull JetMethodDescriptor originalDescriptor, @NotNull BindingContext bindingContext) {
return ChangeSignaturePackage.modify( return ChangeSignaturePackage.modify(
originalDescriptor, originalDescriptor,
new ExtensionFunction0<JetMutableMethodDescriptor, Unit>() { new Function1<JetMutableMethodDescriptor, Unit>() {
@Override @Override
public Unit invoke(JetMutableMethodDescriptor descriptor) { public Unit invoke(JetMutableMethodDescriptor descriptor) {
int index = functionDescriptor.getValueParameters().indexOf(parameterToRemove); int index = functionDescriptor.getValueParameters().indexOf(parameterToRemove);
@@ -16,27 +16,23 @@
package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createVariable 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 com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.psi.JetFile import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration
import org.jetbrains.kotlin.resolve.BindingContext
import com.intellij.psi.PsiElement 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.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor import org.jetbrains.kotlin.idea.JetBundle
import org.jetbrains.kotlin.idea.refactoring.changeSignature.modify 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( public class CreateParameterFromUsageFix(
val functionDescriptor: FunctionDescriptor, val functionDescriptor: FunctionDescriptor,
val bindingContext: BindingContext, val bindingContext: BindingContext,
val parameterInfo: JetParameterInfo, val parameterInfo: JetParameterInfo,
val defaultValueContext: JetElement val defaultValueContext: JetElement
): CreateFromUsageFixBase(defaultValueContext) { ) : CreateFromUsageFixBase(defaultValueContext) {
override fun getText(): String { override fun getText(): String {
return JetBundle.message("create.parameter.from.usage", parameterInfo.getName()) 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?) { override fun invoke(project: Project, editor: Editor?, file: JetFile?) {
val config = object : JetChangeSignatureConfiguration { val config = object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor {
return originalDescriptor.modify { addParameter(parameterInfo) } return originalDescriptor.modify { it.addParameter(parameterInfo) }
} }
override fun performSilently(affectedFunctions: Collection<PsiElement>): Boolean = false override fun performSilently(affectedFunctions: Collection<PsiElement>): Boolean = false
@@ -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) val newDescriptor = JetMutableMethodDescriptor(this)
newDescriptor.action() action(newDescriptor)
return newDescriptor return newDescriptor
} }
@@ -118,10 +118,10 @@ fun IntroduceParameterDescriptor.performRefactoring() {
runWriteAction { runWriteAction {
val config = object : JetChangeSignatureConfiguration { val config = object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor {
return originalDescriptor.modify { return originalDescriptor.modify { methodDescriptor ->
if (!withDefaultValue) { if (!withDefaultValue) {
val parameters = callable.getValueParameters() 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, val parameterInfo = JetParameterInfo(functionDescriptor = callableDescriptor,
@@ -130,7 +130,7 @@ fun IntroduceParameterDescriptor.performRefactoring() {
defaultValueForParameter = if (withDefaultValue) newArgumentValue else null, defaultValueForParameter = if (withDefaultValue) newArgumentValue else null,
valOrVar = valVar) valOrVar = valVar)
parameterInfo.currentTypeText = newParameterTypeText parameterInfo.currentTypeText = newParameterTypeText
addParameter(parameterInfo) methodDescriptor.addParameter(parameterInfo)
} }
} }
@@ -51,7 +51,7 @@ public class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() {
val changeSignatureConfiguration = object : JetChangeSignatureConfiguration { val changeSignatureConfiguration = object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor { 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<PsiElement>) = true override fun performSilently(affectedFunctions: Collection<PsiElement>) = true