As I was reading the patch, I thought that it might be better if we eliminated most of the javadoc that is duplicated in the four addSubquery methods. This is because some of the wording used in the original patch has been changed in the specification to make it clearer. Specifically, the specification now says
This method adds a subquery to this Query. A subquery is composed as a Query and subsequently attached to a different Query (the outer Query) by calling this method. The String parameters are trimmed of white space.
The Query parameter instance is unmodified as a result of the addSubquery or subsequent execution of the outer Query. Only some of the parameter query parts are copied for use as the subquery. The parts copied include the candidate class, filter, parameter declarations, variable declarations, imports, ordering specification, uniqueness, result specification, and grouping specification. The association with a PersistenceManager, the candidate collection or extent, result class, and range limits are not used.
The variableDeclaration parameter is the name of the variable containing the results of the subquery execution. If the same value of variableDeclaration is used to add multpile subqueries, the subquery replaces the previous subquery for the same named variable. If the subquery parameter is null, the variable is unset, effectively making the variable named in the variableDeclaration unbound. If the trimmed value is the empty String, or the parameter is null, then JDOUserException is thrown.
The candidateCollectionExpression is the expression from the outer query that represent the candidates over which the subquery is evaluated. If the trimmed value is the empty String, or the parameter is null, then the candidate collection is the extent of the candidate class.
When comments on the spec wording are all resolved, we should put them back into the javadoc. So I'm thinking that maybe we should avoid copying and pasting into four different methods.
What I don't understand well is the impact on javadoc for code completion. If we have the full javadoc only on the first method, and the paragraph on the parameter handling is mostly in the single string version, do we hurt the usability for users depending on javadoc for code completion? I'm pretty sure that javadoc for regular users will not suffer if there is a @see reference that points to the full description in the other method.
Any comments from code completion fans?