From: Mark U. <ma...@cs...> - 2007-05-11 00:55:57
|
Leo You wrote: > After quite some number of requests to explain the > various Z Std commonalities implemented within the > CZT AST, and some repeat implementation of access > methods, I decided to add to ZUtils (corejava) a > series of easy access methods. > I've included some methods for MemPred, ApplExpr, > RefExpr, and AxPara to handle all the commonalities > those terms represent. > I think that some of these isXXX and getXXX methods are useful, when they check reasonably complex and often-used conditions. However, I would prefer not to define methods for simple instanceof tests, or for casts, because I think the code is clearer to read and shorter when these are done inline. So perhaps we could omit methods like these? public static boolean isRefExpr(Term term) { return term instanceof RefExpr; } public static RefExpr asRefExpr(Term term) { assert isRefExpr(term); return (RefExpr)term; } One small comment about the isSchema method. It will return false if someone writes a schema within an axdef paragraph. Example: \begin{axdef} S==[...] \end{axdef} Is this what you intended, or did you want to catch *all* schema definitions? If you want to catch all schemas, then you could delete the checks of the getBox() attribute and just look at the structure of the AxPara. I have three other more philosophical concerns: 1. Most of these new convenience methods assume standard Z, will not handle Jokers etc., and cannot be extended to handle Jokers. It would be nice to write most of them as visitors, so that they can be extended. But this is quite a bit of work. 2. Most of these new methods are not (yet) called from anywhere and not tested? (Or do you have code that is not in the repository that calls them?) This means that they are likely to gradually become out of date, and no one will notice (until some poor newbie comes along and tries using it and finds that it doesn't work). Our standard practice is to periodically delete methods that are not called from anywhere in the CZT repository, in order to clean up the code. I think that we should either: 2a. follow an 'extreme programming' philosophy and only add such convenience methods when they are actually called from somewhere. Or, 2b. add unit tests for all such convenience methods, so that they fail when something changes. 3. We need a nice way of 'advertising' convenience methods like these. Like me, you've probably already had the experience of implementing some convenience method for your own use, then finding later that there was already a similar method somewhere else in the system. For example, we suspect that some of the access methods you wrote to figure out the various AxPara cases or ApplExpr cases are probably done in the printer visitors somewhere. It would be nice if there was some global CZT search engine for finding methods that perform a particular function. But I'm not sure how to do this. A wiki? A textual search engine that looks for keywords within Javadocs? We have about 500K LOC, so finding our way around it is difficult. Ideas anyone? Thanks Mark |