Intentions: Implement "Introduce local variable" intention

#KT-11768 Fixed
This commit is contained in:
Alexey Sedunov
2016-04-13 17:37:17 +03:00
parent d75edb9876
commit aa4bfadfb1
25 changed files with 204 additions and 7 deletions
@@ -32,9 +32,8 @@ import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiFile
import com.intellij.util.SmartList
import org.jetbrains.kotlin.idea.intentions.SelfTargetingRangeIntention
import org.jetbrains.kotlin.psi.KtElement
abstract class IntentionBasedInspection<TElement : KtElement>(
abstract class IntentionBasedInspection<TElement : PsiElement>(
val intentions: List<IntentionBasedInspection.IntentionData<TElement>>,
protected val problemText: String?,
protected val elementType: Class<TElement>
@@ -43,7 +42,7 @@ abstract class IntentionBasedInspection<TElement : KtElement>(
constructor(intention: SelfTargetingRangeIntention<TElement>, additionalChecker: (TElement) -> Boolean = { true })
: this(listOf(IntentionData(intention, additionalChecker)), null, intention.elementType)
data class IntentionData<TElement : KtElement>(
data class IntentionData<TElement : PsiElement>(
val intention: SelfTargetingRangeIntention<TElement>,
val additionalChecker: (TElement) -> Boolean = { true }
)
@@ -88,7 +87,7 @@ abstract class IntentionBasedInspection<TElement : KtElement>(
get() = ProblemHighlightType.GENERIC_ERROR_OR_WARNING
/* we implement IntentionAction to provide isAvailable which will be used to hide outdated items and make sure we never call 'invoke' for such item */
private class IntentionBasedQuickFix<TElement : KtElement>(
private class IntentionBasedQuickFix<TElement : PsiElement>(
private val intention: SelfTargetingRangeIntention<TElement>,
private val text: String,
private val additionalChecker: (TElement) -> Boolean,
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.psi.psiUtil.containsInside
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import java.util.*
abstract class SelfTargetingIntention<TElement : KtElement>(
abstract class SelfTargetingIntention<TElement : PsiElement>(
val elementType: Class<TElement>,
private var text: String,
private val familyName: String = text
@@ -111,7 +111,7 @@ abstract class SelfTargetingIntention<TElement : KtElement>(
companion object {
private val intentionBasedInspections = HashMap<Class<out SelfTargetingIntention<*>>, IntentionBasedInspection<*>?>()
fun <TElement : KtElement> findInspection(intentionClass: Class<out SelfTargetingIntention<TElement>>): IntentionBasedInspection<TElement>? {
fun <TElement : PsiElement> findInspection(intentionClass: Class<out SelfTargetingIntention<TElement>>): IntentionBasedInspection<TElement>? {
if (intentionBasedInspections.containsKey(intentionClass)) {
@Suppress("UNCHECKED_CAST")
return intentionBasedInspections[intentionClass] as IntentionBasedInspection<TElement>?
@@ -131,7 +131,7 @@ abstract class SelfTargetingIntention<TElement : KtElement>(
}
}
abstract class SelfTargetingRangeIntention<TElement : KtElement>(
abstract class SelfTargetingRangeIntention<TElement : PsiElement>(
elementType: Class<TElement>,
text: String,
familyName: String = text