Thursday, March 19, 2015

Some enums are not initialized in GWT 2.6.1

Hi. I just submitted a bug report on Google Code (https://code.google.com/p/google-web-toolkit/issues/detail?id=9155). BTW, is Google Code still proper place for reporting bugs? Anyways, I though to post here my problem as well, maybe somebody had some more experience with this problem.    So, I am dealing with enums. In development mode everything is working fine, but in compiled mode one of my enum types does not get initialized.    Here is the type in Java (this is an inner class/enum of an custom Popup):    	private enum NameSortMethod {  		ASCENDING, DESCENDING;    		private static NameSortMethod[] vals = values();    		private NameSortMethod(){  			  		}  		  		public NameSortMethod next() {  			// http://stackoverflow.com/a/17006263/339219  			return vals[(this.ordinal() + 1) % vals.length];  		}    		public String getImageUri(boolean sortByStatus) {  			if (sortByStatus) {  				// return grey   				return TableBundle.instance.sort_grey().getSafeUri().asString();  			} else {  				return TableBundle.instance.sort_black().getSafeUri().asString();  			}  		}  		  	}    When compiled to "DETAILED" I've found that this is its clinit:    function org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_$clinit__V(){    org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_$clinit__V = nullMethod;    org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_vals = org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_$VALUES;  }    function org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_$next__Lorg_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_2Lorg_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_2(this$static){    org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_$clinit__V();    return org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_vals[(this$static + 1) % org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_vals.length];  }    This results in TypeError when using function next. Chrome dev tools tells me while debugging that org_perfsonar_ui_client_common_component_EndpointPicker$NameSortMethod_$VALUES are undefined.      I have similar enum that works:    	private enum StatusSortMethod {  		// G-green (UP) R-red (DOWN) W-white (UNKNOWN & NULL STATUS)  		GRW("Available first", TableBundle.instance.sort_black()),   		RWG("Unavailable first", TableBundle.instance.sort_black_rand()),   		WGR("Unknown first", TableBundle.instance.sort_black());    		private static StatusSortMethod[] vals = values();    		private String message;  		private ImageResource sprite;    		private StatusSortMethod(String message, ImageResource imageResource) {  			this.message = message;  			this.sprite = imageResource;  		}    		public String getImageUri(boolean sortByStatus) {  			if (sortByStatus) {  				return sprite.getSafeUri().asString();  			} else {  				return TableBundle.instance.sort_grey().getSafeUri().asString();  			}  		}    		public StatusSortMethod previous() {  			return vals[(this.ordinal() + vals.length - 1) % vals.length];  		}  		  		public StatusSortMethod next() {  			// http://stackoverflow.com/a/17006263/339219  			return vals[(this.ordinal() + 1) % vals.length];  		}  	}    Its clinit is like this:    function org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_$clinit__V(){    org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_$clinit__V = nullMethod;    org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_GRW = new org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_EndpointPicker$StatusSortMethod__Ljava_lang_String_2ILjava_lang_String_2Lcom_google_gwt_resources_client_ImageResource_2V('GRW', 0, 'Available first', (org_perfsonar_ui_client_resource_TableBundle_1default_1InlineClientBundleGenerator$sort_1blackInitializer_$clinit__V() , org_perfsonar_ui_client_resource_TableBundle_1default_1InlineClientBundleGenerator_sort_1black));    org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_RWG = new org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_EndpointPicker$StatusSortMethod__Ljava_lang_String_2ILjava_lang_String_2Lcom_google_gwt_resources_client_ImageResource_2V('RWG', 1, 'Unavailable first', (org_perfsonar_ui_client_resource_TableBundle_1default_1InlineClientBundleGenerator$sort_1black_1randInitializer_$clinit__V() , org_perfsonar_ui_client_resource_TableBundle_1default_1InlineClientBundleGenerator_sort_1black_1rand));    org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_WGR = new org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_EndpointPicker$StatusSortMethod__Ljava_lang_String_2ILjava_lang_String_2Lcom_google_gwt_resources_client_ImageResource_2V('WGR', 2, 'Unknown first', org_perfsonar_ui_client_resource_TableBundle_1default_1InlineClientBundleGenerator_sort_1black);    org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_$VALUES = com_google_gwt_lang_Array_initValues__Ljava_lang_Class_2Lcom_google_gwt_core_client_JavaScriptObject_2ILcom_google_gwt_lang_Array_2Lcom_google_gwt_lang_Array_2(com_google_gwt_lang_ClassLiteralHolder__13Lorg_1perfsonar_1ui_1client_1common_1component_1EndpointPicker$StatusSortMethod_12_1classLit, makeCastMap([Q$java_io_Serializable, Q$java_lang_Object_$1]), Q$org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod, [org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_GRW, org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_RWG, org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_WGR]);    org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_vals = org_perfsonar_ui_client_common_component_EndpointPicker$StatusSortMethod_$VALUES;  }    Please advise for a workaround if any?

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment