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 <
[email protected]> 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 <
>> [email protected]> 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 [email protected].
> 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 [email protected].
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