summaryrefslogtreecommitdiff
path: root/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java')
-rw-r--r--plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java212
1 files changed, 106 insertions, 106 deletions
diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
index 223a21920e55..483e9f3ebc35 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -45,19 +45,15 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
@Override
@NotNull
public String getDisplayName() {
- return InspectionGadgetsBundle.message(
- "redundant.local.variable.display.name");
+ return InspectionGadgetsBundle.message("redundant.local.variable.display.name");
}
@Override
public JComponent createOptionsPanel() {
- final MultipleCheckboxOptionsPanel optionsPanel =
- new MultipleCheckboxOptionsPanel(this);
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "redundant.local.variable.ignore.option"),
+ final MultipleCheckboxOptionsPanel optionsPanel = new MultipleCheckboxOptionsPanel(this);
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("redundant.local.variable.ignore.option"),
"m_ignoreImmediatelyReturnedVariables");
- optionsPanel.addCheckbox(InspectionGadgetsBundle.message(
- "redundant.local.variable.annotation.option"),
+ optionsPanel.addCheckbox(InspectionGadgetsBundle.message("redundant.local.variable.annotation.option"),
"m_ignoreAnnotatedVariables");
return optionsPanel;
}
@@ -70,8 +66,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
@Override
@NotNull
public String buildErrorString(Object... infos) {
- return InspectionGadgetsBundle.message(
- "unnecessary.local.variable.problem.descriptor");
+ return InspectionGadgetsBundle.message("unnecessary.local.variable.problem.descriptor");
}
@Override
@@ -89,15 +84,12 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
return new UnnecessaryLocalVariableVisitor();
}
- private class UnnecessaryLocalVariableVisitor
- extends BaseInspectionVisitor {
+ private class UnnecessaryLocalVariableVisitor extends BaseInspectionVisitor {
@SuppressWarnings({"IfStatementWithIdenticalBranches"})
@Override
- public void visitLocalVariable(
- @NotNull PsiLocalVariable variable) {
+ public void visitLocalVariable(@NotNull PsiLocalVariable variable) {
super.visitLocalVariable(variable);
-
if (m_ignoreAnnotatedVariables) {
final PsiModifierList list = variable.getModifierList();
if (list != null && list.getAnnotations().length > 0) {
@@ -107,12 +99,10 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (isCopyVariable(variable)) {
registerVariableError(variable);
}
- else if (!m_ignoreImmediatelyReturnedVariables &&
- isImmediatelyReturned(variable)) {
+ else if (!m_ignoreImmediatelyReturnedVariables && isImmediatelyReturned(variable)) {
registerVariableError(variable);
}
- else if (!m_ignoreImmediatelyReturnedVariables &&
- isImmediatelyThrown(variable)) {
+ else if (!m_ignoreImmediatelyReturnedVariables && isImmediatelyThrown(variable)) {
registerVariableError(variable);
}
else if (isImmediatelyAssigned(variable)) {
@@ -128,142 +118,138 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (!(initializer instanceof PsiReferenceExpression)) {
return false;
}
- final PsiReferenceExpression reference =
- (PsiReferenceExpression)initializer;
+ final PsiReferenceExpression reference = (PsiReferenceExpression)initializer;
final PsiElement referent = reference.resolve();
if (referent == null) {
return false;
}
- if (!(referent instanceof PsiLocalVariable ||
- referent instanceof PsiParameter)) {
+ if (!(referent instanceof PsiLocalVariable || referent instanceof PsiParameter)) {
return false;
}
- final PsiCodeBlock containingScope =
- PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
+ final PsiCodeBlock containingScope = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
if (containingScope == null) {
return false;
}
if (!variable.hasModifierProperty(PsiModifier.FINAL) &&
- VariableAccessUtils.variableIsAssigned(variable,
- containingScope, false)) {
+ VariableAccessUtils.variableIsAssigned(variable, containingScope, false)) {
return false;
}
final PsiVariable initialization = (PsiVariable)referent;
if (!initialization.hasModifierProperty(PsiModifier.FINAL) &&
- VariableAccessUtils.variableIsAssigned(initialization,
- containingScope, false)) {
+ VariableAccessUtils.variableIsAssigned(initialization, containingScope, false)) {
return false;
}
- if (!initialization.hasModifierProperty(PsiModifier.FINAL)
- && variable.hasModifierProperty(PsiModifier.FINAL)) {
- if (VariableAccessUtils.variableIsUsedInInnerClass(variable,
- containingScope)) {
+ if (!initialization.hasModifierProperty(PsiModifier.FINAL) && variable.hasModifierProperty(PsiModifier.FINAL)) {
+ if (VariableAccessUtils.variableIsUsedInInnerClass(variable, containingScope)) {
return false;
}
}
- if (TypeConversionUtil.boxingConversionApplicable(variable.getType(), ((PsiVariable)referent).getType())) return false;
- return true;
+ return !TypeConversionUtil.boxingConversionApplicable(variable.getType(), initialization.getType());
}
private boolean isImmediatelyReturned(PsiVariable variable) {
- final PsiCodeBlock containingScope =
- PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
+ final PsiCodeBlock containingScope = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class, true, PsiClass.class);
if (containingScope == null) {
return false;
}
- final PsiDeclarationStatement declarationStatement =
- PsiTreeUtil.getParentOfType(variable,
- PsiDeclarationStatement.class);
- if (declarationStatement == null) {
+ final PsiElement parent = variable.getParent();
+ if (!(parent instanceof PsiDeclarationStatement)) {
return false;
}
+ final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)parent;
PsiStatement nextStatement = null;
final PsiStatement[] statements = containingScope.getStatements();
- for (int i = 0; i < statements.length - 1; i++) {
+ for (int i = 0; i < (statements.length - 1); i++) {
if (statements[i].equals(declarationStatement)) {
nextStatement = statements[i + 1];
+ break;
}
}
if (!(nextStatement instanceof PsiReturnStatement)) {
return false;
}
- final PsiReturnStatement returnStatement =
- (PsiReturnStatement)nextStatement;
+ final PsiReturnStatement returnStatement = (PsiReturnStatement)nextStatement;
final PsiExpression returnValue = returnStatement.getReturnValue();
if (!(returnValue instanceof PsiReferenceExpression)) {
return false;
}
- final PsiElement referent = ((PsiReference)returnValue).resolve();
- return !(referent == null || !referent.equals(variable));
+ final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)returnValue;
+ final PsiElement referent = referenceExpression.resolve();
+ if (referent == null || !referent.equals(variable)) {
+ return false;
+ }
+ if (isVariableUsedInFollowingDeclarations(variable, declarationStatement)) {
+ return false;
+ }
+ return true;
}
private boolean isImmediatelyThrown(PsiVariable variable) {
- final PsiCodeBlock containingScope =
- PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
+ final PsiCodeBlock containingScope = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class, true, PsiClass.class);
if (containingScope == null) {
return false;
}
- final PsiDeclarationStatement declarationStatement =
- PsiTreeUtil.getParentOfType(variable,
- PsiDeclarationStatement.class);
- if (declarationStatement == null) {
+ final PsiElement parent = variable.getParent();
+ if (!(parent instanceof PsiDeclarationStatement)) {
return false;
}
+ final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)parent;
PsiStatement nextStatement = null;
final PsiStatement[] statements = containingScope.getStatements();
- for (int i = 0; i < statements.length - 1; i++) {
+ for (int i = 0; i < (statements.length - 1); i++) {
if (statements[i].equals(declarationStatement)) {
nextStatement = statements[i + 1];
+ break;
}
}
if (!(nextStatement instanceof PsiThrowStatement)) {
return false;
}
- final PsiThrowStatement throwStatement =
- (PsiThrowStatement)nextStatement;
+ final PsiThrowStatement throwStatement = (PsiThrowStatement)nextStatement;
final PsiExpression returnValue = throwStatement.getException();
if (!(returnValue instanceof PsiReferenceExpression)) {
return false;
}
final PsiElement referent = ((PsiReference)returnValue).resolve();
- return !(referent == null || !referent.equals(variable));
+ if (referent == null || !referent.equals(variable)) {
+ return false;
+ }
+ if (isVariableUsedInFollowingDeclarations(variable, declarationStatement)) {
+ return false;
+ }
+ return true;
}
private boolean isImmediatelyAssigned(PsiVariable variable) {
- final PsiCodeBlock containingScope =
- PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
+ final PsiCodeBlock containingScope = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class, true, PsiClass.class);
if (containingScope == null) {
return false;
}
- final PsiDeclarationStatement declarationStatement =
- PsiTreeUtil.getParentOfType(variable,
- PsiDeclarationStatement.class);
- if (declarationStatement == null) {
+ final PsiElement parent = variable.getParent();
+ if (!(parent instanceof PsiDeclarationStatement)) {
return false;
}
+ final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)parent;
PsiStatement nextStatement = null;
int followingStatementNumber = 0;
final PsiStatement[] statements = containingScope.getStatements();
- for (int i = 0; i < statements.length - 1; i++) {
+ for (int i = 0; i < (statements.length - 1); i++) {
if (statements[i].equals(declarationStatement)) {
nextStatement = statements[i + 1];
followingStatementNumber = i + 2;
+ break;
}
}
if (!(nextStatement instanceof PsiExpressionStatement)) {
return false;
}
- final PsiExpressionStatement expressionStatement =
- (PsiExpressionStatement)nextStatement;
- final PsiExpression expression =
- expressionStatement.getExpression();
+ final PsiExpressionStatement expressionStatement = (PsiExpressionStatement)nextStatement;
+ final PsiExpression expression = expressionStatement.getExpression();
if (!(expression instanceof PsiAssignmentExpression)) {
return false;
}
- final PsiAssignmentExpression assignmentExpression =
- (PsiAssignmentExpression)expression;
- final IElementType tokenType =
- assignmentExpression.getOperationTokenType();
+ final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression)expression;
+ final IElementType tokenType = assignmentExpression.getOperationTokenType();
if (tokenType != JavaTokenType.EQ) {
return false;
}
@@ -271,8 +257,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (!(rhs instanceof PsiReferenceExpression)) {
return false;
}
- final PsiReferenceExpression reference =
- (PsiReferenceExpression)rhs;
+ final PsiReferenceExpression reference = (PsiReferenceExpression)rhs;
final PsiElement referent = reference.resolve();
if (referent == null || !referent.equals(variable)) {
return false;
@@ -281,55 +266,52 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (lhs instanceof PsiArrayAccessExpression) {
return false;
}
- if (VariableAccessUtils.variableIsUsed(variable, lhs)) {
+ if (isVariableUsedInFollowingDeclarations(variable, declarationStatement)) {
return false;
}
for (int i = followingStatementNumber; i < statements.length; i++) {
- if (VariableAccessUtils.variableIsUsed(variable,
- statements[i])) {
+ if (VariableAccessUtils.variableIsUsed(variable, statements[i])) {
return false;
}
}
return true;
}
- private boolean isImmediatelyAssignedAsDeclaration(
- PsiVariable variable) {
- final PsiCodeBlock containingScope =
- PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
+ private boolean isImmediatelyAssignedAsDeclaration(PsiVariable variable) {
+ final PsiCodeBlock containingScope = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class, true, PsiClass.class);
if (containingScope == null) {
return false;
}
- final PsiDeclarationStatement declarationStatement =
- PsiTreeUtil.getParentOfType(variable,
- PsiDeclarationStatement.class);
- if (declarationStatement == null) {
+ final PsiElement parent = variable.getParent();
+ if (!(parent instanceof PsiDeclarationStatement)) {
return false;
}
+ final PsiDeclarationStatement declarationStatement = (PsiDeclarationStatement)parent;
PsiStatement nextStatement = null;
int followingStatementNumber = 0;
final PsiStatement[] statements = containingScope.getStatements();
- for (int i = 0; i < statements.length - 1; i++) {
+ for (int i = 0; i < (statements.length - 1); i++) {
if (statements[i].equals(declarationStatement)) {
nextStatement = statements[i + 1];
followingStatementNumber = i + 2;
+ break;
}
}
-
if (nextStatement instanceof PsiDeclarationStatement) {
boolean referenceFound = false;
- for (PsiElement declaration : ((PsiDeclarationStatement)nextStatement).getDeclaredElements()) {
+ final PsiDeclarationStatement nextDeclarationStatement = (PsiDeclarationStatement)nextStatement;
+ for (PsiElement declaration : nextDeclarationStatement.getDeclaredElements()) {
if (!(declaration instanceof PsiVariable)) {
continue;
}
- final PsiExpression initializer = ((PsiVariable)declaration).getInitializer();
- if (!referenceFound) {
- if (initializer instanceof PsiReferenceExpression) {
- final PsiElement referent = ((PsiReference)initializer).resolve();
- if (variable.equals(referent)) {
- referenceFound = true;
- continue;
- }
+ final PsiVariable nextVariable = (PsiVariable)declaration;
+ final PsiExpression initializer = nextVariable.getInitializer();
+ if (!referenceFound && initializer instanceof PsiReferenceExpression) {
+ final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)initializer;
+ final PsiElement referent = referenceExpression.resolve();
+ if (variable.equals(referent)) {
+ referenceFound = true;
+ continue;
}
}
if (VariableAccessUtils.variableIsUsed(variable, initializer)) {
@@ -349,13 +331,12 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
boolean referenceFound = false;
for (PsiResourceVariable resourceVariable : resourceList.getResourceVariables()) {
final PsiExpression initializer = resourceVariable.getInitializer();
- if (!referenceFound) {
- if (initializer instanceof PsiReferenceExpression) {
- final PsiElement referent = ((PsiReferenceExpression)initializer).resolve();
- if (variable.equals(referent)) {
- referenceFound = true;
- continue;
- }
+ if (!referenceFound && initializer instanceof PsiReferenceExpression) {
+ final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)initializer;
+ final PsiElement referent = referenceExpression.resolve();
+ if (variable.equals(referent)) {
+ referenceFound = true;
+ continue;
}
}
if (VariableAccessUtils.variableIsUsed(variable, initializer)) {
@@ -378,14 +359,33 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
else {
return false;
}
-
+ if (isVariableUsedInFollowingDeclarations(variable, declarationStatement)) {
+ return false;
+ }
for (int i = followingStatementNumber; i < statements.length; i++) {
- if (VariableAccessUtils.variableIsUsed(variable,
- statements[i])) {
+ if (VariableAccessUtils.variableIsUsed(variable, statements[i])) {
return false;
}
}
return true;
}
+
+ private boolean isVariableUsedInFollowingDeclarations(PsiVariable variable, PsiDeclarationStatement declarationStatement) {
+ final PsiElement[] declaredElements = declarationStatement.getDeclaredElements();
+ if (declaredElements.length == 1) {
+ return false;
+ }
+ boolean check = false;
+ for (PsiElement declaredElement : declaredElements) {
+ if (!check && variable.equals(declaredElement)) {
+ check = true;
+ } else {
+ if (VariableAccessUtils.variableIsUsed(variable, declaredElement)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
} \ No newline at end of file