diff --git a/src/main/java/com/cflint/plugins/core/UnusedLocalVarChecker.java b/src/main/java/com/cflint/plugins/core/UnusedLocalVarChecker.java index bdbb79a3e..cf10a42a6 100644 --- a/src/main/java/com/cflint/plugins/core/UnusedLocalVarChecker.java +++ b/src/main/java/com/cflint/plugins/core/UnusedLocalVarChecker.java @@ -27,21 +27,24 @@ public class UnusedLocalVarChecker extends CFLintScannerAdapter { @Override public void expression(final CFExpression expression, final Context context, final BugList bugs) { if (expression instanceof CFFullVarExpression) { - final CFExpression variable = ((CFFullVarExpression) expression).getExpressions().get(0); + final CFFullVarExpression fullVarExpression = (CFFullVarExpression) expression; + final CFExpression variable = fullVarExpression.getExpressions().get(0); if (variable instanceof CFIdentifier) { final String name = ((CFIdentifier) variable).getName(); - if (!scopes.isCFScoped(name) || scopes.isLocalScoped(name)) { + if (!scopes.isCFScoped(name)) { localVariables.put(name, true); + }else if(scopes.isLocalScoped(name) && fullVarExpression.getExpressions().size()>1){ + final CFExpression variable2 = fullVarExpression.getExpressions().get(1); + if (variable2 instanceof CFIdentifier) { + localVariables.put(((CFIdentifier) variable2).getName(), true); + } } } for(CFExpression subexpr: ((CFFullVarExpression) expression).getExpressions()){ if(subexpr instanceof CFMember){ CFMember memberExpr = (CFMember) subexpr; if(memberExpr.getExpression() != null) { - final String name = memberExpr.getExpression().toString(); - if (!scopes.isCFScoped(name) || scopes.isLocalScoped(name)) { - localVariables.put(name, true); - } + expression(memberExpr.getExpression(),context,bugs); } } } diff --git a/src/test/resources/com/cflint/tests/UnusedVariable/forLoop_227.cfc b/src/test/resources/com/cflint/tests/UnusedVariable/forLoop_227.cfc new file mode 100644 index 000000000..06a7abb86 --- /dev/null +++ b/src/test/resources/com/cflint/tests/UnusedVariable/forLoop_227.cfc @@ -0,0 +1,10 @@ +component{ + + public numeric function save( ) { + + var x = {}; + var a = local.x.foo; + return a.foo; + } + +} \ No newline at end of file diff --git a/src/test/resources/com/cflint/tests/UnusedVariable/forLoop_227.expected.txt b/src/test/resources/com/cflint/tests/UnusedVariable/forLoop_227.expected.txt new file mode 100644 index 000000000..8878e547a --- /dev/null +++ b/src/test/resources/com/cflint/tests/UnusedVariable/forLoop_227.expected.txt @@ -0,0 +1 @@ +[ ] \ No newline at end of file