Class Compiler

  • All Implemented Interfaces:
    SourceExcerptProvider

    public class Compiler
    extends AbstractCompiler
    Compiler (and the other classes in this package) does the following:
    • parses JS code
    • checks for undefined variables
    • performs optimizations such as constant folding and constants inlining
    • renames variables (to short names)
    • outputs compact JavaScript code
    External variables are declared in 'externs' files. For instance, the file may include definitions for global javascript/browser objects such as window, document.
    • Field Detail

      • OPTIMIZE_LOOP_ERROR

        public static final DiagnosticType OPTIMIZE_LOOP_ERROR
        Error strings used for reporting JSErrors
      • MOTION_ITERATIONS_ERROR

        public static final DiagnosticType MOTION_ITERATIONS_ERROR
      • recentChange

        protected final com.google.javascript.jscomp.CodeChangeHandler recentChange
    • Constructor Detail

      • Compiler

        public Compiler()
        Creates a Compiler that reports errors and warnings to its logger.
      • Compiler

        public Compiler​(java.io.PrintStream stream)
        Creates a Compiler that reports errors and warnings to an output stream.
      • Compiler

        public Compiler​(ErrorManager errorManager)
        Creates a Compiler that uses a custom error manager.
    • Method Detail

      • setErrorManager

        public void setErrorManager​(ErrorManager errorManager)
        Sets the error manager.
        Parameters:
        errorManager - the error manager, it cannot be null
      • initOptions

        public void initOptions​(CompilerOptions options)
        Initialize the compiler options. Only necessary if you're not doing a normal compile() job.
      • reconcileOptionsWithGuards

        protected void reconcileOptionsWithGuards()
        When the CompilerOptions and its WarningsGuard overlap, reconcile any discrepencies.
      • init

        @Deprecated
        public void init​(JSSourceFile[] externs,
                         JSSourceFile[] inputs,
                         CompilerOptions options)
        Deprecated.
        Convert your arrays to lists and use the list-based API.
        Initializes the instance state needed for a compile job.
      • init

        public <T1 extends SourceFile,​T2 extends SourceFile> void init​(java.util.List<T1> externs,
                                                                             java.util.List<T2> inputs,
                                                                             CompilerOptions options)
        Initializes the instance state needed for a compile job.
      • init

        @Deprecated
        public void init​(JSSourceFile[] externs,
                         JSModule[] modules,
                         CompilerOptions options)
        Deprecated.
        Convert your arrays to lists and use the list-based API.
        Initializes the instance state needed for a compile job if the sources are in modules.
      • initModules

        public <T extends SourceFile> void initModules​(java.util.List<T> externs,
                                                       java.util.List<JSModule> modules,
                                                       CompilerOptions options)
        Initializes the instance state needed for a compile job if the sources are in modules.
      • rebuildInputsFromModules

        public void rebuildInputsFromModules()
        Rebuilds the internal list of inputs by iterating over all modules. This is necessary if inputs have been added to or removed from a module after the init(List, List, CompilerOptions) call.
      • compile

        @Deprecated
        public Result compile​(JSSourceFile[] externs,
                              JSSourceFile[] inputs,
                              CompilerOptions options)
        Deprecated.
        Convert your arrays to lists and use the list-based compile method.
        Compiles a list of inputs.
      • compile

        @Deprecated
        public Result compile​(JSSourceFile[] externs,
                              JSModule[] modules,
                              CompilerOptions options)
        Deprecated.
        Convert your arrays to lists and use the list-based compileModules method.
        Compiles a list of modules.
      • disableThreads

        public void disableThreads()
        Disable threads. This is for clients that run on AppEngine and don't have threads.
      • parse

        public void parse()
      • setPassConfig

        public void setPassConfig​(PassConfig passes)
        Parameters:
        passes - The PassConfig to use with this Compiler.
        Throws:
        java.lang.NullPointerException - if passes is null
        java.lang.IllegalStateException - if this.passes has already been assigned
      • check

        public void check()
      • getResult

        public Result getResult()
        Returns the result of the compilation.
      • getMessages

        public JSError[] getMessages()
        Returns an array constructed from errors + temporary warnings.
      • getErrors

        public JSError[] getErrors()
        Returns the array of errors (never null).
      • getWarnings

        public JSError[] getWarnings()
        Returns the array of warnings (never null).
      • getRoot

        public Node getRoot()
      • removeExternInput

        protected void removeExternInput​(InputId id)
        Removes an input file from AST.
        Parameters:
        id - The id of the input to be removed.
      • newExternInput

        public CompilerInput newExternInput​(java.lang.String name)
      • getTypedScopeCreator

        public com.google.javascript.jscomp.MemoizedScopeCreator getTypedScopeCreator()
      • buildKnownSymbolTable

        public SymbolTable buildKnownSymbolTable()
      • newCompilerOptions

        protected CompilerOptions newCompilerOptions()
        Allow subclasses to override the default CompileOptions object.
      • toSource

        public java.lang.String toSource()
        Converts the main parse tree back to JS code.
      • toSourceArray

        public java.lang.String[] toSourceArray()
        Converts the parse tree for each input back to JS code.
      • toSource

        public java.lang.String toSource​(JSModule module)
        Converts the parse tree for a module back to JS code.
      • toSourceArray

        public java.lang.String[] toSourceArray​(JSModule module)
        Converts the parse tree for each input in a module back to JS code.
      • toSource

        public void toSource​(Compiler.CodeBuilder cb,
                             int inputSeqNum,
                             Node root)
        Writes out JS code from a root node. If printing input delimiters, this method will attach a comment to the start of the text indicating which input the output derived from. If there were any preserve annotations within the root's source, they will also be printed in a block comment at the beginning of the output.
      • optimize

        public void optimize()
      • processDefines

        public void processDefines()
        Reprocesses the current defines over the AST. This is used by GwtCompiler to generate N outputs for different targets from the same (checked) AST. For each target, we apply the target-specific defines by calling processDefines and then optimize to optimize the AST specifically for that target.
      • normalize

        public void normalize()
      • reportCodeChange

        public void reportCodeChange()
        All passes should call reportCodeChange() when they alter the JS tree structure. This is verified by CompilerTestCase. This allows us to optimize to a fixed point.
        Specified by:
        reportCodeChange in class AbstractCompiler
      • isIdeMode

        public boolean isIdeMode()
      • acceptEcmaScript5

        public boolean acceptEcmaScript5()
      • acceptConstKeyword

        public boolean acceptConstKeyword()
      • isTypeCheckingEnabled

        public boolean isTypeCheckingEnabled()
      • getDiagnosticGroups

        protected DiagnosticGroups getDiagnosticGroups()
        The warning classes that are available from the command-line, and are suppressible by the @suppress annotation.
      • getErrorCount

        public int getErrorCount()
        Gets the number of errors.
      • getWarningCount

        public int getWarningCount()
        Gets the number of warnings.
      • hasErrors

        public boolean hasErrors()
        Consults the ErrorManager to see if we've encountered errors that should halt compilation.

        If CompilerOptions.ideMode is true, this function always returns false without consulting the error manager. The error manager will continue to be told about new errors and warnings, but the compiler will complete compilation of all inputs.

      • getSourceLine

        public java.lang.String getSourceLine​(java.lang.String sourceName,
                                              int lineNumber)
        Description copied from interface: SourceExcerptProvider
        Get the line indicated by the line number. This call will return only the specific line.
        lineNumber - the line number, 1 being the first line of the file
        Returns:
        the line indicated, or null if it does not exist
      • getSourceRegion

        public Region getSourceRegion​(java.lang.String sourceName,
                                      int lineNumber)
        Description copied from interface: SourceExcerptProvider
        Get a region around the indicated line number. The exact definition of a region is implementation specific, but it must contain the line indicated by the line number. A region must not start or end by a carriage return.
        lineNumber - the line number, 1 being the first line of the file
        Returns:
        the region around the line number indicated, or null if it does not exist
      • getSourceMap

        public SourceMap getSourceMap()
      • setLoggingLevel

        public static void setLoggingLevel​(java.util.logging.Level level)
        Sets the logging level for the com.google.javascript.jscomp package.
      • getAstDotGraph

        public java.lang.String getAstDotGraph()
                                        throws java.io.IOException
        Gets the DOT graph of the AST generated at the end of compilation.
        Throws:
        java.io.IOException
      • getInputsById

        public java.util.Map<InputId,​CompilerInput> getInputsById()
        Returns an unmodifiable view of the compiler inputs indexed by id.
      • getState

        public Compiler.IntermediateState getState()
        Returns the current internal state, excluding the input files and modules.
      • setState

        public void setState​(Compiler.IntermediateState state)
        Sets the internal state to the capture given. Note that this assumes that the input files are already set up.
      • getProgress

        public double getProgress()
        Specified by:
        getProgress in class AbstractCompiler
        Returns:
        a number in [0,1] range indicating an approximate progress of the last compile. Note this should only be used as a hint and no assumptions should be made on accuracy, even a completed compile may choose not to set this to 1.0 at the end.
      • replaceScript

        public void replaceScript​(JsAst ast)
        Replaces one file in a hot-swap mode. The given JsAst should be made from a new version of a file that already was present in the last compile call. If the file is new, this will silently ignored.
        Parameters:
        ast - the ast of the file that is being replaced
      • addNewScript

        public void addNewScript​(JsAst ast)
        Adds a new Script AST to the compile state. If a script for the same file already exists the script will not be added, instead a call to #replaceScript should be used.
        Parameters:
        ast - the ast of the new file
      • getReleaseVersion

        public static java.lang.String getReleaseVersion()
        Returns the compiler version baked into the jar.
      • getReleaseDate

        public static java.lang.String getReleaseDate()
        Returns the compiler date baked into the jar.
      • setOldParseTree

        public void setOldParseTree​(java.lang.String sourceName,
                                    com.google.javascript.rhino.head.ast.AstRoot oldAst)
      • getOldParseTreeByName

        public com.google.javascript.rhino.head.ast.AstRoot getOldParseTreeByName​(java.lang.String sourceName)