ConvertFunctionToPropertyIntention minor code improvements + to work in the end of name
This commit is contained in:
@@ -349,8 +349,6 @@ convert.to.string.template=Convert concatenation to template
|
|||||||
convert.to.string.template.family=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=Convert template to concatenated string
|
||||||
convert.to.concatenated.string.intention.family=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=Convert property to function
|
||||||
convert.property.to.function.intention.family=Convert Property to Function
|
convert.property.to.function.intention.family=Convert Property to Function
|
||||||
convert.receiver.to.parameter.intention=Convert receiver to parameter
|
convert.receiver.to.parameter.intention=Convert receiver to parameter
|
||||||
|
|||||||
+16
-21
@@ -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.core.refactoring.reportDeclarationConflict
|
||||||
import org.jetbrains.kotlin.idea.util.ShortenReferences
|
import org.jetbrains.kotlin.idea.util.ShortenReferences
|
||||||
|
|
||||||
public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetNamedFunction>(
|
public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetNamedFunction>(javaClass(), "Convert function to property") {
|
||||||
"convert.function.to.property.intention", javaClass()
|
private var JetNamedFunction.typeFqNameToAdd: String? by UserDataProperty(Key.create("TYPE_FQ_NAME_TO_ADD"))
|
||||||
) {
|
|
||||||
companion object {
|
|
||||||
private var JetNamedFunction.typeFqNameToAdd: String? by UserDataProperty(Key.create("TYPE_FQ_NAME_TO_ADD"))
|
|
||||||
}
|
|
||||||
|
|
||||||
private inner class Convertor(
|
private inner class Converter(
|
||||||
project: Project,
|
project: Project,
|
||||||
descriptor: CallableDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
context: BindingContext): CallableRefactoring<CallableDescriptor>(project, descriptor, context, getText()) {
|
context: BindingContext
|
||||||
|
): CallableRefactoring<FunctionDescriptor>(project, descriptor, context, getText()) {
|
||||||
private val elementsToShorten = ArrayList<JetElement>()
|
private val elementsToShorten = ArrayList<JetElement>()
|
||||||
|
|
||||||
private fun convertJetFunction(originalFunction: JetNamedFunction, psiFactory: JetPsiFactory) {
|
private fun convertJetFunction(originalFunction: JetNamedFunction, psiFactory: JetPsiFactory) {
|
||||||
@@ -91,7 +88,7 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetN
|
|||||||
?.firstOrNull { it !is PsiWhiteSpace }
|
?.firstOrNull { it !is PsiWhiteSpace }
|
||||||
if (insertAfter != null) {
|
if (insertAfter != null) {
|
||||||
function.addAfter(psiFactory.createParameterList("()"), insertAfter)
|
function.addAfter(psiFactory.createParameterList("()"), insertAfter)
|
||||||
function.addAfter(propertySample.getGetter().getNamePlaceholder(), insertAfter)
|
function.addAfter(propertySample.getGetter()!!.getNamePlaceholder(), insertAfter)
|
||||||
function.addAfter(psiFactory.createNewLine(), insertAfter)
|
function.addAfter(psiFactory.createNewLine(), insertAfter)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,26 +188,24 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention<JetN
|
|||||||
override fun startInWriteAction(): Boolean = false
|
override fun startInWriteAction(): Boolean = false
|
||||||
|
|
||||||
override fun isApplicableTo(element: JetNamedFunction, caretOffset: Int): Boolean {
|
override fun isApplicableTo(element: JetNamedFunction, caretOffset: Int): Boolean {
|
||||||
val elementAtCaret = element.getContainingFile().findElementAt(caretOffset)
|
val identifier = element.getNameIdentifier() ?: return false
|
||||||
if (!(element.getNameIdentifier()?.isAncestor(elementAtCaret) ?: false)) return false
|
if (!identifier.getTextRange().containsOffset(caretOffset)) return false
|
||||||
|
|
||||||
if (element.getValueParameters().isNotEmpty() || element.isLocal()) return false
|
if (element.getValueParameters().isNotEmpty() || element.isLocal()) return false
|
||||||
|
|
||||||
val name = element.getName()
|
val name = element.getName()!!
|
||||||
when {
|
if (name == "invoke" || name == "iterator" || Name.identifier(name) in OperatorConventions.UNARY_OPERATION_NAMES.inverse().keySet()) {
|
||||||
name == "invoke",
|
return false
|
||||||
name == "iterator",
|
|
||||||
OperatorConventions.UNARY_OPERATION_NAMES.inverse().containsKey(Name.identifier(name)) -> return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val descriptor = element.analyze()[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as? FunctionDescriptor ?: return false
|
val descriptor = element.analyze()[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as? FunctionDescriptor ?: return false
|
||||||
val returnType = descriptor.getReturnType()
|
val returnType = descriptor.getReturnType() ?: return false
|
||||||
return !(KotlinBuiltIns.isUnit(returnType) || KotlinBuiltIns.isNothing(returnType))
|
return !KotlinBuiltIns.isUnit(returnType) && !KotlinBuiltIns.isNothing(returnType)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun applyTo(element: JetNamedFunction, editor: Editor) {
|
override fun applyTo(element: JetNamedFunction, editor: Editor) {
|
||||||
val context = element.analyze()
|
val context = element.analyze()
|
||||||
val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as? CallableDescriptor ?: return
|
val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as FunctionDescriptor
|
||||||
Convertor(element.getProject(), descriptor, context).run()
|
Converter(element.getProject(), descriptor, context).run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user