Thread: [Nice-commit] Nice/src/bossa/syntax Arguments.java,1.18,1.19 Constructor.java,1.6,1.7 FormalParamete
Brought to you by:
bonniot
From: <xo...@us...> - 2003-08-11 19:33:41
|
Update of /cvsroot/nice/Nice/src/bossa/syntax In directory sc8-pr-cvs1:/tmp/cvs-serv8466/src/bossa/syntax Modified Files: Arguments.java Constructor.java FormalParameters.java Log Message: Fixed error reporting when the constructor accepts a mix of named and unnamed parameters. Also added a new error message for when too many arguments are provided to a constructor. Index: Arguments.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/Arguments.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** Arguments.java 27 May 2003 12:40:09 -0000 1.18 --- Arguments.java 11 Aug 2003 19:31:31 -0000 1.19 *************** *** 260,284 **** } ! List missingNamedArgs(FormalParameters parameters, boolean includeDefaultedArgs) { List missing = new LinkedList(); ! Iterator namedParams = parameters.getNamedParameters().iterator(); ! while(namedParams.hasNext()) { - FormalParameters.NamedParameter param = (FormalParameters.NamedParameter)namedParams.next(); - if (param.value() != null && !includeDefaultedArgs) - continue; boolean found = false; ! for (int i = 0; i < arguments.length; i++) ! if (arguments[i].name != null) ! { ! String s = arguments[i].name.toString(); ! if (param.match(s)) { found = true; break; ! } } ! if (!found) missing.add(param); } --- 260,300 ---- } ! List missingArgs(FormalParameters parameters) { List missing = new LinkedList(); ! Iterator reqParams = parameters.getRequiredParameters().iterator(); ! int lastUsedPositional = -1; ! while(reqParams.hasNext()) { boolean found = false; ! FormalParameters.Parameter param = (FormalParameters.Parameter)reqParams.next(); ! if (param.value() != null) ! continue; ! if (param instanceof FormalParameters.NamedParameter) ! { ! FormalParameters.NamedParameter namedParam = (FormalParameters.NamedParameter)param; ! for (int i = 0; i < arguments.length; i++) ! if (arguments[i].name != null) ! { ! String s = arguments[i].name.toString(); ! if (param.match(s)) ! { ! found = true; ! break; ! } ! } ! } ! else { ! for(int i = lastUsedPositional + 1; i < arguments.length; i++) ! { ! if (arguments[i].name == null) { found = true; + lastUsedPositional = i; break; ! } } ! } ! if (!found) missing.add(param); } Index: Constructor.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/Constructor.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Constructor.java 18 Jul 2003 22:56:49 -0000 1.6 --- Constructor.java 11 Aug 2003 19:31:31 -0000 1.7 *************** *** 186,208 **** } ! //Required fields missing - two different messages depending on whether //an explanation of the syntax is necessary res = new StringBuffer(); ! res.append("Fields of class ").append(name).append(" require initial values.\n"); ! Iterator missingFields = null; ! ! if (arguments.size() == 0) { ! res.append(syntaxExample()) ! .append("Class ").append(name).append(" has the following fields:\n"); ! missingFields = parameters.iterator(); } ! else { ! res.append("These fields are missing:\n"); ! missingFields = arguments.missingNamedArgs(parameters, false).iterator(); ! } ! while(missingFields.hasNext()) { --- 186,219 ---- } ! //Required fields missing, or else too many arguments ! // - three different messages depending on whether //an explanation of the syntax is necessary res = new StringBuffer(); ! List missing = arguments.missingArgs(parameters); Iterator missingFields = null; ! ! if (arguments.size() == 0 || missing.size() > 0) { ! res.append("Fields of class ").append(name).append(" require initial values.\n"); ! if (arguments.size() == 0) ! { ! res.append(syntaxExample()) ! .append("Class ").append(name).append(" has the following fields:\n"); ! missingFields = parameters.iterator(); ! } ! else ! { ! res.append("These fields are missing:\n"); ! missingFields = missing.iterator(); ! } } ! else { ! res.append("Too many arguments when constructing new instance of class ") ! .append(name) ! .append(".\n") ! .append("The constructor accepts the following arguments:\n" ); ! missingFields = parameters.iterator(); ! } while(missingFields.hasNext()) { *************** *** 211,216 **** .append("\n"); } - return res.toString(); } --- 222,227 ---- .append("\n"); } return res.toString(); + } *************** *** 222,232 **** .append(" new ").append(name).append("("); ! Iterator params = parameters.getRequiredNamedParameters().iterator(); int paramCount = 0; int len = name.length(); while(params.hasNext()) { ! FormalParameters.NamedParameter param = ! (FormalParameters.NamedParameter)params.next(); if (paramCount != 0) res.append(", "); --- 233,243 ---- .append(" new ").append(name).append("("); ! Iterator params = parameters.getRequiredParameters().iterator(); int paramCount = 0; int len = name.length(); while(params.hasNext()) { ! FormalParameters.Parameter param = ! (FormalParameters.Parameter)params.next(); if (paramCount != 0) res.append(", "); *************** *** 238,242 **** paramCount = 0; } ! res.append(param.getName()).append(": value"); paramCount++; } --- 249,256 ---- paramCount = 0; } ! if (param instanceof FormalParameters.NamedParameter) ! res.append(param.getName()).append(": value"); ! else ! res.append("value"); paramCount++; } Index: FormalParameters.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/syntax/FormalParameters.java,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** FormalParameters.java 8 Aug 2003 19:16:33 -0000 1.31 --- FormalParameters.java 11 Aug 2003 19:31:31 -0000 1.32 *************** *** 492,496 **** } ! public List getRequiredNamedParameters() { LinkedList res = new LinkedList(); --- 492,496 ---- } ! public List getRequiredParameters() { LinkedList res = new LinkedList(); *************** *** 498,502 **** { Parameter param = parameters[i]; ! if (param instanceof NamedParameter && ! (param instanceof OptionalParameter)) { res.add(parameters[i]); --- 498,502 ---- { Parameter param = parameters[i]; ! if (!(param instanceof OptionalParameter)) { res.add(parameters[i]); |