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 Details

    • tracker

      public PerformanceTracker tracker
    • 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 Details

    • Compiler

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

      public Compiler(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 Details

    • 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(List<T1> externs, 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(List<T> externs, 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

      public Result compile(SourceFile extern, SourceFile input, CompilerOptions options)
    • compile

      @Deprecated public Result compile(SourceFile extern, JSSourceFile[] input, CompilerOptions options)
      Deprecated.
      Convert your arrays to lists and use the list-based API.
    • compile

      @Deprecated public Result compile(JSSourceFile extern, JSModule[] modules, CompilerOptions options)
      Deprecated.
      Convert your arrays to lists and use the list-based compileModules method.
    • 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

      public <T1 extends SourceFile, T2 extends SourceFile> Result compile(List<T1> externs, List<T2> inputs, CompilerOptions options)
      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.
    • compileModules

      public <T extends SourceFile> Result compileModules(List<T> externs, List<JSModule> modules, CompilerOptions options)
      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:
      NullPointerException - if passes is null
      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()
    • getInput

      public CompilerInput getInput(InputId id)
      Description copied from class: AbstractCompiler
      Looks up an input (possibly an externs input) by input id. May return null.
      Specified by:
      getInput in class AbstractCompiler
    • 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(String name)
    • getTypeRegistry

      public JSTypeRegistry getTypeRegistry()
      Description copied from class: AbstractCompiler
      Gets a central registry of type information from the compiled JS.
      Specified by:
      getTypeRegistry in class AbstractCompiler
    • getTypedScopeCreator

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

      public SymbolTable buildKnownSymbolTable()
    • getTopScope

      public Scope getTopScope()
      Description copied from class: AbstractCompiler
      Gets the top scope.
      Specified by:
      getTopScope in class AbstractCompiler
    • getReverseAbstractInterpreter

      public ReverseAbstractInterpreter getReverseAbstractInterpreter()
      Description copied from class: AbstractCompiler
      Get an interpreter for type analysis.
      Specified by:
      getReverseAbstractInterpreter in class AbstractCompiler
    • parse

      public Node parse(SourceFile file)
    • newCompilerOptions

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

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

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

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

      public 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
    • getCodingConvention

      public CodingConvention getCodingConvention()
      Description copied from class: AbstractCompiler
      Gets the current coding convention.
      Specified by:
      getCodingConvention in class AbstractCompiler
    • isIdeMode

      public boolean isIdeMode()
    • acceptEcmaScript5

      public boolean acceptEcmaScript5()
    • languageMode

      public CompilerOptions.LanguageMode languageMode()
    • 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.
    • report

      public void report(JSError error)
      Description copied from class: AbstractCompiler
      Report an error or warning.
      Specified by:
      report in class AbstractCompiler
    • getErrorLevel

      public CheckLevel getErrorLevel(JSError error)
    • 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 String getSourceLine(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(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(Level level)
      Sets the logging level for the com.google.javascript.jscomp package.
    • getAstDotGraph

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

      public ErrorManager getErrorManager()
      Description copied from class: AbstractCompiler
      Gets the error manager.
      Specified by:
      getErrorManager in class AbstractCompiler
    • getInputsById

      public 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 String getReleaseVersion()
      Returns the compiler version baked into the jar.
    • getReleaseDate

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

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

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