UNUSED_VARIABLE is now reported only for last entry of destructuring declaration (if applicable) #KT-14221 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-10-07 20:38:00 +03:00
parent 126304c197
commit 8d48b0d2a0
24 changed files with 65 additions and 31 deletions
@@ -572,7 +572,7 @@ class ControlFlowInformationProvider private constructor(
val element = instruction.variableDeclarationElement as? KtNamedDeclaration ?: return@traverse
element.nameIdentifier ?: return@traverse
if (!VariableUseState.isUsed(variableUseState)) {
if (KtPsiUtil.isVariableNotParameterDeclaration(element)) {
if (KtPsiUtil.isRemovableVariableDeclaration(element)) {
report(Errors.UNUSED_VARIABLE.on(element, variableDescriptor), ctxt)
}
else if (element is KtParameter) {
@@ -607,7 +607,7 @@ class ControlFlowInformationProvider private constructor(
}
}
}
else if (variableUseState === ONLY_WRITTEN_NEVER_READ && KtPsiUtil.isVariableNotParameterDeclaration(element)) {
else if (variableUseState === ONLY_WRITTEN_NEVER_READ && KtPsiUtil.isRemovableVariableDeclaration(element)) {
report(Errors.ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE.on(element, variableDescriptor), ctxt)
}
else if (variableUseState === WRITTEN_AFTER_READ && element is KtVariableDeclaration) {
@@ -276,12 +276,13 @@ public class KtPsiUtil {
}
}
public static boolean isVariableNotParameterDeclaration(@NotNull KtDeclaration declaration) {
public static boolean isRemovableVariableDeclaration(@NotNull KtDeclaration declaration) {
if (!(declaration instanceof KtVariableDeclaration)) return false;
if (declaration instanceof KtProperty) return true;
assert declaration instanceof KtDestructuringDeclarationEntry;
KtDestructuringDeclarationEntry multiDeclarationEntry = (KtDestructuringDeclarationEntry) declaration;
return !(multiDeclarationEntry.getParent().getParent().getParent() instanceof KtForExpression);
KtDestructuringDeclaration parentDeclaration = (KtDestructuringDeclaration) declaration.getParent();
List<KtDestructuringDeclarationEntry> entries = parentDeclaration.getEntries();
return entries.size() > 1 && entries.get(entries.size() - 1) == declaration;
}
@Nullable