@@ -116,6 +116,8 @@ public abstract class CompilerTestCase {
116
116
/** Whether to rewrite Closure code before the test is run. */
117
117
private boolean rewriteClosureCode ;
118
118
119
+ private boolean rewriteModulesAfterTypechecking ;
120
+
119
121
/** Whether to rewrite Closure code before the test is run. */
120
122
private boolean rewriteClosureProvides ;
121
123
@@ -681,6 +683,7 @@ public void setUp() throws Exception {
681
683
this .polymerPass = false ;
682
684
this .processCommonJsModules = false ;
683
685
this .rewriteClosureCode = false ;
686
+ this .rewriteModulesAfterTypechecking = false ;
684
687
this .runTypeCheckAfterProcessing = false ;
685
688
this .rewriteEsModulesEnabled = false ;
686
689
this .transpileEnabled = false ;
@@ -952,6 +955,12 @@ protected final void disableRewriteClosureCode() {
952
955
rewriteClosureCode = false ;
953
956
}
954
957
958
+ protected final void enableRewriteModulesAfterTypechecking () {
959
+ checkState (this .setUpRan , "Attempted to configure before running setUp()." );
960
+ enableRewriteClosureCode ();
961
+ this .rewriteModulesAfterTypechecking = true ;
962
+ }
963
+
955
964
/** Rewrite goog.provides */
956
965
protected final void enableRewriteClosureProvides () {
957
966
checkState (this .setUpRan , "Attempted to configure before running setUp()." );
@@ -1447,11 +1456,15 @@ private void testInternal(
1447
1456
new CheckClosureImports (compiler , compiler .getModuleMetadataMap ())
1448
1457
.process (externsRoot , mainRoot );
1449
1458
new ClosureRewriteClass (compiler ).process (externsRoot , mainRoot );
1450
- new ClosureRewriteModule (compiler , null , null ).process (externsRoot , mainRoot );
1451
1459
ScopedAliases .builder (compiler ).build ().process (externsRoot , mainRoot );
1452
1460
hasCodeChanged = hasCodeChanged || recentChange .hasCodeChanged ();
1453
1461
}
1454
1462
1463
+ if (rewriteClosureCode && !rewriteModulesAfterTypechecking && i == 0 ) {
1464
+ new ClosureRewriteModule (compiler , null , null ).process (externsRoot , mainRoot );
1465
+ hasCodeChanged = hasCodeChanged || recentChange .hasCodeChanged ();
1466
+ }
1467
+
1455
1468
// Only run process closure primitives once, if asked.
1456
1469
if (closurePassEnabled && i == 0 ) {
1457
1470
recentChange .reset ();
@@ -1495,6 +1508,12 @@ private void testInternal(
1495
1508
check .processForTesting (externsRoot , mainRoot );
1496
1509
}
1497
1510
1511
+ if (rewriteClosureCode && rewriteModulesAfterTypechecking && i == 0 ) {
1512
+ new ClosureRewriteModule (compiler , null , compiler .getTopScope ())
1513
+ .process (externsRoot , mainRoot );
1514
+ hasCodeChanged = hasCodeChanged || recentChange .hasCodeChanged ();
1515
+ }
1516
+
1498
1517
if (inferConsts && i == 0 ) {
1499
1518
new InferConsts (compiler ).process (externsRoot , mainRoot );
1500
1519
}
0 commit comments