Initial implementation of loop-to-call-chain intention

This commit is contained in:
Valentin Kipyatkov
2016-03-08 18:12:23 +01:00
parent c50cf13611
commit 12b1a99a6a
80 changed files with 3462 additions and 17 deletions
@@ -37,18 +37,22 @@ abstract class IntentionBasedInspection<TElement : PsiElement>(
) : AbstractKotlinInspection() {
constructor(
intention: SelfTargetingRangeIntention<TElement>
) : this(listOf(IntentionData(intention)), null, intention.elementType)
intention: SelfTargetingRangeIntention<TElement>,
problemText: String? = null
) : this(listOf(IntentionData(intention)), problemText, intention.elementType)
constructor(
intention: SelfTargetingRangeIntention<TElement>,
additionalChecker: (TElement, IntentionBasedInspection<TElement>) -> Boolean
) : this(listOf(IntentionData(intention, additionalChecker)), null, intention.elementType)
additionalChecker: (TElement, IntentionBasedInspection<TElement>) -> Boolean,
problemText: String? = null
) : this(listOf(IntentionData(intention, additionalChecker)), problemText, intention.elementType)
constructor(
intention: SelfTargetingRangeIntention<TElement>,
additionalChecker: (TElement) -> Boolean
) : this(listOf(IntentionData(intention, { element, inspection -> additionalChecker(element) } )), null, intention.elementType)
additionalChecker: (TElement) -> Boolean,
problemText: String? = null
) : this(listOf(IntentionData(intention, { element, inspection -> additionalChecker(element) } )), problemText, intention.elementType)
data class IntentionData<TElement : PsiElement>(
@@ -25,12 +25,12 @@ import java.util.*
class KtForLoopInReference(element: KtForExpression) : KtMultiReference<KtForExpression>(element) {
override fun getRangeInElement(): TextRange {
val inKeywordNode = expression.inKeywordNode
if (inKeywordNode == null)
val inKeyword = expression.inKeyword
if (inKeyword == null)
return TextRange.EMPTY_RANGE
val offset = inKeywordNode.psi!!.startOffsetInParent
return TextRange(offset, offset + inKeywordNode.textLength)
val offset = inKeyword.startOffsetInParent
return TextRange(offset, offset + inKeyword.textLength)
}
override fun getTargetDescriptors(context: BindingContext): Collection<DeclarationDescriptor> {