I found a case where Flacon is not producing useable output for E4X filters:
var folderFolders:XMLList = assetXML.folder.(key.indexOf(folder.key) == 0); var folderImages:XMLList = assetXML.image.(key.indexOf(folder.key) == 0); Outputs: var /** @type {XMLList} */ folderFolders = this.assetXML.child('folder').filter(function(node){return (node.key.indexOf(folder.key) == 0)}); var /** @type {XMLList} */ folderImages = this.assetXML.child('image').filter(function(node){return (node.key.indexOf(folder.key) == 0)}); It needs to output this instead: var /** @type {XMLList} */ folderFolders = this.assetXML.child('folder').filter(function(node){return (node.child("key").indexOf(folder.key) == 0)}); var /** @type {XMLList} */ folderImages = this.assetXML.child('image').filter(function(node){return (node.child("key").indexOf(folder.key) == 0)}); This seems kind of difficult. For example, the following is correct, so both situations would need to be handled: if(name && runtimeQualifiers.(text().toString().indexOf("image_name") == 0).length()){ qs.appendChild(<qualifier><key>image_name</key><value>{name}</value></qualifier>); } if(keywords && runtimeQualifiers.(text().toString().indexOf("image_keywords") == 0).length()){ qs.appendChild(<qualifier><key>image_keywords</key><value>{keywords}</value></qualifier>); } Correctly outputs: if (name && this.runtimeQualifiers.filter(function(node){return (node.text().toString().indexOf("image_name") == 0)}).length()) { qs.appendChild(new XML( '<qualifier><key>image_name</key><value>' + name + '</value></qualifier>')); } if (keywords && this.runtimeQualifiers.filter(function(node){return (node.text().toString().indexOf("image_keywords") == 0)}).length()) { qs.appendChild(new XML( '<qualifier><key>image_keywords</key><value>' + keywords + '</value></qualifier>')); } The work-around is to use “child(‘key)” instead of “key” in the filter, but if this valid use of E4X could be worked out, that would be great. Harbs