blob: 946e6701931376f29938002bf5a9dad6a3ca8425 [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.targets;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.royale.compiler.config.RSLSettings;
import org.apache.royale.compiler.internal.config.FrameInfo;
/**
* The settings used to compile a target.
*/
public interface ITargetSettings
{
/**
* Returns true if the target file is accessible.
*
* @return true if the target file is accessible, false otherwise.
*/
boolean isAccessible();
/**
* Returns true if the target file has debugging instructions
* included.
* @return true if the target file has debugging instructions
* included, false otherwise.
*/
boolean isDebugEnabled();
/**
* Returns true if the target file has advanced telemetry
* enabled.
* @return true if the target file has advanced telemetry
* enabled, false otherwise.
*/
boolean isTelemetryEnabled();
/**
* Returns true if the target should be optimized.
*
* @return true if the target should be optimized, false otherwise.
*/
boolean isOptimized();
/**
* Returns true if the target should be output using compression.
*
* @return true if the target should be output using compression, false
* otherwise.
*/
boolean useCompression();
/**
* Returns true if the target is capable of verbose stack traces.
*
* @return true if the target is capable of verbose stack traces,
* false otherwise.
*/
boolean areVerboseStacktracesEnabled();
/**
* The names of ActionScript metadata that will be preserved in the target.
* If the target is a SWC, the metadata names to preserve will be
* recorded in the SWC's catalog. When the SWC is later linked into
* a target the metadata names will be appended to the list of metadata
* names preserved in the target.
*
* @return the list of names of ActionScript metadata that will be
* preserved in the target. If null, all metadata is preserved.
*/
Collection<String> getASMetadataNames();
/**
* Returns the location of the default CSS file.
*
* @return an instance of <code>java.io.File</code>.
*/
File getDefaultCSS();
/**
* @return Normalized paths in {@code defaults-css-files} configuration option.
*/
List<String> getDefaultsCSSFiles();
/**
* @return Normalized paths in {@code exclude-defaults-css-files} configuration option.
*/
List<String> getExcludeDefaultsCSSFiles();
/**
* Returns the default background color.
*
* @return the default background color.
*/
int getDefaultBackgroundColor();
/**
* Returns the default frame rate.
*
* @return the default frame rate in frames per second.
*/
int getDefaultFrameRate();
/**
* Returns if the default script limits have been set.
*
* @return true if limits set, false otherwise.
*/
boolean areDefaultScriptLimitsSet();
/**
* Returns the default script time limit.
*
* @return the default script time limit in seconds.
*/
int getDefaultScriptTimeLimit();
/**
* Returns the default script recursion limit.
*
* @return the default script recursion limit.
*/
int getDefaultScriptRecursionLimit();
/**
* Returns the default width.
*
* @return the default width in pixels.
*/
int getDefaultWidth();
/**
* Returns the default height.
*
* @return the default height in pixels.
*/
int getDefaultHeight();
/**
* Returns a list of fully qualified class names that should not be linked
* into the target.
*
* @return a list of fully qualified class names that should not be linked
* into the target.
*/
Collection<String> getExterns();
/**
* Returns a list of fully qualified class names that should be linked
* into the target regardless of whether they are required by the target or
* not.
*
* @return a list of fully qualified class names that should be linked
* into the target.
*/
Collection<String> getIncludes();
/**
* A {@link List} of {@link FrameInfo} objects that describe extra frames of
* a SWF. Each frame label has a list of class names that will be linked
* onto the frame.
*
* @return A collection of {@link FrameInfo} objects in SWF order.
*/
List<FrameInfo> getFrameLabels();
/**
* Get the Metadata text. This is a Metadata property.
* <p>
* The Metadata tag is an optional tag to describe the SWF file to an
* external process. The tag embeds XML metadata in the SWF file so that,
* for example, a search engine can locate this tag, access a title for the
* SWF file, and display that title in search results.
*
* @return metadata XML text; null if Metadata tag doesn't exit.
*/
String getSWFMetadata();
/**
* Return the SWF version
*
* @return SWF version
*/
int getSWFVersion();
/**
* Returns the preloader class name
*
* @return preloader class name
*/
String getPreloaderClassName();
/**
* Returns the absolute file name of the source file that defines the root
* class. If {@link ITarget}s using this {@link ITargetSettings} do not
* build SWFs ( they could build SWCs instead ), then this method will
* return null.
*
* @return absolute file name of the source file that defines the root
* class, or null if this {@link ITargetSettings} is not for building SWFs.
*/
String getRootSourceFileName();
/**
* Returns the root class name for the application SWF. If {@link ITarget}s
* using this {@link ITargetSettings} do not build SWFs ( they could build
* SWCs instead ), then this method will return null.
*
* @return rootClassName of the application SWF, or null if this
* {@link ITargetSettings} is not for building SWFs.
*/
String getRootClassName();
/**
* Returns true if the compiler has disabled the pruning of unused type
* selectors.
*
* @return true if the compiler has disabled the pruning of unused type
* selectors, false otherwise.
*/
boolean keepAllTypeSelectors();
/**
* Returns whether the application SWF is flagged for access to network
* resources.
*
* @return true if the application SWF is flagged for access to network
* resources, false otherwise.
*/
boolean useNetwork();
/**
* Returns whether the application is comprised of code that used
* subclass overrides.
*
* @return true if the application is comprised of code that used
* subclass overrides, false otherwise.
*/
boolean allowSubclassOverrides();
/**
* Returns a list of CSS and SWC files to apply as a theme.
*
* @return a list of CSS and SWC files to apply as a theme.
*/
List<File> getThemes();
/**
* Returns true if RSLs that have no classes used by the application are
* not loaded at runtime.
*
* @return true if RSLs that have no classes used by the application are
* not loaded at runtime, false otherwise.
*/
boolean removeUnusedRuntimeSharedLibraryPaths();
/**
* Returns the default setting for all RSLs as to whether an RSL's digest
* should be verified after the RSL is loaded. This setting may be overridden
* by setting the verify digest flag on an individual RSL.
*
* This is equivalent to using the <code>verify-digests</code>
* option in the mxmlc compiler.
*
* @see org.apache.royale.compiler.config.RSLSettings
*/
boolean verifyDigests();
/**
* Returns a collection of libraries whose classes are not be linked
* into the target.
*
* @return a collection of libraries whose classes are not be linked
* into the target.
*/
Collection<File> getExternalLibraryPath();
/**
* Returns a collection of libraries whose classes are linked
* into the target. All the of classes in each library are linked
* into the application regardless of whether the classes is referenced
* by the target.
*
* @return a collection of libraries whose classes will be linked
* into the target.
*/
Collection<File> getIncludeLibraries();
/**
* A list of URLs pointing to RSLs to load. The RSLs will be loaded in the
* order that they appear in the list.
*
* This is equivalent to using the <code>runtime-shared-libraries</code>
* option in the mxmlc compiler.
*
* These RSLs are available to support legacy applications. For the latest
* RSL support see getRuntimeSharedLibraryPath.
*
* @return A list of URLs pointing to RSLs to load.
*/
List<String> getRuntimeSharedLibraries();
/**
* A list of RSLs to load, complete with all the settings on how to load
* the RSLs. The RSLs will be loaded in the order that they appear in the
* list. This is the complete list of RSLs that could possibly be loaded.
* This list could be reduced if unused RSLs are being removed.
*
* This is equivalent to using the <code>runtime-shared-library-path</code>
* option in the mxmlc compiler.
* @return A list of RSLs to load.
*/
List<RSLSettings> getRuntimeSharedLibraryPath();
/**
* Returns true if resource bundle metadata should be processed.
*
* @return true if resource bundle metadata should be processed, false otherwise.
*/
boolean useResourceBundleMetadata();
/**
* Returns the file that specifies where the target should be created.
*
* @return the file that specifies where the target should be created.
*/
File getOutput();
/**
* Returns the file that specifies where the link report should be written.
*
* @return the file that specifies where the link report should be written
* or null if the link report was not requested.
*/
File getLinkReport();
/**
* Returns the file that specifies where the size report should be written.
*
* @return the file that specifies where the size report should be written
* or null if the size report was not requested.
*/
File getSizeReport();
//
// Library specific settings
//
/**
* Returns a collection of fully-qualified class names that are included in
* the target library.
*
* @return a collection of fully-qualified class names that are included in
* the target library.
*/
Collection<String> getIncludeClasses();
/**
* Returns a collection of sources that are included in the target library.
*
* @return a collection of sources that are included in the target library.
*/
Collection<File> getIncludeSources();
/**
* Returns a collection of files that are included in the target library.
* Each entry in the map is a file to be included. The key is the name
* of the file in the target library. The value is the file to be included
* in the library.
*
* @return a collection of files that are included in the target library.
*/
Map<String, File> getIncludeFiles();
/**
* Returns a collection of namespaces that are included in the target
* library.
*
* @return a collection of namespaces that are included in the target
* library.
*/
Collection<String> getIncludeNamespaces();
/**
* Returns a collection of resource bundle names that are included
* in the target library.
*
* @return a collection of resource bundle names that are included
* in the target library.
*/
Collection<String> getIncludeResourceBundles();
/**
* Returns a map of style sheet names and files that are included
* in the target library.
*
* The map's key/value pairs are as follows:
* key: the name of the file in the target library
* value: the included style sheet.
* @return a collection of style sheet names and files that are included
* in the target library.
*/
Map<String, File> getIncludeStyleSheets();
/**
* Returns true if only manifest entries with lookupOnly=true are included
* in the SWC catalog, false otherwise.
*
* @return true if only manifest entries with lookupOnly=true are included
* in the SWC catalog, false otherwise.
*/
boolean isIncludeLookupOnlyEnabled();
/**
* Determine is a library has external linkage. A library with external
* linkage will have none of its classes appear in the target. Two exceptions
* to this rule are classes on the -include-classes option and classes that
* are linked into frames preceding the last frame of SWF.
*
* @param path the absolute path of a library.
*
* @return true if the library has external linkage.
*/
boolean isLinkageExternal(String path);
/**
* Returns whether the application SWF is flagged for direct blit use.
*
* @return true if the application SWF should use direct blit, false otherwise.
*/
boolean useDirectBlit();
/**
* Returns whether the application SWF is flagged for GPU use.
*
* @return true if the application SWF should use the GPU, false otherwise.
*/
boolean useGPU();
/**
* Used when creating a library. Specifies the minimum version of Royale that
* is written into the catalog of the created library. Royale uses the minimum
* version when compiling an application to filter out libraries that have a
* minimum version that is greater than the specified compatibility
* version.
*
* @return the minimum supported version of Royale.
*/
String getRoyaleMinimumSupportedVersion();
/**
* @return true if MXML child nodes are encoded into a data stream instead
* of a bunch of functions.
*/
boolean getMxmlChildrenAsData();
/**
* @return true if the info() structure should contain fields needed by FlexSDK only (and not Royale).
*/
boolean getInfoFlex();
/**
* @return true if the return type of an override can be a subclass instead
* of an exact match as the base class' return type
*/
boolean getAllowSubclassOverrides();
/**
* @return true if the dead code filtering optimization step is enabled.
*/
boolean getRemoveDeadCode();
/**
* Gets the implicit imports for MXML.
*
* @return An array of strings specifying the import targets.
*/
String[] getMxmlImplicitImports();
}