It looks to me like it might be a type inferencing issue Roberto. Remember,
the lambda is matched to a SAM interface method. When it synthesizes the
implementation, it takes info from JDT about the 'expected type' which is
inferred by JDT. I wonder if the type inferred messes up type tightener
somehow. Here's something to try, put your lambda into a local var;

e.g.

Function<Foo, Bar> foo = {data -> data.getAccount() etc}
service.get().getBootstrap().bootstrap().doOnNext(foo)

That way you force the param types to what you know they are.

I suppose another thing to try is to declare a type

service.get().getBootstrap().bootstrap().doOnNext(Data data -> .....)

What I'm suspecting is that the compiler is seeing a different type for the
parameter somehow and inferring it is never instantiated.



On Mon, Oct 26, 2015 at 12:57 PM, Ignacio Baca Moreno-Torres <
igna...@bacamt.com> wrote:

> I said that optimize=0 fix errors, but I just compiled the project a get
> the same bootstrap+lamba error. But with draftCompile the result looks ok.
> // bootstrap case, lambda, pretty, draftCompile
> _.lambda$5 = function lambda$5(data_0){
>   $clinit_ApplicationBootstrapper();
>   var account, user;
>   {
>     account = getAccount__Lshared_user_Account___devirtual$(data_0);
>     if (isNull_2(account))
>       castTo(this.auth.get_1(), 242).resetSessionData(false);
>     else
>       castTo(this.auth.get_1(), 242).setSessionData(account,
> getKeychain__LKeychain___devirtual$(data_0));
>
>     castTo(this.theme.get_1(), 951).setCustomization(
> getCustomization__LCustomization___devirtual$(data_0));
>     castTo(this.analytics.get_1(),7570).init_13(
>         getAnalyticsUserAccount__Ljava_lang_String___devirtual$(data_0) +
> ':' +
>         getAnalyticsDomainName__Ljava_lang_String___devirtual$(data_0));
>     configureServer(getReverseGeocodingUrl__Ljava_lang_String___devirtual$
> (data_0));
>     user = isNull_2(account)?'anonymous':
> getEmail__Ljava_lang_String___devirtual$(account);
>     log_10.fine('Bootstrap data loaded successfully (user=' + user + ')');
>   }
> };
> defineClass(1672, 1, {1:1}, ApplicationBootstrapper$lambda$5$Type);
> _.call_0 = function call_3(arg0){
>   this.$$outer_0.lambda$5(arg0);
> };
> var Lclient_ApplicationBootstrapper$lambda$5$Type_2_classLit =
> createForClass('client', 'ApplicationBootstrapper/lambda$5$Type', 1672,
> Ljava_lang_Object_2_classLit);
>
>
>
> On Monday, October 26, 2015 at 8:27:41 PM UTC+1, Ignacio Baca
> Moreno-Torres wrote:
>
>> Bootstrap using lambda (fail)
>>
>> // java
>> return service.get().getBootstrap().bootstrap().doOnNext(data -> {
>>     Account account = data.getAccount();
>>     if (account == null) auth.get().resetSessionData(false);
>>     else auth.get().setSessionData(account, data.getKeychain());
>>     theme.get().setCustomization(data.getCustomization());
>>     analytics.get().init(data.getAnalyticsUserAccount() + ":" + data.
>> getAnalyticsDomainName());
>>     OsmQueryResolver.configureServer(data.getReverseGeocodingUrl());
>>     final String user = account == null ? "anonymous" : account.getEmail
>> ();
>>     log.fine("Bootstrap data loaded successfully (user=" + user + ")");
>> });
>> // javascript + pretty
>> function $lambda$5(this$static) {
>>     var lastArg;
>>     null .$_nullMethod();
>>     $resetSessionData(castTo(this$static.auth.get_1(), 400), false);
>>     $setCustomization((lastArg = castTo(this$static.theme.get_1(), 1067),
>>     null .$_nullMethod(),
>>     lastArg));
>>     castTo(this$static.analytics.get_1(), 6137).init_2(null .$_nullMethod
>> () + ':' + null .$_nullMethod());
>>     configureServer(null .$_nullMethod());
>>     $fine_0(log_3, 'Bootstrap data loaded successfully (user=anonymous)'
>> );
>> }
>>
>>
>> ProcessResponse using anonymous class (success).
>>
>> // java
>> tracker.add(heads.subscribe(new Action1<SubscriptionResponse>() {
>>     @Override public void call(SubscriptionResponse response) {
>>         ClientTelemetryStore.this.processResponse(response);
>>     }
>> }));
>> // Javascript
>> defineClass(2064, 1, {}, ClientTelemetryStore$1);
>> _.call_0 = function call_145(response) {
>>     $call_3(this, castToAllowJso(response, 6180));
>> };
>> function $call_3(this$static, response) {
>>     $processResponse(this$static.this$01, response);
>> }
>> function $processResponse(this$static, response) {
>>     var newUnits, xs, xs$iterator, xs$iterator0;
>>     requireNonNull_0(response, 'response required');
>>     requireNonNull_0(response.uuid, 'response.uuid required’);
>>
>>
>> ProcessResponse using lambda (fail).
>>
>> // Java
>> tracker.add(heads.subscribe(response -> { ClientTelemetryStore.this.
>> processResponse(response); }));
>> // Javascript
>> defineClass(2063, 1, {}, ClientTelemetryStore$lambda$3$Type);
>> _.call_0 = function call_153(arg0) {
>>     $processResponse(this.$$outer_0, throwClassCastExceptionUnlessNull(
>> arg0));
>> };
>> function $processResponse(this$static, response) {
>>     var newUnits, xs, xs$iterator, xs$iterator0;
>>     requireNonNull_0(response, 'response required');
>>     requireNonNull_0(null .$_nullMethod(), 'response.uuid required');
>>
>> I did not use pretty style because I thought that this flag produces
>> different result, I tested now and looks like the output is the same, but,
>> I'm pretty sure that some flags changes this issues, optimize is obvious
>> that fixes the problem, but I think that namespace=package also changes the
>> result.
>>
>> I know that this was easier if we have a sample project, but I can't
>> reproduce! :( You can try, the ResourceRegistry case is plain java + guava.
>> But when you copy to a clean project, the bug disappear.
>> this.store = Suppliers.memoize(() -> from(resources.get()).uniqueIndex(
>> ResourceDescriptor::getType));
>> Resource descriptor is an interface with only one implementation where
>> type is a Class<?> type field, a getType return this field. Anyway, I'm
>> still trying to reproduce in a small project.
>>
>> On Monday, October 26, 2015 at 5:26:33 PM UTC+1, Roberto Lublinerman
>> wrote:
>>
>> Also could you try the equivalent lamda that is not a method reference,
>> i.e
>>
>>   (parameters) -> this.processResponse(params);
>>
>> I looked at the way we construct the innerclasses corresponding to
>> lambdas and it looks ok.
>>
>> It would really help if you could narrow it down to a small reprocase
>> that I can run.
>>
>> On Sun, Oct 25, 2015 at 5:23 AM, Ignacio Baca Moreno-Torres <
>> ign...@bacamt.com> wrote:
>>
>> function ILe(a) {
>>   var b;
>>   b = Erb(PDl(a.a, 'REFXXX store'), 164);
>>   Erb(PDl(Erb(b.De(), 82), 'REFXXX store.get()'), 82);
>>   return Erb(PDl(undefined, 'REFXXX store.get().values()'), 6)
>>
>> ...
>
> --
> You received this message because you are subscribed to the Google Groups
> "GWT Contributors" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-web-toolkit-contributors/168ed0d1-7abe-4f9f-b5e2-e238dd72e329%40googlegroups.com
> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/168ed0d1-7abe-4f9f-b5e2-e238dd72e329%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit-contributors+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAPVRV7fRHJTUR4zFswOC82S%3DmH-%3DGdD3fCdFXBFVbRzbgLYE6g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to