Fix #31801: Support for multi-valued configuration properties
In PropertyOracle, this change deprecated the existing property access methods
in favor of two new methods that query configuration and selection (=
deferred-binding) properties. Configuration properties may have multiple
values, using the syntax:
<define-configuration-property name="name" is-multi-valued="true|false"/>
<extend-configuration-property name="name" value="value"/>
<set-configuration-property name="name" value="value"/>
<clear-configuration-property name="name"/>
The following tag is still supported, but deprecated:
<append-configuration-property name="name" value="value"/>
Existing xml files using this tag have been modified to use the new tags.
Review by: spoon
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5321 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/ConfigurationProperty.java b/dev/core/src/com/google/gwt/core/ext/ConfigurationProperty.java
new file mode 100644
index 0000000..4967881
--- /dev/null
+++ b/dev/core/src/com/google/gwt/core/ext/ConfigurationProperty.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.gwt.core.ext;
+
+import java.util.List;
+
+/**
+ * A named configuration (property, values) pair.
+ */
+public interface ConfigurationProperty {
+
+ /**
+ * The name of the property.
+ *
+ * @return the property name as a String.
+ * */
+ String getName();
+
+ /**
+ * The values for the permutation currently being considered.
+ *
+ * @return the property values as a List of Strings.
+ */
+ List<String> getValues();
+}
diff --git a/dev/core/src/com/google/gwt/core/ext/PropertyOracle.java b/dev/core/src/com/google/gwt/core/ext/PropertyOracle.java
index 314cd2e..4fb14c0 100644
--- a/dev/core/src/com/google/gwt/core/ext/PropertyOracle.java
+++ b/dev/core/src/com/google/gwt/core/ext/PropertyOracle.java
@@ -21,6 +21,15 @@
public interface PropertyOracle {
/**
+ * Attempts to get a named configuration property. Throws
+ * <code>BadPropertyValueException</code> if the property is undefined. The
+ * result of invoking this method with the same <code>propertyName</code> must
+ * be stable.
+ */
+ ConfigurationProperty getConfigurationProperty(String propertyName)
+ throws BadPropertyValueException;
+
+ /**
* Attempts to get a named deferred binding property or configuration
* property. Throws <code>BadPropertyValueException</code> if the property is
* either undefined or has a value that is unsupported. The result of invoking
@@ -30,6 +39,7 @@
* @param propertyName the name of the property
* @return a value for the property
*/
+ @Deprecated
String getPropertyValue(TreeLogger logger, String propertyName)
throws BadPropertyValueException;
@@ -44,6 +54,16 @@
* @param propertyName the name of the property
* @return the possible values for the property
*/
+ @Deprecated
String[] getPropertyValueSet(TreeLogger logger, String propertyName)
throws BadPropertyValueException;
+
+ /**
+ * Attempts to get a named deferred binding property. Throws
+ * <code>BadPropertyValueException</code> if the property is either undefined
+ * or has a value that is unsupported. The result of invoking this method with
+ * the same <code>propertyName</code> must be stable.
+ */
+ SelectionProperty getSelectionProperty(TreeLogger logger, String propertyName)
+ throws BadPropertyValueException;
}
diff --git a/dev/core/src/com/google/gwt/core/ext/SelectionProperty.java b/dev/core/src/com/google/gwt/core/ext/SelectionProperty.java
new file mode 100644
index 0000000..fda8cfc
--- /dev/null
+++ b/dev/core/src/com/google/gwt/core/ext/SelectionProperty.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.gwt.core.ext;
+
+import java.util.SortedSet;
+
+/**
+ * A named deferred binding (property, value) pair.
+ */
+public interface SelectionProperty {
+
+ /**
+ * The name of the property.
+ *
+ * @return the property name as a String.
+ * */
+ String getName();
+
+ /**
+ * The value for the permutation currently being considered.
+ *
+ * @return the property value as a String.
+ */
+ String getCurrentValue();
+
+ /**
+ * Returns the possible values for the property in sorted order.
+ *
+ * @return a SortedSet of Strings containing the possible property values.
+ */
+ SortedSet<String> getPossibleValues();
+}
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/ConfigurationProperty.java b/dev/core/src/com/google/gwt/core/ext/linker/ConfigurationProperty.java
index ca4faad..dfaf77a 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/ConfigurationProperty.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/ConfigurationProperty.java
@@ -15,6 +15,8 @@
*/
package com.google.gwt.core.ext.linker;
+import java.util.List;
+
/**
* Represents a configuration property. These properties do not affect
* deferred-binding decisions, but may affect the behavior of Linkers and
@@ -31,9 +33,22 @@
* Returns the name of the configuration property.
*/
String getName();
+
+ /**
+ * Returns the defined value for the configuration property. If the property
+ * has multiple values, this returns the first value only.
+ */
+ @Deprecated
+ String getValue();
+
+ /**
+ * Returns the defined values for the configuration property as a List
+ * of Strings.
+ */
+ List<String> getValues();
/**
- * Returns the defined value for the configuration property.
+ * Returns true if this property has more than one value.
*/
- String getValue();
+ boolean hasMultipleValues();
}
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardConfigurationProperty.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardConfigurationProperty.java
index 72851f6..ef29748 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardConfigurationProperty.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardConfigurationProperty.java
@@ -17,6 +17,8 @@
import com.google.gwt.core.ext.linker.ConfigurationProperty;
+import java.util.List;
+
/**
* The standard implementation of {@link ConfigurationProperty} from a
* {@link com.google.gwt.dev.cfg.ConfigurationProperty}.
@@ -24,19 +26,33 @@
public class StandardConfigurationProperty implements ConfigurationProperty {
private final String name;
- private final String value;
+ private final List<String> values;
public StandardConfigurationProperty(
com.google.gwt.dev.cfg.ConfigurationProperty p) {
- this.name = p.getName();
- this.value = p.getValue();
+ name = p.getName();
+ values = p.getValues();
+
+ if (values == null || values.size() == 0) {
+ throw new IllegalArgumentException("values is null or empty");
+ }
}
public String getName() {
return name;
}
+ @Deprecated
public String getValue() {
- return value;
+ // values should always have at least one entry
+ return values.get(0);
+ }
+
+ public List<String> getValues() {
+ return values;
+ }
+
+ public boolean hasMultipleValues() {
+ return values.size() > 1;
}
}
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java
index abd03b1..566c24d 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java
@@ -16,8 +16,10 @@
package com.google.gwt.dev.cfg;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
@@ -45,7 +47,15 @@
String testValue;
try {
PropertyOracle propertyOracle = context.getPropertyOracle();
- testValue = propertyOracle.getPropertyValue(logger, propName);
+ try {
+ SelectionProperty prop
+ = propertyOracle.getSelectionProperty(logger, propName);
+ testValue = prop.getCurrentValue();
+ } catch (BadPropertyValueException e) {
+ ConfigurationProperty prop
+ = propertyOracle.getConfigurationProperty(propName);
+ testValue = prop.getValues().get(0);
+ }
logger.log(TreeLogger.DEBUG, "Property value is '" + testValue + "'",
null);
if (testValue.equals(value)) {
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConfigurationProperty.java b/dev/core/src/com/google/gwt/dev/cfg/ConfigurationProperty.java
index e211499..2be034c 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConfigurationProperty.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConfigurationProperty.java
@@ -15,27 +15,76 @@
*/
package com.google.gwt.dev.cfg;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Represents a module property which does not impact deferred-binding
* decisions.
*/
public class ConfigurationProperty extends Property {
- private String value;
+ private final boolean allowMultipleValues;
+ private List<String> values = new ArrayList<String>();
public ConfigurationProperty(String name) {
- this(name, null);
+ this(name, false);
+ }
+
+ public ConfigurationProperty(String name, boolean allowMultipleValues) {
+ super(name);
+ this.allowMultipleValues = allowMultipleValues;
+ if (!allowMultipleValues) {
+ values.add(null); // single-valued properties default to null
+ }
+ }
+
+ public void addValue(String value) {
+ if (!allowMultipleValues) {
+ throw new IllegalStateException(
+ "Attempt to add a value to a single-valued ConfigurationProperty");
+ }
+ values.add(value);
}
- public ConfigurationProperty(String name, String value) {
- super(name);
- setValue(value);
+ public boolean allowsMultipleValues() {
+ return allowMultipleValues;
+ }
+
+ public void clear() {
+ values.clear();
}
public String getValue() {
- return value;
+ if (values.size() != 1) {
+ throw new IllegalStateException("size != 1");
+ }
+ return values.get(0);
+ }
+
+ public List<String> getValues() {
+ ArrayList<String> v = new ArrayList<String>(values.size());
+ v.addAll(values);
+ return v;
+ }
+
+ public boolean isMultiValued() {
+ return values.size() > 1;
}
public void setValue(String value) {
- this.value = value;
+ if (values.size() == 0) {
+ values.add(value);
+ } else {
+ values.set(0, value);
+ }
+ }
+
+ public void setValues(List<String> values) {
+ if (!allowMultipleValues && values.size() > 1) {
+ throw new IllegalStateException(
+ "Attempt to set > 1 value for a single-valued ConfigurationProperty");
+ }
+ this.values.clear();
+ this.values.addAll(values);
}
}
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java b/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java
index c63e6c7..63c40da 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ModuleDefSchema.java
@@ -50,9 +50,11 @@
protected final String __add_linker_1_name = null;
- protected final String __append_configuration_property_1_name = null;
+ protected final String __clear_configuration_property_1_name = null;
- protected final String __append_configuration_property_2_value = null;
+ protected final String __define_configuration_property_1_name = null;
+
+ protected final String __define_configuration_property_2_is_multi_valued = null;
protected final String __define_linker_1_name = null;
@@ -64,6 +66,10 @@
protected final String __entry_point_1_class = null;
+ protected final String __extend_configuration_property_1_name = null;
+
+ protected final String __extend_configuration_property_2_value = null;
+
protected final String __extend_property_1_name = null;
protected final String __extend_property_2_values = null;
@@ -134,31 +140,63 @@
return null;
}
- protected Schema __append_configuration_property_begin(PropertyName name,
- String value) throws UnableToCompleteException {
-
- // Property must already exist
+ protected Schema __clear_configuration_property_begin(PropertyName name)
+ throws UnableToCompleteException {
+ // Don't allow configuration properties with the same name as a
+ // deferred-binding property.
Property prop = moduleDef.getProperties().find(name.token);
- if (prop == null || !(prop instanceof ConfigurationProperty)) {
- logger.log(TreeLogger.ERROR, "The property " + name.token
- + " must already exist as a configuration property");
+ if (prop == null) {
+ logger.log(TreeLogger.ERROR, "No property named " + name.token
+ + " has been defined");
+ throw new UnableToCompleteException();
+ } else if (!(prop instanceof ConfigurationProperty)) {
+ if (prop instanceof BindingProperty) {
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " is already defined as a deferred-binding property");
+ } else {
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " is already defined as a property of unknown type");
+ }
throw new UnableToCompleteException();
}
- ConfigurationProperty configProp = (ConfigurationProperty) prop;
- String oldValue = configProp.getValue();
- if (oldValue == null) {
- oldValue = "";
- }
- if (oldValue.length() > 0) {
- oldValue += ",";
- }
- configProp.setValue(oldValue + value);
+ ((ConfigurationProperty) prop).clear();
// No children.
return null;
}
+ protected Schema __define_configuration_property_begin(PropertyName name,
+ String is_multi_valued) throws UnableToCompleteException {
+ boolean isMultiValued = toPrimitiveBoolean(is_multi_valued);
+
+ // Don't allow configuration properties with the same name as a
+ // deferred-binding property.
+ Property existingProperty = moduleDef.getProperties().find(name.token);
+ if (existingProperty == null) {
+ // Create the property
+ existingProperty = moduleDef.getProperties().createConfiguration(
+ name.token, isMultiValued);
+ } else {
+ if (existingProperty instanceof ConfigurationProperty) {
+ logger.log(TreeLogger.ERROR, "The configuration property named "
+ + name.token + " may not be redefined.");
+ } else if (existingProperty instanceof BindingProperty) {
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " is already defined as a deferred-binding property");
+ } else {
+ // Future proofing if other subclasses are added.
+ logger.log(TreeLogger.ERROR, "May not replace property named "
+ + name.token + " of unknown type "
+ + existingProperty.getClass().getName());
+ }
+ throw new UnableToCompleteException();
+ }
+
+ // No children.
+ return null;
+ }
+
protected Schema __define_linker_begin(LinkerName name,
Class<? extends Linker> linker) throws UnableToCompleteException {
if (!Linker.class.isAssignableFrom(linker)) {
@@ -186,8 +224,8 @@
logger.log(TreeLogger.ERROR, "The deferred-binding property named "
+ name.token + " may not be redefined.");
} else if (existingProperty instanceof ConfigurationProperty) {
- logger.log(TreeLogger.ERROR, "A configuration property named "
- + name.token + " has already been set.");
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " is already defined as a configuration property");
} else {
// Future proofing if other subclasses are added.
logger.log(TreeLogger.ERROR, "May not replace property named "
@@ -212,6 +250,28 @@
return null;
}
+ protected Schema __extend_configuration_property_begin(PropertyName name,
+ String value) throws UnableToCompleteException {
+
+ // Property must already exist as a configuration property
+ Property prop = moduleDef.getProperties().find(name.token);
+ if ((prop == null) || !(prop instanceof ConfigurationProperty)) {
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " must already exist as a configuration property");
+ throw new UnableToCompleteException();
+ }
+
+ ConfigurationProperty configProp = (ConfigurationProperty) prop;
+ if (!configProp.allowsMultipleValues()) {
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " does not support multiple values");
+ throw new UnableToCompleteException();
+ }
+ configProp.addValue(value);
+
+ return null;
+ }
+
protected Schema __extend_property_begin(BindingProperty property,
PropertyValue[] values) {
for (int i = 0; i < values.length; i++) {
@@ -343,19 +403,27 @@
protected Schema __set_configuration_property_begin(PropertyName name,
String value) throws UnableToCompleteException {
-
- // Don't allow configuration properties with the same name as a
- // deferred-binding property.
- Property prop = moduleDef.getProperties().find(name.token);
- if (prop != null && !(prop instanceof ConfigurationProperty)) {
- logger.log(TreeLogger.ERROR, "A deferred-binding property named "
- + name.token + " has already been defined");
+
+ Property existingProperty = moduleDef.getProperties().find(name.token);
+ if (existingProperty == null) {
+ // If a property is created by "set-configuration-property" without
+ // a previous "define-configuration-property", allow it for backwards
+ // compatibility but don't allow multiple values.
+ existingProperty = moduleDef.getProperties().createConfiguration(
+ name.token, false);
+ } else if (!(existingProperty instanceof ConfigurationProperty)) {
+ if (existingProperty instanceof BindingProperty) {
+ logger.log(TreeLogger.ERROR, "The property " + name.token
+ + " is already defined as a deferred-binding property");
+ } else {
+ // Future proofing if other subclasses are added.
+ logger.log(TreeLogger.ERROR, "May not replace property named "
+ + name.token + " of unknown type "
+ + existingProperty.getClass().getName());
+ }
throw new UnableToCompleteException();
- } else {
- prop = moduleDef.getProperties().createConfiguration(name.token);
}
-
- ((ConfigurationProperty) prop).setValue(value);
+ ((ConfigurationProperty) existingProperty).setValue(value);
// No children.
return null;
diff --git a/dev/core/src/com/google/gwt/dev/cfg/Properties.java b/dev/core/src/com/google/gwt/dev/cfg/Properties.java
index 79af9a3..d6ca29e 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/Properties.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/Properties.java
@@ -47,8 +47,8 @@
* Creates the specified configuration property, or returns an existing one by
* the specified name if present.
*/
- public ConfigurationProperty createConfiguration(String name) {
- ConfigurationProperty prop = create(name, ConfigurationProperty.class);
+ public ConfigurationProperty createConfiguration(String name, boolean allowMultipleValues) {
+ ConfigurationProperty prop = create(name, allowMultipleValues, ConfigurationProperty.class);
configProps.add(prop);
return prop;
}
@@ -90,6 +90,16 @@
}
private <T extends Property> T create(String name, Class<T> clazz) {
+ return create(name, false, false, clazz);
+ }
+
+ private <T extends Property> T create(String name, boolean flag, Class<T> clazz) {
+ return create(name, flag, true, clazz);
+ }
+
+ private <T extends Property> T create(String name,
+ boolean flag, boolean useFlagArgument,
+ Class<T> clazz) {
if (clazz == null) {
throw new NullPointerException("clazz");
} else if (name == null) {
@@ -109,7 +119,13 @@
Exception ex = null;
try {
- T newInstance = clazz.getConstructor(String.class).newInstance(name);
+ T newInstance;
+ if (useFlagArgument) {
+ newInstance = clazz.getConstructor(String.class,
+ boolean.class).newInstance(name, flag);
+ } else {
+ newInstance = clazz.getConstructor(String.class).newInstance(name);
+ }
map.put(name, newInstance);
return newInstance;
} catch (NoSuchMethodException e) {
diff --git a/dev/core/src/com/google/gwt/dev/cfg/StaticPropertyOracle.java b/dev/core/src/com/google/gwt/dev/cfg/StaticPropertyOracle.java
index d0cb379..c257f62 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/StaticPropertyOracle.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/StaticPropertyOracle.java
@@ -20,6 +20,9 @@
import com.google.gwt.core.ext.TreeLogger;
import java.io.Serializable;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
/**
* An implementation of {@link PropertyOracle} that contains property values,
@@ -38,6 +41,35 @@
this.orderedProps = orderedProps;
this.orderedPropValues = orderedPropValues;
this.configProps = configProps;
+
+ // Reject illegal values at construction time
+ int len = orderedProps.length;
+ for (int i = 0; i < len; i++) {
+ BindingProperty prop = orderedProps[i];
+ String value = orderedPropValues[i];
+ if (!prop.isAllowedValue(value)) {
+ throw new IllegalArgumentException("Property " + prop.getName()
+ + " cannot have value " + value);
+ }
+ }
+ }
+
+ public com.google.gwt.core.ext.ConfigurationProperty getConfigurationProperty(
+ String propertyName) throws BadPropertyValueException {
+ for (final ConfigurationProperty prop : configProps) {
+ if (prop.getName().equals(propertyName)) {
+ return new com.google.gwt.core.ext.ConfigurationProperty() {
+ public String getName() {
+ return prop.getName();
+ }
+
+ public List<String> getValues() {
+ return prop.getValues();
+ }
+ };
+ }
+ }
+ throw new BadPropertyValueException(propertyName);
}
public BindingProperty[] getOrderedProps() {
@@ -48,6 +80,7 @@
return orderedPropValues;
}
+ @Deprecated
public String getPropertyValue(TreeLogger logger, String propertyName)
throws BadPropertyValueException {
// In practice there will probably be so few properties that a linear
@@ -78,6 +111,7 @@
throw new BadPropertyValueException(propertyName);
}
+ @Deprecated
public String[] getPropertyValueSet(TreeLogger logger, String propertyName)
throws BadPropertyValueException {
for (int i = 0; i < orderedProps.length; i++) {
@@ -93,4 +127,41 @@
//
throw new BadPropertyValueException(propertyName);
}
+
+ public com.google.gwt.core.ext.SelectionProperty getSelectionProperty(
+ TreeLogger logger, String propertyName)
+ throws BadPropertyValueException {
+ // In practice there will probably be so few properties that a linear
+ // search is at least as fast as a map lookup by name would be.
+ // If that turns out not to be the case, the ctor could build a
+ // name-to-index map.
+ for (int i = 0; i < orderedProps.length; i++) {
+ final BindingProperty prop = orderedProps[i];
+ final String name = prop.getName();
+ if (name.equals(propertyName)) {
+ final String value = orderedPropValues[i];
+ String[] values = prop.getDefinedValues();
+ final TreeSet<String> possibleValues = new TreeSet<String>();
+ for (String v : values) {
+ possibleValues.add(v);
+ }
+
+ return new com.google.gwt.core.ext.SelectionProperty() {
+ public String getCurrentValue() {
+ return value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public SortedSet<String> getPossibleValues() {
+ return possibleValues;
+ }
+ };
+ }
+ }
+
+ throw new BadPropertyValueException(propertyName);
+ }
}
diff --git a/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java b/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java
index c74aa6a..58440f0 100644
--- a/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java
+++ b/dev/core/src/com/google/gwt/dev/shell/ModuleSpacePropertyOracle.java
@@ -17,6 +17,7 @@
import com.google.gwt.core.ext.BadPropertyValueException;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.dev.cfg.BindingProperty;
import com.google.gwt.dev.cfg.ConfigurationProperty;
@@ -24,7 +25,10 @@
import com.google.gwt.dev.cfg.Property;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
/**
* Implements a {@link PropertyOracle} in terms of a module space, which makes
@@ -43,9 +47,32 @@
this.props = props;
}
+ public com.google.gwt.core.ext.ConfigurationProperty
+ getConfigurationProperty(String propertyName)
+ throws BadPropertyValueException {
+ Property prop = getProperty(propertyName);
+ if (prop instanceof ConfigurationProperty) {
+ final ConfigurationProperty cprop = (ConfigurationProperty) prop;
+ final String name = cprop.getName();
+ final List<String> values = cprop.getValues();
+ return new com.google.gwt.core.ext.ConfigurationProperty() {
+ public String getName() {
+ return name;
+ }
+
+ public List<String> getValues() {
+ return values;
+ }
+ };
+ } else {
+ throw new BadPropertyValueException(propertyName);
+ }
+ }
+
/**
* Executes JavaScript to find the property value.
*/
+ @Deprecated
public String getPropertyValue(TreeLogger logger, String propertyName)
throws BadPropertyValueException {
Property prop = getProperty(propertyName);
@@ -75,6 +102,7 @@
/**
* Returns the list of possible values for a property.
*/
+ @Deprecated
public String[] getPropertyValueSet(TreeLogger logger, String propertyName)
throws BadPropertyValueException {
Property prop = getProperty(propertyName);
@@ -84,6 +112,36 @@
throw new BadPropertyValueException(propertyName);
}
+ public SelectionProperty getSelectionProperty(TreeLogger logger,
+ String propertyName) throws BadPropertyValueException {
+ Property prop = getProperty(propertyName);
+ if (prop instanceof BindingProperty) {
+ final BindingProperty cprop = (BindingProperty) prop;
+ final String name = cprop.getName();
+ final String value = computePropertyValue(logger, propertyName, cprop);
+ final SortedSet<String> possibleValues = new TreeSet<String>();
+ for (String v : cprop.getDefinedValues()) {
+ possibleValues.add(v);
+ }
+ return new com.google.gwt.core.ext.SelectionProperty() {
+
+ public String getCurrentValue() {
+ return value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public SortedSet<String> getPossibleValues() {
+ return possibleValues;
+ }
+ };
+ } else {
+ throw new BadPropertyValueException(propertyName);
+ }
+ }
+
/**
* Returns the value of the specified property.
*
diff --git a/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java b/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java
index c2f5de3..05fc32a 100644
--- a/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java
+++ b/dev/core/test/com/google/gwt/dev/shell/StandardGeneratorContextTest.java
@@ -16,9 +16,11 @@
package com.google.gwt.dev.shell;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.linker.Artifact;
@@ -75,6 +77,15 @@
throws BadPropertyValueException {
return new String[] {};
}
+
+ public ConfigurationProperty getConfigurationProperty(String name) {
+ return null;
+ }
+
+ public SelectionProperty getSelectionProperty(TreeLogger logger,
+ String name) {
+ return null;
+ }
}
private static class MockPublicOracle implements PublicOracle {
diff --git a/user/src/com/google/gwt/i18n/CldrLocales.gwt.xml b/user/src/com/google/gwt/i18n/CldrLocales.gwt.xml
index cec511e..6c80f23 100644
--- a/user/src/com/google/gwt/i18n/CldrLocales.gwt.xml
+++ b/user/src/com/google/gwt/i18n/CldrLocales.gwt.xml
@@ -14,459 +14,459 @@
<!-- List of all locales imported into GWT from CLDR, as runtime locales -->
<module>
- <append-configuration-property name="runtime.locales" value="aa"/>
- <append-configuration-property name="runtime.locales" value="aa_DJ"/>
- <append-configuration-property name="runtime.locales" value="aa_ER"/>
- <append-configuration-property name="runtime.locales" value="aa_ER_SAAHO"/>
- <append-configuration-property name="runtime.locales" value="aa_ET"/>
- <append-configuration-property name="runtime.locales" value="af"/>
- <append-configuration-property name="runtime.locales" value="af_NA"/>
- <append-configuration-property name="runtime.locales" value="af_ZA"/>
- <append-configuration-property name="runtime.locales" value="ak"/>
- <append-configuration-property name="runtime.locales" value="ak_GH"/>
- <append-configuration-property name="runtime.locales" value="am"/>
- <append-configuration-property name="runtime.locales" value="am_ET"/>
- <append-configuration-property name="runtime.locales" value="ar"/>
- <append-configuration-property name="runtime.locales" value="ar_AE"/>
- <append-configuration-property name="runtime.locales" value="ar_BH"/>
- <append-configuration-property name="runtime.locales" value="ar_DZ"/>
- <append-configuration-property name="runtime.locales" value="ar_EG"/>
- <append-configuration-property name="runtime.locales" value="ar_IQ"/>
- <append-configuration-property name="runtime.locales" value="ar_JO"/>
- <append-configuration-property name="runtime.locales" value="ar_KW"/>
- <append-configuration-property name="runtime.locales" value="ar_LB"/>
- <append-configuration-property name="runtime.locales" value="ar_LY"/>
- <append-configuration-property name="runtime.locales" value="ar_MA"/>
- <append-configuration-property name="runtime.locales" value="ar_OM"/>
- <append-configuration-property name="runtime.locales" value="ar_QA"/>
- <append-configuration-property name="runtime.locales" value="ar_SA"/>
- <append-configuration-property name="runtime.locales" value="ar_SD"/>
- <append-configuration-property name="runtime.locales" value="ar_SY"/>
- <append-configuration-property name="runtime.locales" value="ar_TN"/>
- <append-configuration-property name="runtime.locales" value="ar_YE"/>
- <append-configuration-property name="runtime.locales" value="as"/>
- <append-configuration-property name="runtime.locales" value="as_IN"/>
- <append-configuration-property name="runtime.locales" value="az"/>
- <append-configuration-property name="runtime.locales" value="az_AZ"/>
- <append-configuration-property name="runtime.locales" value="az_Cyrl"/>
- <append-configuration-property name="runtime.locales" value="az_Cyrl_AZ"/>
- <append-configuration-property name="runtime.locales" value="az_Latn"/>
- <append-configuration-property name="runtime.locales" value="az_Latn_AZ"/>
- <append-configuration-property name="runtime.locales" value="be"/>
- <append-configuration-property name="runtime.locales" value="be_BY"/>
- <append-configuration-property name="runtime.locales" value="bg"/>
- <append-configuration-property name="runtime.locales" value="bg_BG"/>
- <append-configuration-property name="runtime.locales" value="bn"/>
- <append-configuration-property name="runtime.locales" value="bn_BD"/>
- <append-configuration-property name="runtime.locales" value="bn_IN"/>
- <append-configuration-property name="runtime.locales" value="bs"/>
- <append-configuration-property name="runtime.locales" value="bs_BA"/>
- <append-configuration-property name="runtime.locales" value="byn"/>
- <append-configuration-property name="runtime.locales" value="byn_ER"/>
- <append-configuration-property name="runtime.locales" value="ca"/>
- <append-configuration-property name="runtime.locales" value="ca_ES"/>
- <append-configuration-property name="runtime.locales" value="cch"/>
- <append-configuration-property name="runtime.locales" value="cch_NG"/>
- <append-configuration-property name="runtime.locales" value="cop"/>
- <append-configuration-property name="runtime.locales" value="cs"/>
- <append-configuration-property name="runtime.locales" value="cs_CZ"/>
- <append-configuration-property name="runtime.locales" value="cy"/>
- <append-configuration-property name="runtime.locales" value="cy_GB"/>
- <append-configuration-property name="runtime.locales" value="da"/>
- <append-configuration-property name="runtime.locales" value="da_DK"/>
- <append-configuration-property name="runtime.locales" value="de"/>
- <append-configuration-property name="runtime.locales" value="de_AT"/>
- <append-configuration-property name="runtime.locales" value="de_BE"/>
- <append-configuration-property name="runtime.locales" value="de_CH"/>
- <append-configuration-property name="runtime.locales" value="de_DE"/>
- <append-configuration-property name="runtime.locales" value="de_LI"/>
- <append-configuration-property name="runtime.locales" value="de_LU"/>
- <append-configuration-property name="runtime.locales" value="dv"/>
- <append-configuration-property name="runtime.locales" value="dv_MV"/>
- <append-configuration-property name="runtime.locales" value="dz"/>
- <append-configuration-property name="runtime.locales" value="dz_BT"/>
- <append-configuration-property name="runtime.locales" value="ee"/>
- <append-configuration-property name="runtime.locales" value="ee_GH"/>
- <append-configuration-property name="runtime.locales" value="ee_TG"/>
- <append-configuration-property name="runtime.locales" value="el"/>
- <append-configuration-property name="runtime.locales" value="el_CY"/>
- <append-configuration-property name="runtime.locales" value="el_GR"/>
- <append-configuration-property name="runtime.locales" value="el_POLYTON"/>
- <append-configuration-property name="runtime.locales" value="en"/>
- <append-configuration-property name="runtime.locales" value="en_AS"/>
- <append-configuration-property name="runtime.locales" value="en_AU"/>
- <append-configuration-property name="runtime.locales" value="en_BE"/>
- <append-configuration-property name="runtime.locales" value="en_BW"/>
- <append-configuration-property name="runtime.locales" value="en_BZ"/>
- <append-configuration-property name="runtime.locales" value="en_CA"/>
- <append-configuration-property name="runtime.locales" value="en_Dsrt"/>
- <append-configuration-property name="runtime.locales" value="en_Dsrt_US"/>
- <append-configuration-property name="runtime.locales" value="en_GB"/>
- <append-configuration-property name="runtime.locales" value="en_GU"/>
- <append-configuration-property name="runtime.locales" value="en_HK"/>
- <append-configuration-property name="runtime.locales" value="en_IE"/>
- <append-configuration-property name="runtime.locales" value="en_IN"/>
- <append-configuration-property name="runtime.locales" value="en_JM"/>
- <append-configuration-property name="runtime.locales" value="en_MH"/>
- <append-configuration-property name="runtime.locales" value="en_MP"/>
- <append-configuration-property name="runtime.locales" value="en_MT"/>
- <append-configuration-property name="runtime.locales" value="en_NA"/>
- <append-configuration-property name="runtime.locales" value="en_NZ"/>
- <append-configuration-property name="runtime.locales" value="en_PH"/>
- <append-configuration-property name="runtime.locales" value="en_PK"/>
- <append-configuration-property name="runtime.locales" value="en_SG"/>
- <append-configuration-property name="runtime.locales" value="en_Shaw"/>
- <append-configuration-property name="runtime.locales" value="en_TT"/>
- <append-configuration-property name="runtime.locales" value="en_UM"/>
- <append-configuration-property name="runtime.locales" value="en_US"/>
+ <extend-configuration-property name="runtime.locales" value="aa"/>
+ <extend-configuration-property name="runtime.locales" value="aa_DJ"/>
+ <extend-configuration-property name="runtime.locales" value="aa_ER"/>
+ <extend-configuration-property name="runtime.locales" value="aa_ER_SAAHO"/>
+ <extend-configuration-property name="runtime.locales" value="aa_ET"/>
+ <extend-configuration-property name="runtime.locales" value="af"/>
+ <extend-configuration-property name="runtime.locales" value="af_NA"/>
+ <extend-configuration-property name="runtime.locales" value="af_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="ak"/>
+ <extend-configuration-property name="runtime.locales" value="ak_GH"/>
+ <extend-configuration-property name="runtime.locales" value="am"/>
+ <extend-configuration-property name="runtime.locales" value="am_ET"/>
+ <extend-configuration-property name="runtime.locales" value="ar"/>
+ <extend-configuration-property name="runtime.locales" value="ar_AE"/>
+ <extend-configuration-property name="runtime.locales" value="ar_BH"/>
+ <extend-configuration-property name="runtime.locales" value="ar_DZ"/>
+ <extend-configuration-property name="runtime.locales" value="ar_EG"/>
+ <extend-configuration-property name="runtime.locales" value="ar_IQ"/>
+ <extend-configuration-property name="runtime.locales" value="ar_JO"/>
+ <extend-configuration-property name="runtime.locales" value="ar_KW"/>
+ <extend-configuration-property name="runtime.locales" value="ar_LB"/>
+ <extend-configuration-property name="runtime.locales" value="ar_LY"/>
+ <extend-configuration-property name="runtime.locales" value="ar_MA"/>
+ <extend-configuration-property name="runtime.locales" value="ar_OM"/>
+ <extend-configuration-property name="runtime.locales" value="ar_QA"/>
+ <extend-configuration-property name="runtime.locales" value="ar_SA"/>
+ <extend-configuration-property name="runtime.locales" value="ar_SD"/>
+ <extend-configuration-property name="runtime.locales" value="ar_SY"/>
+ <extend-configuration-property name="runtime.locales" value="ar_TN"/>
+ <extend-configuration-property name="runtime.locales" value="ar_YE"/>
+ <extend-configuration-property name="runtime.locales" value="as"/>
+ <extend-configuration-property name="runtime.locales" value="as_IN"/>
+ <extend-configuration-property name="runtime.locales" value="az"/>
+ <extend-configuration-property name="runtime.locales" value="az_AZ"/>
+ <extend-configuration-property name="runtime.locales" value="az_Cyrl"/>
+ <extend-configuration-property name="runtime.locales" value="az_Cyrl_AZ"/>
+ <extend-configuration-property name="runtime.locales" value="az_Latn"/>
+ <extend-configuration-property name="runtime.locales" value="az_Latn_AZ"/>
+ <extend-configuration-property name="runtime.locales" value="be"/>
+ <extend-configuration-property name="runtime.locales" value="be_BY"/>
+ <extend-configuration-property name="runtime.locales" value="bg"/>
+ <extend-configuration-property name="runtime.locales" value="bg_BG"/>
+ <extend-configuration-property name="runtime.locales" value="bn"/>
+ <extend-configuration-property name="runtime.locales" value="bn_BD"/>
+ <extend-configuration-property name="runtime.locales" value="bn_IN"/>
+ <extend-configuration-property name="runtime.locales" value="bs"/>
+ <extend-configuration-property name="runtime.locales" value="bs_BA"/>
+ <extend-configuration-property name="runtime.locales" value="byn"/>
+ <extend-configuration-property name="runtime.locales" value="byn_ER"/>
+ <extend-configuration-property name="runtime.locales" value="ca"/>
+ <extend-configuration-property name="runtime.locales" value="ca_ES"/>
+ <extend-configuration-property name="runtime.locales" value="cch"/>
+ <extend-configuration-property name="runtime.locales" value="cch_NG"/>
+ <extend-configuration-property name="runtime.locales" value="cop"/>
+ <extend-configuration-property name="runtime.locales" value="cs"/>
+ <extend-configuration-property name="runtime.locales" value="cs_CZ"/>
+ <extend-configuration-property name="runtime.locales" value="cy"/>
+ <extend-configuration-property name="runtime.locales" value="cy_GB"/>
+ <extend-configuration-property name="runtime.locales" value="da"/>
+ <extend-configuration-property name="runtime.locales" value="da_DK"/>
+ <extend-configuration-property name="runtime.locales" value="de"/>
+ <extend-configuration-property name="runtime.locales" value="de_AT"/>
+ <extend-configuration-property name="runtime.locales" value="de_BE"/>
+ <extend-configuration-property name="runtime.locales" value="de_CH"/>
+ <extend-configuration-property name="runtime.locales" value="de_DE"/>
+ <extend-configuration-property name="runtime.locales" value="de_LI"/>
+ <extend-configuration-property name="runtime.locales" value="de_LU"/>
+ <extend-configuration-property name="runtime.locales" value="dv"/>
+ <extend-configuration-property name="runtime.locales" value="dv_MV"/>
+ <extend-configuration-property name="runtime.locales" value="dz"/>
+ <extend-configuration-property name="runtime.locales" value="dz_BT"/>
+ <extend-configuration-property name="runtime.locales" value="ee"/>
+ <extend-configuration-property name="runtime.locales" value="ee_GH"/>
+ <extend-configuration-property name="runtime.locales" value="ee_TG"/>
+ <extend-configuration-property name="runtime.locales" value="el"/>
+ <extend-configuration-property name="runtime.locales" value="el_CY"/>
+ <extend-configuration-property name="runtime.locales" value="el_GR"/>
+ <extend-configuration-property name="runtime.locales" value="el_POLYTON"/>
+ <extend-configuration-property name="runtime.locales" value="en"/>
+ <extend-configuration-property name="runtime.locales" value="en_AS"/>
+ <extend-configuration-property name="runtime.locales" value="en_AU"/>
+ <extend-configuration-property name="runtime.locales" value="en_BE"/>
+ <extend-configuration-property name="runtime.locales" value="en_BW"/>
+ <extend-configuration-property name="runtime.locales" value="en_BZ"/>
+ <extend-configuration-property name="runtime.locales" value="en_CA"/>
+ <extend-configuration-property name="runtime.locales" value="en_Dsrt"/>
+ <extend-configuration-property name="runtime.locales" value="en_Dsrt_US"/>
+ <extend-configuration-property name="runtime.locales" value="en_GB"/>
+ <extend-configuration-property name="runtime.locales" value="en_GU"/>
+ <extend-configuration-property name="runtime.locales" value="en_HK"/>
+ <extend-configuration-property name="runtime.locales" value="en_IE"/>
+ <extend-configuration-property name="runtime.locales" value="en_IN"/>
+ <extend-configuration-property name="runtime.locales" value="en_JM"/>
+ <extend-configuration-property name="runtime.locales" value="en_MH"/>
+ <extend-configuration-property name="runtime.locales" value="en_MP"/>
+ <extend-configuration-property name="runtime.locales" value="en_MT"/>
+ <extend-configuration-property name="runtime.locales" value="en_NA"/>
+ <extend-configuration-property name="runtime.locales" value="en_NZ"/>
+ <extend-configuration-property name="runtime.locales" value="en_PH"/>
+ <extend-configuration-property name="runtime.locales" value="en_PK"/>
+ <extend-configuration-property name="runtime.locales" value="en_SG"/>
+ <extend-configuration-property name="runtime.locales" value="en_Shaw"/>
+ <extend-configuration-property name="runtime.locales" value="en_TT"/>
+ <extend-configuration-property name="runtime.locales" value="en_UM"/>
+ <extend-configuration-property name="runtime.locales" value="en_US"/>
<!-- This doesn't seem appropriate to include here, if you want it just
include the following line right after the import for this module.
- <append-configuration-property name="runtime.locales" value="en_US_POSIX"/>
+ <extend-configuration-property name="runtime.locales" value="en_US_POSIX"/>
-->
- <append-configuration-property name="runtime.locales" value="en_VI"/>
- <append-configuration-property name="runtime.locales" value="en_ZA"/>
- <append-configuration-property name="runtime.locales" value="en_ZW"/>
- <append-configuration-property name="runtime.locales" value="eo"/>
- <append-configuration-property name="runtime.locales" value="es"/>
- <append-configuration-property name="runtime.locales" value="es_AR"/>
- <append-configuration-property name="runtime.locales" value="es_BO"/>
- <append-configuration-property name="runtime.locales" value="es_CL"/>
- <append-configuration-property name="runtime.locales" value="es_CO"/>
- <append-configuration-property name="runtime.locales" value="es_CR"/>
- <append-configuration-property name="runtime.locales" value="es_DO"/>
- <append-configuration-property name="runtime.locales" value="es_EC"/>
- <append-configuration-property name="runtime.locales" value="es_ES"/>
- <append-configuration-property name="runtime.locales" value="es_GT"/>
- <append-configuration-property name="runtime.locales" value="es_HN"/>
- <append-configuration-property name="runtime.locales" value="es_MX"/>
- <append-configuration-property name="runtime.locales" value="es_NI"/>
- <append-configuration-property name="runtime.locales" value="es_PA"/>
- <append-configuration-property name="runtime.locales" value="es_PE"/>
- <append-configuration-property name="runtime.locales" value="es_PR"/>
- <append-configuration-property name="runtime.locales" value="es_PY"/>
- <append-configuration-property name="runtime.locales" value="es_SV"/>
- <append-configuration-property name="runtime.locales" value="es_US"/>
- <append-configuration-property name="runtime.locales" value="es_UY"/>
- <append-configuration-property name="runtime.locales" value="es_VE"/>
- <append-configuration-property name="runtime.locales" value="et"/>
- <append-configuration-property name="runtime.locales" value="et_EE"/>
- <append-configuration-property name="runtime.locales" value="eu"/>
- <append-configuration-property name="runtime.locales" value="eu_ES"/>
- <append-configuration-property name="runtime.locales" value="fa"/>
- <append-configuration-property name="runtime.locales" value="fa_AF"/>
- <append-configuration-property name="runtime.locales" value="fa_IR"/>
- <append-configuration-property name="runtime.locales" value="fi"/>
- <append-configuration-property name="runtime.locales" value="fi_FI"/>
- <append-configuration-property name="runtime.locales" value="fil"/>
- <append-configuration-property name="runtime.locales" value="fil_PH"/>
- <append-configuration-property name="runtime.locales" value="fo"/>
- <append-configuration-property name="runtime.locales" value="fo_FO"/>
- <append-configuration-property name="runtime.locales" value="fr"/>
- <append-configuration-property name="runtime.locales" value="fr_BE"/>
- <append-configuration-property name="runtime.locales" value="fr_CA"/>
- <append-configuration-property name="runtime.locales" value="fr_CH"/>
- <append-configuration-property name="runtime.locales" value="fr_FR"/>
- <append-configuration-property name="runtime.locales" value="fr_LU"/>
- <append-configuration-property name="runtime.locales" value="fr_MC"/>
- <append-configuration-property name="runtime.locales" value="fr_SN"/>
- <append-configuration-property name="runtime.locales" value="fur"/>
- <append-configuration-property name="runtime.locales" value="fur_IT"/>
- <append-configuration-property name="runtime.locales" value="ga"/>
- <append-configuration-property name="runtime.locales" value="gaa"/>
- <append-configuration-property name="runtime.locales" value="gaa_GH"/>
- <append-configuration-property name="runtime.locales" value="ga_IE"/>
- <append-configuration-property name="runtime.locales" value="gez"/>
- <append-configuration-property name="runtime.locales" value="gez_ER"/>
- <append-configuration-property name="runtime.locales" value="gez_ET"/>
- <append-configuration-property name="runtime.locales" value="gl"/>
- <append-configuration-property name="runtime.locales" value="gl_ES"/>
- <append-configuration-property name="runtime.locales" value="gu"/>
- <append-configuration-property name="runtime.locales" value="gu_IN"/>
- <append-configuration-property name="runtime.locales" value="gv"/>
- <append-configuration-property name="runtime.locales" value="gv_GB"/>
- <append-configuration-property name="runtime.locales" value="ha"/>
- <append-configuration-property name="runtime.locales" value="ha_Arab"/>
- <append-configuration-property name="runtime.locales" value="ha_Arab_NG"/>
- <append-configuration-property name="runtime.locales" value="ha_Arab_SD"/>
- <append-configuration-property name="runtime.locales" value="ha_GH"/>
- <append-configuration-property name="runtime.locales" value="ha_Latn"/>
- <append-configuration-property name="runtime.locales" value="ha_Latn_GH"/>
- <append-configuration-property name="runtime.locales" value="ha_Latn_NE"/>
- <append-configuration-property name="runtime.locales" value="ha_Latn_NG"/>
- <append-configuration-property name="runtime.locales" value="ha_NE"/>
- <append-configuration-property name="runtime.locales" value="ha_NG"/>
- <append-configuration-property name="runtime.locales" value="ha_SD"/>
- <append-configuration-property name="runtime.locales" value="haw"/>
- <append-configuration-property name="runtime.locales" value="haw_US"/>
- <append-configuration-property name="runtime.locales" value="he"/>
- <append-configuration-property name="runtime.locales" value="he_IL"/>
- <append-configuration-property name="runtime.locales" value="hi"/>
- <append-configuration-property name="runtime.locales" value="hi_IN"/>
- <append-configuration-property name="runtime.locales" value="hr"/>
- <append-configuration-property name="runtime.locales" value="hr_HR"/>
- <append-configuration-property name="runtime.locales" value="hu"/>
- <append-configuration-property name="runtime.locales" value="hu_HU"/>
- <append-configuration-property name="runtime.locales" value="hy"/>
- <append-configuration-property name="runtime.locales" value="hy_AM"/>
- <append-configuration-property name="runtime.locales" value="hy_AM_REVISED"/>
- <append-configuration-property name="runtime.locales" value="ia"/>
- <append-configuration-property name="runtime.locales" value="id"/>
- <append-configuration-property name="runtime.locales" value="id_ID"/>
- <append-configuration-property name="runtime.locales" value="ig"/>
- <append-configuration-property name="runtime.locales" value="ig_NG"/>
- <append-configuration-property name="runtime.locales" value="ii"/>
- <append-configuration-property name="runtime.locales" value="ii_CN"/>
- <append-configuration-property name="runtime.locales" value="in"/>
- <append-configuration-property name="runtime.locales" value="is"/>
- <append-configuration-property name="runtime.locales" value="is_IS"/>
- <append-configuration-property name="runtime.locales" value="it"/>
- <append-configuration-property name="runtime.locales" value="it_CH"/>
- <append-configuration-property name="runtime.locales" value="it_IT"/>
- <append-configuration-property name="runtime.locales" value="iu"/>
- <append-configuration-property name="runtime.locales" value="iw"/>
- <append-configuration-property name="runtime.locales" value="ja"/>
- <append-configuration-property name="runtime.locales" value="ja_JP"/>
- <append-configuration-property name="runtime.locales" value="ka"/>
- <append-configuration-property name="runtime.locales" value="ka_GE"/>
- <append-configuration-property name="runtime.locales" value="kaj"/>
- <append-configuration-property name="runtime.locales" value="kaj_NG"/>
- <append-configuration-property name="runtime.locales" value="kam"/>
- <append-configuration-property name="runtime.locales" value="kam_KE"/>
- <append-configuration-property name="runtime.locales" value="kcg"/>
- <append-configuration-property name="runtime.locales" value="kcg_NG"/>
- <append-configuration-property name="runtime.locales" value="kfo"/>
- <append-configuration-property name="runtime.locales" value="kfo_CI"/>
- <append-configuration-property name="runtime.locales" value="kk"/>
- <append-configuration-property name="runtime.locales" value="kk_Cyrl"/>
- <append-configuration-property name="runtime.locales" value="kk_Cyrl_KZ"/>
- <append-configuration-property name="runtime.locales" value="kk_KZ"/>
- <append-configuration-property name="runtime.locales" value="kl"/>
- <append-configuration-property name="runtime.locales" value="kl_GL"/>
- <append-configuration-property name="runtime.locales" value="km"/>
- <append-configuration-property name="runtime.locales" value="km_KH"/>
- <append-configuration-property name="runtime.locales" value="kn"/>
- <append-configuration-property name="runtime.locales" value="kn_IN"/>
- <append-configuration-property name="runtime.locales" value="ko"/>
- <append-configuration-property name="runtime.locales" value="kok"/>
- <append-configuration-property name="runtime.locales" value="kok_IN"/>
- <append-configuration-property name="runtime.locales" value="ko_KR"/>
- <append-configuration-property name="runtime.locales" value="kpe"/>
- <append-configuration-property name="runtime.locales" value="kpe_GN"/>
- <append-configuration-property name="runtime.locales" value="kpe_LR"/>
- <append-configuration-property name="runtime.locales" value="ku"/>
- <append-configuration-property name="runtime.locales" value="ku_Arab"/>
- <append-configuration-property name="runtime.locales" value="ku_Latn"/>
- <append-configuration-property name="runtime.locales" value="ku_Latn_TR"/>
- <append-configuration-property name="runtime.locales" value="ku_TR"/>
- <append-configuration-property name="runtime.locales" value="kw"/>
- <append-configuration-property name="runtime.locales" value="kw_GB"/>
- <append-configuration-property name="runtime.locales" value="ky"/>
- <append-configuration-property name="runtime.locales" value="ky_KG"/>
- <append-configuration-property name="runtime.locales" value="ln"/>
- <append-configuration-property name="runtime.locales" value="ln_CD"/>
- <append-configuration-property name="runtime.locales" value="ln_CG"/>
- <append-configuration-property name="runtime.locales" value="lo"/>
- <append-configuration-property name="runtime.locales" value="lo_LA"/>
- <append-configuration-property name="runtime.locales" value="lt"/>
- <append-configuration-property name="runtime.locales" value="lt_LT"/>
- <append-configuration-property name="runtime.locales" value="lv"/>
- <append-configuration-property name="runtime.locales" value="lv_LV"/>
- <append-configuration-property name="runtime.locales" value="mk"/>
- <append-configuration-property name="runtime.locales" value="mk_MK"/>
- <append-configuration-property name="runtime.locales" value="ml"/>
- <append-configuration-property name="runtime.locales" value="ml_IN"/>
- <append-configuration-property name="runtime.locales" value="mn"/>
- <append-configuration-property name="runtime.locales" value="mn_CN"/>
- <append-configuration-property name="runtime.locales" value="mn_Cyrl"/>
- <append-configuration-property name="runtime.locales" value="mn_Cyrl_MN"/>
- <append-configuration-property name="runtime.locales" value="mn_MN"/>
- <append-configuration-property name="runtime.locales" value="mn_Mong"/>
- <append-configuration-property name="runtime.locales" value="mn_Mong_CN"/>
- <append-configuration-property name="runtime.locales" value="mo"/>
- <append-configuration-property name="runtime.locales" value="mr"/>
- <append-configuration-property name="runtime.locales" value="mr_IN"/>
- <append-configuration-property name="runtime.locales" value="ms"/>
- <append-configuration-property name="runtime.locales" value="ms_BN"/>
- <append-configuration-property name="runtime.locales" value="ms_MY"/>
- <append-configuration-property name="runtime.locales" value="mt"/>
- <append-configuration-property name="runtime.locales" value="mt_MT"/>
- <append-configuration-property name="runtime.locales" value="my"/>
- <append-configuration-property name="runtime.locales" value="my_MM"/>
- <append-configuration-property name="runtime.locales" value="nb"/>
- <append-configuration-property name="runtime.locales" value="nb_NO"/>
- <append-configuration-property name="runtime.locales" value="ne"/>
- <append-configuration-property name="runtime.locales" value="ne_IN"/>
- <append-configuration-property name="runtime.locales" value="ne_NP"/>
- <append-configuration-property name="runtime.locales" value="nl"/>
- <append-configuration-property name="runtime.locales" value="nl_BE"/>
- <append-configuration-property name="runtime.locales" value="nl_NL"/>
- <append-configuration-property name="runtime.locales" value="nn"/>
- <append-configuration-property name="runtime.locales" value="nn_NO"/>
- <append-configuration-property name="runtime.locales" value="no"/>
- <append-configuration-property name="runtime.locales" value="nr"/>
- <append-configuration-property name="runtime.locales" value="nr_ZA"/>
- <append-configuration-property name="runtime.locales" value="nso"/>
- <append-configuration-property name="runtime.locales" value="nso_ZA"/>
- <append-configuration-property name="runtime.locales" value="ny"/>
- <append-configuration-property name="runtime.locales" value="ny_MW"/>
- <append-configuration-property name="runtime.locales" value="om"/>
- <append-configuration-property name="runtime.locales" value="om_ET"/>
- <append-configuration-property name="runtime.locales" value="om_KE"/>
- <append-configuration-property name="runtime.locales" value="or"/>
- <append-configuration-property name="runtime.locales" value="or_IN"/>
- <append-configuration-property name="runtime.locales" value="pa"/>
- <append-configuration-property name="runtime.locales" value="pa_Arab"/>
- <append-configuration-property name="runtime.locales" value="pa_Arab_PK"/>
- <append-configuration-property name="runtime.locales" value="pa_Guru"/>
- <append-configuration-property name="runtime.locales" value="pa_Guru_IN"/>
- <append-configuration-property name="runtime.locales" value="pa_IN"/>
- <append-configuration-property name="runtime.locales" value="pa_PK"/>
- <append-configuration-property name="runtime.locales" value="pl"/>
- <append-configuration-property name="runtime.locales" value="pl_PL"/>
- <append-configuration-property name="runtime.locales" value="ps"/>
- <append-configuration-property name="runtime.locales" value="ps_AF"/>
- <append-configuration-property name="runtime.locales" value="pt"/>
- <append-configuration-property name="runtime.locales" value="pt_BR"/>
- <append-configuration-property name="runtime.locales" value="pt_PT"/>
- <append-configuration-property name="runtime.locales" value="ro"/>
- <append-configuration-property name="runtime.locales" value="ro_MD"/>
- <append-configuration-property name="runtime.locales" value="root"/>
- <append-configuration-property name="runtime.locales" value="ro_RO"/>
- <append-configuration-property name="runtime.locales" value="ru"/>
- <append-configuration-property name="runtime.locales" value="ru_RU"/>
- <append-configuration-property name="runtime.locales" value="ru_UA"/>
- <append-configuration-property name="runtime.locales" value="rw"/>
- <append-configuration-property name="runtime.locales" value="rw_RW"/>
- <append-configuration-property name="runtime.locales" value="sa"/>
- <append-configuration-property name="runtime.locales" value="sa_IN"/>
- <append-configuration-property name="runtime.locales" value="se"/>
- <append-configuration-property name="runtime.locales" value="se_FI"/>
- <append-configuration-property name="runtime.locales" value="se_NO"/>
- <append-configuration-property name="runtime.locales" value="sh"/>
- <append-configuration-property name="runtime.locales" value="sh_BA"/>
- <append-configuration-property name="runtime.locales" value="sh_CS"/>
- <append-configuration-property name="runtime.locales" value="sh_YU"/>
- <append-configuration-property name="runtime.locales" value="si"/>
- <append-configuration-property name="runtime.locales" value="sid"/>
- <append-configuration-property name="runtime.locales" value="sid_ET"/>
- <append-configuration-property name="runtime.locales" value="si_LK"/>
- <append-configuration-property name="runtime.locales" value="sk"/>
- <append-configuration-property name="runtime.locales" value="sk_SK"/>
- <append-configuration-property name="runtime.locales" value="sl"/>
- <append-configuration-property name="runtime.locales" value="sl_SI"/>
- <append-configuration-property name="runtime.locales" value="so"/>
- <append-configuration-property name="runtime.locales" value="so_DJ"/>
- <append-configuration-property name="runtime.locales" value="so_ET"/>
- <append-configuration-property name="runtime.locales" value="so_KE"/>
- <append-configuration-property name="runtime.locales" value="so_SO"/>
- <append-configuration-property name="runtime.locales" value="sq"/>
- <append-configuration-property name="runtime.locales" value="sq_AL"/>
- <append-configuration-property name="runtime.locales" value="sr"/>
- <append-configuration-property name="runtime.locales" value="sr_BA"/>
- <append-configuration-property name="runtime.locales" value="sr_CS"/>
- <append-configuration-property name="runtime.locales" value="sr_Cyrl"/>
- <append-configuration-property name="runtime.locales" value="sr_Cyrl_BA"/>
- <append-configuration-property name="runtime.locales" value="sr_Cyrl_CS"/>
- <append-configuration-property name="runtime.locales" value="sr_Cyrl_ME"/>
- <append-configuration-property name="runtime.locales" value="sr_Cyrl_RS"/>
- <append-configuration-property name="runtime.locales" value="sr_Cyrl_YU"/>
- <append-configuration-property name="runtime.locales" value="sr_Latn"/>
- <append-configuration-property name="runtime.locales" value="sr_Latn_BA"/>
- <append-configuration-property name="runtime.locales" value="sr_Latn_CS"/>
- <append-configuration-property name="runtime.locales" value="sr_Latn_ME"/>
- <append-configuration-property name="runtime.locales" value="sr_Latn_RS"/>
- <append-configuration-property name="runtime.locales" value="sr_Latn_YU"/>
- <append-configuration-property name="runtime.locales" value="sr_ME"/>
- <append-configuration-property name="runtime.locales" value="sr_RS"/>
- <append-configuration-property name="runtime.locales" value="sr_YU"/>
- <append-configuration-property name="runtime.locales" value="ss"/>
- <append-configuration-property name="runtime.locales" value="ss_SZ"/>
- <append-configuration-property name="runtime.locales" value="ss_ZA"/>
- <append-configuration-property name="runtime.locales" value="st"/>
- <append-configuration-property name="runtime.locales" value="st_LS"/>
- <append-configuration-property name="runtime.locales" value="st_ZA"/>
- <append-configuration-property name="runtime.locales" value="sv"/>
- <append-configuration-property name="runtime.locales" value="sv_FI"/>
- <append-configuration-property name="runtime.locales" value="sv_SE"/>
- <append-configuration-property name="runtime.locales" value="sw"/>
- <append-configuration-property name="runtime.locales" value="sw_KE"/>
- <append-configuration-property name="runtime.locales" value="sw_TZ"/>
- <append-configuration-property name="runtime.locales" value="syr"/>
- <append-configuration-property name="runtime.locales" value="syr_SY"/>
- <append-configuration-property name="runtime.locales" value="ta"/>
- <append-configuration-property name="runtime.locales" value="ta_IN"/>
- <append-configuration-property name="runtime.locales" value="te"/>
- <append-configuration-property name="runtime.locales" value="te_IN"/>
- <append-configuration-property name="runtime.locales" value="tg"/>
- <append-configuration-property name="runtime.locales" value="tg_Cyrl"/>
- <append-configuration-property name="runtime.locales" value="tg_Cyrl_TJ"/>
- <append-configuration-property name="runtime.locales" value="tg_TJ"/>
- <append-configuration-property name="runtime.locales" value="th"/>
- <append-configuration-property name="runtime.locales" value="th_TH"/>
- <append-configuration-property name="runtime.locales" value="ti"/>
- <append-configuration-property name="runtime.locales" value="ti_ER"/>
- <append-configuration-property name="runtime.locales" value="ti_ET"/>
- <append-configuration-property name="runtime.locales" value="tig"/>
- <append-configuration-property name="runtime.locales" value="tig_ER"/>
- <append-configuration-property name="runtime.locales" value="tl"/>
- <append-configuration-property name="runtime.locales" value="tn"/>
- <append-configuration-property name="runtime.locales" value="tn_ZA"/>
- <append-configuration-property name="runtime.locales" value="to"/>
- <append-configuration-property name="runtime.locales" value="to_TO"/>
- <append-configuration-property name="runtime.locales" value="tr"/>
- <append-configuration-property name="runtime.locales" value="tr_TR"/>
- <append-configuration-property name="runtime.locales" value="trv"/>
- <append-configuration-property name="runtime.locales" value="ts"/>
- <append-configuration-property name="runtime.locales" value="ts_ZA"/>
- <append-configuration-property name="runtime.locales" value="tt"/>
- <append-configuration-property name="runtime.locales" value="tt_RU"/>
- <append-configuration-property name="runtime.locales" value="ug"/>
- <append-configuration-property name="runtime.locales" value="ug_Arab"/>
- <append-configuration-property name="runtime.locales" value="ug_Arab_CN"/>
- <append-configuration-property name="runtime.locales" value="ug_CN"/>
- <append-configuration-property name="runtime.locales" value="uk"/>
- <append-configuration-property name="runtime.locales" value="uk_UA"/>
- <append-configuration-property name="runtime.locales" value="ur"/>
- <append-configuration-property name="runtime.locales" value="ur_IN"/>
- <append-configuration-property name="runtime.locales" value="ur_PK"/>
- <append-configuration-property name="runtime.locales" value="uz"/>
- <append-configuration-property name="runtime.locales" value="uz_AF"/>
- <append-configuration-property name="runtime.locales" value="uz_Arab"/>
- <append-configuration-property name="runtime.locales" value="uz_Arab_AF"/>
- <append-configuration-property name="runtime.locales" value="uz_Cyrl"/>
- <append-configuration-property name="runtime.locales" value="uz_Cyrl_UZ"/>
- <append-configuration-property name="runtime.locales" value="uz_Latn"/>
- <append-configuration-property name="runtime.locales" value="uz_Latn_UZ"/>
- <append-configuration-property name="runtime.locales" value="uz_UZ"/>
- <append-configuration-property name="runtime.locales" value="ve"/>
- <append-configuration-property name="runtime.locales" value="ve_ZA"/>
- <append-configuration-property name="runtime.locales" value="vi"/>
- <append-configuration-property name="runtime.locales" value="vi_VN"/>
- <append-configuration-property name="runtime.locales" value="wal"/>
- <append-configuration-property name="runtime.locales" value="wal_ET"/>
- <append-configuration-property name="runtime.locales" value="wo"/>
- <append-configuration-property name="runtime.locales" value="wo_Latn"/>
- <append-configuration-property name="runtime.locales" value="wo_Latn_SN"/>
- <append-configuration-property name="runtime.locales" value="wo_SN"/>
- <append-configuration-property name="runtime.locales" value="xh"/>
- <append-configuration-property name="runtime.locales" value="xh_ZA"/>
- <append-configuration-property name="runtime.locales" value="yo"/>
- <append-configuration-property name="runtime.locales" value="yo_NG"/>
- <append-configuration-property name="runtime.locales" value="zh"/>
- <append-configuration-property name="runtime.locales" value="zh_CN"/>
- <append-configuration-property name="runtime.locales" value="zh_Hans"/>
- <append-configuration-property name="runtime.locales" value="zh_Hans_CN"/>
- <append-configuration-property name="runtime.locales" value="zh_Hans_HK"/>
- <append-configuration-property name="runtime.locales" value="zh_Hans_MO"/>
- <append-configuration-property name="runtime.locales" value="zh_Hans_SG"/>
- <append-configuration-property name="runtime.locales" value="zh_Hant"/>
- <append-configuration-property name="runtime.locales" value="zh_Hant_HK"/>
- <append-configuration-property name="runtime.locales" value="zh_Hant_MO"/>
- <append-configuration-property name="runtime.locales" value="zh_Hant_TW"/>
- <append-configuration-property name="runtime.locales" value="zh_HK"/>
- <append-configuration-property name="runtime.locales" value="zh_MO"/>
- <append-configuration-property name="runtime.locales" value="zh_SG"/>
- <append-configuration-property name="runtime.locales" value="zh_TW"/>
- <append-configuration-property name="runtime.locales" value="zu"/>
- <append-configuration-property name="runtime.locales" value="zu_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="en_VI"/>
+ <extend-configuration-property name="runtime.locales" value="en_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="en_ZW"/>
+ <extend-configuration-property name="runtime.locales" value="eo"/>
+ <extend-configuration-property name="runtime.locales" value="es"/>
+ <extend-configuration-property name="runtime.locales" value="es_AR"/>
+ <extend-configuration-property name="runtime.locales" value="es_BO"/>
+ <extend-configuration-property name="runtime.locales" value="es_CL"/>
+ <extend-configuration-property name="runtime.locales" value="es_CO"/>
+ <extend-configuration-property name="runtime.locales" value="es_CR"/>
+ <extend-configuration-property name="runtime.locales" value="es_DO"/>
+ <extend-configuration-property name="runtime.locales" value="es_EC"/>
+ <extend-configuration-property name="runtime.locales" value="es_ES"/>
+ <extend-configuration-property name="runtime.locales" value="es_GT"/>
+ <extend-configuration-property name="runtime.locales" value="es_HN"/>
+ <extend-configuration-property name="runtime.locales" value="es_MX"/>
+ <extend-configuration-property name="runtime.locales" value="es_NI"/>
+ <extend-configuration-property name="runtime.locales" value="es_PA"/>
+ <extend-configuration-property name="runtime.locales" value="es_PE"/>
+ <extend-configuration-property name="runtime.locales" value="es_PR"/>
+ <extend-configuration-property name="runtime.locales" value="es_PY"/>
+ <extend-configuration-property name="runtime.locales" value="es_SV"/>
+ <extend-configuration-property name="runtime.locales" value="es_US"/>
+ <extend-configuration-property name="runtime.locales" value="es_UY"/>
+ <extend-configuration-property name="runtime.locales" value="es_VE"/>
+ <extend-configuration-property name="runtime.locales" value="et"/>
+ <extend-configuration-property name="runtime.locales" value="et_EE"/>
+ <extend-configuration-property name="runtime.locales" value="eu"/>
+ <extend-configuration-property name="runtime.locales" value="eu_ES"/>
+ <extend-configuration-property name="runtime.locales" value="fa"/>
+ <extend-configuration-property name="runtime.locales" value="fa_AF"/>
+ <extend-configuration-property name="runtime.locales" value="fa_IR"/>
+ <extend-configuration-property name="runtime.locales" value="fi"/>
+ <extend-configuration-property name="runtime.locales" value="fi_FI"/>
+ <extend-configuration-property name="runtime.locales" value="fil"/>
+ <extend-configuration-property name="runtime.locales" value="fil_PH"/>
+ <extend-configuration-property name="runtime.locales" value="fo"/>
+ <extend-configuration-property name="runtime.locales" value="fo_FO"/>
+ <extend-configuration-property name="runtime.locales" value="fr"/>
+ <extend-configuration-property name="runtime.locales" value="fr_BE"/>
+ <extend-configuration-property name="runtime.locales" value="fr_CA"/>
+ <extend-configuration-property name="runtime.locales" value="fr_CH"/>
+ <extend-configuration-property name="runtime.locales" value="fr_FR"/>
+ <extend-configuration-property name="runtime.locales" value="fr_LU"/>
+ <extend-configuration-property name="runtime.locales" value="fr_MC"/>
+ <extend-configuration-property name="runtime.locales" value="fr_SN"/>
+ <extend-configuration-property name="runtime.locales" value="fur"/>
+ <extend-configuration-property name="runtime.locales" value="fur_IT"/>
+ <extend-configuration-property name="runtime.locales" value="ga"/>
+ <extend-configuration-property name="runtime.locales" value="gaa"/>
+ <extend-configuration-property name="runtime.locales" value="gaa_GH"/>
+ <extend-configuration-property name="runtime.locales" value="ga_IE"/>
+ <extend-configuration-property name="runtime.locales" value="gez"/>
+ <extend-configuration-property name="runtime.locales" value="gez_ER"/>
+ <extend-configuration-property name="runtime.locales" value="gez_ET"/>
+ <extend-configuration-property name="runtime.locales" value="gl"/>
+ <extend-configuration-property name="runtime.locales" value="gl_ES"/>
+ <extend-configuration-property name="runtime.locales" value="gu"/>
+ <extend-configuration-property name="runtime.locales" value="gu_IN"/>
+ <extend-configuration-property name="runtime.locales" value="gv"/>
+ <extend-configuration-property name="runtime.locales" value="gv_GB"/>
+ <extend-configuration-property name="runtime.locales" value="ha"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Arab"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Arab_NG"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Arab_SD"/>
+ <extend-configuration-property name="runtime.locales" value="ha_GH"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Latn"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Latn_GH"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Latn_NE"/>
+ <extend-configuration-property name="runtime.locales" value="ha_Latn_NG"/>
+ <extend-configuration-property name="runtime.locales" value="ha_NE"/>
+ <extend-configuration-property name="runtime.locales" value="ha_NG"/>
+ <extend-configuration-property name="runtime.locales" value="ha_SD"/>
+ <extend-configuration-property name="runtime.locales" value="haw"/>
+ <extend-configuration-property name="runtime.locales" value="haw_US"/>
+ <extend-configuration-property name="runtime.locales" value="he"/>
+ <extend-configuration-property name="runtime.locales" value="he_IL"/>
+ <extend-configuration-property name="runtime.locales" value="hi"/>
+ <extend-configuration-property name="runtime.locales" value="hi_IN"/>
+ <extend-configuration-property name="runtime.locales" value="hr"/>
+ <extend-configuration-property name="runtime.locales" value="hr_HR"/>
+ <extend-configuration-property name="runtime.locales" value="hu"/>
+ <extend-configuration-property name="runtime.locales" value="hu_HU"/>
+ <extend-configuration-property name="runtime.locales" value="hy"/>
+ <extend-configuration-property name="runtime.locales" value="hy_AM"/>
+ <extend-configuration-property name="runtime.locales" value="hy_AM_REVISED"/>
+ <extend-configuration-property name="runtime.locales" value="ia"/>
+ <extend-configuration-property name="runtime.locales" value="id"/>
+ <extend-configuration-property name="runtime.locales" value="id_ID"/>
+ <extend-configuration-property name="runtime.locales" value="ig"/>
+ <extend-configuration-property name="runtime.locales" value="ig_NG"/>
+ <extend-configuration-property name="runtime.locales" value="ii"/>
+ <extend-configuration-property name="runtime.locales" value="ii_CN"/>
+ <extend-configuration-property name="runtime.locales" value="in"/>
+ <extend-configuration-property name="runtime.locales" value="is"/>
+ <extend-configuration-property name="runtime.locales" value="is_IS"/>
+ <extend-configuration-property name="runtime.locales" value="it"/>
+ <extend-configuration-property name="runtime.locales" value="it_CH"/>
+ <extend-configuration-property name="runtime.locales" value="it_IT"/>
+ <extend-configuration-property name="runtime.locales" value="iu"/>
+ <extend-configuration-property name="runtime.locales" value="iw"/>
+ <extend-configuration-property name="runtime.locales" value="ja"/>
+ <extend-configuration-property name="runtime.locales" value="ja_JP"/>
+ <extend-configuration-property name="runtime.locales" value="ka"/>
+ <extend-configuration-property name="runtime.locales" value="ka_GE"/>
+ <extend-configuration-property name="runtime.locales" value="kaj"/>
+ <extend-configuration-property name="runtime.locales" value="kaj_NG"/>
+ <extend-configuration-property name="runtime.locales" value="kam"/>
+ <extend-configuration-property name="runtime.locales" value="kam_KE"/>
+ <extend-configuration-property name="runtime.locales" value="kcg"/>
+ <extend-configuration-property name="runtime.locales" value="kcg_NG"/>
+ <extend-configuration-property name="runtime.locales" value="kfo"/>
+ <extend-configuration-property name="runtime.locales" value="kfo_CI"/>
+ <extend-configuration-property name="runtime.locales" value="kk"/>
+ <extend-configuration-property name="runtime.locales" value="kk_Cyrl"/>
+ <extend-configuration-property name="runtime.locales" value="kk_Cyrl_KZ"/>
+ <extend-configuration-property name="runtime.locales" value="kk_KZ"/>
+ <extend-configuration-property name="runtime.locales" value="kl"/>
+ <extend-configuration-property name="runtime.locales" value="kl_GL"/>
+ <extend-configuration-property name="runtime.locales" value="km"/>
+ <extend-configuration-property name="runtime.locales" value="km_KH"/>
+ <extend-configuration-property name="runtime.locales" value="kn"/>
+ <extend-configuration-property name="runtime.locales" value="kn_IN"/>
+ <extend-configuration-property name="runtime.locales" value="ko"/>
+ <extend-configuration-property name="runtime.locales" value="kok"/>
+ <extend-configuration-property name="runtime.locales" value="kok_IN"/>
+ <extend-configuration-property name="runtime.locales" value="ko_KR"/>
+ <extend-configuration-property name="runtime.locales" value="kpe"/>
+ <extend-configuration-property name="runtime.locales" value="kpe_GN"/>
+ <extend-configuration-property name="runtime.locales" value="kpe_LR"/>
+ <extend-configuration-property name="runtime.locales" value="ku"/>
+ <extend-configuration-property name="runtime.locales" value="ku_Arab"/>
+ <extend-configuration-property name="runtime.locales" value="ku_Latn"/>
+ <extend-configuration-property name="runtime.locales" value="ku_Latn_TR"/>
+ <extend-configuration-property name="runtime.locales" value="ku_TR"/>
+ <extend-configuration-property name="runtime.locales" value="kw"/>
+ <extend-configuration-property name="runtime.locales" value="kw_GB"/>
+ <extend-configuration-property name="runtime.locales" value="ky"/>
+ <extend-configuration-property name="runtime.locales" value="ky_KG"/>
+ <extend-configuration-property name="runtime.locales" value="ln"/>
+ <extend-configuration-property name="runtime.locales" value="ln_CD"/>
+ <extend-configuration-property name="runtime.locales" value="ln_CG"/>
+ <extend-configuration-property name="runtime.locales" value="lo"/>
+ <extend-configuration-property name="runtime.locales" value="lo_LA"/>
+ <extend-configuration-property name="runtime.locales" value="lt"/>
+ <extend-configuration-property name="runtime.locales" value="lt_LT"/>
+ <extend-configuration-property name="runtime.locales" value="lv"/>
+ <extend-configuration-property name="runtime.locales" value="lv_LV"/>
+ <extend-configuration-property name="runtime.locales" value="mk"/>
+ <extend-configuration-property name="runtime.locales" value="mk_MK"/>
+ <extend-configuration-property name="runtime.locales" value="ml"/>
+ <extend-configuration-property name="runtime.locales" value="ml_IN"/>
+ <extend-configuration-property name="runtime.locales" value="mn"/>
+ <extend-configuration-property name="runtime.locales" value="mn_CN"/>
+ <extend-configuration-property name="runtime.locales" value="mn_Cyrl"/>
+ <extend-configuration-property name="runtime.locales" value="mn_Cyrl_MN"/>
+ <extend-configuration-property name="runtime.locales" value="mn_MN"/>
+ <extend-configuration-property name="runtime.locales" value="mn_Mong"/>
+ <extend-configuration-property name="runtime.locales" value="mn_Mong_CN"/>
+ <extend-configuration-property name="runtime.locales" value="mo"/>
+ <extend-configuration-property name="runtime.locales" value="mr"/>
+ <extend-configuration-property name="runtime.locales" value="mr_IN"/>
+ <extend-configuration-property name="runtime.locales" value="ms"/>
+ <extend-configuration-property name="runtime.locales" value="ms_BN"/>
+ <extend-configuration-property name="runtime.locales" value="ms_MY"/>
+ <extend-configuration-property name="runtime.locales" value="mt"/>
+ <extend-configuration-property name="runtime.locales" value="mt_MT"/>
+ <extend-configuration-property name="runtime.locales" value="my"/>
+ <extend-configuration-property name="runtime.locales" value="my_MM"/>
+ <extend-configuration-property name="runtime.locales" value="nb"/>
+ <extend-configuration-property name="runtime.locales" value="nb_NO"/>
+ <extend-configuration-property name="runtime.locales" value="ne"/>
+ <extend-configuration-property name="runtime.locales" value="ne_IN"/>
+ <extend-configuration-property name="runtime.locales" value="ne_NP"/>
+ <extend-configuration-property name="runtime.locales" value="nl"/>
+ <extend-configuration-property name="runtime.locales" value="nl_BE"/>
+ <extend-configuration-property name="runtime.locales" value="nl_NL"/>
+ <extend-configuration-property name="runtime.locales" value="nn"/>
+ <extend-configuration-property name="runtime.locales" value="nn_NO"/>
+ <extend-configuration-property name="runtime.locales" value="no"/>
+ <extend-configuration-property name="runtime.locales" value="nr"/>
+ <extend-configuration-property name="runtime.locales" value="nr_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="nso"/>
+ <extend-configuration-property name="runtime.locales" value="nso_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="ny"/>
+ <extend-configuration-property name="runtime.locales" value="ny_MW"/>
+ <extend-configuration-property name="runtime.locales" value="om"/>
+ <extend-configuration-property name="runtime.locales" value="om_ET"/>
+ <extend-configuration-property name="runtime.locales" value="om_KE"/>
+ <extend-configuration-property name="runtime.locales" value="or"/>
+ <extend-configuration-property name="runtime.locales" value="or_IN"/>
+ <extend-configuration-property name="runtime.locales" value="pa"/>
+ <extend-configuration-property name="runtime.locales" value="pa_Arab"/>
+ <extend-configuration-property name="runtime.locales" value="pa_Arab_PK"/>
+ <extend-configuration-property name="runtime.locales" value="pa_Guru"/>
+ <extend-configuration-property name="runtime.locales" value="pa_Guru_IN"/>
+ <extend-configuration-property name="runtime.locales" value="pa_IN"/>
+ <extend-configuration-property name="runtime.locales" value="pa_PK"/>
+ <extend-configuration-property name="runtime.locales" value="pl"/>
+ <extend-configuration-property name="runtime.locales" value="pl_PL"/>
+ <extend-configuration-property name="runtime.locales" value="ps"/>
+ <extend-configuration-property name="runtime.locales" value="ps_AF"/>
+ <extend-configuration-property name="runtime.locales" value="pt"/>
+ <extend-configuration-property name="runtime.locales" value="pt_BR"/>
+ <extend-configuration-property name="runtime.locales" value="pt_PT"/>
+ <extend-configuration-property name="runtime.locales" value="ro"/>
+ <extend-configuration-property name="runtime.locales" value="ro_MD"/>
+ <extend-configuration-property name="runtime.locales" value="root"/>
+ <extend-configuration-property name="runtime.locales" value="ro_RO"/>
+ <extend-configuration-property name="runtime.locales" value="ru"/>
+ <extend-configuration-property name="runtime.locales" value="ru_RU"/>
+ <extend-configuration-property name="runtime.locales" value="ru_UA"/>
+ <extend-configuration-property name="runtime.locales" value="rw"/>
+ <extend-configuration-property name="runtime.locales" value="rw_RW"/>
+ <extend-configuration-property name="runtime.locales" value="sa"/>
+ <extend-configuration-property name="runtime.locales" value="sa_IN"/>
+ <extend-configuration-property name="runtime.locales" value="se"/>
+ <extend-configuration-property name="runtime.locales" value="se_FI"/>
+ <extend-configuration-property name="runtime.locales" value="se_NO"/>
+ <extend-configuration-property name="runtime.locales" value="sh"/>
+ <extend-configuration-property name="runtime.locales" value="sh_BA"/>
+ <extend-configuration-property name="runtime.locales" value="sh_CS"/>
+ <extend-configuration-property name="runtime.locales" value="sh_YU"/>
+ <extend-configuration-property name="runtime.locales" value="si"/>
+ <extend-configuration-property name="runtime.locales" value="sid"/>
+ <extend-configuration-property name="runtime.locales" value="sid_ET"/>
+ <extend-configuration-property name="runtime.locales" value="si_LK"/>
+ <extend-configuration-property name="runtime.locales" value="sk"/>
+ <extend-configuration-property name="runtime.locales" value="sk_SK"/>
+ <extend-configuration-property name="runtime.locales" value="sl"/>
+ <extend-configuration-property name="runtime.locales" value="sl_SI"/>
+ <extend-configuration-property name="runtime.locales" value="so"/>
+ <extend-configuration-property name="runtime.locales" value="so_DJ"/>
+ <extend-configuration-property name="runtime.locales" value="so_ET"/>
+ <extend-configuration-property name="runtime.locales" value="so_KE"/>
+ <extend-configuration-property name="runtime.locales" value="so_SO"/>
+ <extend-configuration-property name="runtime.locales" value="sq"/>
+ <extend-configuration-property name="runtime.locales" value="sq_AL"/>
+ <extend-configuration-property name="runtime.locales" value="sr"/>
+ <extend-configuration-property name="runtime.locales" value="sr_BA"/>
+ <extend-configuration-property name="runtime.locales" value="sr_CS"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Cyrl"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Cyrl_BA"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Cyrl_CS"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Cyrl_ME"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Cyrl_RS"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Cyrl_YU"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Latn"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Latn_BA"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Latn_CS"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Latn_ME"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Latn_RS"/>
+ <extend-configuration-property name="runtime.locales" value="sr_Latn_YU"/>
+ <extend-configuration-property name="runtime.locales" value="sr_ME"/>
+ <extend-configuration-property name="runtime.locales" value="sr_RS"/>
+ <extend-configuration-property name="runtime.locales" value="sr_YU"/>
+ <extend-configuration-property name="runtime.locales" value="ss"/>
+ <extend-configuration-property name="runtime.locales" value="ss_SZ"/>
+ <extend-configuration-property name="runtime.locales" value="ss_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="st"/>
+ <extend-configuration-property name="runtime.locales" value="st_LS"/>
+ <extend-configuration-property name="runtime.locales" value="st_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="sv"/>
+ <extend-configuration-property name="runtime.locales" value="sv_FI"/>
+ <extend-configuration-property name="runtime.locales" value="sv_SE"/>
+ <extend-configuration-property name="runtime.locales" value="sw"/>
+ <extend-configuration-property name="runtime.locales" value="sw_KE"/>
+ <extend-configuration-property name="runtime.locales" value="sw_TZ"/>
+ <extend-configuration-property name="runtime.locales" value="syr"/>
+ <extend-configuration-property name="runtime.locales" value="syr_SY"/>
+ <extend-configuration-property name="runtime.locales" value="ta"/>
+ <extend-configuration-property name="runtime.locales" value="ta_IN"/>
+ <extend-configuration-property name="runtime.locales" value="te"/>
+ <extend-configuration-property name="runtime.locales" value="te_IN"/>
+ <extend-configuration-property name="runtime.locales" value="tg"/>
+ <extend-configuration-property name="runtime.locales" value="tg_Cyrl"/>
+ <extend-configuration-property name="runtime.locales" value="tg_Cyrl_TJ"/>
+ <extend-configuration-property name="runtime.locales" value="tg_TJ"/>
+ <extend-configuration-property name="runtime.locales" value="th"/>
+ <extend-configuration-property name="runtime.locales" value="th_TH"/>
+ <extend-configuration-property name="runtime.locales" value="ti"/>
+ <extend-configuration-property name="runtime.locales" value="ti_ER"/>
+ <extend-configuration-property name="runtime.locales" value="ti_ET"/>
+ <extend-configuration-property name="runtime.locales" value="tig"/>
+ <extend-configuration-property name="runtime.locales" value="tig_ER"/>
+ <extend-configuration-property name="runtime.locales" value="tl"/>
+ <extend-configuration-property name="runtime.locales" value="tn"/>
+ <extend-configuration-property name="runtime.locales" value="tn_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="to"/>
+ <extend-configuration-property name="runtime.locales" value="to_TO"/>
+ <extend-configuration-property name="runtime.locales" value="tr"/>
+ <extend-configuration-property name="runtime.locales" value="tr_TR"/>
+ <extend-configuration-property name="runtime.locales" value="trv"/>
+ <extend-configuration-property name="runtime.locales" value="ts"/>
+ <extend-configuration-property name="runtime.locales" value="ts_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="tt"/>
+ <extend-configuration-property name="runtime.locales" value="tt_RU"/>
+ <extend-configuration-property name="runtime.locales" value="ug"/>
+ <extend-configuration-property name="runtime.locales" value="ug_Arab"/>
+ <extend-configuration-property name="runtime.locales" value="ug_Arab_CN"/>
+ <extend-configuration-property name="runtime.locales" value="ug_CN"/>
+ <extend-configuration-property name="runtime.locales" value="uk"/>
+ <extend-configuration-property name="runtime.locales" value="uk_UA"/>
+ <extend-configuration-property name="runtime.locales" value="ur"/>
+ <extend-configuration-property name="runtime.locales" value="ur_IN"/>
+ <extend-configuration-property name="runtime.locales" value="ur_PK"/>
+ <extend-configuration-property name="runtime.locales" value="uz"/>
+ <extend-configuration-property name="runtime.locales" value="uz_AF"/>
+ <extend-configuration-property name="runtime.locales" value="uz_Arab"/>
+ <extend-configuration-property name="runtime.locales" value="uz_Arab_AF"/>
+ <extend-configuration-property name="runtime.locales" value="uz_Cyrl"/>
+ <extend-configuration-property name="runtime.locales" value="uz_Cyrl_UZ"/>
+ <extend-configuration-property name="runtime.locales" value="uz_Latn"/>
+ <extend-configuration-property name="runtime.locales" value="uz_Latn_UZ"/>
+ <extend-configuration-property name="runtime.locales" value="uz_UZ"/>
+ <extend-configuration-property name="runtime.locales" value="ve"/>
+ <extend-configuration-property name="runtime.locales" value="ve_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="vi"/>
+ <extend-configuration-property name="runtime.locales" value="vi_VN"/>
+ <extend-configuration-property name="runtime.locales" value="wal"/>
+ <extend-configuration-property name="runtime.locales" value="wal_ET"/>
+ <extend-configuration-property name="runtime.locales" value="wo"/>
+ <extend-configuration-property name="runtime.locales" value="wo_Latn"/>
+ <extend-configuration-property name="runtime.locales" value="wo_Latn_SN"/>
+ <extend-configuration-property name="runtime.locales" value="wo_SN"/>
+ <extend-configuration-property name="runtime.locales" value="xh"/>
+ <extend-configuration-property name="runtime.locales" value="xh_ZA"/>
+ <extend-configuration-property name="runtime.locales" value="yo"/>
+ <extend-configuration-property name="runtime.locales" value="yo_NG"/>
+ <extend-configuration-property name="runtime.locales" value="zh"/>
+ <extend-configuration-property name="runtime.locales" value="zh_CN"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hans"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hans_CN"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hans_HK"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hans_MO"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hans_SG"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hant"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hant_HK"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hant_MO"/>
+ <extend-configuration-property name="runtime.locales" value="zh_Hant_TW"/>
+ <extend-configuration-property name="runtime.locales" value="zh_HK"/>
+ <extend-configuration-property name="runtime.locales" value="zh_MO"/>
+ <extend-configuration-property name="runtime.locales" value="zh_SG"/>
+ <extend-configuration-property name="runtime.locales" value="zh_TW"/>
+ <extend-configuration-property name="runtime.locales" value="zu"/>
+ <extend-configuration-property name="runtime.locales" value="zu_ZA"/>
</module>
diff --git a/user/src/com/google/gwt/i18n/I18N.gwt.xml b/user/src/com/google/gwt/i18n/I18N.gwt.xml
index 24202d8..9ce67a7 100644
--- a/user/src/com/google/gwt/i18n/I18N.gwt.xml
+++ b/user/src/com/google/gwt/i18n/I18N.gwt.xml
@@ -89,5 +89,6 @@
currency data will support runtime locales - everything else will just
reference the compile-time locale set in the "locale" property.
-->
+ <define-configuration-property name="runtime.locales" is-multi-valued="true"/>
<set-configuration-property name="runtime.locales" value=""/>
</module>
diff --git a/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java b/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
index d399cc1..36425c4 100644
--- a/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
+++ b/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
@@ -16,7 +16,9 @@
package com.google.gwt.i18n.rebind;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.i18n.server.GwtLocaleFactoryImpl;
import com.google.gwt.i18n.shared.GwtLocale;
@@ -24,7 +26,9 @@
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import java.util.SortedSet;
/**
* Utility methods for dealing with locales.
@@ -114,7 +118,11 @@
*/
public static void init(TreeLogger logger, PropertyOracle propertyOracle) {
try {
- String localeName = propertyOracle.getPropertyValue(logger, PROP_LOCALE);
+ SelectionProperty localeProp
+ = propertyOracle.getSelectionProperty(logger, PROP_LOCALE);
+ String localeName = localeProp.getCurrentValue();
+ SortedSet<String> localeValues = localeProp.getPossibleValues();
+
GwtLocale newCompileLocale = factory.fromString(localeName);
if (newCompileLocale.equals(compileLocale)) {
return;
@@ -123,17 +131,16 @@
allLocales.clear();
allCompileLocales.clear();
runtimeLocales.clear();
- String[] localeValues = propertyOracle.getPropertyValueSet(logger,
- PROP_LOCALE);
- String rtLocaleNames = propertyOracle.getPropertyValue(logger,
- PROP_RUNTIME_LOCALES);
for (String localeValue : localeValues) {
allCompileLocales.add(factory.fromString(localeValue));
}
allLocales.addAll(allCompileLocales);
- if (rtLocaleNames != null && rtLocaleNames.length() > 0) {
- String[] rtLocales = rtLocaleNames.split(",");
- for (String rtLocale : rtLocales) {
+
+ ConfigurationProperty prop
+ = propertyOracle.getConfigurationProperty(PROP_RUNTIME_LOCALES);
+ List<String> rtLocaleNames = prop.getValues();
+ if (rtLocaleNames != null) {
+ for (String rtLocale : rtLocaleNames) {
GwtLocale locale = factory.fromString(rtLocale);
// TODO(jat): remove use of labels
existingLocales:
diff --git a/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java b/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
index 64ed8e0..0e3f4fd 100644
--- a/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
+++ b/user/src/com/google/gwt/i18n/rebind/LocalizableGenerator.java
@@ -19,6 +19,7 @@
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
@@ -87,7 +88,9 @@
// If the locale is not specified by the user as a request parameter
// or via a meta tag, or if the locale is formatted incorrectly,
// getPropertyValue() will return "default".
- locale = propertyOracle.getPropertyValue(logger, PROP_LOCALE);
+ SelectionProperty localeProp
+ = propertyOracle.getSelectionProperty(logger, PROP_LOCALE);
+ locale = localeProp.getCurrentValue();
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.ERROR, "Could not parse specified locale", e);
throw new UnableToCompleteException();
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index c421faa..2a11a2b 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -668,8 +668,9 @@
currentModule.clearEntryPoints();
currentModule.addEntryPointTypeName(GWTRunner.class.getName());
// Squirrel away the name of the active module for GWTRunnerGenerator
- ConfigurationProperty moduleNameProp = currentModule.getProperties().createConfiguration(
- "junit.moduleName");
+ ConfigurationProperty moduleNameProp
+ = currentModule.getProperties().createConfiguration(
+ "junit.moduleName", false);
moduleNameProp.setValue(moduleName);
runStyle.maybeCompileModule(syntheticModuleName);
}
diff --git a/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java b/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java
index 7058dd5..213e514 100644
--- a/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java
+++ b/user/src/com/google/gwt/junit/rebind/GWTRunnerGenerator.java
@@ -17,6 +17,7 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
@@ -76,8 +77,10 @@
String moduleName;
try {
- moduleName = context.getPropertyOracle().getPropertyValue(logger,
- "junit.moduleName");
+ ConfigurationProperty prop
+ = context.getPropertyOracle().getConfigurationProperty(
+ "junit.moduleName");
+ moduleName = prop.getValues().get(0);
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.ERROR,
"Could not resolve junit.moduleName property", e);
diff --git a/user/src/com/google/gwt/resources/Resources.gwt.xml b/user/src/com/google/gwt/resources/Resources.gwt.xml
index 482d555..8e93b39 100644
--- a/user/src/com/google/gwt/resources/Resources.gwt.xml
+++ b/user/src/com/google/gwt/resources/Resources.gwt.xml
@@ -56,20 +56,25 @@
</generate-with>
<!-- This can be used to disable the use of strongly-named files -->
+ <define-configuration-property name="ClientBundle.enableRenaming" is-multi-valued="false" />
<set-configuration-property name="ClientBundle.enableRenaming" value="true" />
<!-- This allows merging of CSS rules to be disabled. -->
+ <define-configuration-property name="CssResource.mergeEnabled" is-multi-valued="false" />
<set-configuration-property name="CssResource.mergeEnabled" value="true" />
<!-- This forces all CssResource accessor functions to have the @Strict -->
<!-- annotation. This is intended primarily for application developers and -->
<!-- the library test code. -->
+ <define-configuration-property name="CssResource.strictAccessors" is-multi-valued="false" />
<set-configuration-property name="CssResource.strictAccessors" value="false" />
<!-- This allows the developer to use shorter obfuscated class names. -->
<!-- Is is valid to extend this property to use a custom name. -->
+ <define-configuration-property name="CssResource.obfuscationPrefix" is-multi-valued="false" />
<set-configuration-property name="CssResource.obfuscationPrefix" value="default" />
<!-- This can be used to make CssResource produce human-readable CSS -->
+ <define-configuration-property name="CssResource.style" is-multi-valued="false" />
<set-configuration-property name="CssResource.style" value="obf" />
</module>
diff --git a/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java b/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
index 9b4e4a4..57a51ab 100644
--- a/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
+++ b/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
@@ -17,6 +17,7 @@
import com.google.gwt.core.ext.BadPropertyValueException;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JMethod;
@@ -118,7 +119,8 @@
String locale;
try {
PropertyOracle oracle = context.getGeneratorContext().getPropertyOracle();
- locale = oracle.getPropertyValue(logger, "locale");
+ SelectionProperty prop = oracle.getSelectionProperty(logger, "locale");
+ locale = prop.getCurrentValue();
} catch (BadPropertyValueException e) {
locale = null;
}
diff --git a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
index 65d51cd..6a305f2 100644
--- a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
+++ b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
@@ -20,6 +20,7 @@
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
@@ -121,8 +122,14 @@
public void addPermutationAxis(String propertyName)
throws BadPropertyValueException {
- oracle.getPropertyValue(TreeLogger.NULL, propertyName);
- axes.add(propertyName);
+ // Ensure the property exists and add a permutation axis if the
+ // property is a deferred binding property.
+ try {
+ oracle.getSelectionProperty(TreeLogger.NULL, propertyName).getCurrentValue();
+ axes.add(propertyName);
+ } catch (BadPropertyValueException e) {
+ oracle.getConfigurationProperty(propertyName).getValues();
+ }
}
}
@@ -464,7 +471,8 @@
try {
PropertyOracle oracle = context.getGeneratorContext().getPropertyOracle();
for (String property : permutationAxes) {
- String value = oracle.getPropertyValue(logger, property);
+ SelectionProperty prop = oracle.getSelectionProperty(logger, property);
+ String value = prop.getCurrentValue();
toReturn.append("_" + value);
}
} catch (BadPropertyValueException e) {
diff --git a/user/src/com/google/gwt/resources/rebind/context/StaticResourceContext.java b/user/src/com/google/gwt/resources/rebind/context/StaticResourceContext.java
index a4beb90..047e0dd 100644
--- a/user/src/com/google/gwt/resources/rebind/context/StaticResourceContext.java
+++ b/user/src/com/google/gwt/resources/rebind/context/StaticResourceContext.java
@@ -16,6 +16,7 @@
package com.google.gwt.resources.rebind.context;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.PropertyOracle;
import com.google.gwt.core.ext.TreeLogger;
@@ -49,7 +50,9 @@
// See if filename obfuscation should be enabled
String enableRenaming = null;
try {
- enableRenaming = propertyOracle.getPropertyValue(logger, ENABLE_RENAMING);
+ ConfigurationProperty prop = propertyOracle.getConfigurationProperty(
+ ENABLE_RENAMING);
+ enableRenaming = prop.getValues().get(0);
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.ERROR, "Bad value for " + ENABLE_RENAMING, e);
throw new UnableToCompleteException();
@@ -71,7 +74,6 @@
// The name will be MD5.cache.ext
outputName = strongName + ".cache." + extension;
-
} else {
outputName = suggestedFileName.substring(suggestedFileName.lastIndexOf('/') + 1);
}
diff --git a/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java b/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
index 063c04e..5e32938 100644
--- a/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
+++ b/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java
@@ -16,8 +16,10 @@
package com.google.gwt.resources.rg;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
@@ -219,7 +221,16 @@
} else {
try {
String propertyName = x.getPropertyName();
- String propValue = oracle.getPropertyValue(logger, propertyName);
+ String propValue = null;
+ try {
+ SelectionProperty selProp
+ = oracle.getSelectionProperty(logger, propertyName);
+ propValue = selProp.getCurrentValue();
+ } catch (BadPropertyValueException e) {
+ ConfigurationProperty confProp
+ = oracle.getConfigurationProperty(propertyName);
+ propValue = confProp.getValues().get(0);
+ }
/*
* If the deferred binding property's value is in the list of values
@@ -1229,8 +1240,9 @@
*/
try {
PropertyOracle propertyOracle = context.getGeneratorContext().getPropertyOracle();
- String propertyValue = propertyOracle.getPropertyValue(logger,
+ ConfigurationProperty prop = propertyOracle.getConfigurationProperty(
"CssResource.strictAccessors");
+ String propertyValue = prop.getValues().get(0);
if (Boolean.valueOf(propertyValue)) {
logger.log(TreeLogger.WARN, "CssResource.forceStrict is true, but "
+ method.getName() + "() is missing the @Strict annotation.");
@@ -1264,16 +1276,20 @@
throws UnableToCompleteException {
try {
PropertyOracle propertyOracle = context.getGeneratorContext().getPropertyOracle();
- String style = propertyOracle.getPropertyValue(logger,
- "CssResource.style").toLowerCase();
+ ConfigurationProperty styleProp
+ = propertyOracle.getConfigurationProperty("CssResource.style");
+ String style = styleProp.getValues().get(0);
prettyOutput = style.equals("pretty");
- String merge = propertyOracle.getPropertyValue(logger,
- "CssResource.mergeEnabled").toLowerCase();
+ ConfigurationProperty mergeProp
+ = propertyOracle.getConfigurationProperty("CssResource.mergeEnabled");
+ String merge = mergeProp.getValues().get(0);
enableMerge = merge.equals("true");
- classPrefix = propertyOracle.getPropertyValue(logger,
- "CssResource.obfuscationPrefix");
+ ConfigurationProperty classPrefixProp
+ = propertyOracle.getConfigurationProperty(
+ "CssResource.obfuscationPrefix");
+ classPrefix = classPrefixProp.getValues().get(0);
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.WARN, "Unable to query module property", e);
throw new UnableToCompleteException();
diff --git a/user/src/com/google/gwt/user/RemoteService.gwt.xml b/user/src/com/google/gwt/user/RemoteService.gwt.xml
index a287f28..31baf7c 100644
--- a/user/src/com/google/gwt/user/RemoteService.gwt.xml
+++ b/user/src/com/google/gwt/user/RemoteService.gwt.xml
@@ -33,6 +33,7 @@
<!--
If this is ever turned on by default, fix up RPCSuiteWithElision
-->
+ <define-configuration-property name="gwt.elideTypeNamesFromRPC" is-multi-valued="false" />
<set-configuration-property name="gwt.elideTypeNamesFromRPC" value="false" />
<generate-with class="com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator">
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
index 9a80053..84a06bb 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -17,7 +17,9 @@
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.GeneratorContext;
+import com.google.gwt.core.ext.PropertyOracle;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.linker.GeneratedResource;
@@ -230,11 +232,13 @@
Map<JMethod, JMethod> syncMethToAsyncMethMap = rsav.validate(logger,
serviceIntf, serviceAsync);
+ final PropertyOracle propertyOracle = context.getPropertyOracle();
+
// Determine the set of serializable types
SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(
- logger, context.getPropertyOracle(), typeOracle);
+ logger, propertyOracle, typeOracle);
SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(
- logger, context.getPropertyOracle(), typeOracle);
+ logger, propertyOracle, typeOracle);
try {
addRequiredRoots(logger, typeOracle, typesSentFromBrowserBuilder);
addRequiredRoots(logger, typeOracle, typesSentToBrowserBuilder);
@@ -247,8 +251,10 @@
}
try {
- elideTypeNames = Boolean.parseBoolean(context.getPropertyOracle().getPropertyValue(
- logger, TypeSerializerCreator.GWT_ELIDE_TYPE_NAMES_FROM_RPC));
+ ConfigurationProperty prop
+ = context.getPropertyOracle().getConfigurationProperty(
+ TypeSerializerCreator.GWT_ELIDE_TYPE_NAMES_FROM_RPC);
+ elideTypeNames = Boolean.parseBoolean(prop.getValues().get(0));
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.ERROR, "Configuration property "
+ TypeSerializerCreator.GWT_ELIDE_TYPE_NAMES_FROM_RPC
diff --git a/user/src/com/google/gwt/user/rebind/rpc/Shared.java b/user/src/com/google/gwt/user/rebind/rpc/Shared.java
index ed1ddd1..3e113d3 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/Shared.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/Shared.java
@@ -17,6 +17,7 @@
import com.google.gwt.core.ext.BadPropertyValueException;
import com.google.gwt.core.ext.PropertyOracle;
+import com.google.gwt.core.ext.SelectionProperty;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.typeinfo.JArrayType;
import com.google.gwt.core.ext.typeinfo.JClassType;
@@ -133,7 +134,9 @@
private static boolean getBooleanProperty(TreeLogger logger,
PropertyOracle propertyOracle, String propertyName, boolean defaultValue) {
try {
- String propVal = propertyOracle.getPropertyValue(logger, propertyName);
+ SelectionProperty prop
+ = propertyOracle.getSelectionProperty(logger, propertyName);
+ String propVal = prop.getCurrentValue();
if (propVal != null && propVal.length() > 0) {
return Boolean.valueOf(propVal);
}
diff --git a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
index 125bce6..d92c83a 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
@@ -19,6 +19,7 @@
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
@@ -139,9 +140,10 @@
+ " for TypeSerializerCreator createMethodMap");
try {
- String value = context.getPropertyOracle().getPropertyValue(logger,
- GWT_ELIDE_TYPE_NAMES_FROM_RPC);
- elideTypeNames = Boolean.parseBoolean(value);
+ ConfigurationProperty prop
+ = context.getPropertyOracle().getConfigurationProperty(
+ GWT_ELIDE_TYPE_NAMES_FROM_RPC);
+ elideTypeNames = Boolean.parseBoolean(prop.getValues().get(0));
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.ERROR, "The configuration property "
+ GWT_ELIDE_TYPE_NAMES_FROM_RPC
diff --git a/user/src/com/google/gwt/user/server/rpc/SerializationPolicyLoader.java b/user/src/com/google/gwt/user/server/rpc/SerializationPolicyLoader.java
index 6755414..dd4f56e 100644
--- a/user/src/com/google/gwt/user/server/rpc/SerializationPolicyLoader.java
+++ b/user/src/com/google/gwt/user/server/rpc/SerializationPolicyLoader.java
@@ -41,11 +41,11 @@
+ "[true | false], [true | false], [true | false], [true | false], typeId, signature";
/**
- * Returns the serialization policy file name from the from the serialization
+ * Returns the serialization policy file name from the serialization
* policy strong name.
*
* @param serializationPolicyStrongName the serialization policy strong name
- * @return the serialization policy file name from the from the serialization
+ * @return the serialization policy file name from the serialization
* policy strong name
*/
public static String getSerializationPolicyFileName(
diff --git a/user/test/com/google/gwt/dev/cfg/PropertyTest.java b/user/test/com/google/gwt/dev/cfg/PropertyTest.java
index 08f4786..bc85804 100644
--- a/user/test/com/google/gwt/dev/cfg/PropertyTest.java
+++ b/user/test/com/google/gwt/dev/cfg/PropertyTest.java
@@ -98,15 +98,15 @@
BindingProperty d = properties.createBinding("deferred");
assertSame(d, properties.createBinding("deferred"));
try {
- properties.createConfiguration("deferred");
+ properties.createConfiguration("deferred", false);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException e) {
// OK
}
assertNull(properties.find("config"));
- ConfigurationProperty c = properties.createConfiguration("config");
- assertSame(c, properties.createConfiguration("config"));
+ ConfigurationProperty c = properties.createConfiguration("config", false);
+ assertSame(c, properties.createConfiguration("config", false));
try {
properties.createBinding("config");
fail("Should have thrown an IllegalArgumentException");
diff --git a/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml b/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml
index 9cddf0b..59e730a 100644
--- a/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml
+++ b/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml
@@ -20,6 +20,7 @@
<source path="client"/>
<extend-property name="locale" values="es_419"/>
<set-property name = "locale" value = "es_419"/>
- <set-configuration-property name="runtime.locales" value="es_AR,es_MX"/>
+ <extend-configuration-property name="runtime.locales" value="es_AR"/>
+ <extend-configuration-property name="runtime.locales" value="es_MX"/>
<public path="public_es_AR"/>
</module>
diff --git a/user/test/com/google/gwt/i18n/I18NTest_es_MX_runtime.gwt.xml b/user/test/com/google/gwt/i18n/I18NTest_es_MX_runtime.gwt.xml
index 246f5a8..e82fb39 100644
--- a/user/test/com/google/gwt/i18n/I18NTest_es_MX_runtime.gwt.xml
+++ b/user/test/com/google/gwt/i18n/I18NTest_es_MX_runtime.gwt.xml
@@ -20,6 +20,7 @@
<source path="client"/>
<extend-property name="locale" values="es_419"/>
<set-property name = "locale" value = "es_419"/>
- <set-configuration-property name="runtime.locales" value="es_AR,es_MX"/>
+ <extend-configuration-property name="runtime.locales" value="es_AR"/>
+ <extend-configuration-property name="runtime.locales" value="es_MX"/>
<public path="public_es_MX"/>
</module>
diff --git a/user/test/com/google/gwt/module/ConfigurationProperties.gwt.xml b/user/test/com/google/gwt/module/ConfigurationProperties.gwt.xml
index 0d6a6af..41d90e2 100644
--- a/user/test/com/google/gwt/module/ConfigurationProperties.gwt.xml
+++ b/user/test/com/google/gwt/module/ConfigurationProperties.gwt.xml
@@ -13,6 +13,8 @@
<!-- implied. License for the specific language governing permissions and -->
<!-- limitations under the License. -->
<module>
+ <define-configuration-property name="testProperty"
+ is-multi-valued="false" />
<set-configuration-property name="testProperty"
value="Hello World!" />
<generate-with
diff --git a/user/test/com/google/gwt/module/rebind/ConfigurationPropertiesGenerator.java b/user/test/com/google/gwt/module/rebind/ConfigurationPropertiesGenerator.java
index 9e5fdf4..d34d42b 100644
--- a/user/test/com/google/gwt/module/rebind/ConfigurationPropertiesGenerator.java
+++ b/user/test/com/google/gwt/module/rebind/ConfigurationPropertiesGenerator.java
@@ -16,6 +16,7 @@
package com.google.gwt.module.rebind;
import com.google.gwt.core.ext.BadPropertyValueException;
+import com.google.gwt.core.ext.ConfigurationProperty;
import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
@@ -41,16 +42,17 @@
if (out != null) {
String propertyValue;
try {
- propertyValue = context.getPropertyOracle().getPropertyValue(logger,
- "testProperty");
+ ConfigurationProperty prop = context.getPropertyOracle().
+ getConfigurationProperty("testProperty");
+ propertyValue = prop.getValues().get(0);
} catch (BadPropertyValueException e) {
logger.log(TreeLogger.ERROR, "testProperty not set", e);
throw new UnableToCompleteException();
}
try {
- context.getPropertyOracle().getPropertyValue(TreeLogger.NULL,
- "bad_property");
+ ConfigurationProperty prop = context.getPropertyOracle().
+ getConfigurationProperty("bad_property");
logger.log(TreeLogger.ERROR,
"Did not get an exception trying to access fake property");
throw new UnableToCompleteException();