Unrestrict permutation before generating providers.

Change-Id: I80f12d5d1a22d1065c5fa02f013869fe7b02aee8
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java
index c2a0fed..aeefa83 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/Recompiler.java
@@ -43,13 +43,17 @@
 import com.google.gwt.dev.util.log.PrintWriterTreeLogger;
 import com.google.gwt.thirdparty.guava.common.base.Joiner;
 import com.google.gwt.thirdparty.guava.common.collect.ImmutableMap;
+import com.google.gwt.thirdparty.guava.common.collect.ImmutableSortedMap;
+import com.google.gwt.thirdparty.guava.common.collect.ImmutableSortedSet;
 import com.google.gwt.thirdparty.guava.common.collect.Maps;
+import com.google.gwt.thirdparty.guava.common.collect.Sets;
 
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
@@ -179,7 +183,7 @@
     CompileDir compileDir = makeCompileDir(++compilesDone, logger);
     TreeLogger compileLogger = makeCompileLogger(compileDir, logger);
 
-    ModuleDef module = loadModule(compileLogger);
+    ModuleDef module = loadModule(Sets.<String>newHashSet(), compileLogger);
 
     logger.log(TreeLogger.INFO, "Loading Java files in " + inputModuleName + ".");
     CompilerOptions loadOptions = new CompilerOptionsImpl(compileDir, inputModuleName, options);
@@ -275,7 +279,8 @@
     CompilerOptions loadOptions = new CompilerOptionsImpl(compileDir, inputModuleName, options);
     compilerContext = compilerContextBuilder.options(loadOptions).build();
 
-    ModuleDef module = loadModule(compileLogger);
+    ModuleDef module = loadModule(job.getBindingProperties().keySet(), compileLogger);
+
     // We need to generate the stub before restricting permutations
     String recompileJs = generateModuleRecompileJs(module, compileLogger);
 
@@ -404,7 +409,7 @@
   /**
    * Loads the module and configures it for SuperDevMode. (Does not restrict permutations.)
    */
-  private ModuleDef loadModule(TreeLogger logger) throws UnableToCompleteException {
+  private ModuleDef loadModule(Set<String> propertyNames, TreeLogger logger) throws UnableToCompleteException {
 
     // make sure we get the latest version of any modified jar
     ZipFileClassPathEntry.clearCache();
@@ -489,6 +494,12 @@
     overrideBinding(moduleDef, "compiler.useSourceMaps", "true");
     overrideBinding(moduleDef, "compiler.useSymbolMaps", "false");
     overrideBinding(moduleDef, "superdevmode", "on");
+
+    // Unrestrict permutations so we can properly generate property providers
+    for (String propertyName : propertyNames) {
+      BindingProperty bindingProp = moduleDef.getProperties().findBindingProp(propertyName);
+      bindingProp.setRootGeneratedValues(bindingProp.getDefinedValues());
+    }
     return moduleDef;
   }