458 return analyzeEnv;
459 } else {
460 return null;
461 }
462 }
463
464 /**
465 * Analyze an AST node if needed.
466 */
467 void analyzeIfNeeded(JCTree tree, Env<AttrContext> env) {
468 if (env != null) {
469 JCStatement stmt = (JCStatement)tree;
470 analyze(stmt, env);
471 }
472 }
473
474 /**
475 * Analyze an AST node; this involves collecting a list of all the nodes that needs rewriting,
476 * and speculatively type-check the rewritten code to compare results against previously attributed code.
477 */
478 void analyze(JCStatement statement, Env<AttrContext> env) {
479 StatementScanner statementScanner = new StatementScanner(statement, env);
480 statementScanner.scan();
481
482 if (!statementScanner.rewritings.isEmpty()) {
483 for (RewritingContext rewriting : statementScanner.rewritings) {
484 deferredAnalysisHelper.queue(rewriting);
485 }
486 }
487 }
488
489 /**
490 * Helper interface to handle deferral of analysis tasks.
491 */
492 interface DeferredAnalysisHelper {
493 /**
494 * Add a new analysis task to the queue.
495 */
496 void queue(RewritingContext rewriting);
497 /**
498 * Flush queue with given attribution env.
|
458 return analyzeEnv;
459 } else {
460 return null;
461 }
462 }
463
464 /**
465 * Analyze an AST node if needed.
466 */
467 void analyzeIfNeeded(JCTree tree, Env<AttrContext> env) {
468 if (env != null) {
469 JCStatement stmt = (JCStatement)tree;
470 analyze(stmt, env);
471 }
472 }
473
474 /**
475 * Analyze an AST node; this involves collecting a list of all the nodes that needs rewriting,
476 * and speculatively type-check the rewritten code to compare results against previously attributed code.
477 */
478 protected void analyze(JCStatement statement, Env<AttrContext> env) {
479 StatementScanner statementScanner = new StatementScanner(statement, env);
480 statementScanner.scan();
481
482 if (!statementScanner.rewritings.isEmpty()) {
483 for (RewritingContext rewriting : statementScanner.rewritings) {
484 deferredAnalysisHelper.queue(rewriting);
485 }
486 }
487 }
488
489 /**
490 * Helper interface to handle deferral of analysis tasks.
491 */
492 interface DeferredAnalysisHelper {
493 /**
494 * Add a new analysis task to the queue.
495 */
496 void queue(RewritingContext rewriting);
497 /**
498 * Flush queue with given attribution env.
|