ConvertToExpressionBodyIntention - refactoring

This commit is contained in:
Valentin Kipyatkov
2015-04-14 22:37:02 +03:00
parent 94480e3d5c
commit c2335790b5
10 changed files with 49 additions and 54 deletions
@@ -59,8 +59,6 @@ specify.type.explicitly.action.family.name=Specify Type Explicitly
specify.type.explicitly.add.return.type.action.name=Specify return type explicitly
specify.type.explicitly.add.action.name=Specify type explicitly
specify.type.explicitly.remove.action.name=Remove explicitly specified type
convert.to.expression.body.action.family.name=Convert to Expression Body
convert.to.expression.body.action.name=Convert to expression body
rename.parameter.to.match.overridden.method=Rename parameter to match overridden method
rename.family=Rename
rename.kotlin.package.class.error="Can't rename kotlin package class"
@@ -30,8 +30,9 @@ import org.jetbrains.kotlin.psi.psiUtil.parents
public abstract class JetSelfTargetingIntention<TElement : JetElement>(
public val elementType: Class<TElement>,
private var text: String,
private val familyName: String = text)
: IntentionAction {
private val familyName: String = text,
private val firstElementOfTypeOnly: Boolean = false
) : IntentionAction {
deprecated("Use primary constructor, no need to use i18n")
public constructor(key: String, elementType: Class<TElement>) : this(elementType, JetBundle.message(key), JetBundle.message(key + ".family")) {
}
@@ -64,7 +65,14 @@ public abstract class JetSelfTargetingIntention<TElement : JetElement>(
elementsToCheck += commonParent.parents()
}
return elementsToCheck.filterIsInstance(elementType).firstOrNull { isApplicableTo(it, offset) }
val elementsOfType = elementsToCheck.filterIsInstance(elementType)
if (firstElementOfTypeOnly) {
val candidate = elementsOfType.firstOrNull() ?: return null
return if (isApplicableTo(candidate, offset)) candidate else null
}
else {
return elementsOfType.firstOrNull { isApplicableTo(it, offset) }
}
}
final override fun isAvailable(project: Project, editor: Editor, file: PsiFile)
@@ -83,8 +91,9 @@ public abstract class JetSelfTargetingIntention<TElement : JetElement>(
public abstract class JetSelfTargetingOffsetIndependentIntention<TElement : JetElement>(
elementType: Class<TElement>,
text: String,
familyName: String = text)
: JetSelfTargetingIntention<TElement>(elementType, text, familyName) {
familyName: String = text,
firstElementOfTypeOnly: Boolean = false
) : JetSelfTargetingIntention<TElement>(elementType, text, familyName, firstElementOfTypeOnly) {
deprecated("Use primary constructor, no need to use i18n")
public constructor(key: String, elementType: Class<TElement>) : this(elementType, JetBundle.message(key), JetBundle.message(key + ".family")) {