blob: cfc4d01340832246cadb26663aae99ca53d3755f [file] [log] [blame]
/*
*
* 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 org.apache.royale.compiler.tree.mxml;
import org.apache.royale.compiler.definitions.IClassDefinition;
import org.apache.royale.compiler.projects.ICompilerProject;
/**
* This AST node represents an MXML tag which maps to an ActionScript class,
* either as an instance of that class or a definition of a subclass of this
* class.
* <p>
* An {@link IMXMLClassReferenceNode} has N child nodes; each is an
* {@link IMXMLSpecifierNode} specifying the value of a property, the value of a
* style, or ActionScript code to handle an event.
*/
public interface IMXMLClassReferenceNode extends IMXMLNode
{
/**
* Gets the definition of the ActionScript class corresponding to this MXML
* tag.
*
* @return An {@link IClassDefinition} for the ActionScript class.
*/
IClassDefinition getClassReference(ICompilerProject project);
/**
* Does the class referenced by this node implement
* <code>mx.core.IMXMLObject</code>?
*
* @return <code>true</code> if it does.
*/
boolean isMXMLObject();
/**
* Does the class referenced by this node implement
* <code>mx.core.IVisualElementContainer</code>?
*
* @return <code>true</code> if it does.
*/
boolean isVisualElementContainer();
/**
* Does the class referenced by this node implement
* <code>mx.core.IDeferredInstantiatonUIComponent</code>?
*
* @return <code>true</code> if it does.
*/
boolean isDeferredInstantiationUIComponent();
/**
* Does the class referenced by this node implement
* <code>mx.core.IContainer</code>?
*
* @return <code>true</code> if it does.
*/
boolean isContainer();
/**
* Gets the child node specifying a particular property. It may have been
* specified in MXML either by an attribute or by a child tag.
*
* @param name The name of the property.
* @return An {@link IMXMLPropertySpecifierNode} specifying that property.
*/
IMXMLPropertySpecifierNode getPropertySpecifierNode(String name);
/**
* Gets all the child nodes that specify properties. These may have been
* specified in MXML either by attributes or by child tags.
*
* @return An array of {@link IMXMLPropertySpecifierNode} objects.
*/
IMXMLPropertySpecifierNode[] getPropertySpecifierNodes();
/**
* Gets the child node specifying a particular event. It may have been
* specified in MXML either by an attribute or by a child tag.
*
* @param name The name of the event.
* @return An {@link IMXMLEventSpecifierNode} specifying that event.
*/
IMXMLEventSpecifierNode getEventSpecifierNode(String name);
/**
* Gets all the child nodes that specify events. These may have been
* specified in MXML either by attributes or by child tags.
*
* @return An array of {@link IMXMLEventSpecifierNode} objects.
*/
IMXMLEventSpecifierNode[] getEventSpecifierNodes();
/**
* Gets all the child nodes that represent properties, styles, and events
* and which have a particular suffix specifying a state or state group.
*
* @param suffix The name of a state or state group.
* @return An array of {@link IMXMLSpecifierNode} objects.
*/
IMXMLSpecifierNode[] getSpecifierNodesWithSuffix(String suffix);
/**
* Determines whether this node needs to generate a
* <code>UIComponentDescriptor</code>.
*
* @return <code>true</code> if it needs a descriptor.
*/
boolean needsDescriptor();
/**
* Determines whether this node needs to set its
* <code>documentDescriptor</code> property.
*
* @return <code>true</code> if it needs a document descriptor.
*/
boolean needsDocumentDescriptor();
}