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.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<StackValue, StackValue> implem
addLeaveTaskToRemoveDescriptorFromFrameMap(statement, blockEnd, leaveTasks);
}
return new StackValueWithLeaveTask(answer, new ExtensionFunction0<StackValueWithLeaveTask, Unit>() {
return new StackValueWithLeaveTask(answer, new Function1<StackValue, Unit>() {
@Override
public Unit invoke(StackValueWithLeaveTask wrapper) {
public Unit invoke(StackValue value) {
if (labelBlockEnd == null) {
v.mark(blockEnd);
}
for (Function<StackValue, Void> task : Lists.reverse(leaveTasks)) {
task.fun(wrapper.getStackValue());
task.fun(value);
}
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.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)
}
}
@@ -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<JetParameter>(javaClass(), "Convert parameter to receiver") {
public class ConvertParameterToReceiverIntention : JetSelfTargetingIntention<JetParameter>(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<JetP
}
private fun configureChangeSignature(parameterIndex: Int): JetChangeSignatureConfiguration {
return object: JetChangeSignatureConfiguration {
return object : JetChangeSignatureConfiguration {
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
import org.jetbrains.kotlin.psi.JetNamedFunction
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.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration
import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor
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 {
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 }
}
}
}
@@ -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<JetMutableMethodDescriptor, Unit>() {
new Function1<JetMutableMethodDescriptor, Unit>() {
@Override
public Unit invoke(JetMutableMethodDescriptor descriptor) {
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.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<JetMutableMethodDescriptor, Unit>() {
new Function1<JetMutableMethodDescriptor, Unit>() {
@Override
public Unit invoke(JetMutableMethodDescriptor descriptor) {
JetNameValidator validator = new SimpleCollectingValidator();
@@ -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<JetMutableMethodDescriptor, Unit>() {
new Function1<JetMutableMethodDescriptor, Unit>() {
@Override
public Unit invoke(JetMutableMethodDescriptor descriptor) {
int index = functionDescriptor.getValueParameters().indexOf(parameterToRemove);
@@ -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<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)
newDescriptor.action()
action(newDescriptor)
return newDescriptor
}
@@ -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)
}
}
@@ -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<PsiElement>) = true