Package com.google.javascript.jscomp

# Class Compiler

java.lang.Object
com.google.javascript.jscomp.AbstractCompiler
com.google.javascript.jscomp.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.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static class`
`Compiler.CodeBuilder`
Stores a buffer of text to which more can be appended.
`static class`
`Compiler.IntermediateState`
Stores the internal compiler state just before optimization is performed.

## Nested classes/interfaces inherited from interface com.google.javascript.jscomp.SourceExcerptProvider

`SourceExcerptProvider.ExcerptFormatter, SourceExcerptProvider.SourceExcerpt`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final DiagnosticType`
`MOTION_ITERATIONS_ERROR`
`static final DiagnosticType`
`OPTIMIZE_LOOP_ERROR`
Error strings used for reporting JSErrors
`protected final com.google.javascript.jscomp.CodeChangeHandler`
`recentChange`
`PerformanceTracker`
`tracker`

## Constructor Summary

Constructors
Constructor
Description
`Compiler()`
Creates a Compiler that reports errors and warnings to its logger.
`Compiler(ErrorManager errorManager)`
Creates a Compiler that uses a custom error manager.
`Compiler(PrintStream stream)`
Creates a Compiler that reports errors and warnings to an output stream.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`acceptConstKeyword()`
`boolean`
`acceptEcmaScript5()`
`void`
`addNewScript(JsAst ast)`
Adds a new Script AST to the compile state.
`SymbolTable`
`buildKnownSymbolTable()`
`void`
`check()`
`Result`
`compile(JSSourceFile[] externs, JSModule[] modules, CompilerOptions options)`
Deprecated.
Convert your arrays to lists and use the list-based compileModules method.
`Result`
`compile(JSSourceFile[] externs, JSSourceFile[] inputs, CompilerOptions options)`
Deprecated.
Convert your arrays to lists and use the list-based compile method.
`Result`
`compile(JSSourceFile extern, JSModule[] modules, CompilerOptions options)`
Deprecated.
Convert your arrays to lists and use the list-based compileModules method.
`Result`
`compile(SourceFile extern, JSSourceFile[] input, CompilerOptions options)`
Deprecated.
Convert your arrays to lists and use the list-based API.
`Result`
`compile(SourceFile extern, SourceFile input, CompilerOptions options)`
`<T1 extends SourceFile, T2 extends SourceFile>
Result`
`compile(List<T1> externs, List<T2> inputs, CompilerOptions options)`
Compiles a list of inputs.
`<T extends SourceFile>
Result`
`compileModules(List<T> externs, List<JSModule> modules, CompilerOptions options)`
Compiles a list of modules.
`void`
`disableThreads()`
Disable threads.
`String`
`getAstDotGraph()`
Gets the DOT graph of the AST generated at the end of compilation.
`CodingConvention`
`getCodingConvention()`
Gets the current coding convention.
`protected DiagnosticGroups`
`getDiagnosticGroups()`
The warning classes that are available from the command-line, and are suppressible by the `@suppress` annotation.
`int`
`getErrorCount()`
Gets the number of errors.
`CheckLevel`
`getErrorLevel(JSError error)`
`ErrorManager`
`getErrorManager()`
Gets the error manager.
`JSError[]`
`getErrors()`
Returns the array of errors (never null).
`CompilerInput`
`getInput(InputId id)`
Looks up an input (possibly an externs input) by input id.
`Map<InputId,CompilerInput>`
`getInputsById()`
Returns an unmodifiable view of the compiler inputs indexed by id.
`JSError[]`
`getMessages()`
Returns an array constructed from errors + temporary warnings.
`com.google.javascript.rhino.head.ast.AstRoot`
`getOldParseTreeByName(String sourceName)`
`double`
`getProgress()`
`static String`
`getReleaseDate()`
Returns the compiler date baked into the jar.
`static String`
`getReleaseVersion()`
Returns the compiler version baked into the jar.
`Result`
`getResult()`
Returns the result of the compilation.
`ReverseAbstractInterpreter`
`getReverseAbstractInterpreter()`
Get an interpreter for type analysis.
`Node`
`getRoot()`
`String`
`getSourceLine(String sourceName, int lineNumber)`
Get the line indicated by the line number.
`SourceMap`
`getSourceMap()`
`Region`
`getSourceRegion(String sourceName, int lineNumber)`
Get a region around the indicated line number.
`Compiler.IntermediateState`
`getState()`
Returns the current internal state, excluding the input files and modules.
`Scope`
`getTopScope()`
Gets the top scope.
`com.google.javascript.jscomp.MemoizedScopeCreator`
`getTypedScopeCreator()`
`JSTypeRegistry`
`getTypeRegistry()`
Gets a central registry of type information from the compiled JS.
`int`
`getWarningCount()`
Gets the number of warnings.
`JSError[]`
`getWarnings()`
Returns the array of warnings (never null).
`boolean`
`hasErrors()`
Consults the `ErrorManager` to see if we've encountered errors that should halt compilation.
`void`
`init(JSSourceFile[] externs, JSModule[] modules, CompilerOptions options)`
Deprecated.
Convert your arrays to lists and use the list-based API.
`void`
`init(JSSourceFile[] externs, JSSourceFile[] inputs, CompilerOptions options)`
Deprecated.
Convert your arrays to lists and use the list-based API.
`<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.
`<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.
`void`
`initOptions(CompilerOptions options)`
Initialize the compiler options.
`boolean`
`isIdeMode()`
`boolean`
`isTypeCheckingEnabled()`
`CompilerOptions.LanguageMode`
`languageMode()`
`protected CompilerOptions`
`newCompilerOptions()`
Allow subclasses to override the default CompileOptions object.
`CompilerInput`
`newExternInput(String name)`
`void`
`normalize()`
`void`
`optimize()`
`void`
`parse()`
`Node`
`parse(SourceFile file)`
`void`
`processDefines()`
Reprocesses the current defines over the AST.
`void`
`rebuildInputsFromModules()`
Rebuilds the internal list of inputs by iterating over all modules.
`protected void`
`reconcileOptionsWithGuards()`
When the CompilerOptions and its WarningsGuard overlap, reconcile any discrepencies.
`protected void`
`removeExternInput(InputId id)`
Removes an input file from AST.
`void`
`replaceScript(JsAst ast)`
Replaces one file in a hot-swap mode.
`void`
`report(JSError error)`
Report an error or warning.
`void`
`reportCodeChange()`
All passes should call reportCodeChange() when they alter the JS tree structure.
`void`
`setErrorManager(ErrorManager errorManager)`
Sets the error manager.
`static void`
`setLoggingLevel(Level level)`
Sets the logging level for the com.google.javascript.jscomp package.
`void`
`setOldParseTree(String sourceName, com.google.javascript.rhino.head.ast.AstRoot oldAst)`
`void`
`setPassConfig(PassConfig passes)`
`void`
`setState(Compiler.IntermediateState state)`
Sets the internal state to the capture given.
`String`
`toSource()`
Converts the main parse tree back to JS code.
`void`
`toSource(Compiler.CodeBuilder cb, int inputSeqNum, Node root)`
Writes out JS code from a root node.
`String`
`toSource(JSModule module)`
Converts the parse tree for a module back to JS code.
`String[]`
`toSourceArray()`
Converts the parse tree for each input back to JS code.
`String[]`
`toSourceArray(JSModule module)`
Converts the parse tree for each input in a module back to JS code.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

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

Parameters:
  `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.

Parameters:
  `lineNumber` - the line number, 1 being the first line of the file
Returns:
  the region around the line number indicated, or `null</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)