Try to avoid circular dependencies between packages. Certain packages are intended as global utility classes (feel free to add stuff to them but consider whether they may be useful to other classes):
1) Always load release_parser.properties;
2) development_parser.properties should contain additional parsers only available for development, which should NOT duplicate with release parsers;
3) add WARNING message to check the duplication of parser loading.
We recently create the Branch 1.5 for BEAST, and we will only release the code in Branch 1.5 not Trunk from next release 1.5.3. The trunk will be used for development only. Therefore, any bug fixing will require to check in to the branch, and I will merge branch and trunk when major version updating, such as 1.6, 1.7 ...
To work on Branch 1.5, it is simply to create a new project (e.g. BEAST1.5) and check out code from /branches/1.5/ like what you did for trunk, and then work on this project as same as you are working on the trunk.
Branch 1.5 is for bug fixing and is the release version, but trunk is only for development which is not showing in the release. I will merge branch 1.5 into trunk after each release.
1) Any parser has to be implemented by an individual java class extended from AbstractXMLObjectParser and named by model name + Parser. If there are multi-parsers referring to one model class, they can be included in one parser class and each parser has its own inner class extended from AbstractXMLObjectParser.
For example, dr.evomodel.tree.TreeModel has dr.evomodelxml.tree.TreeModelParser. Or dr.evomodel.operators.ExchangeOperator has parser class dr.evomodelxml.operators.ExchangeOperatorParser, and the latter contains 2 parsers inner classes NARROW_EXCHANGE_OPERATOR_PARSER and WIDE_EXCHANGE_OPERATOR_PARSER.
2) getReturnType() has to return the exact class of the model referred by this parser, if you want it belongs some general types, you need to use inheritance.
For example, dr.evomodelxml.treelikelihood.TreeLikelihoodParser.getReturnType() should return TreeLikelihood, if you want it belongs to Likelihood, you need to inherit TreeLikelihood from Likelihood.
3) For any string used for xml elements or attributes, please declare them as public static final String variable in the ????Parser class, please do not write string as "???" anywhere in the code.
For example, public static final String ROOT_HEIGHT = "rootHeight";
4) The parser class has to be located as described in \release\common \doc\PackageStructure.pdf in repository, or \doc\PackageStructure.pdf in the released version.
Model in dr.evolution=> Parser in dr.evoxml Model in dr.evomodel=> Parser in dr.evomodelxml Model in dr.inference => Parser in dr.inferencexml
5) Any new parser for the release has to be added in \src\dr\app\beast \release_parsers.properties, if you do not want to release it, then it should be added in \src\dr\app\beast\development_parsers.properties. BeastParser.java is not allowed to add any new parser.