Not sure I understood your point with the examples.  Some of the
[Bindable] code is in BaseVariableNode.java.

On 10/6/14, 4:34 PM, "Frédéric THOMAS" <webdoubl...@hotmail.com> wrote:

>
>
>
>I didn't follow the compiler path for Bindable yet even if I understand
>globally what it does but for Singleton, the key would be to pass by an
>internal Class still visible in the same package :P,
>
>And protected and final  for private classes ?
>
>public final PrivateClass {
>public function PrivateClass (privateCtor:PrivateClass ) {
>if (privateCtor!= this)
>   //ERROR
>}
>}
>
>or only thru protected (extends only):
>
>public class BaseClass {
>public function BaseClass(protectedCtor:BaseClass) {
>if (protectedCtor!= this)
>   //ERROR
>}
>}
>
> // (extends only):
>public class SubClass {
>public function SubClass (protectedCtor:SubClass ) {
>super(this);
>}
>}
>
>// public
>public class SubClass2 {
>public function SubClass2 () {
>super(this);
>}
>}
>
>Doing so we've got the same base, is this code correct ?
>
>Frédéric THOMAS
>
>> From: aha...@adobe.com
>> To: dev@flex.apache.org
>> Subject: Re: AW: [Falcon] Constructor NS (was: [Falcon] starting up)
>> Date: Mon, 6 Oct 2014 22:53:16 +0000
>> 
>> Already, the compiler knows if you do
>> 
>> [Bindable]
>> public class MyClass {
>>   public var foo:int;
>> }
>> 
>> that it should auto-generate some code, then the whole thing is handed
>> down to the reducer/emitter.  Seems like you could inject SecretToken
>>in a
>> similar way if someone did:
>> 
>> [Singleton]
>> public class MySingleton {
>> }
>> 
>> 
>> -Alex
>> 
>> On 10/6/14, 3:44 PM, "Frédéric THOMAS" <webdoubl...@hotmail.com> wrote:
>> 
>> >Actually, I guess I would find where and maybe how as I've seen it
>>while
>> >I was debugging the constructor, at emit time, but would mean to
>>generate
>> >"
>> >internal class SecretToken {}" and that I've got no idea when and how.
>> >Frédéric THOMAS
>> >
>> >> From: webdoubl...@hotmail.com
>> >> To: dev@flex.apache.org
>> >> Subject: RE: AW: [Falcon] Constructor NS (was: [Falcon] starting up)
>> >> Date: Mon, 6 Oct 2014 23:27:58 +0100
>> >> 
>> >> Hi Alex,
>> >> 
>> >> > I have no idea what the right answer is, but I was wondering if you
>> >>could
>> >> > try to describe (in AS code) what scenarios you want to support and
>> >>not
>> >> > support.  Is this just for Singletons or are there other use cases?
>> >>And
>> >> > what edge cases are allowed, if any?
>> >> 
>> >> It is not only for the singleton, for examle, at some point, I would
>> >>like to be able to do that:
>> >> [Abstract]
>> >> public class BaseClass {
>> >> 
>> >>     public static const INSTANCE:BaseClass = new BaseClass(11);
>> >> 
>> >>     private var _p:int;
>> >> 
>> >>     protected function BaseClass(p:int) {
>> >>         _p = p;
>> >>     }
>> >> 
>> >>     public function get p():int;
>> >> }
>> >> }
>> >> 
>> >> ---
>> >> 
>> >> // Error, p not implemented
>> >> public class SubClass extends BaseClass {
>> >> 
>> >>     public function SubClass() {
>> >>         super(12);
>> >>     }
>> >> }
>> >> 
>> >> ---
>> >> public class AnotherClass {
>> >> 
>> >>     public function AnotherClass() {
>> >>         const a:BaseClass = new BaseClass(13); // Error, can't
>> >>instantiate a non public ctor.
>> >>     }
>> >> }> Maybe some metadata can cause the compiler to generate different
>>AS
>> >>that
>> >> > is sufficient for your needs.  You could even change any call to
>>the
>> >> > constructor from within the Singleton source code to some other
>> >>function
>> >> > that initializes the single instance.
>> >> 
>> >> Yes, I guess we could eventually generate some ABC code to simulate
>>the
>> >>behavior, just for now, I'm not sure when and how exactly to tell the
>> >>compiler to generate that in case of private ctor, this in case of
>> >>protected, I'm just discovering it but will continue to dig into.
>> >> 
>> >> Frédéric THOMAS
>> >> 
>> >> > From: aha...@adobe.com
>> >> > To: dev@flex.apache.org
>> >> > Subject: Re: AW: [Falcon] Constructor NS (was: [Falcon] starting
>>up)
>> >> > Date: Mon, 6 Oct 2014 21:57:09 +0000
>> >> > 
>> >> > Hi Fred,
>> >> > 
>> >> > I have no idea what the right answer is, but I was wondering if you
>> >>could
>> >> > try to describe (in AS code) what scenarios you want to support and
>> >>not
>> >> > support.  Is this just for Singletons or are there other use cases?
>> >>And
>> >> > what edge cases are allowed, if any?
>> >> > 
>> >> > For example, if you have code like:
>> >> > 
>> >> > var c:Class = MySingleton;
>> >> > var instance:MySingleton = new c();
>> >> > 
>> >> > what would you want to have happen?  I¹d guess the compiler cannot
>> >>check
>> >> > it.
>> >> > 
>> >> > Similarly, are there any AS Singleton patterns that are sufficient?
>> >>Such
>> >> > as:
>> >> > 
>> >> > public class MySingleton
>> >> > {
>> >> >     public function MySingleton(secretToken:SecretToken)
>> >> >     {
>> >> >     }
>> >> > } 
>> >> > internal class SecretToken
>> >> > {
>> >> > }
>> >> > 
>> >> > Maybe some metadata can cause the compiler to generate different AS
>> >>that
>> >> > is sufficient for your needs.  You could even change any call to
>>the
>> >> > constructor from within the Singleton source code to some other
>> >>function
>> >> > that initializes the single instance.
>> >> > 
>> >> > Thanks,
>> >> > -Alex
>> >> > 
>> >> > 
>> >> > On 10/6/14, 2:33 PM, "Frédéric THOMAS" <webdoubl...@hotmail.com>
>> >>wrote:
>> >> > 
>> >> > >
>> >> > >
>> >> > >
>> >> > >Hi Gordon, Darrell, Alex,
>> >> > >
>> >> > >I've been able to work on it a bit tonight and realized that I was
>> >>wrong,
>> >> > >actually, I can get the right NS infos parsed and emitted but
>>can't
>> >>get
>> >> > >it back thru the ABCParser.
>> >> > >I've been confused because I didn't check the Qualifier NS but
>> >>instead
>> >> > >its kind which was 5 (private) as I wanted but it was actually the
>> >>one of
>> >> > >the CMImplicitNS (aka, invalid NS) and wasn,'t able to find in the
>> >>chain
>> >> > >where it has been forced as I thought having removed all the one
>> >> > >implicated in defining a ctor NS, I wonder now if the fact that
>>the
>> >>ctor
>> >> > >is not part of a trait is the cause ?
>> >> > >
>> >> > >Any way, I started to explore other possibilities, one of them is
>>to
>> >>pass
>> >> > >the NS info via MetaTag as done for go_to_definition and use this
>> >>info in
>> >> > >the semantic checker as I can't at the time of the ABC Parsing,
>>set
>> >>the
>> >> > >NS because the Metadata are checked after the methodbody and in
>>more,
>> >> > >I've got no info at this point about the super class except its
>>name
>> >> > >coming from InstanceInfo (or indirectly via IReference) but would
>> >>like to
>> >> > >think I can manage to use the MetaTag (like
>> >> > >"[constructor(ns:'protected')]  in the semantic checker, do you
>>see
>> >>any
>> >> > >problem in doing so or if there's a better place and moment to do
>>it
>> >> > >except it could be erased by the optimiser ?
>> >> > >
>> >> > >The last possibility as I didn't see any drawback yet in debugging
>> >>it in
>> >> > >the emitter, is to pass the info directly in the name at
>>FunctionNode
>> >> > >construction time and either set the NS accordingly or use this
>>info
>> >>in
>> >> > >the semantic checker,  as far as I've debugged it (didn't to the
>> >>test yet
>> >> > >but followed all the emitter chain), I didn't see any problem that
>> >>could
>> >> > >be to emit it and don't think there are any in reading it either
>> >>thru the
>> >> > >ABCParser, I would pass for example pass
>> >>"protected:MyConstructorName",
>> >> > >tweak the FunctionNode:isConstructor accordingly and remove the
>> >> > >CMImplitNS checks as I did until now, what do you think, do you
>>see
>> >>any
>> >> > >problem with this approach ?
>> >> > >
>> >> > >More over if the latter appears to be a valid option, it could be
>> >>used
>> >> > >for the method overloading.
>> >> > >
>> >> > >Thanks,
>> >> > >Frédéric THOMAS
>> >> > >
>> >> > >> Subject: Re: AW: [Falcon] Constructor NS (was: [Falcon] starting
>> >>up)
>> >> > >> From: gsmit...@hotmail.com
>> >> > >> Date: Sun, 5 Oct 2014 09:24:14 -0700
>> >> > >> To: dev@flex.apache.org
>> >> > >> 
>> >> > >> It's a bit different in that the AVM is strict about access
>> >>modifiers;
>> >> > >>you cannot use reflection to call a private method from outside
>>its
>> >> > >>class. However I know developers have wanted non-public
>> >>constructors for
>> >> > >>a long time and most won't care if they're not enforced at
>>runtime,
>> >>so I
>> >> > >>don't object to the compiler enhancement. I just wanted to
>>mention
>> >> > >>something that folks should be aware of.
>> >> > >> 
>> >> > >> Another thing to be aware of is that this mean there will be
>>source
>> >> > >>code that compiles under a Falcon that doesn't compile under the
>>old
>> >> > >>compiler. Would we change the old compiler as we'll or not
>>bother?
>> >>I'd
>> >> > >>say don't bother.
>> >> > >> 
>> >> > >> - Gordon
>> >> > >> 
>> >> > >> > On Oct 5, 2014, at 8:09 AM, "Christofer Dutz"
>> >> > >><christofer.d...@c-ware.de> wrote:
>> >> > >> > 
>> >> > >> > But in java this is not much different. Unless you explicitly
>> >>tell
>> >> > >>your Java VM to be strict, you can get a private constructor via
>> >> > >>Reflection, make this accesslible at runtime and instantiate it,
>>no
>> >> > >>matter what the source-code says. Same with the type of generics.
>> >> > >> > 
>> >> > >> > So I guess it would be a great addition to Flex to at least
>>have
>> >> > >>features checked by the compiler, even if the runtime doesn't
>> >>enforce it.
>> >> > >> > 
>> >> > >> > Chris
>> >> > >> > 
>> >> > >> > 
>> >> > >> > -----Ursprüngliche Nachricht-----
>> >> > >> > Von: Gordon Smith [mailto:gsmit...@hotmail.com]
>> >> > >> > Gesendet: Sonntag, 5. Oktober 2014 04:36
>> >> > >> > An: dev@flex.apache.org
>> >> > >> > Betreff: Re: [Falcon] Constructor NS (was: [Falcon] starting
>>up)
>> >> > >> > 
>> >> > >> > In general the ActionScript Virtual Machine enforces access
>> >>modifiers
>> >> > >>(so that, for example, something marked private is truly
>> >>inaccessible by
>> >> > >>any means outside the class) but I don't think the AVM enforces
>> >> > >>non-public constructors. I'm guessing that a constructor in the
>>ABC
>> >>is
>> >> > >>public regardless of what the source code says, which would mean
>> >>that
>> >> > >>the constructor could be invoked by any code via reflection. If
>> >>this is
>> >> > >>the case, I'm not convinced we should pretend that constructors
>>can
>> >>be
>> >> > >>non-public.
>> >> > >> > 
>> >> > >> > - Gordon
>> >> > >> > 
>> >> > >> > Sent from my iPad
>> >> > >> > 
>> >> > >> >>> On Oct 4, 2014, at 4:14 PM, "OmPrakash Muppirala"
>> >> > >><bigosma...@gmail.com> wrote:
>> >> > >> >>> 
>> >> > >> >>> On Oct 4, 2014 12:55 PM, "Frédéric THOMAS"
>> >> > >><webdoubl...@hotmail.com> wrote:
>> >> > >> >>> 
>> >> > >> >>> Hi,
>> >> > >> >>> 
>> >> > >> >>> I started to check if it was possible to have private and
>> >>protected
>> >> > >> >> constructor in Falcon and I have to admit it was tricky
>> >>especially
>> >> > >> >> because I never seen a compiler from inside before but it is
>> >> > >> >> apparently possible, I've been able to compile successfully:
>> >> > >> >>> package myLib {
>> >> > >> >>> public class CTORTest {
>> >> > >> >>>   private var _p:int;
>> >> > >> >>> 
>> >> > >> >>>   private function CTORTest(p:int) {
>> >> > >> >>>       _p = p;
>> >> > >> >>>   }
>> >> > >> >>> 
>> >> > >> >>>   private function anotherFct():CTORTest {
>> >> > >> >>>       return new CTORTest(10);
>> >> > >> >>>   }
>> >> > >> >>> }
>> >> > >> >>> }
>> >> > >> >>> and using the compiled lib:
>> >> > >> >>> 
>> >> > >> >>> <?xml version="1.0"?>
>> >> > >> >>> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
>> >> > >> >> xmlns:s="library://ns.adobe.com/flex/spark"
>> >> > >> >> creationComplete="creationCompleteHandler(event)">
>> >> > >> >>>   <fx:Script><![CDATA[
>> >> > >> >>>       import mx.events.FlexEvent;
>> >> > >> >>> 
>> >> > >> >>>       import myLib.CTORTest;
>> >> > >> >>> 
>> >> > >> >>>       private function
>> >> > >>creationCompleteHandler(event:FlexEvent):void {
>> >> > >> >>>           var a:CTORTest = new CTORTest(1);
>> >> > >> >>>       }
>> >> > >> >>>       ]]></fx:Script>
>> >> > >> >>> </s:Application>
>> >> > >> >>> 
>> >> > >> >>> gives:
>> >> > >> >>> [Fault] exception, information=VerifyError: Error #1014: La
>> >>classe
>> >> > >> >> myLib:CTORTest::CTORTest est introuvable. (not found) with
>>the
>> >> > >>legacy 
>> >> > >> >> compiler
>> >> > >> >>> and:
>> >> > >> >>> F:\sources\falconTestDrive\shell\src\Main.mxml:9
>> >> > >> >>> Erreur: Appel d'une méthode qui ne semble pas définie
>>CTORTest.
>> >> > >>(Call 
>> >> > >> >>> to
>> >> > >> >> a undefined method)
>> >> > >> >>>           var a:CTORTest = new CTORTest(1);
>> >> > >> >>> 
>> >> > >> >>> (I will customize the error message later)
>> >> > >> >>> 
>> >> > >> >>> I still need to check it works in the 3 possible ways to
>> >> > >>instantiate
>> >> > >> >>> a
>> >> > >> >> Class [1] (at the moment it works only with 1st one), check
>>that
>> >> > >>works 
>> >> > >> >> with is  / instanceOf, revisit the cast function accordingly
>>and
>> >> > >>maybe 
>> >> > >> >> other things not yet in my mind and especially check FP won't
>> >> > >>complain using it.
>> >> > >> >>> 
>> >> > >> >>> /* expression = FunctionCallID(KeywordNewID(void),
>> >>new_type_name,
>> >> > >> >> ContainerID(expression*)) */
>> >> > >> >>> /* expression = FunctionCallID(KeywordNewID(void),
>>expression,
>> >> > >> >> ContainerID(expression*)) */
>> >> > >> >>> /* expression = FunctionCallID(KeywordNewID(void),
>> >>vector_literal,
>> >> > >> >> ContainerID(void)) */
>> >> > >> >>> 
>> >> > >> >>> In case all this works and I'm far to know it at the
>>moment, I
>> >>will
>> >> > >> >>> have
>> >> > >> >> to think about implement "method overloading" otherwise I
>>can't
>> >>see
>> >> > >> >> any usage of a protected constructor and therefore will
>>probably
>> >> > >> >> require some help for the best way to implement it.
>> >> > >> >> 
>> >> > >> >> Exciting to see these kind of experiments.  A really good
>> >>usecase
>> >> > >>for 
>> >> > >> >> private constructor would be to create a Singleton class,
>>I.e a
>> >> > >>class  
>> >> > >> >> that cannot be instantiated outside of itself.  Would that be
>> >> > >> >> something you can test for?
>> >> > >> >> 
>> >> > >> >> Thanks,
>> >> > >> >> Om
>> >> > >> >> 
>> >> > >> >>> 
>> >> > >> >>> Thanks,
>> >> > >> >>> Frédéric THOMAS
>> >> > >> >>> 
>> >> > >> >>>> From: webdoubl...@hotmail.com
>> >> > >> >>>> To: dev@flex.apache.org
>> >> > >> >>>> Subject: RE: [Falcon] starting up
>> >> > >> >>>> Date: Wed, 1 Oct 2014 16:57:28 +0100
>> >> > >> >>>> 
>> >> > >> >>>> Ah ok, thanks Gordon, I was tearing my hair out :-)
>> >> > >> >>>> 
>> >> > >> >>>> Frédéric THOMAS
>> >> > >> >>>> 
>> >> > >> >>>>> Subject: Re: [Falcon] starting up
>> >> > >> >>>>> From: gsmit...@hotmail.com
>> >> > >> >>>>> Date: Wed, 1 Oct 2014 08:51:16 -0700
>> >> > >> >>>>> To: dev@flex.apache.org
>> >> > >> >>>>> 
>> >> > >> >>>>> That comment is out of date. Code Model was the part of
>> >>pre-Falcon
>> >> > >> >> Flash Builder that built an abstract syntax tree to support
>> >> > >> >> intelligent editing. We used it as the beginning of Falcon's
>> >>lexer
>> >> > >>and 
>> >> > >> >> parser. The code is just looking at the AST to see if the
>> >> > >>constructor
>> >> > >> >> has a non-public namespace.
>> >> > >> >>>>> 
>> >> > >> >>>>> - Gordon
>> >> > >> >>>>> 
>> >> > >> >>>>>> On Oct 1, 2014, at 8:33 AM, "Frédéric THOMAS" <
>> >> > >> >> webdoubl...@hotmail.com> wrote:
>> >> > >> >>>>>> 
>> >> > >> >>>>>> 
>> >> > >> >>>>>> 
>> >> > >> >>>>>> 
>> >> > >> >>>>>> 
>> >> > >> >>>>>> 
>> >> > >> >>>>>> 
>> >> > >> >>>>>> I updated it to v17.0 and check in
>> >> > >> >> falcon\compiler\generated\dist\sdk\lib\external, is there.
>> >> > >> >>>>>> 
>> >> > >> >>>>>> oops, looking better, it has both, just removed the bad
>> >>one, it
>> >> > >> >> runs.
>> >> > >> >>>>>> 
>> >> > >> >>>>>> Now, looking at
>> >> > >>internal\as\codegen\ClassDirectiveProcessor.java,
>> >> > >> >>>>>> I
>> >> > >> >> see that:
>> >> > >> >>>>>> 
>> >> > >> >>>>>> // If a constructor has a namespace as part of it's
>> >>declaration,
>> >> > >> >>>>>> it
>> >> > >> >> must be declared public.
>> >> > >> >>>>>> // It is ok to omit the namespace
>> >> > >> >>>>>> // We must check the AST, as CM treats all ctors as
>>public
>> >>no
>> >> > >> >> matter what the user typed in
>> >> > >> >>>>>> // so the FunctionDefinition will always be in the public
>> >> > >> >>>>>> namespace if( node.getActualNamespaceNode() != null &&
>> >> > >> >>>>>>      node.getActualNamespaceNode().getName() !=
>> >> > >> >> IASKeywordConstants.PUBLIC)
>> >> > >> >>>>>>  problems.add(new
>> >> > >> >> 
>>ConstructorMustBePublicProblem(node.getActualNamespaceNode()));
>> >> > >> >>>>>> 
>> >> > >> >>>>>> What is the CM or Code Model ?
>> >> > >> >>>>>> 
>> >> > >> >>>>>> Thanks,
>> >> > >> >>>>>> Frédéric THOMAS
>> >> > >> >>>>>> 
>> >> > >> >>>>>>> From: aha...@adobe.com
>> >> > >> >>>>>>> To: dev@flex.apache.org
>> >> > >> >>>>>>> Subject: Re: [Falcon] starting up
>> >> > >> >>>>>>> Date: Wed, 1 Oct 2014 13:36:50 +0000
>> >> > >> >>>>>>> 
>> >> > >> >>>>>>> Could you have an old guava.jar?
>> >> > >> >>>>>>> 
>> >> > >> >>>>>>>> On 10/1/14 4:32 AM, "Frédéric THOMAS"
>> >><webdoubl...@hotmail.com>
>> >> > >> >> wrote:
>> >> > >> >>>>>>>>
>> >> > >> >>>>>>>> Hi,
>> >> > >> >>>>>>>>
>> >> > >> >>>>>>>> I built it with ANT an ran Falcon compc.bat from the
>> >> > >> >> generated/dist/sdk,
>> >> > >> >>>>>>>> does anyone knows why I get that ?
>> >> > >> >>>>>>>>
>> >> > >> >>>>>>>> Exception in thread "main"
>>java.lang.NoClassDefFoundError:
>> >> > >> >>>>>>>> com/google/common/cache/CacheLoader
>> >> > >> >>>>>>>> at
>> >> > >> >>>>>>>>
>> >>org.apache.flex.compiler.clients.MXMLC.<init>(MXMLC.java:379)
>> >> > >> >>>>>>>> at
>> >>org.apache.flex.compiler.clients.COMPC.<init>(COMPC.java:54)
>> >> > >> >>>>>>>> at
>> >> > >> >> 
>> >> > 
>> 
>>>>>>org.apache.flex.compiler.clients.COMPC.staticMainNoExit(COMPC.java:75
>>>>>>)
>> >> > >> >>>>>>>> at
>> >>org.apache.flex.compiler.clients.COMPC.main(COMPC.java:63)
>> >> > >> >>>>>>>> Caused by: java.lang.ClassNotFoundException:
>> >> > >> >>>>>>>> com.google.common.cache.CacheLoader
>> >> > >> >>>>>>>> at
>>java.net.URLClassLoader$1.run(URLClassLoader.java:366)
>> >> > >> >>>>>>>> at
>>java.net.URLClassLoader$1.run(URLClassLoader.java:355)
>> >> > >> >>>>>>>> at java.security.AccessController.doPrivileged(Native
>> >>Method)
>> >> > >> >>>>>>>> at
>> >>java.net.URLClassLoader.findClass(URLClassLoader.java:354)
>> >> > >> >>>>>>>> at
>>java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>> >> > >> >>>>>>>> at
>> >> > >> >>>>>>>>
>> >>sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
>> >> > >> >>>>>>>> at
>>java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>> >> > >> >>>>>>>> ... 4 more
>> >> > >> >>>>>>>>
>> >> > >> >>>>>>>> Thanks,
>> >> > >> >>>>>>>> Frédéric THOMAS
>> >> > >> >>> 
>> >> > >
>> >> > >                                       
>> >> > 
>> >>                                     
>> >                                      
>> 
>
>                                         

Reply via email to