| Code with Finding: |
class VariableShadowDeclarationCheck.NoShadowAnnotationGatheringCallback {
@Override
public void enterScope(NodeTraversal t) {
Scope scope = t.getScope();
for (Iterator<Var> vars = scope.getVars(); vars.hasNext();) {
Var var = vars.next();
if (var.isNoShadow()) {
externalNoShadowVariableNames.add(var.getName());
}
}
}
}
class VariableShadowDeclarationCheck.ShadowDeclarationCheckingCallback {
@Override
public void enterScope(NodeTraversal t) {
if (t.inGlobalScope()) {
return;
}
Scope scope = t.getScope();
Scope parentScope = scope.getParent();
for (Iterator<Var> vars = scope.getVars(); vars.hasNext();) {
Var var = vars.next();
if (externalNoShadowVariableNames.contains(var.getName())) {
compiler.report(
t.makeError(var.nameNode, checkLevel,
SHADOW_VAR_ERROR, var.getName()));
continue;
}
Var shadowedVar = parentScope.getVar(var.getName());
if ((shadowedVar != null) &&
(shadowedVar.isNoShadow() || shadowedVar.isLocal())) {
compiler.report(
t.makeError(var.nameNode, checkLevel,
SHADOW_VAR_ERROR, var.getName()));
continue;
}
}
}
}
|