Make splitpoint.xml CodeSplitter2 aware.

Review at http://gwt-code-reviews.appspot.com/1639803

Review by: cromwellian@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10877 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java b/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java
index bb507f8..5ffc1cc 100644
--- a/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java
+++ b/dev/core/src/com/google/gwt/core/ext/soyc/impl/SplitPointRecorder.java
@@ -18,6 +18,7 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.dev.jjs.ast.JProgram;
 import com.google.gwt.dev.jjs.ast.JRunAsync;
+import com.google.gwt.dev.jjs.impl.CodeSplitter2.FragmentPartitioningResult;
 import com.google.gwt.dev.util.HtmlTextOutput;
 import com.google.gwt.util.tools.Utility;
 
@@ -54,6 +55,7 @@
       htmlOut.indentIn();
 
       List<JRunAsync> runAsyncs = jprogram.getRunAsyncs();
+      FragmentPartitioningResult partitionResult = jprogram.getFragmentPartitioningResult();
       if (runAsyncs.size() > 0) {
         curLine = "<splitpoints>";
         htmlOut.printRaw(curLine);
@@ -62,6 +64,9 @@
         htmlOut.indentIn();
         for (JRunAsync runAsync : runAsyncs) {
           int sp = runAsync.getSplitPoint();
+          if (partitionResult != null) {
+            sp = partitionResult.getFragmentFromSplitPoint(sp);
+          }
           String name = runAsync.getName();
           curLine = "<splitpoint id=\"" + sp + "\" location=\"" + name + "\"/>";
           htmlOut.printRaw(curLine);
@@ -84,6 +89,9 @@
         htmlOut.indentIn();
 
         for (int sp : jprogram.getSplitPointInitialSequence()) {
+          if (partitionResult != null) {
+            sp = partitionResult.getFragmentFromSplitPoint(sp);
+          }
           curLine = "<splitpointref id=\"" + sp + "\"/>";
           htmlOut.printRaw(curLine);
           htmlOut.newline();
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
index 18835af..9cb3da6 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java
@@ -309,8 +309,8 @@
 
     // If there were some fragment merging.
     if (result != null) {
-      sp1 = result.getSplitPointFromFragmnet(sp1);
-      sp2 = result.getSplitPointFromFragmnet(sp2);
+      sp1 = result.getSplitPointFromFragment(sp1);
+      sp2 = result.getSplitPointFromFragment(sp2);
     }
     
     int initPos1 = initialSeq.indexOf(sp1);
@@ -681,6 +681,10 @@
     // Initial fragment is the +1.
     return runAsyncs.size() + 1;
   }
+  
+  public FragmentPartitioningResult getFragmentPartitioningResult() {
+    return fragmentPartitioninResult;
+  }
 
   public JDeclaredType getFromTypeMap(String qualifiedBinaryOrSourceName) {
     String srcTypeName = qualifiedBinaryOrSourceName.replace('$', '.');
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter2.java b/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter2.java
index 9d9e82b..347088d 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter2.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter2.java
@@ -102,8 +102,10 @@
    */
   public static final class FragmentPartitioningResult {
     private final int[] fragmentToSplitPoint;
+    private final int[] splitPointToFragmentMap;
     
     private FragmentPartitioningResult(int[] splitPointToFragmentMap, int numFragments) {
+      this.splitPointToFragmentMap = splitPointToFragmentMap;
       fragmentToSplitPoint = new int[numFragments];
       for (int i = 0, len = splitPointToFragmentMap.length - 1; i < len; i++) {
         System.out.println("splitPointToFragmentMap[" + i + "] = " + splitPointToFragmentMap[i]);
@@ -116,7 +118,14 @@
         }
       }
     }
-    
+
+    /**
+     * @return Fragment index from a splitpoint number.
+     */
+    public int getFragmentFromSplitPoint(int splitpoint) {
+      return splitPointToFragmentMap[splitpoint];
+    }
+
     /**
      * @return Fragment number of the left over fragment.
      */
@@ -135,11 +144,11 @@
      * @return One of the split point number in a given fragment. If there
      *     are more than one splitpoints in the a fragment, -1 is returned.
      */
-    public int getSplitPointFromFragmnet(int fragment) {
+    public int getSplitPointFromFragment(int fragment) {
       return fragmentToSplitPoint[fragment];
     }
   }
-  
+
   /**
    * Marks the type of partition heuristics 
    */