diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties index 59df7b5e765..cab183931c3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/JetBundle.properties @@ -349,8 +349,6 @@ convert.to.string.template=Convert concatenation to template convert.to.string.template.family=Convert Concatenation to Template convert.to.concatenated.string.intention=Convert template to concatenated string convert.to.concatenated.string.intention.family=Convert Template to Concatenated String -convert.function.to.property.intention=Convert function to property -convert.function.to.property.intention.family=Convert Function to Property convert.property.to.function.intention=Convert property to function convert.property.to.function.intention.family=Convert Property to Function convert.receiver.to.parameter.intention=Convert receiver to parameter diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt index 86688a37153..7ea196646a2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt @@ -61,17 +61,14 @@ import org.jetbrains.kotlin.idea.core.refactoring.checkConflictsInteractively import org.jetbrains.kotlin.idea.core.refactoring.reportDeclarationConflict import org.jetbrains.kotlin.idea.util.ShortenReferences -public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention( - "convert.function.to.property.intention", javaClass() -) { - companion object { - private var JetNamedFunction.typeFqNameToAdd: String? by UserDataProperty(Key.create("TYPE_FQ_NAME_TO_ADD")) - } +public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention(javaClass(), "Convert function to property") { + private var JetNamedFunction.typeFqNameToAdd: String? by UserDataProperty(Key.create("TYPE_FQ_NAME_TO_ADD")) - private inner class Convertor( + private inner class Converter( project: Project, - descriptor: CallableDescriptor, - context: BindingContext): CallableRefactoring(project, descriptor, context, getText()) { + descriptor: FunctionDescriptor, + context: BindingContext + ): CallableRefactoring(project, descriptor, context, getText()) { private val elementsToShorten = ArrayList() private fun convertJetFunction(originalFunction: JetNamedFunction, psiFactory: JetPsiFactory) { @@ -91,7 +88,7 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention return false + val name = element.getName()!! + if (name == "invoke" || name == "iterator" || Name.identifier(name) in OperatorConventions.UNARY_OPERATION_NAMES.inverse().keySet()) { + return false } val descriptor = element.analyze()[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as? FunctionDescriptor ?: return false - val returnType = descriptor.getReturnType() - return !(KotlinBuiltIns.isUnit(returnType) || KotlinBuiltIns.isNothing(returnType)) + val returnType = descriptor.getReturnType() ?: return false + return !KotlinBuiltIns.isUnit(returnType) && !KotlinBuiltIns.isNothing(returnType) } override fun applyTo(element: JetNamedFunction, editor: Editor) { val context = element.analyze() - val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as? CallableDescriptor ?: return - Convertor(element.getProject(), descriptor, context).run() + val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as FunctionDescriptor + Converter(element.getProject(), descriptor, context).run() } }