Missing declaration/initialization of JsOverlay fields.
Change-Id: I14913cdae86ab9e0937a9edf806339dca2e27ef8
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index 8d29d1a..9612aeb 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -622,6 +622,8 @@
if (type.isJsNative()) {
// Emit JsOverlay static methods for native JsTypes.
emitStaticMethods(type);
+ // Emit JsOverlay (static) fields for native JsTypes.
+ emitFields(type);
return null;
}
@@ -1726,6 +1728,10 @@
private void emitFields(JDeclaredType type) {
JsVars vars = new JsVars(type.getSourceInfo());
for (JField field : type.getFields()) {
+ if (field.isJsNative()) {
+ // Nothing to output for native fields.
+ continue;
+ }
JsExpression initializer = null;
// if we need an initial value, create an assignment
if (initializeAtTopScope(field)) {
diff --git a/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java b/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
index 2529d6e..a40452f 100644
--- a/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
+++ b/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
@@ -420,4 +420,20 @@
assertTrue(subClass.remove("Hi"));
assertFalse(subClass.remove("Hi"));
}
+
+ @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object")
+ static class NativeClassWithStaticOverlayFields {
+ @JsOverlay
+ static String uninitializedString;
+ @JsOverlay
+ static int uninitializedInt;
+ @JsOverlay
+ static int initializedInt = 5;
+ }
+
+ public void testUninitializedStaticOverlayField() {
+ assertEquals(0, NativeClassWithStaticOverlayFields.uninitializedInt);
+ assertEquals(5, NativeClassWithStaticOverlayFields.initializedInt);
+ assertNull(NativeClassWithStaticOverlayFields.uninitializedString);
+ }
}