SDM expects that classes/interfaces get generated as a whole either all of
it or none. As you know, class literals are not really part of the class
but they are field in a separate synthetic class). Even SDM (with all
optimizations off, no pruning at UnifyAST) if a reference to the class
literal is not seen when generating the JS for the class then its class
literal field wont be part of the JS for the class.

For SDM it could only happen for interfaces (and maybe primitive types)
because GwtAstBuilder will synthezise a getClass for each class containing
reference to its class literals.

The problem is further obscured because we (re)generate an epilogue each
time and it contains all the class literals that are referenced from the
code that is being recompiled whose classes where not part of the current
compile. This serves a purpose in NON SDM where if only the class literal
for a class is referenced, the class can be pruned.

The only glitch remaining is that in SDM there might be duplicated class
literals (but it should not affect the correctness). Is this an issue for
Closure?

On Tue, Jun 9, 2015 at 9:48 AM, 'Ray Cromwell' via GWT Contributors <
google-web-toolkit-contributors@googlegroups.com> wrote:

> Chris,
>   My change actually fixed a bug which may have obscured a problem. There
> were duplicate class literals being generated. So you'd get
> InterfaceFoo.class twice in the output, and it may be in SDM you'd be
> covered, but in regular compiled mode you'd get the duplicates which were
> causing closure compiler issues.
>
>  Roberto,  Maybe this is an issue with
> ControlFlowRecorder/RapidTypeAnalyzer and interface literals?
>
>
> On Tue, Jun 9, 2015 at 9:43 AM, 'Chris DiGiano' via GWT Contributors <
> google-web-toolkit-contributors@googlegroups.com> wrote:
>
>> @Ray, rolling back your change indeed fixed the problem (
>> https://gwt-review.googlesource.com/#/c/12311/). How do you recommend we
>> proceed? Anything I can do to help?
>>
>> @Roberto, thanks for your suggestion, but I had already tried restarting
>> the code server and clearing the cache. This did not fix things.
>>
>> Chris
>>
>> On Mon, Jun 8, 2015 at 6:55 PM 'Roberto Lublinerman' via GWT Contributors
>> <google-web-toolkit-contributors@googlegroups.com> wrote:
>>
>>> This might be due to the way we handle class literals. Class literals
>>> for interfaces if not referenced during the initial compile might cause
>>> that error. The error should go aways if you restart SDM.
>>>
>>> The offending sequence is
>>>
>>> 0) Suppose initially you have (interface A, class B and class C) and
>>> start SDM.
>>> 1) Now edit class B to add a reference to A.class and recompile with SDM
>>> (do not touch A at this time nor anything that makes it recompile) . This
>>> should work fine because the literals that are referenced but whose classes
>>> where not part of this compile will be generated in the epilogue.
>>> 2) Now edit class C in any way that does not make B or A recompile. Here
>>> you will have an error like the one you described.
>>>
>>> If you restart SDM at this point it should work.
>>>
>>> I'll get a fix for this tomorrow.
>>>
>>>
>>>
>>>
>>> On Mon, Jun 8, 2015 at 3:23 PM, 'Ray Cromwell' via GWT Contributors <
>>> google-web-toolkit-contributors@googlegroups.com> wrote:
>>>
>>>> Ooops, wrong pointer (for external users) This one
>>>> https://gwt-review.googlesource.com/#/c/12311/
>>>>
>>>>
>>>> On Mon, Jun 8, 2015 at 3:14 PM, Ray Cromwell <cromwell...@google.com>
>>>> wrote:
>>>>
>>>>> Try rolling back this CL and see if it fixes it (
>>>>> https://critique.corp.google.com/#review/92873682/depot/google3/third_party/java_src/gwt/svn/trunk/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
>>>>> )
>>>>>
>>>>>
>>>>> On Mon, Jun 8, 2015 at 3:04 PM, Chris DiGiano <d...@google.com> wrote:
>>>>>
>>>>>> I'm having trouble referencing a JsType interface when running under
>>>>>> superdevmode. I'm trying to pass the JsType as a class reference to a
>>>>>> method that uses the class to coerce the results into the expected type:
>>>>>>
>>>>>>     myelement.getCustomStampedElement("dialog",
>>>>>> PolymerDialog.class).open();
>>>>>>
>>>>>> Unfortunately, in superdevmode (and only in SDM) I get this error:
>>>>>>
>>>>>>     Uncaught ReferenceError:
>>>>>> Lcom_google_ccc_groups_rosters_frontend_polymer_jstype_PolymerDialog_2_classLit_0_g$
>>>>>> is not defined
>>>>>>
>>>>>> PolymerDialog is declared like this:
>>>>>>
>>>>>> @JsType
>>>>>> public interface PolymerDialog {
>>>>>>   void open();
>>>>>> }
>>>>>>
>>>>>> and getCustomStampedElement is defined like this:
>>>>>>
>>>>>>     /**
>>>>>>      * Returns the element specified in this custom element's
>>>>>> template that matches the given id
>>>>>>      * with the result coerced to a non-vanilla element type.
>>>>>> Equivalent to Polymer's $ function.
>>>>>>      *
>>>>>>      * @see
>>>>>>      *     <a href="
>>>>>> https://www.polymer-project.org/1.0/docs/devguide/local-dom.html#node-finding
>>>>>> ">
>>>>>>      *     Polymer automatic node finding</a>
>>>>>>      */
>>>>>>     <T> T getCustomStampedElement(String id, Class<T> type);
>>>>>>
>>>>>> It appears that the PolymerDialog JsType is being left out of the
>>>>>> list of class literals available in superdevmode. Is this a bug? Any 
>>>>>> ideas
>>>>>> for workarounds?
>>>>>>
>>>>>> Chris DiGiano
>>>>>>
>>>>>>  --
>>>>>> 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/9826758e-1b0f-4797-8902-738a1fade037%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/9826758e-1b0f-4797-8902-738a1fade037%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/CAPVRV7fZhv0AkiPYqfM2WWaW8zFvdgk-BYEucwRP8k4ewXEp6w%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAPVRV7fZhv0AkiPYqfM2WWaW8zFvdgk-BYEucwRP8k4ewXEp6w%40mail.gmail.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/CAC7T7gk_U85%2B6z1QK9XpAKEXbBJgviBfZ1j0kgE8_pYZsV6Y3g%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAC7T7gk_U85%2B6z1QK9XpAKEXbBJgviBfZ1j0kgE8_pYZsV6Y3g%40mail.gmail.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/CAHbZCdNJ6mBv%2BRwso0z_OSNF7531b9rSOgLE3zJ%3DvB7FxkFD0A%40mail.gmail.com
>> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAHbZCdNJ6mBv%2BRwso0z_OSNF7531b9rSOgLE3zJ%3DvB7FxkFD0A%40mail.gmail.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/CAPVRV7cU1HQb6Ns2U967CxuomGHvxxGt6YtmJxaOea6n8X_poQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAPVRV7cU1HQb6Ns2U967CxuomGHvxxGt6YtmJxaOea6n8X_poQ%40mail.gmail.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/CAC7T7gmQh2YnD7nUcJ8UtEn7eAaWik1Ya%2BmwDEQNz-De%2Bm4UVQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to