diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
index 483e9f3ebc35..5da5ba2dd82d 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/dataflow/UnnecessaryLocalVariableInspection.java
@@ -25,6 +25,7 @@ import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.BaseInspectionVisitor;
import com.siyeh.ig.InspectionGadgetsFix;
import com.siyeh.ig.fixes.InlineVariableFix;
+import com.siyeh.ig.psiutils.ParenthesesUtils;
import com.siyeh.ig.psiutils.VariableAccessUtils;
import org.jetbrains.annotations.NotNull;
@@ -114,7 +115,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
}
private boolean isCopyVariable(PsiVariable variable) {
- final PsiExpression initializer = variable.getInitializer();
+ final PsiExpression initializer = ParenthesesUtils.stripParentheses(variable.getInitializer());
if (!(initializer instanceof PsiReferenceExpression)) {
return false;
}
@@ -126,6 +127,9 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (!(referent instanceof PsiLocalVariable || referent instanceof PsiParameter)) {
return false;
}
+ if (!(referent instanceof PsiResourceVariable) && variable instanceof PsiResourceVariable) {
+ return false;
+ }
final PsiCodeBlock containingScope = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class);
if (containingScope == null) {
return false;
@@ -169,7 +173,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
return false;
}
final PsiReturnStatement returnStatement = (PsiReturnStatement)nextStatement;
- final PsiExpression returnValue = returnStatement.getReturnValue();
+ final PsiExpression returnValue = ParenthesesUtils.stripParentheses(returnStatement.getReturnValue());
if (!(returnValue instanceof PsiReferenceExpression)) {
return false;
}
@@ -178,10 +182,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (referent == null || !referent.equals(variable)) {
return false;
}
- if (isVariableUsedInFollowingDeclarations(variable, declarationStatement)) {
- return false;
- }
- return true;
+ return !isVariableUsedInFollowingDeclarations(variable, declarationStatement);
}
private boolean isImmediatelyThrown(PsiVariable variable) {
@@ -206,7 +207,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
return false;
}
final PsiThrowStatement throwStatement = (PsiThrowStatement)nextStatement;
- final PsiExpression returnValue = throwStatement.getException();
+ final PsiExpression returnValue = ParenthesesUtils.stripParentheses(throwStatement.getException());
if (!(returnValue instanceof PsiReferenceExpression)) {
return false;
}
@@ -214,10 +215,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (referent == null || !referent.equals(variable)) {
return false;
}
- if (isVariableUsedInFollowingDeclarations(variable, declarationStatement)) {
- return false;
- }
- return true;
+ return !isVariableUsedInFollowingDeclarations(variable, declarationStatement);
}
private boolean isImmediatelyAssigned(PsiVariable variable) {
@@ -253,7 +251,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
if (tokenType != JavaTokenType.EQ) {
return false;
}
- final PsiExpression rhs = assignmentExpression.getRExpression();
+ final PsiExpression rhs = ParenthesesUtils.stripParentheses(assignmentExpression.getRExpression());
if (!(rhs instanceof PsiReferenceExpression)) {
return false;
}
@@ -305,7 +303,7 @@ public class UnnecessaryLocalVariableInspection extends BaseInspection {
continue;
}
final PsiVariable nextVariable = (PsiVariable)declaration;
- final PsiExpression initializer = nextVariable.getInitializer();
+ final PsiExpression initializer = ParenthesesUtils.stripParentheses(nextVariable.getInitializer());
if (!referenceFound && initializer instanceof PsiReferenceExpression) {
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)initializer;
final PsiElement referent = referenceExpression.resolve();
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/C.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/C.java
index 234c1ba884de..da4b4b43181c 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/C.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/C.java
@@ -5,8 +5,8 @@ class C {
System.out.println(s2 + s3);
AutoCloseable r1 = null;
- try (AutoCloseable r2 = r1, AutoCloseable r3 = null) {
- System.out.println(r2 + r3);
+ try (AutoCloseable r2 = r1; AutoCloseable r3 = null) {
+ System.out.println(r2.toString() + r3.toString());
}
}
@@ -20,7 +20,7 @@ class C {
System.out.println(r2 + r3);
}
}
-
+
int boxing(Long l) {
long ll = l;
return (int) ll;
@@ -83,4 +83,36 @@ class C {
return null;
}
+ public void neededResourceVariable(java.io.InputStream in) throws java.io.IOException {
+ try (java.io.InputStream inn = in) {
+ final int read = inn.read();
+ // do stuff with in
+ }
+ }
+
+ int parenthesized() {
+ final int i = 1 + 2;
+ return (i);
+ }
+
+ void parenthesized2() {
+ final RuntimeException t = new RuntimeException();
+ throw (t);
+ }
+
+ void parenthesized3(int i) {
+ int j = (i);
+ }
+
+ void parenthesized4(int k) {
+ final int j = 1;
+ k = (j);
+ }
+
+ void parenthesized5() {
+ final int j = 1;
+ int k = (j);
+ System.out.println(k);
+ }
+
}
\ No newline at end of file
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/expected.xml
index bf91c5c62e2c..70ce7071c30e 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/expected.xml
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/unnecessary_local_vars/expected.xml
@@ -21,13 +21,6 @@
Local variable <code>r1</code> is redundant #loc
-
- C.java
- 8
- Redundant local variable
- Local variable <code>r2</code> is redundant #loc
-
-
C.java
15
@@ -42,20 +35,6 @@
Local variable <code>s3</code> is redundant #loc
-
- C.java
- 19
- Redundant local variable
- Local variable <code>r2</code> is redundant #loc
-
-
-
- C.java
- 19
- Redundant local variable
- Local variable <code>r3</code> is redundant #loc
-
-
C.java
30
@@ -98,5 +77,46 @@
Local variable <code>value</code> is redundant #loc
+
+ C.java
+ 94
+ Redundant local variable
+ Local variable <code>i</code> is redundant #loc
+
+
+
+ C.java
+ 99
+ Redundant local variable
+ Local variable <code>t</code> is redundant #loc
+
+
+
+ C.java
+ 108
+ Redundant local variable
+ Local variable <code>j</code> is redundant #loc
+
+
+
+ C.java
+ 104
+ Redundant local variable
+ Local variable <code>j</code> is redundant #loc
+
+
+
+ C.java
+ 113
+ Redundant local variable
+ Local variable <code>j</code> is redundant #loc
+
+
+
+ C.java
+ 114
+ Redundant local variable
+ Local variable <code>k</code> is redundant #loc
+
\ No newline at end of file