hey guys,

i think we have a massive problem with the generated js sources for
production. we built a larger app and since now all worked like a
charm, we had not a single stopper.

at the moment there is a strange issue. when i use the static app it
seems like there is a confusion about the generic-type or the content
of it. let me first show you the gwttest i wrote to let you see what
happens::

package net.vz.common.widgets.client.profile.lastvisitors;

import java.util.List;
import java.util.logging.Logger;

import net.vz.common.services.client.registry.Registry;
import net.vz.common.services.client.restdto.GenericListDto;
import net.vz.common.services.client.restdto.MinUserDto;
import net.vz.common.services.client.restservice.UserService;
import
net.vz.common.services.client.resty.vzcore.SimpleMethodCallback;
import net.vz.common.widgets.client.bundles.UnifiedResources;
import net.vz.common.widgets.client.i18n.LocalMessages;
import net.vz.common.widgets.client.listitem.GenericImageSlider;
import net.vz.common.widgets.client.listitem.GenericList;
import net.vz.common.widgets.client.listitem.renderer.MinUserRenderer;
import
net.vz.common.widgets.client.simpleItem.inject.SimpleItemModule;
import net.vz.common.widgets.client.toolbox.custompanels.ListPanel;
import net.vz.common.widgets.client.toolbox.slideBar.SlideBarActivity;
import net.vz.common.widgets.client.toolbox.slideBar.SlideBarView;
import net.vz.common.widgets.client.toolbox.slideBar.SlideBarViewImpl;

import org.fusesource.restygwt.client.Method;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.SimplePanel;

/**
 * try to reconstruct a production bug which seems to be caused by
wrong typing
 * from gwt??!
 *
 * @author abalke
 */
public class ProfileLastVisitorsActivityTestGwt extends GWTTestCase {

    private static final String userKey = "U:test_user";

    @Override
    public String getModuleName() {
        return SimpleItemModule.MODULE_NAME;
    }

    public void testDo() {
        LocalMessages localMessages = GWT.create(LocalMessages.class);
        UnifiedResources unifiedResources = new UnifiedResources();

        ListPanel ul = GWT.create(ListPanel.class);
        SlideBarView sidebarView = GWT.create(SlideBarViewImpl.class);
        SlideBarActivity slideBarActivity = new
SlideBarActivity(sidebarView);
        GenericList<MinUserDto> genericLinkList = new
GenericList<MinUserDto>(unifiedResources);
        GenericImageSlider<MinUserDto> slider = new
GenericImageSlider<MinUserDto>(
                ul, slideBarActivity, genericLinkList,
unifiedResources);

        ProfileLastVisitorsViewImpl__ view =
            new ProfileLastVisitorsViewImpl__(localMessages);
        UserService userService = GWT.create(UserService.class);
        MinUserRenderer renderer = new MinUserRenderer();

        AcceptsOneWidget panel = new SimplePanel();
        SimpleEventBus eventBus = new SimpleEventBus();
        ProfileLastVisitorsActivity a = new
ProfileLastVisitorsActivity(
                view, userService, slider, renderer) {
            protected void loadLastVisitors(String userId) {
                userService.getLastVisitors(userId, new
SimpleMethodCallback<GenericListDto<MinUserDto>>() {
                    @Override
                    public void onSuccess(Method method,
GenericListDto<MinUserDto> response) {
                        List<MinUserDto> items = response.getItems();
                        if (Registry.canLog()) {
 
Logger.getLogger(ProfileLastVisitorsActivity.class.getName())
                                .info("got a list of " +
MinUserDto.class + ": " );
 
Logger.getLogger(ProfileLastVisitorsActivity.class.getName())
                                .info("... " + items.get(0));
                        }
                        slider.render(items);
 
view.setLastVisitorsOverallCount(response.getCount());
                        view.show(true);

                        // in production, here is a wrong type
                        assertEquals(MinUserDto.class,
items.get(0).getClass());
                        assertEquals(true,
((ProfileLastVisitorsViewImpl__)view).getShowState());
                        finishTest();
                    }
                });
            }
        };

        a.start(panel, eventBus);

        // the widget wants only to be loaded when this is my user
        Registry.MY_USER_ID = userKey;

        assertEquals(false, view.getShowState());
        a.update(userKey);

        delayTestFinish(5 * 1000);
    }

    class ProfileLastVisitorsViewImpl__ extends
ProfileLastVisitorsViewImpl {

        private boolean isShown = false;

        public ProfileLastVisitorsViewImpl__(LocalMessages
localMessages) {
            super(localMessages);
        }

        @Override
        public void show(boolean b) {
            isShown = b;
            super.show(b);
        }

        public boolean getShowState() {
            return isShown;
        }
    }
}

in production mode (static compile) i see in the logs that there is a
list of type ``A`` containing the first element of type ``B`` on this
place, which is overridden in the test above::

    protected void loadLastVisitors(String userId) {
        userService.getLastVisitors(userId, new
SimpleMethodCallback<GenericListDto<MinUserDto>>() {
            @Override
            public void onSuccess(Method method,
GenericListDto<MinUserDto> response) {
                List<MinUserDto> items = response.getItems();
                if (Registry.canLog()) {
 
Logger.getLogger(ProfileLastVisitorsActivity.class.getName())
                        .info("should have a list of " +
MinUserDto.class + ", first element is a: " +items.get(0));
                }
                slider.render(items);
                view.setLastVisitorsOverallCount(response.getCount());
                view.show(true);
            }
        });
    }

in result of that i get a classcastexception - but only in compiled
production code. neither the integration-test, nor the hosted mode
with exactly the same backend-responses fails.

my question is now: have you ever seen an issue with type-confusion in
a bigger context? what should i do to come to a result with this
issue. if you tell me where to look in the compiled code i can try to
reduce the setup.

as a last option i only see to reduce my project to a minimum size
where the error still occurs to send it to you and file a bug.

any hints are greatly appreciated.

andi

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to