Search in sources :

Example 1 with ReferenceMap

use of com.google.javascript.jscomp.OptimizeCalls.ReferenceMap in project closure-compiler by google.

the class OptimizeParameters method process.

@Override
public void process(Node externs, Node root, ReferenceMap refMap) {
    try (LogFile decisionsLog = compiler.createOrReopenIndexedLog(this.getClass(), "decisions.log")) {
        // Save the LogFile into a field to avoid bucket-brigade passing it through a bunch of methods
        this.decisionsLog = decisionsLog;
        this.globalScope = refMap.getGlobalScope();
        // Find all function nodes that are possible candidates for parameter removal.
        List<ArrayList<Node>> toOptimize = new ArrayList<>();
        for (Map.Entry<String, ArrayList<Node>> entry : refMap.getNameReferences()) {
            String key = entry.getKey();
            ArrayList<Node> refs = entry.getValue();
            final CandidateAnalysis candidateAnalysis = analyzeCandidateName(key, refs);
            if (candidateAnalysis.shouldConvertTaggedTemplateLiterals()) {
                candidateAnalysis.convertTaggedTemplateLiterals();
            }
            if (candidateAnalysis.isSafeToOptimize()) {
                toOptimize.add(refs);
            }
        }
        for (Map.Entry<String, ArrayList<Node>> entry : refMap.getPropReferences()) {
            String key = entry.getKey();
            ArrayList<Node> refs = entry.getValue();
            final CandidateAnalysis candidateAnalysis = analyzeCandidateProperty(key, refs);
            if (candidateAnalysis.shouldConvertTaggedTemplateLiterals()) {
                candidateAnalysis.convertTaggedTemplateLiterals();
            }
            if (candidateAnalysis.isSafeToOptimize()) {
                toOptimize.add(refs);
            }
        }
        for (ArrayList<Node> refs : toOptimize) {
            tryEliminateOptionalArgs(refs);
        }
        for (ArrayList<Node> refs : toOptimize) {
            tryEliminateConstantArgs(refs);
        }
        // tryEliminateUnusedArgs may mutate
        UnusedParameterOptimizer optimizer = new UnusedParameterOptimizer();
        for (ArrayList<Node> refs : toOptimize) {
            optimizer.tryEliminateUnusedArgs(refs);
        }
        optimizer.applyChanges();
    } finally {
        this.decisionsLog = null;
    }
}
Also used : LogFile(com.google.javascript.jscomp.diagnostic.LogFile) Node(com.google.javascript.rhino.Node) ArrayList(java.util.ArrayList) ReferenceMap(com.google.javascript.jscomp.OptimizeCalls.ReferenceMap) Map(java.util.Map)

Example 2 with ReferenceMap

use of com.google.javascript.jscomp.OptimizeCalls.ReferenceMap in project closure-compiler by google.

the class OptimizeParameters method process.

@Override
@VisibleForTesting
public void process(Node externs, Node root) {
    checkState(compiler.getLifeCycleStage() == LifeCycleStage.NORMALIZED);
    ReferenceMap refMap = OptimizeCalls.buildPropAndGlobalNameReferenceMap(compiler, externs, root);
    process(externs, root, refMap);
}
Also used : ReferenceMap(com.google.javascript.jscomp.OptimizeCalls.ReferenceMap) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 3 with ReferenceMap

use of com.google.javascript.jscomp.OptimizeCalls.ReferenceMap in project closure-compiler by google.

the class OptimizeReturns method process.

@Override
@VisibleForTesting
public void process(Node externs, Node root) {
    ReferenceMap refMap = OptimizeCalls.buildPropAndGlobalNameReferenceMap(compiler, externs, root);
    process(externs, root, refMap);
}
Also used : ReferenceMap(com.google.javascript.jscomp.OptimizeCalls.ReferenceMap) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Aggregations

ReferenceMap (com.google.javascript.jscomp.OptimizeCalls.ReferenceMap)3 VisibleForTesting (com.google.common.annotations.VisibleForTesting)2 LogFile (com.google.javascript.jscomp.diagnostic.LogFile)1 Node (com.google.javascript.rhino.Node)1 ArrayList (java.util.ArrayList)1 Map (java.util.Map)1