X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MethodDeclaration.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MethodDeclaration.java index 1acab1d..4e017eb 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MethodDeclaration.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/ast/MethodDeclaration.java @@ -156,17 +156,11 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild } /** - * Get the variables from outside (parameters, globals ...) + * Get global variables (not parameters) * @return the variables from outside */ public List getOutsideVariable() { final ArrayList list = new ArrayList(); - if (arguments != null) { - final Enumeration vars = arguments.keys(); - while (vars.hasMoreElements()) { - list.add(new VariableUsage((String) vars.nextElement(), sourceStart)); - } - } if (statements != null) { for (int i = 0; i < statements.length; i++) { @@ -176,6 +170,17 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild return list; } + private List getParameters(final List list) { + if (arguments != null) { + final Enumeration vars = arguments.elements(); + while (vars.hasMoreElements()) { + final VariableDeclaration variable = (VariableDeclaration) vars.nextElement(); + list.add(new VariableUsage(variable.name(), variable.sourceStart)); + } + } + return list; + } + /** * get the modified variables. * @return the variables from we change value @@ -216,39 +221,68 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild return false; } - private void dumpList(List list, String name) { - StringBuffer buff = new StringBuffer(name).append("\n"); - for (int i = 0; i < list.size(); i++) { - buff.append(list.get(i).toString()).append("\n"); - } - if (PHPeclipsePlugin.DEBUG) { - PHPeclipsePlugin.log(1, buff.toString()); - } - } - /** * This method will analyze the code. */ public void analyzeCode() { - final List outsideVars = getOutsideVariable(); + if (statements != null) { + for (int i = 0; i < statements.length; i++) { + statements[i].analyzeCode(); + + } + } + + final List globalsVars = getOutsideVariable(); final List modifiedVars = getModifiedVariable(); + final List parameters = getParameters(new ArrayList()); - final List declaredVars = new ArrayList(outsideVars.size() + modifiedVars.size()); - declaredVars.addAll(outsideVars); + final List declaredVars = new ArrayList(globalsVars.size() + modifiedVars.size()); + declaredVars.addAll(globalsVars); declaredVars.addAll(modifiedVars); + declaredVars.addAll(parameters); final List usedVars = getUsedVariable(); - -/* dumpList(outsideVars, "outside"); - dumpList(modifiedVars, "modified"); - dumpList(usedVars, "used"); */ - + final List readOrWriteVars = new ArrayList(modifiedVars.size()+usedVars.size()); + readOrWriteVars.addAll(modifiedVars); + readOrWriteVars.addAll(usedVars); //look for used variables that were not declared before + findUnusedParameters(readOrWriteVars,parameters); findUnknownUsedVars(usedVars, declaredVars); } /** + * This method will add a warning on all unused parameters. + * @param vars the used variable list + * @param parameters the declared variable list + */ + private void findUnusedParameters(final List vars, final List parameters) { + for (int i = 0; i < parameters.size(); i++) { + VariableUsage param = ((VariableUsage)parameters.get(i)); + if (!isVariableInList(param.getName(),vars)) { + try { + PHPParserSuperclass.setMarker("warning, the parameter "+param.getName() +" seems to be never used in your method", + param.getStartOffset(), + param.getStartOffset() + param.getName().length(), + PHPParserSuperclass.WARNING, + ""); + } catch (CoreException e) { + PHPeclipsePlugin.log(e); + } + } + } + } + + private boolean isVariableInList(final String name, final List list) { + for (int i = 0; i < list.size(); i++) { + if (((VariableUsage) list.get(i)).getName().equals(name)) { + return true; + } + } + return false; + } + + /** * This method will add a warning on all used variables in a method that aren't declared before. * @param usedVars the used variable list * @param declaredVars the declared variable list @@ -259,7 +293,7 @@ public class MethodDeclaration extends Statement implements OutlineableWithChild if (variableUsage.getName().equals("this")) continue; // this is a special variable if (!isVariableDeclaredBefore(declaredVars, variableUsage)) { try { - PHPParserSuperclass.setMarker("warning, usage of an unknown variable : " + variableUsage.getName(), + PHPParserSuperclass.setMarker("warning, usage of a variable that seems to be unassigned yet : " + variableUsage.getName(), variableUsage.getStartOffset(), variableUsage.getStartOffset() + variableUsage.getName().length(), PHPParserSuperclass.WARNING,