Do not suggest destructuring in function literal in 1.0 compatibility mode #KT-15134 Fixed

This commit is contained in:
Mikhail Glukhikh
2017-01-27 15:55:37 +03:00
committed by mglukhikh
parent 3cd4d7cbfe
commit 67e207acb0
@@ -23,12 +23,14 @@ import com.intellij.psi.PsiReference
import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch
import com.intellij.util.Processor import com.intellij.util.Processor
import com.intellij.util.Query import com.intellij.util.Query
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator
import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -45,7 +47,7 @@ import java.util.*
class DestructureInspection : IntentionBasedInspection<KtDeclaration>( class DestructureInspection : IntentionBasedInspection<KtDeclaration>(
DestructureIntention::class, DestructureIntention::class,
{ element, inspection -> { element, _ ->
if (element is KtParameter) true if (element is KtParameter) true
else { else {
val usagesToRemove = DestructureIntention.collectUsagesToRemove(element)?.data val usagesToRemove = DestructureIntention.collectUsagesToRemove(element)?.data
@@ -127,19 +129,22 @@ class DestructureIntention : SelfTargetingRangeIntention<KtDeclaration>(
internal fun KtDeclaration.isSuitableDeclaration() = getUsageScopeElement() != null internal fun KtDeclaration.isSuitableDeclaration() = getUsageScopeElement() != null
private fun KtDeclaration.getUsageScopeElement() = when (this) { private fun KtDeclaration.getUsageScopeElement(): PsiElement? {
val lambdaSupported = languageVersionSettings.supportsFeature(LanguageFeature.DestructuringLambdaParameters)
return when (this) {
is KtParameter -> { is KtParameter -> {
val parent = parent val parent = parent
when { when {
parent is KtForExpression -> parent parent is KtForExpression -> parent
parent?.parent is KtFunctionLiteral -> parent.parent parent.parent is KtFunctionLiteral -> if (lambdaSupported) parent.parent else null
else -> null else -> null
} }
} }
is KtVariableDeclaration -> parent is KtVariableDeclaration -> parent
is KtFunctionLiteral -> if (!hasParameterSpecification()) this else null is KtFunctionLiteral -> if (!hasParameterSpecification() && lambdaSupported) this else null
else -> null else -> null
} }
}
internal data class UsagesToRemove(val data: List<UsageData>, val removeSelectorInLoopRange: Boolean) internal data class UsagesToRemove(val data: List<UsageData>, val removeSelectorInLoopRange: Boolean)