if (symbolTag != null)
{
return super.buildAST(problems, filename);
}
FileNode fileNode = new FileNode(workspace, filename);
PackageNode packageNode = new PackageNode(new IdentifierNode(""), null);
fileNode.addItem(packageNode);
ScopedBlockNode packageContents = packageNode.getScopedNode();
ImportNode importNode = ImportNode.buildImportNode(getBaseClassQName());
packageContents.addItem(importNode);
importNode = ImportNode.buildImportNode("mx.core.ByteArrayAsset");
packageContents.addItem(importNode);
importNode = ImportNode.buildImportNode("flash.utils.ByteArray");
packageContents.addItem(importNode);
// generate the byte array class
String byteArrayClassName = data.getQName() + byteArrayNamePostfix;
ClassNode classNodeByteArray = new ClassNode(new IdentifierNode(byteArrayClassName));
classNodeByteArray.setBaseClass(new IdentifierNode("ByteArrayAsset"));
classNodeByteArray.setNamespace(new NamespaceIdentifierNode(INamespaceConstants.public_));
packageContents.addItem(classNodeByteArray);
// generate the movie class
String movieClassName = data.getQName();
ClassNode classNodeMovie = new ClassNode(new IdentifierNode(movieClassName));
classNodeMovie.setBaseClass(new IdentifierNode(getBaseClassName()));
classNodeMovie.setNamespace(new NamespaceIdentifierNode(INamespaceConstants.public_));
packageContents.addItem(classNodeMovie);
ScopedBlockNode classNodeMovieContents = classNodeMovie.getScopedNode();
// generate: private static var bytes:ByteArray = null;
VariableNode variableNodeBytes = new VariableNode(new IdentifierNode("bytes"));
variableNodeBytes.setNamespace(new NamespaceIdentifierNode(INamespaceConstants.private_));
variableNodeBytes.addModifier(new ModifierNode(IASKeywordConstants.STATIC));
variableNodeBytes.setType(null, new IdentifierNode("ByteArray"));
ASToken assignToken = new ASToken(ASTokenTypes.TOKEN_OPERATOR_ASSIGNMENT, -1, -1, -1, -1, "=");
ASToken nullToken = new ASToken(ASTokenTypes.TOKEN_KEYWORD_NULL, -1, -1, -1, -1, IASKeywordConstants.NULL);
LiteralNode nullNode = new LiteralNode(LiteralType.NULL, nullToken);
variableNodeBytes.setAssignedValue(assignToken, nullNode);
classNodeMovieContents.addItem(variableNodeBytes);
// build the constructor
IdentifierNode constructorNameNode = new IdentifierNode(movieClassName);
constructorNameNode.setReferenceValue(classNodeMovie.getDefinition());
FunctionNode constructorNode = new FunctionNode(null, constructorNameNode);
constructorNode.setNamespace(new NamespaceIdentifierNode(INamespaceConstants.public_));
ScopedBlockNode constructorContents = constructorNode.getScopedNode();
// generate: super();
FunctionCallNode superCall = new FunctionCallNode(LanguageIdentifierNode.buildSuper());
constructorContents.addItem(superCall);
// generate: initialWidth = $swfWidth;
LiteralNode widthNode = new NumericLiteralNode(Integer.toString(swfWidth));
BinaryOperatorNodeBase assignmentWidth = BinaryOperatorNodeBase.create(assignToken, new IdentifierNode("initialWidth"), widthNode);
constructorContents.addItem(assignmentWidth);
// generate: initialHeight = $swfHeight;
LiteralNode heightNode = new NumericLiteralNode(Integer.toString(swfHeight));
BinaryOperatorNodeBase assignmentHeight = BinaryOperatorNodeBase.create(assignToken, new IdentifierNode("initialHeight"), heightNode);
constructorContents.addItem(assignmentHeight);
classNodeMovieContents.addItem(constructorNode);
// build the movieClipData() getter
GetterNode movieClipDataGetterNode = new GetterNode(null, null, new IdentifierNode("movieClipData"));
movieClipDataGetterNode.addModifier(new ModifierNode(IASKeywordConstants.OVERRIDE));
movieClipDataGetterNode.setNamespace(new NamespaceIdentifierNode(INamespaceConstants.public_));
movieClipDataGetterNode.setType(null, new IdentifierNode("ByteArray"));
ScopedBlockNode movieClipDataContents = movieClipDataGetterNode.getScopedNode();
// generate: if (bytes == null)
ASToken compareToken = new ASToken(ASTokenTypes.TOKEN_OPERATOR_EQUAL, -1, -1, -1, -1, "==");
BinaryOperatorNodeBase nullCheck = BinaryOperatorNodeBase.create(compareToken, new IdentifierNode("bytes"), new LiteralNode(LiteralType.NULL, nullToken));
IfNode ifStmt = new IfNode(null);
ConditionalNode cNode = new ConditionalNode(null);
cNode.setConditionalExpression(nullCheck);
ifStmt.addBranch(cNode);
movieClipDataContents.addItem(ifStmt);
BlockNode ifContents = cNode.getContentsNode();
// generate: bytes = ByteArray(new $assetByteArray());
ASToken newToken = new ASToken(ASTokenTypes.TOKEN_KEYWORD_NEW, -1, -1, -1, -1, IASKeywordConstants.NEW);
FunctionCallNode newBytes = new FunctionCallNode(newToken, new IdentifierNode(byteArrayClassName));
FunctionCallNode byteArrayCall = new FunctionCallNode(new IdentifierNode("ByteArray"));
ContainerNode args = byteArrayCall.getArgumentsNode();
args.addItem(newBytes);
BinaryOperatorNodeBase assignmentBytes = BinaryOperatorNodeBase.create(assignToken, new IdentifierNode("bytes"), byteArrayCall);
ifContents.addItem(assignmentBytes);
// generate: return bytes;
ReturnNode returnStmt = new ReturnNode(null);
returnStmt.setStatementExpression(new IdentifierNode("bytes"));
movieClipDataContents.addItem(returnStmt);
classNodeMovieContents.addItem(movieClipDataGetterNode);
fileNode.runPostProcess(EnumSet.of(PostProcessStep.POPULATE_SCOPE));
return fileNode;
}