Re-rolled r8701.
Was: Support adding code-gen/runtime related classes directly to the secondary JDT compilation for the GWT AST.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8731 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jdt/BasicWebModeCompiler.java b/dev/core/src/com/google/gwt/dev/jdt/BasicWebModeCompiler.java
index 26e3bbf..2174d0e 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/BasicWebModeCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/BasicWebModeCompiler.java
@@ -30,6 +30,7 @@
 import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -64,8 +65,8 @@
    * Build the initial set of compilation units.
    */
   public CompilationResults getCompilationUnitDeclarations(
-      TreeLogger logger, String[] seedTypeNames) 
-      throws UnableToCompleteException {
+      TreeLogger logger, String[] seedTypeNames,
+      ICompilationUnit... additionalUnits) throws UnableToCompleteException {
 
     TypeOracle oracle = compilationState.getTypeOracle();
     Set<JClassType> intfTypes = oracle.getSingleJsoImplInterfaces();
@@ -80,7 +81,9 @@
     Set<CompilationUnit> alreadyAdded = new HashSet<CompilationUnit>();
 
     List<ICompilationUnit> icus = new ArrayList<ICompilationUnit>(
-        seedTypeNames.length + intfTypes.size());
+        seedTypeNames.length + intfTypes.size() + additionalUnits.length);
+    
+    Collections.addAll(icus, additionalUnits);
 
     for (String seedTypeName : seedTypeNames) {
       CompilationUnit unit = getUnitForType(logger, classMapBySource,
diff --git a/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java b/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java
index 62b4383..57c017f 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/WebModeCompilerFrontEnd.java
@@ -27,6 +27,7 @@
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
 
 import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
+import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
@@ -46,12 +47,13 @@
 
   public static CompilationResults getCompilationUnitDeclarations(
       TreeLogger logger, String[] seedTypeNames,
-      RebindPermutationOracle rebindPermOracle, TypeLinker linker)
-      throws UnableToCompleteException {
+      RebindPermutationOracle rebindPermOracle, TypeLinker linker,
+      ICompilationUnit... additionalUnits) throws UnableToCompleteException {
     Event getCompilationUnitsEvent =
         SpeedTracerLogger.start(CompilerEventType.GET_COMPILATION_UNITS);
     CompilationResults results = new WebModeCompilerFrontEnd(rebindPermOracle,
-        linker).getCompilationUnitDeclarations(logger, seedTypeNames);
+        linker).getCompilationUnitDeclarations(logger, seedTypeNames, 
+        additionalUnits);
     getCompilationUnitsEvent.end();
     return results;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/UnifiedAst.java b/dev/core/src/com/google/gwt/dev/jjs/UnifiedAst.java
index 2a91521..d2d7a2e 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/UnifiedAst.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/UnifiedAst.java
@@ -54,7 +54,7 @@
       return jProgram;
     }
 
-    JsProgram getJsProgram() {
+    public JsProgram getJsProgram() {
       return jsProgram;
     }
   }