@@ -116,6 +116,8 @@ public abstract class CompilerTestCase {
116116 /** Whether to rewrite Closure code before the test is run. */
117117 private boolean rewriteClosureCode ;
118118
119+ private boolean rewriteModulesAfterTypechecking ;
120+
119121 /** Whether to rewrite Closure code before the test is run. */
120122 private boolean rewriteClosureProvides ;
121123
@@ -681,6 +683,7 @@ public void setUp() throws Exception {
681683 this .polymerPass = false ;
682684 this .processCommonJsModules = false ;
683685 this .rewriteClosureCode = false ;
686+ this .rewriteModulesAfterTypechecking = false ;
684687 this .runTypeCheckAfterProcessing = false ;
685688 this .rewriteEsModulesEnabled = false ;
686689 this .transpileEnabled = false ;
@@ -952,6 +955,12 @@ protected final void disableRewriteClosureCode() {
952955 rewriteClosureCode = false ;
953956 }
954957
958+ protected final void enableRewriteModulesAfterTypechecking () {
959+ checkState (this .setUpRan , "Attempted to configure before running setUp()." );
960+ enableRewriteClosureCode ();
961+ this .rewriteModulesAfterTypechecking = true ;
962+ }
963+
955964 /** Rewrite goog.provides */
956965 protected final void enableRewriteClosureProvides () {
957966 checkState (this .setUpRan , "Attempted to configure before running setUp()." );
@@ -1447,11 +1456,15 @@ private void testInternal(
14471456 new CheckClosureImports (compiler , compiler .getModuleMetadataMap ())
14481457 .process (externsRoot , mainRoot );
14491458 new ClosureRewriteClass (compiler ).process (externsRoot , mainRoot );
1450- new ClosureRewriteModule (compiler , null , null ).process (externsRoot , mainRoot );
14511459 ScopedAliases .builder (compiler ).build ().process (externsRoot , mainRoot );
14521460 hasCodeChanged = hasCodeChanged || recentChange .hasCodeChanged ();
14531461 }
14541462
1463+ if (rewriteClosureCode && !rewriteModulesAfterTypechecking && i == 0 ) {
1464+ new ClosureRewriteModule (compiler , null , null ).process (externsRoot , mainRoot );
1465+ hasCodeChanged = hasCodeChanged || recentChange .hasCodeChanged ();
1466+ }
1467+
14551468 // Only run process closure primitives once, if asked.
14561469 if (closurePassEnabled && i == 0 ) {
14571470 recentChange .reset ();
@@ -1495,6 +1508,12 @@ private void testInternal(
14951508 check .processForTesting (externsRoot , mainRoot );
14961509 }
14971510
1511+ if (rewriteClosureCode && rewriteModulesAfterTypechecking && i == 0 ) {
1512+ new ClosureRewriteModule (compiler , null , compiler .getTopScope ())
1513+ .process (externsRoot , mainRoot );
1514+ hasCodeChanged = hasCodeChanged || recentChange .hasCodeChanged ();
1515+ }
1516+
14981517 if (inferConsts && i == 0 ) {
14991518 new InferConsts (compiler ).process (externsRoot , mainRoot );
15001519 }
0 commit comments