////////////////////////////////////////////////////////////////////////////////
//
//  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.
//
////////////////////////////////////////////////////////////////////////////////



package
{

/**
 *  @private
 *  In some projects, this class is used to link additional classes
 *  into the SWC beyond those that are found by dependency analysis
 *  starting from the classes specified in manifest.xml.
 *  This project has no manifest file (because there are no MXML tags
 *  corresponding to any classes in it) so all the classes linked into
 *  the SWC are found by a dependency analysis starting from the classes
 *  listed here.
 */
internal class AutomationClasses
{
	import mx.automation.delegates.containers.AccordionAutomationImpl; AccordionAutomationImpl;
	import mx.automation.delegates.containers.ApplicationAutomationImpl; ApplicationAutomationImpl;
	import mx.automation.delegates.containers.BoxAutomationImpl; BoxAutomationImpl;
	import mx.automation.delegates.containers.CanvasAutomationImpl; CanvasAutomationImpl;
	import mx.automation.delegates.containers.DividedBoxAutomationImpl; DividedBoxAutomationImpl;
	import mx.automation.delegates.containers.FormAutomationImpl; FormAutomationImpl;
	import mx.automation.delegates.containers.FormItemAutomationImpl; FormItemAutomationImpl;
	import mx.automation.delegates.containers.PanelAutomationImpl; PanelAutomationImpl;
	import mx.automation.delegates.containers.TabNavigatorAutomationImpl; TabNavigatorAutomationImpl;
	import mx.automation.delegates.containers.ViewStackAutomationImpl; ViewStackAutomationImpl;
	import mx.automation.delegates.controls.AlertAutomationImpl; AlertAutomationImpl;
	import mx.automation.delegates.controls.AlertFormAutomationImpl; AlertFormAutomationImpl;
	import mx.automation.delegates.controls.ButtonAutomationImpl; ButtonAutomationImpl;
	import mx.automation.delegates.controls.ButtonBarAutomationImpl; ButtonBarAutomationImpl;
	import mx.automation.delegates.controls.CheckBoxAutomationImpl; CheckBoxAutomationImpl;
	import mx.automation.delegates.controls.ColorPickerAutomationImpl; ColorPickerAutomationImpl;
	import mx.automation.delegates.controls.ComboBaseAutomationImpl; ComboBaseAutomationImpl;
	import mx.automation.delegates.controls.ComboBoxAutomationImpl; ComboBoxAutomationImpl;
	import mx.automation.delegates.controls.DataGridAutomationImpl; DataGridAutomationImpl;
	import mx.automation.delegates.controls.DataGridItemRendererAutomationImpl; DataGridItemRendererAutomationImpl;
	import mx.automation.delegates.controls.DateChooserAutomationImpl; DateChooserAutomationImpl;
	import mx.automation.delegates.controls.DateFieldAutomationImpl; DateFieldAutomationImpl;
	import mx.automation.delegates.controls.LabelAutomationImpl; LabelAutomationImpl;
	import mx.automation.delegates.controls.LinkBarAutomationImpl; LinkBarAutomationImpl;
	import mx.automation.delegates.controls.ListAutomationImpl; ListAutomationImpl;
	import mx.automation.delegates.controls.ListBaseAutomationImpl; ListBaseAutomationImpl;
	import mx.automation.delegates.controls.ListBaseContentHolderAutomationImpl; ListBaseContentHolderAutomationImpl;
	import mx.automation.delegates.controls.ListItemRendererAutomationImpl; ListItemRendererAutomationImpl;
	import mx.automation.delegates.controls.MenuAutomationImpl; MenuAutomationImpl;
	import mx.automation.delegates.controls.MenuBarAutomationImpl; MenuBarAutomationImpl;
	import mx.automation.delegates.controls.MenuBarItemAutomationImpl; MenuBarItemAutomationImpl;
	import mx.automation.delegates.controls.MenuItemRendererAutomationImpl; MenuItemRendererAutomationImpl;
	import mx.automation.delegates.controls.NavBarAutomationImpl; NavBarAutomationImpl;
	import mx.automation.delegates.controls.NumericStepperAutomationImpl; NumericStepperAutomationImpl;
	import mx.automation.delegates.controls.PopUpButtonAutomationImpl; PopUpButtonAutomationImpl;
	import mx.automation.delegates.controls.ProgressBarAutomationImpl; ProgressBarAutomationImpl;
	import mx.automation.delegates.controls.RadioButtonAutomationImpl; RadioButtonAutomationImpl;
	import mx.automation.delegates.controls.ScrollBarAutomationImpl; ScrollBarAutomationImpl;
	import mx.automation.delegates.controls.SliderAutomationImpl; SliderAutomationImpl;
	import mx.automation.delegates.controls.SWFLoaderAutomationImpl; SWFLoaderAutomationImpl;
	import mx.automation.delegates.controls.TextAreaAutomationImpl; TextAreaAutomationImpl;
	import mx.automation.delegates.controls.TextInputAutomationImpl; TextInputAutomationImpl;
	import mx.automation.delegates.controls.TileBaseAutomationImpl; TileBaseAutomationImpl;
	import mx.automation.delegates.controls.TileListItemRendererAutomationImpl; TileListItemRendererAutomationImpl;
	import mx.automation.delegates.controls.ToggleButtonBarAutomationImpl; ToggleButtonBarAutomationImpl;
	import mx.automation.delegates.controls.ToolTipAutomationImpl; ToolTipAutomationImpl;
	import mx.automation.delegates.controls.TreeAutomationImpl; TreeAutomationImpl;
	import mx.automation.delegates.controls.TreeItemRendererAutomationImpl; TreeItemRendererAutomationImpl;
	import mx.automation.delegates.controls.VideoDisplayAutomationImpl; VideoDisplayAutomationImpl;
	import mx.automation.delegates.core.ContainerAutomationImpl; ContainerAutomationImpl;
	import mx.automation.delegates.core.RepeaterAutomationImpl; RepeaterAutomationImpl;
	import mx.automation.delegates.core.ScrollControlBaseAutomationImpl; ScrollControlBaseAutomationImpl;
	import mx.automation.delegates.core.UIComponentAutomationImpl; UIComponentAutomationImpl; 
	import mx.automation.delegates.core.UITextFieldAutomationImpl; UITextFieldAutomationImpl;
	import mx.automation.delegates.DragManagerAutomationImpl; DragManagerAutomationImpl;
	// Maintain alphabetical order
}

}
