Adds permutation number to symbol maps.  This permutation number is currently used by SOYC to retrieve information about each permutation's properties.



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5668 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java b/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java
index a8ffdd9..ee24177 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/CompilationResult.java
@@ -42,6 +42,11 @@
   public abstract String[] getJavaScript();
 
   /**
+   * Returns the permutation ID
+   */
+  public abstract int getPermutationId();
+  
+  /**
    * Provides values for {@link SelectionProperty} instances that are not
    * explicitly set during the compilation phase. This method will return
    * multiple mappings, one for each permutation that resulted in the
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java
index 3b2d540..131eed6 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardCompilationResult.java
@@ -71,6 +71,8 @@
   private static final DiskCache diskCache = new DiskCache();
 
   private final long jsToken[];
+  
+  private final int permutationId;
 
   private final SortedSet<SortedMap<SelectionProperty, String>> propertyValues = new TreeSet<SortedMap<SelectionProperty, String>>(
       MAP_COMPARATOR);
@@ -82,7 +84,7 @@
   private final long symbolToken;
 
   public StandardCompilationResult(String strongName, byte[][] js,
-      byte[] serializedSymbolMap, StatementRanges[] statementRanges) {
+      byte[] serializedSymbolMap, StatementRanges[] statementRanges, int permutationId) {
     super(StandardLinkerContext.class);
     this.strongName = strongName;
     jsToken = new long[js.length];
@@ -91,6 +93,7 @@
     }
     symbolToken = diskCache.writeByteArray(serializedSymbolMap);
     this.statementRanges = statementRanges;
+    this.permutationId = permutationId;
   }
 
   /**
@@ -114,6 +117,11 @@
   }
 
   @Override
+  public int getPermutationId() {
+    return permutationId;
+  }
+  
+  @Override
   public SortedSet<SortedMap<SelectionProperty, String>> getPropertyMap() {
     return Collections.unmodifiableSortedSet(propertyValues);
   }
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
index c93b9d3..259dbb5 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
@@ -351,7 +351,7 @@
     if (result == null) {
       result = new StandardCompilationResult(strongName, js,
           permutationResult.getSerializedSymbolMap(),
-          permutationResult.getStatementRanges());
+          permutationResult.getStatementRanges(), permutationResult.getPermutationId());
       resultsByStrongName.put(result.getStrongName(), result);
       artifacts.add(result);
 
diff --git a/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java b/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
index 9082a2a..3d3ed90 100644
--- a/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
@@ -89,6 +89,9 @@
    */
   protected void doWriteSymbolMap(TreeLogger logger, CompilationResult result,
       PrintWriter pw) throws UnableToCompleteException {
+    
+    pw.println("# { " + result.getPermutationId() + " }");
+    
     for (SortedMap<SelectionProperty, String> map : result.getPropertyMap()) {
       pw.print("# { ");
 
diff --git a/dev/core/src/com/google/gwt/dev/PermutationResult.java b/dev/core/src/com/google/gwt/dev/PermutationResult.java
index c1cba6d..13ac2e2 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationResult.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationResult.java
@@ -36,6 +36,11 @@
   byte[][] getJs();
 
   /**
+   * The ID of the permutation.
+   */
+  int getPermutationId();
+  
+  /**
    * The symbol map for the permutation.
    */
   byte[] getSerializedSymbolMap();
diff --git a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
index 4c9282a..0384271 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java
@@ -137,9 +137,10 @@
     private final byte[][] js;
     private final byte[] serializedSymbolMap;
     private final StatementRanges[] statementRanges;
-
+    private final int permutationId;
+    
     public PermutationResultImpl(String[] js, SymbolData[] symbolMap,
-        StatementRanges[] statementRanges) {
+        StatementRanges[] statementRanges, int permutationId) {
       byte[][] bytes = new byte[js.length][];
       for (int i = 0; i < js.length; ++i) {
         bytes[i] = Util.getBytes(js[i]);
@@ -154,6 +155,7 @@
             e);
       }
       this.statementRanges = statementRanges;
+      this.permutationId = permutationId;
     }
 
     public ArtifactSet getArtifacts() {
@@ -163,6 +165,10 @@
     public byte[][] getJs() {
       return js;
     }
+    
+    public int getPermutationId() {
+      return permutationId;
+    }
 
     public byte[] getSerializedSymbolMap() {
       return serializedSymbolMap;
@@ -322,7 +328,7 @@
       }
 
       PermutationResult toReturn = new PermutationResultImpl(js,
-          makeSymbolMap(symbolTable), ranges);
+          makeSymbolMap(symbolTable), ranges, permutationId);
 
       toReturn.getArtifacts().add(
           makeSoycArtifact(logger, permutationId, jprogram, js, sourceInfoMaps));