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>