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.