the bug here has been for long time already,
sometimes SDM woks, sometimes not and yo have to rebuild with temp-clean
this is not C++ compiler
суббота, 17 декабря 2016 г., 4:24:31 UTC+3 пользователь Nándor Előd Fekete
написал:
>
> Well, yes, of course, I can always start from scratch, but that's around
> 3+ minutes (it's a bigger project), which is worse than what I currently
> do, "touching" the Java source file that the compiler is having problem
> generating correct code for. The biggest problem is that it's breaking my
> workflow, and I'd rather spend some time finding a probable bug in the
> compiler itself and give back to the community by fixing it than constantly
> working around the issue.
>
> On Saturday, December 17, 2016 at 2:11:09 AM UTC+1, Kirill Prazdnikov
> wrote:
>>
>> mvn clean and clean temp folder before compile will help
>>
>>
>> суббота, 17 декабря 2016 г., 0:49:30 UTC+3 пользователь Nándor Előd
>> Fekete написал:
>>>
>>> Hi!
>>>
>>> I have this strange problem in SDM, where a method in the generated
>>> output JS gets defined under a name, but gets referenced under another name.
>>>
>>> I'll try to show it through actual compiled JS code vs original code.
>>>
>>> function *getBoundingClientRect_3_g$*(this$static_0_g$,
>>> withinOffsetParent_0_g$){
>>> $clinit_ElementOverlayMixin_0_g$();
>>> var deltaX_0_g$, deltaY_0_g$, offsetParent_0_g$, parentBCR_0_g$;
>>> offsetParent_0_g$ = $getOffsetParent_0_g$(this$static_0_g$);
>>> if (is_4_g$(offsetParent_0_g$)) {
>>> parentBCR_0_g$ =
>>> *$getBoundingClientRect_2_g$*(as_58_g$(offsetParent_0_g$),
>>> true);
>>> deltaY_0_g$ = $getScrollTop_0_g$(offsetParent_0_g$) -
>>> parentBCR_0_g$.getTop_15_g$();
>>> deltaX_0_g$ = $getScrollLeft_0_g$(offsetParent_0_g$) -
>>> parentBCR_0_g$.getLeft_16_g$();
>>> }
>>> else {
>>> deltaY_0_g$ = getScrollTop_4_g$();
>>> deltaX_0_g$ = getScrollLeft_6_g$();
>>> }
>>> return
>>> withinOffsetParent_0_g$?$getBoundingClientRect_1_g$(this$static_0_g$).translated_1_g$(deltaX_0_g$,
>>>
>>> deltaY_0_g$):$getBoundingClientRect_1_g$(this$static_0_g$);
>>> }
>>> getBoundingClientRect_3_g$.displayName =
>>> 'ElementOverlayMixin.$getBoundingClientRect';
>>>
>>>
>>> This is the original Java source of the method:
>>>
>>> public final ClientRect *getBoundingClientRect*(boolean
>>> withinOffsetParent) {
>>> float deltaY;
>>> float deltaX;
>>> Element offsetParent = getOffsetParent();
>>> if (Element.is(offsetParent)) {
>>> ClientRect parentBCR = ElementOverlayMixin.as(offsetParent).
>>> *getBoundingClientRect*(true);
>>> deltaY = offsetParent.getScrollTop() - parentBCR.getTop();
>>> deltaX = offsetParent.getScrollLeft() - parentBCR.getLeft();
>>> } else {
>>> deltaY = Window.getScrollTop();
>>> deltaX = Window.getScrollLeft();
>>> }
>>> return withinOffsetParent ? getBoundingClientRect().translated(deltaX,
>>> deltaY) : getBoundingClientRect();
>>> }
>>>
>>> I've highlighted the important parts with bold+red/green. Note that it's
>>> a recursive method invoking itself on another object. In the generated
>>> output, the name of the function in the function declaration and the name
>>> used while referring to the same function is different.
>>>
>>> After a "touch" on the source code file, the compiler now generates the
>>> correct JS output:
>>>
>>> function *$getBoundingClientRect_2_g$*(this$static_0_g$,
>>> withinOffsetParent_0_g$){
>>> $clinit_ElementOverlayMixin_0_g$();
>>> var deltaX_0_g$, deltaY_0_g$, offsetParent_0_g$, parentBCR_0_g$;
>>> offsetParent_0_g$ = $getOffsetParent_0_g$(this$static_0_g$);
>>> if (is_4_g$(offsetParent_0_g$)) {
>>> parentBCR_0_g$ =
>>> *$getBoundingClientRect_2_g$*(as_58_g$(offsetParent_0_g$),
>>> true);
>>> deltaY_0_g$ = $getScrollTop_0_g$(offsetParent_0_g$) -
>>> parentBCR_0_g$.getTop_15_g$();
>>> deltaX_0_g$ = $getScrollLeft_0_g$(offsetParent_0_g$) -
>>> parentBCR_0_g$.getLeft_16_g$();
>>> }
>>> else {
>>> deltaY_0_g$ = getScrollTop_4_g$();
>>> deltaX_0_g$ = getScrollLeft_6_g$();
>>> }
>>> return
>>> withinOffsetParent_0_g$?$getBoundingClientRect_1_g$(this$static_0_g$).translated_1_g$(deltaX_0_g$,
>>>
>>> deltaY_0_g$):$getBoundingClientRect_1_g$(this$static_0_g$);
>>> }
>>>
>>> $getBoundingClientRect_2_g$.displayName =
>>> 'ElementOverlayMixin.$getBoundingClientRect';
>>>
>>> I'm using incremental mode, but I think it happened on the first
>>> compilation too with all previous compilation caches cleared.
>>>
>>> Do you guys have any tips on where to look in the compiler code where
>>> the method name handling / mangling happens?
>>>
>>> Many thanks!
>>>
>>> Nandi.
>>>
>>>
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.