Permutation Specific SymbolMap

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

Review by: cromwellian@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10901 8db76d5a-ed1c-0410-87a9-c151d255dfc7
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 260ed9e..91a1d43 100644
--- a/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/SymbolMapsLinker.java
@@ -29,6 +29,7 @@
 import com.google.gwt.core.ext.linker.LinkerOrder.Order;
 import com.google.gwt.core.ext.linker.SelectionProperty;
 import com.google.gwt.core.ext.linker.Shardable;
+import com.google.gwt.core.ext.linker.SoftPermutation;
 import com.google.gwt.core.ext.linker.SymbolData;
 import com.google.gwt.core.ext.linker.SyntheticArtifact;
 import com.google.gwt.dev.util.Util;
@@ -40,6 +41,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.SortedMap;
 
 /**
@@ -51,6 +53,7 @@
 @Shardable
 public class SymbolMapsLinker extends AbstractLinker {
 
+  public static final String MAKE_SYMBOL_MAPS = "compiler.useSymbolMaps";
 
   /**
    * Artifact to record insertions or deletions made to Javascript fragments.
@@ -233,20 +236,36 @@
   public ArtifactSet link(TreeLogger logger, LinkerContext context,
       ArtifactSet artifacts, boolean onePermutation)
       throws UnableToCompleteException {
+
     if (onePermutation) {
       artifacts = new ArtifactSet(artifacts);
       Map<Integer, String> permMap = new HashMap<Integer, String>();
+
       ByteArrayOutputStream out = new ByteArrayOutputStream();
       for (CompilationResult result : artifacts.find(CompilationResult.class)) {
-        PrintWriter pw = new PrintWriter(out);
-        permMap.put(result.getPermutationId(), result.getStrongName());
-        doWriteSymbolMap(logger, result, pw);
-        pw.close();
+        
+        boolean makeSymbolMaps = true;
 
-        doEmitSymbolMap(logger, artifacts, result, out);
-        out.reset();
+        for (SoftPermutation perm : result.getSoftPermutations()) {
+          for (Entry<SelectionProperty, String> propMapEntry : perm.getPropertyMap().entrySet()) {
+            if (propMapEntry.getKey().getName().equals(MAKE_SYMBOL_MAPS)) {
+              makeSymbolMaps = Boolean.valueOf(propMapEntry.getValue());
+            }
+          }
+        }
+
+        if (makeSymbolMaps) {
+          PrintWriter pw = new PrintWriter(out);
+          permMap.put(result.getPermutationId(), result.getStrongName());
+          doWriteSymbolMap(logger, result, pw);
+          pw.close();
+
+          doEmitSymbolMap(logger, artifacts, result, out);
+          out.reset();
+        }
       }
 
+
       for (SourceMapArtifact se : artifacts.find(SourceMapArtifact.class)) {
         // filename is permutation_id/sourceMap<fragmentNumber>.json
         String sourceMapString = Util.readStreamAsString(se.getContents(logger));
diff --git a/user/src/com/google/gwt/core/CompilerParameters.gwt.xml b/user/src/com/google/gwt/core/CompilerParameters.gwt.xml
index a3b11ef..6e9dae7 100644
--- a/user/src/com/google/gwt/core/CompilerParameters.gwt.xml
+++ b/user/src/com/google/gwt/core/CompilerParameters.gwt.xml
@@ -81,4 +81,11 @@
   -->
   <define-property name="compiler.useSourceMaps" values="true,false"/>
   <set-property name="compiler.useSourceMaps" value="false"/>
+
+  <!--
+     Specifies whether a given permutation has symbol map support enabled.
+  -->
+  <define-property name="compiler.useSymbolMaps" values="true,false"/>
+  <set-property name="compiler.useSymbolMaps" value="false"/>
+
 </module>