/** * Appends the body of skeleton test code, that is, only html tag fields and getter methods to * retrieve the values of the variables into the given string builder. * * @param builder {@link StringBuilder} the generated test code will be appended to * @param templateInfo the {@link TemplateInfo} of the template whose skeleton test code we want * to generate */ private void appendFieldsAndGetters(StringBuilder builder, TemplateInfo templateInfo) { // Create new StringBuilder to separate methods group from fields group such // as "private int field1; private int field2; // private void method1() {} private void method2() {}". StringBuilder methodBuilder = new StringBuilder(); HashMultiset<String> varNameCounter = HashMultiset.create(); appendLine( builder, 1, "private static Pattern commentPattern = Pattern.compile(\"<!--POGEN,([^,]*),([^,]*),(.*?)-->\", Pattern.DOTALL);"); for (HtmlTagInfo tagInfo : templateInfo.getHtmlTagInfos()) { // Skip this variable if it has no parent html tag // TODO(kazuu): Deal with these variable with a more proper way if (!tagInfo.hasParentTag()) { continue; } String attrValue = tagInfo.getAttributeValue(); boolean isRepeated = tagInfo.isRepeated(); for (VariableInfo varInfo : tagInfo.getVariableInfos()) { // When the same template variable appears in other html tags, // varIndex > 1 is satisfied varNameCounter.add(varInfo.getName()); int varIndex = varNameCounter.count(varInfo.getName()); String newVarName = varInfo.getName() + convertToString(varIndex); appendElementGetter(builder, methodBuilder, newVarName, attrValue, isRepeated); if (!varInfo.isManipulableTag()) { appendTextGetter(methodBuilder, newVarName, tagInfo, varInfo, isRepeated); } for (String attrName : varInfo.getSortedAttributeNames()) { appendAttributeGetter(methodBuilder, newVarName, attrName, attrValue, isRepeated); } } } // Append method definitions after field definitions builder.append(methodBuilder); }