Josh,

Thank you so much for such detailed analysis of my issue. I will look into
potential solution. I agree it is not a blocker.

Piotr

pon., 15 maj 2023 o 23:05 Josh Tynjala <joshtynj...@bowlerhat.dev>
napisał(a):

> Based on some further investigation, it looks like the Royale compiler
> knows how to implement the JS IEventDispatcher API in generated .js files
> only. When those .js files are included in a SWC file, the binary part of
> the SWC file that is used for type checking and IDE support will always be
> generated with the SWF IEventDispatcher API. That's where the conflict
> comes from.
>
> This does not appear to me to be a regression, but how it has always
> worked. We may want to provide a way to generate both APIs in SWC binary
> code, but I would say that's for a future release.
>
> In Royale framework code, it looks like there are two ways to manually
> handle bindable beads.
>
> 1) Extend DispatcherBead. It looks like a lot of bead classes do this.
>
> 2) Manually implement IEventDispatcher, with the different signatures
> conditionally compiled with COMPILE::SWF and COMPILE::JS. This is much less
> common, but it is used in a couple of places.
>
> In both cases, the compiler won't generate any IEventDispatcher code for
> bindable properties because the beads will already be event dispatchers.
>
> The first option is most common, but not always possible when another is
> superclass already being used. The second option where the interface is
> manually implemented happens in these two bead:
>
> a) In Jewel, a manual IEventDispatcher implementation is used in
> ArrayListSelectionModel.
> b) In Spark, a manual implementation is used in LayoutBase.
>
> In the case of Jewel's TileHorizontalLayout, if you wanted to avoid
> manually implementing IEventDispatcher, the Core version of LayoutBase
> would need to extend DispatcherBead. However, I don't think this would be
> considered PAYG, which Core is expected to follow more strictly than Jewel,
> so there's no way to use DispatcherBead with Jewel's TileHorizontalLayout.
> TileHorizontalLayout probably needs a manual implementation of
> IEventDispatcher. Or possibly SimpleHorizontalLayout or StyledLayoutBase
> instead, depending on how strict you want to be with PAYG in Jewel. For the
> least impact and most PAYG, you should manually implement IEventDispatcher
> directly on TileHorizontalLayout.
>
> (In my opinion, this is not a release blocker. I'm just letting you know
> what I found in my investigation, and my advice for fixing it.)
>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>
>
> On Mon, May 15, 2023 at 1:13 PM Josh Tynjala <joshtynj...@bowlerhat.dev>
> wrote:
>
> > > Does anyone have any idea what has happened here ? Why
> > TileHorizontalLayout
> > > after compilation to TileHorizontalLayout.js have all of these methods
> ?
> >
> > TileHorizontallayout has [Bindable] metadata on some properties. If
> > anything in a class is marked as [Bindable], and that class (or a
> > superclass) does not already extend EventDispatcher (or implement
> > IEventDispatcher), the compiler will automatically generate an
> > implementation of IEventDispatcher. This is true in Royale, and it was
> also
> > true in Flex.
> >
> > Here are the classes that TileHorizontalLayout is a subclass of:
> > TileHorizontalLayout extends SimpleHorizontalLayout extends
> > StyledLayoutBase extends LayoutBase extends Bead
> >
> > There are also the following interfaces in the type hierarchy:
> > ILayoutStyleProperties, IBeadLayout, IBead
> >
> > Nowhere in this chain of classes is there an EventDispatcher or
> > IEventDispatcher. So the compiler is generating its own implementation of
> > IEventDispatcher.
> >
> > Unfortunately, it seems to be generating an implementation of the methods
> > from the SWF version of IEventDispatcher instead of the methods from the
> JS
> > version of IEventDispatcher. I don't believe that I have worked with the
> > part of the Royale compiler that generates code for bindable
> > classes/properties before, so I don't know why it would be doing that.
> > However, that seems like a bug. Maybe not necessarily in the compiler. It
> > could be that the compiler options used by the JewelJS build are wrong.
> >
> > Note: I don't think that the compiler is incorrectly using the Spark
> > version of LayoutBase instead of the Core version of LayoutBase. This can
> > be explained without the Spark version of LayoutBase being involved in
> any
> > way.
> >
> > --
> > Josh Tynjala
> > Bowler Hat LLC <https://bowlerhat.dev>
> >
> >
> > On Mon, May 15, 2023 at 5:14 AM Piotr Zarzycki <
> piotrzarzyck...@gmail.com>
> > wrote:
> >
> >> Hi Guys,
> >>
> >> I have voted +1, but I have found one issue which concerns me a little
> >> bit.
> >> I have need of usage in my application
> >> -> org.apache.royale.jewel.beads.layouts.TileHorizontalLayout. I have
> made
> >> my own custom class which extends that one. To my big surprise I got
> >> following compilation error:
> >>
> >>  Error: interface method addEventListener in interface IEventDispatcher
> is
> >> implemented with an incompatible signature in class
> >> ExtendedTileHorizontalLayout
> >> : Error: interface method removeEventListener in interface
> >> IEventDispatcher
> >> is implemented with an incompatible signature in class
> >> ExtendedTileHorizontalLayout
> >> : Error: interface method dispatchEvent in interface IEventDispatcher is
> >> implemented with an incompatible signature in class
> >> ExtendedTileHorizontalLayout
> >>
> >> I have looked into TileHorizontalLayout in Moonshine and I see there
> >> signature methods -> https://prnt.sc/crcNcuFHgu-8
> >>
> >> Look int signatures dispatchEvent, hasEventListener, removeEventListener
> >> and addEventListener - they are all missing fields name. This is
> >> definitely
> >> wrong, but I think all of these methods shouldn't even exists in
> >> frameworks/js/libs/JewelJS.swc -> TileHorizontalLayout.
> >>
> >> TileHorizontalLayout extends several classes, one of them
> >> is org.apache.royale.core.LayoutBase - non of these classes have
> anywhere
> >> inside methods dispatchEvent, hasEventListener etc. However there is
> >> another class in completely different
> >> package spark.layouts.supportClasses.LayoutBase - that one have these
> >> methods implemented exactly in the same way as my
> TileHorizontalLayout.js
> >> have.
> >>
> >> Does anyone have any idea what has happened here ? Why
> >> TileHorizontalLayout
> >> after compilation to TileHorizontalLayout.js have all of these methods ?
> >>
> >> Thanks,
> >> Piotr
> >>
> >>
> >> niedz., 14 maj 2023 o 03:29 Maria Jose Esteve <mjest...@iest.com>
> >> napisał(a):
> >>
> >> > Hi,
> >> > I keep testing the automated compilation option [1] the compilation
> gave
> >> > me error ☹.
> >> > I have left the log of the compilation here [2] but I attach the
> error:
> >> >
> >> > <<<<<<<
> >> > ...
> >> >         main:
> >> >         Copying 1 file to
> >> >
> >>
> D:\Develop_Royale\Projects\Royale-SDK\0.9.10\apache-royale-0.9.10-src\royale-asjs\examples\native\USStatesMap\bin\js-debug
> >> >         Copying 1 file to
> >> >
> >>
> D:\Develop_Royale\Projects\Royale-SDK\0.9.10\apache-royale-0.9.10-src\royale-asjs\examples\native\USStatesMap\bin\js-release
> >> >
> >> >         main:
> >> >
> >> >         build_maven:
> >> >         Path is C:\Program Files (x86)\Common
> >> > Files\Oracle\Java\javapath;D:\Apache;C:\Program
> >> >
> >>
> Files\Java\jdk1.8.0_281\bin;D:\Apache\apache-ant-1.10.13\bin;D:\Apache\apache-maven-3.9.1\bin;D:\app\client\hiedra\product\19.0.0\client_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program
> >> > Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program
> >> >
> >>
> Files\dotnet\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program
> >> > Files\Git\cmd;C:\Users\hiedra\AppData\Local\Programs\Microsoft VS
> >> > Code;C:\Program Files\Microsoft SQL Server\Client
> >> > SDK\ODBC\170\Tools\Binn\;C:\Program
> >> > Files\PowerShell\7-preview\preview;C:\Program Files
> >> >
> >>
> (x86)\Yarn\bin\;D:\Apache\HaxeToolkit\haxe;D:\Apache\HaxeToolkit\neko;C:\Program
> >> > Files\nodejs\;C:\Program Files (x86)\Intel\Intel(R) Management Engine
> >> > Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine
> >> > Components\DAL;C:\Program Files (x86)\Pulse
> >> > Secure\VC142.CRT\X64\;C:\Program Files (x86)\Pulse
> >> > Secure\VC142.CRT\X86\;C:\Program Files\Microsoft SQL
> >> > Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL
> >> > Server\130\Tools\Binn\;C:\Program Files
> >> >
> >>
> (x86)\GnuPG\bin;C:\Users\hiedra\AppData\Local\Microsoft\WindowsApps;C:\Users\hiedra\AppData\Local\GitHubDesktop\bin;C:\Users\hiedra\.dotnet\tools;C:\Users\hiedra\AppData\Local\Microsoft\WindowsApps;C:\Users\hiedra\AppData\Local\Programs\Microsoft
> >> > VS
> >> >
> >>
> Code\bin;C:\Users\hiedra\AppData\Local\Yarn\bin;C:\Users\hiedra\AppData\Roaming\npm
> >> >
> >> >         BUILD FAILED
> >> >
> >> > D:\Develop_Royale\Projects\Royale-SDK\0.9.10\ApproveRoyale.xml:796:
> The
> >> > following error occurred while executing this line:
> >> >
> >> > D:\Develop_Royale\Projects\Royale-SDK\0.9.10\ApproveRoyale.xml:809:
> exec
> >> > returned: 1
> >> >
> >> >         Total time: 39 minutes 52 seconds
> >> > >>>>>>>
> >> >
> >> > The error occurs in the Maven compilation task (it's in the path,
> could
> >> it
> >> > be because of the maven version?):
> >> >
> >> > >>>>>>>
> >> > ...
> >> >     <target name="build_maven">
> >> >         <condition property="compiler_mvn_profiles"
> >> > value="-Poption-with-swf"
> >> >             else="-Ddummy=true">
> >> >             <isset property="env.AIR_HOME" />
> >> >         </condition>
> >> >         <condition property="asjs_mvn_profiles"
> >> > value="-Pwith-examples,with-distribution,option-with-swf"
> >> >             else="-Pwith-examples,with-distribution">
> >> >             <isset property="env.AIR_HOME" />
> >> >         </condition>
> >> >         <echo>Path is ${env.Path}</echo>
> >> >
> >> > -- >>>        <exec executable="${mvn}" dir="${basedir}/${
> >> > maven.package.url.name}/royale-compiler" failonerror="true"
> >> > inputstring="Yes">
> >> >             <arg value="clean" />
> >> >             <arg value="${compiler_mvn_profiles}" />
> >> >             <arg value="install" />
> >> >         </exec>
> >> >         <exec executable="${mvn}" dir="${basedir}/${
> >> maven.package.url.name}/royale-typedefs"
> >> > failonerror="true" >
> >> >             <arg value="clean" />
> >> >             <arg value="install" />
> >> >         </exec>
> >> >         <exec executable="${mvn}" dir="${basedir}/${
> >> maven.package.url.name}/royale-asjs"
> >> > failonerror="true" inputstring="Yes">
> >> >             <arg value="clean" />
> >> >             <arg value="${asjs_mvn_profiles}" />
> >> >             <arg value="install" />
> >> >         </exec>
> >> >     </target>
> >> > ...
> >> > <<<<<<<
> >> >
> >> > I have a question about licenses... Yishay has no anomalies in this
> >> regard
> >> > but I have an unapproved license:
> >> >         Unapproved licenses:
> >> >
> >> >
> >>
> D:/Develop_Royale/Projects/Royale-SDK/0.9.10/apache-royale-0.9.10-bin-js-swf/royale-asjs/js/lib/royaleunit/dom4j-LICENSE.txt
> >> > How can I fix it?
> >> >
> >> > [1]
> >> >
> >>
> https://dist.apache.org/repos/dist/dev/royale/0.9.10/rc4/ApproveRoyale.xml
> >> > y ejecutando el script:
> >> >    ant -e -f ApproveRoyale.xml -Drelease.version=0.9.10 -Drc=4
> >> > [2]
> >> >
> >>
> https://drive.google.com/file/d/1jCgS51cgtRSSuh11UJUxzdEaburpDdpF/view?usp=share_link
> >> >
> >> > Hiedra
> >> >
> >> > -----Mensaje original-----
> >> > De: Yishay Weiss <yishayj...@hotmail.com>
> >> > Enviado el: sábado, 13 de mayo de 2023 19:36
> >> > Para: dev@royale.apache.org
> >> > Asunto: [DISCUSS] Release Apache Royale 0.9.10 RC4
> >> >
> >> > This is the discussion thread.
> >> >
> >>
> >>
> >> --
> >>
> >> Piotr Zarzycki
> >>
> >
>


-- 

Piotr Zarzycki

Reply via email to