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
-
-
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 DiagnosticType
MOTION_ITERATIONS_ERROR
static DiagnosticType
OPTIMIZE_LOOP_ERROR
Error strings used for reporting JSErrorsprotected 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(java.io.PrintStream stream)
Creates a Compiler that reports errors and warnings to an output stream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 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>
Resultcompile(java.util.List<T1> externs, java.util.List<T2> inputs, CompilerOptions options)
Compiles a list of inputs.<T extends SourceFile>
ResultcompileModules(java.util.List<T> externs, java.util.List<JSModule> modules, CompilerOptions options)
Compiles a list of modules.void
disableThreads()
Disable threads.java.lang.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.java.util.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(java.lang.String sourceName)
double
getProgress()
static java.lang.String
getReleaseDate()
Returns the compiler date baked into the jar.static java.lang.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()
java.lang.String
getSourceLine(java.lang.String sourceName, int lineNumber)
Get the line indicated by the line number.SourceMap
getSourceMap()
Region
getSourceRegion(java.lang.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 theErrorManager
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>
voidinit(java.util.List<T1> externs, java.util.List<T2> inputs, CompilerOptions options)
Initializes the instance state needed for a compile job.<T extends SourceFile>
voidinitModules(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.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(java.lang.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(java.util.logging.Level level)
Sets the logging level for the com.google.javascript.jscomp package.void
setOldParseTree(java.lang.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.java.lang.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.java.lang.String
toSource(JSModule module)
Converts the parse tree for a module back to JS code.java.lang.String[]
toSourceArray()
Converts the parse tree for each input back to JS code.java.lang.String[]
toSourceArray(JSModule module)
Converts the parse tree for each input in a module back to JS code.
-
-
-
Field Detail
-
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 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 benull
-
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 theinit(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(java.util.List<T1> externs, java.util.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(java.util.List<T> externs, java.util.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:
java.lang.NullPointerException
- if passes is nulljava.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()
-
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 classAbstractCompiler
-
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)
-
getTypeRegistry
public JSTypeRegistry getTypeRegistry()
Description copied from class:AbstractCompiler
Gets a central registry of type information from the compiled JS.- Specified by:
getTypeRegistry
in classAbstractCompiler
-
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 classAbstractCompiler
-
getReverseAbstractInterpreter
public ReverseAbstractInterpreter getReverseAbstractInterpreter()
Description copied from class:AbstractCompiler
Get an interpreter for type analysis.- Specified by:
getReverseAbstractInterpreter
in classAbstractCompiler
-
parse
public Node parse(SourceFile file)
-
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 callingprocessDefines
and thenoptimize
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 classAbstractCompiler
-
getCodingConvention
public CodingConvention getCodingConvention()
Description copied from class:AbstractCompiler
Gets the current coding convention.- Specified by:
getCodingConvention
in classAbstractCompiler
-
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 classAbstractCompiler
-
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 theErrorManager
to see if we've encountered errors that should halt compilation.If
CompilerOptions.ideMode
istrue
, this function always returnsfalse
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
-
getErrorManager
public ErrorManager getErrorManager()
Description copied from class:AbstractCompiler
Gets the error manager.- Specified by:
getErrorManager
in classAbstractCompiler
-
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 classAbstractCompiler
- 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)
-
-