ConvertPropertyToFunctionIntention - no i18n + a bit better range

This commit is contained in:
Valentin Kipyatkov
2015-04-14 21:41:16 +03:00
parent 0698bb3866
commit 24203a8a31
2 changed files with 12 additions and 15 deletions
@@ -343,8 +343,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.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 convert.receiver.to.parameter.intention=Convert receiver to parameter
convert.receiver.to.parameter.intention.family=Convert Receiver to Parameter convert.receiver.to.parameter.intention.family=Convert Receiver to Parameter
@@ -58,13 +58,13 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.core.refactoring.checkConflictsInteractively import org.jetbrains.kotlin.idea.core.refactoring.checkConflictsInteractively
import org.jetbrains.kotlin.idea.core.refactoring.reportDeclarationConflict import org.jetbrains.kotlin.idea.core.refactoring.reportDeclarationConflict
public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetProperty>( public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetProperty>(javaClass(), "Convert property to function") {
"convert.property.to.function.intention", javaClass() private inner class Converter(
) {
private inner class Convertor(
project: Project, project: Project,
descriptor: CallableDescriptor, descriptor: CallableDescriptor,
context: BindingContext): CallableRefactoring<CallableDescriptor>(project, descriptor, context, getText()) { context: BindingContext
): CallableRefactoring<CallableDescriptor>(project, descriptor, context, getText()) {
private fun convertJetProperty(originalProperty: JetProperty, psiFactory: JetPsiFactory) { private fun convertJetProperty(originalProperty: JetProperty, psiFactory: JetPsiFactory) {
val property = originalProperty.copy() as JetProperty; val property = originalProperty.copy() as JetProperty;
val getter = property.getGetter(); val getter = property.getGetter();
@@ -134,7 +134,7 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetP
val refElement = usage.getElement() val refElement = usage.getElement()
conflicts.putValue( conflicts.putValue(
refElement, refElement,
"Unrecognized reference will be skipped: ${StringUtil.htmlEmphasize(refElement.getText())}" "Unrecognized reference will be skipped: " + StringUtil.htmlEmphasize(refElement.getText())
) )
} }
continue continue
@@ -156,7 +156,7 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetP
conflicts.putValue( conflicts.putValue(
refElement, refElement,
"Can't replace foreign reference with call expression: ${StringUtil.htmlEmphasize(refElement.getText())}" "Can't replace foreign reference with call expression: " + StringUtil.htmlEmphasize(refElement.getText())
) )
} }
} }
@@ -172,9 +172,9 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetP
is PsiMethod -> it.setName(propertyName) is PsiMethod -> it.setName(propertyName)
} }
} }
kotlinRefs.forEach { it.replace(kotlinPsiFactory.createExpression("${it.getText()}()")) } kotlinRefs.forEach { it.replace(kotlinPsiFactory.createExpression(it.getText() + "()")) }
foreignRefsToRename.forEach { it.handleElementRename(propertyName) } foreignRefsToRename.forEach { it.handleElementRename(propertyName) }
javaRefsToReplaceWithCall.forEach { it.replace(javaPsiFactory.createExpressionFromText("${it.getText()}()", null)) } javaRefsToReplaceWithCall.forEach { it.replace(javaPsiFactory.createExpressionFromText(it.getText() + "()", null)) }
} }
} }
} }
@@ -183,15 +183,14 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention<JetP
override fun startInWriteAction(): Boolean = false override fun startInWriteAction(): Boolean = false
override fun isApplicableTo(element: JetProperty, caretOffset: Int): Boolean { override fun isApplicableTo(element: JetProperty, 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
return element.getDelegate() == null && !element.isVar() && !element.isLocal() return element.getDelegate() == null && !element.isVar() && !element.isLocal()
} }
override fun applyTo(element: JetProperty, editor: Editor) { override fun applyTo(element: JetProperty, 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? CallableDescriptor ?: return
Convertor(element.getProject(), descriptor, context).run() Converter(element.getProject(), descriptor, context).run()
} }
} }