Thursday, September 17, 2015

Re: Why code ends up in Left over Soyc report? How to analyze?

I have some problem with code ending up in the left over because it's reached from a split point, while it shouldn't be reached through that split point.
Why?

Details:
Below a snippet from the Soyc report that shows why the Login component is alive from a split point in the app Ztoeslag. 
The Login component shouldn't be alive through this split point, but it occurs because controller ProfileControllerDefault is shown in the soyc snippet below.

I don't understand why controller "ProfileControllerDefault" appears in the alive-list below, as it is created in a RunAsync GeneralSplitPoint10 (the same as the Login component).
The only place in the whole code where "ProfileControllerDefault" appears is at the place it's created, which is called in the GeneralSplitPoint10 split point, that calls the following method in the ProfileFacade:

public ProfileController createController() {
   return new ProfileControllerDefault();
}

Because the Split points work method-based, that should be fine, however it shouldn't be touched/reached in the soyc snippet below.

Some more method flow:
The LazyProfileController.showProfile is listed below. The call findActor() will return the ProfileControllerDefault instance if already loaded. If not loaded yet, it will start loading and in the mean while the showProfile() action in put on the queue through the method below: GeneralActionQueueFacade.showProfile(). When the ProfileControllerDefault is created, the queue is emptied.

So can you please tell me why the ProfileControllerDefault appears in the list below that shows why the Login component is alive.
How can I further analyze this? How can I confirm this is a bug ? (I hope not :(

- Ed

---------- Snippet of why the Login component is alive.
.......
  • com.profile.impl.ProfileControllerDefault::$getEnsureView
  • com.profile.impl.ProfileControllerDefault::$beforeShow
  • com.actionqueue.GeneralActionQueueFacade::$showProfile
  • com.profile.impl.LazyProfileController::$showProfile
  • com.profile.impl.ProfileFacade::$showProfile
  • com.profile.ProfileHistory::runIntern
  • ......
    • com.ztoeslag.ZtoeslagLazyLoaderDefault::$createCodeSplitZtoeslagGeneral10
    ----------

    ------------ The LazyProfileController.showProfile() method:

    public void showProfile(final FlexShowContext context) {
       if (!isCommandPresentAndEnsureLoadingStarted(getShowProfileId())) { // will check the queued command isn't present yet, and ensure the will be loaded if not present.
         getGeneralActionQueueFacade().showProfile(findActor(), this, getShowProfileId(), context); // (findActor(): will return the ProfileControllerDefault if loaded)
       }
    }

    ------------

    ------------------- The GeneralActionQueueFacade.showProfile() method:

    public final <T extends HasShowProfile, Q extends HasAddToQueue<ActionCommand<T>>> T showProfile(final T item, final Q queue, final String idfinal FlexShowContext context) {
     if (isNull(item)) { // buffer the action
         queue.addToQueue(new ActionCommandBase<T>(id) {
             public void execute(final T controller) {
                      controller.showProfile(context);
              }
        });
    }
    else {
       item.showProfile(context);
    }
    return item;
    }

    -------------------



    --
    You received this message because you are subscribed to the Google Groups "GWT Users" 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