private void addOption( final Element rootElement, final CompilerOptionInfo info, final String rawValue) { if (!info.isApplicable(mySdk.getVersionString(), myBC.getNature())) { return; } final String value = FlexCommonUtils.replacePathMacros( rawValue, myModule, myFlexmojos ? "" : mySdk.getHomePath()); final String pathInFlexConfig = info.ID.startsWith("compiler.debug") ? "compiler.debug" : info.ID; final List<String> elementNames = StringUtil.split(pathInFlexConfig, "."); Element parentElement = rootElement; for (int i1 = 0; i1 < elementNames.size() - 1; i1++) { parentElement = getOrCreateElement(parentElement, elementNames.get(i1)); } final String elementName = elementNames.get(elementNames.size() - 1); switch (info.TYPE) { case Boolean: case String: case Int: case File: final Element simpleElement = new Element(elementName, parentElement.getNamespace()); simpleElement.setText(value); parentElement.addContent(simpleElement); break; case List: if (info.LIST_ELEMENTS.length == 1) { final Element listHolderElement = getOrCreateElement(parentElement, elementName); for (final String listElementValue : StringUtil.split(value, CompilerOptionInfo.LIST_ENTRIES_SEPARATOR)) { final Element child = new Element(info.LIST_ELEMENTS[0].NAME, listHolderElement.getNamespace()); child.setText(listElementValue); listHolderElement.addContent(child); } } else { for (final String listEntry : StringUtil.split(value, String.valueOf(CompilerOptionInfo.LIST_ENTRIES_SEPARATOR))) { final Element repeatableListHolderElement = new Element(elementName, parentElement.getNamespace()); final List<String> values = StringUtil.split( listEntry, CompilerOptionInfo.LIST_ENTRY_PARTS_SEPARATOR, true, false); assert info.LIST_ELEMENTS.length == values.size() : info.ID + "=" + value; for (int i = 0; i < info.LIST_ELEMENTS.length; i++) { final Element child = new Element( info.LIST_ELEMENTS[i].NAME, repeatableListHolderElement.getNamespace()); child.setText(values.get(i)); repeatableListHolderElement.addContent(child); } parentElement.addContent(repeatableListHolderElement); } } break; default: assert false : info.DISPLAY_NAME; } }