| |
| #* |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| *# |
| #* |
| ClassDef.vm |
| |
| Template for an AS3 class definition given (MxmlDocument $doc, VelocityUtil $util) |
| |
| Library macros defined in ClassDefLib.vm |
| *#/** |
| * Generated by mxmlc 4.0 |
| * |
| * Package: $doc.packageName |
| * Class: $doc.className |
| * Source: $doc.sourcePath |
| * Template: ${util.templatePath}ClassDef.vm |
| * Time: $util.timeStamp |
| */ |
| |
| ## |
| ## begin package def |
| ## |
| package $doc.packageName |
| { |
| |
| ## |
| ## imports |
| ## |
| #foreach ($nameInfo in $doc.imports) |
| ## NOTE: the SWC contains actual, debuggable bytecode for import statements. To avoid unwanted |
| ## BPs in the debugger, we use an explicitly compile-error-only mapping here. |
| #embedTextMapCompileErrorsOnly("import $nameInfo.name;" $nameInfo.line) |
| #end |
| |
| ## |
| ## ResourceBundle metadata autogenerated from @Resource directives |
| ## |
| #foreach ($atResource in $doc.atResources) |
| [ResourceBundle("$atResource.bundle")] |
| #end |
| |
| ## |
| ## metadata - may be internal or from <Metdata>; latter will be line-number mapped by embedText |
| ## |
| #foreach ($md in $doc.metadata) |
| #embedText($md.Text $md.xmlLineNumber) |
| #end |
| |
| ## |
| ## begin class def |
| ## |
| #trace("// begin class def") |
| ## attach a comment at the class level, if we care about comments. |
| #if ($processcomment) |
| /** |
| #if ($doc.comment) |
| $doc.comment |
| #end |
| */ |
| #end |
| #embedText("public class $doc.className" $doc.root.xmlLineNumber) |
| #embedText(" extends $doc.superClassName" $doc.root.xmlLineNumber) |
| #if ($doc.hasInterfaces) |
| #embedText(" implements $doc.interfaceList" $doc.root.xmlLineNumber) |
| #end |
| { |
| |
| ## |
| ## instance var declarations |
| ## |
| #trace(" // instance variables") |
| #foreach ($decl in $doc.declarationIterator) |
| #if ($decl.inspectable) |
| #embedText(" [Inspectable]" $decl.lineRef) |
| #end |
| #if (!$decl.idIsAutogenerated || $decl.bindabilityEnsured) |
| #embedText(" [Bindable]" $decl.lineRef) |
| #end |
| ## NOTE: the SWC contains actual, debuggable bytecode for empty variable declarations. To avoid unwanted |
| ## BPs in the debugger, we use an explicitly compile-error-only mapping here. |
| ## if id is not auto generated, and if we care about comments then lets add comments to generated class |
| #if (!$decl.idIsAutogenerated) |
| #if ($processcomment) |
| /** |
| #if ($decl.comment) |
| $decl.comment |
| #end |
| */ |
| #end |
| #end |
| ## if id is auto generated, lets add private to fields. |
| #if ($decl.idIsAutogenerated || !$processcomment) |
| /** |
| * @private |
| **/ |
| #end |
| #embedTextMapCompileErrorsOnly(" public var $decl.name : $decl.typeExpr;" $decl.lineRef) |
| |
| #end |
| |
| #trace(" // type-import dummies") |
| #foreach ($typeName in $doc.typeRefs) |
| private var _typeRef$velocityCount : $typeName; |
| #end |
| |
| ## |
| ## construct/init |
| ## |
| #if ($doc.isIUIComponent) |
| |
| #if ($doc.describeVisualChildren && $doc.isContainer) |
| ## |
| ## Note that we line-map this code for compile errors only. This is so that |
| ## BPs set on MXML tags don't fire on startup. However, it also means that |
| ## any RTEs will not point back to the defining tag. |
| ## |
| #trace(" // Container document descriptor") |
| #foreach ($frag in $doc.getDescriptorDeclaration("_documentDescriptor_")) |
| #embedTextMapCompileErrorsOnly($frag.Text $frag.xmlLineNumber) |
| #end |
| #end |
| |
| #trace(" // constructor (Flex display object)") |
| ## if we care about comments, let the constructor be visible. |
| #if (!$processcomment) |
| /** |
| * @private |
| **/ |
| #end |
| public function ${doc.className}() |
| { |
| super(); |
| |
| #if ($doc.isContainer || $doc.isVisualElementContainer) |
| ## The _document variable needs to be set earlier than |
| ## initialize(), because children can access their |
| ## parent's document in UIComponent.executeBindings(). |
| mx_internal::_document = this; |
| #end |
| |
| #emitBindingInitializers() |
| #emitComponentInitializers_1() |
| #foreach ($frag in $doc.getStatesDeclaration()) |
| #embedText($frag.Text $frag.xmlLineNumber) |
| #end |
| #emitInitialBindingExecutions() |
| |
| } |
| |
| #if ($doc.isIFlexModule) |
| /** |
| * @private |
| **/ |
| private var __moduleFactoryInitialized:Boolean = false; |
| |
| /** |
| * @private |
| * Override the module factory so we can defer setting style declarations |
| * until a module factory is set. Without the correct module factory set |
| * the style declaration will end up in the wrong style manager. |
| **/ |
| override public function set moduleFactory(factory:IFlexModuleFactory):void |
| { |
| super.moduleFactory = factory; |
| |
| if (__moduleFactoryInitialized) |
| return; |
| |
| __moduleFactoryInitialized = true; |
| |
| #emitComponentStyleInitializers() |
| |
| } |
| #end |
| |
| #trace(" // initialize()") |
| /** |
| * @private |
| **/ |
| override public function initialize():void |
| { |
| #if ($doc.describeVisualChildren && $doc.isContainer) |
| ## |
| ## Note: setDocumentDescriptor() ensures that visual children are defined by |
| ## at most one documentDescriptor, as we call super.initialize() upwards through |
| ## the derivation chain. If more than one set of child descriptors is encountered, |
| ## an RTE is thrown. |
| ## |
| mx_internal::setDocumentDescriptor(_documentDescriptor_); |
| #end |
| #emitComponentInitializers_2() |
| super.initialize(); |
| } |
| #else |
| |
| ## |
| ## non-UIComponent construct/init codegen |
| ## TODO this is just a placeholder for a non-UIComponent component constructor. Details entirely TBD |
| ## |
| |
| #trace(" // constructor (non-Flex display object)") |
| /** |
| * @private |
| **/ |
| public function ${doc.className}() |
| { |
| super(); |
| |
| #foreach ($frag in $doc.getStatesDeclaration()) |
| #embedText($frag.Text $frag.xmlLineNumber) |
| #end |
| #emitBindingInitializers() |
| #emitComponentInitializers_1() |
| #emitInitialBindingExecutions() |
| #emitComponentInitializers_2() |
| |
| } |
| #end |
| |
| ## If we need to initialize stage properties, then create |
| ## a handler function for the Event.ADDED_TO_STAGE event. |
| #if ($doc.hasStagePropertyInitializers) |
| #emitAddedToStageHandlerFunc() |
| #end |
| |
| ## |
| ## scripts |
| ## |
| #trace(" // scripts") |
| #foreach ($script in $doc.scripts) |
| #trace(" // <Script>, line $script.xmlLineNumber - $script.endXmlLineNumber") |
| #embedText($script.Text $script.xmlLineNumber) |
| |
| #end |
| #trace(" // end scripts") |
| |
| ## |
| ## initializer support defs |
| ## |
| #emitInitializerSupportDefs() |
| |
| ## |
| ## @Embeds |
| ## |
| #trace(" // embed carrier vars") |
| #foreach ($atEmbed in $doc.atEmbeds) |
| #emitEmbedMetadata($atEmbed) private var $atEmbed.propName:$atEmbed.type; |
| |
| #end |
| #trace(" // end embed carrier vars") |
| |
| ## |
| ## misc hardcoded stuff |
| ## |
| #if ($doc.bindingExpressions.size() > 0) |
| #trace(" // binding management vars") |
| #foreach ($var in $doc.bindingManagementVars) |
| #if (!$doc.superHasPublicProperty($var.name)) |
| /** |
| * @private |
| **/ |
| $var.namespace var $var.name : $var.type = $var.initializer; |
| #end |
| #end |
| #end |
| |
| ## |
| ## end class def |
| ## |
| #trace("// end class def") |
| } |
| |
| ## |
| ## end package def |
| ## |
| #trace("// end package def") |
| } |