Hej !
How can I return a macro new $myTypePath();
while this one is private please ?
I’ve tried using @:allow( my.pack.FooClass.new )
without success.
Thanks
Hej !
How can I return a macro new $myTypePath();
while this one is private please ?
I’ve tried using @:allow( my.pack.FooClass.new )
without success.
Thanks
You mean you have a private class
?
Those are not visible from another file at all, and even from the same file it doesn’t work in metas like allow.
Is the code returned from the macro added in the same file as the private class?
No, the class is public but the constructor is private.
Easier in that case.
@:allow
should go on the private function with the argument being the class which calls it, maybe you did the other way around?
You could also use macro @:privateAccess new $myTypePath();
.
Thanks Valentin,
I just confused @:allow with @:privateAccess
And it was not @:allow but @:access…
BTW, why @:access didn’t work here please ?
In your case @:allow
should be placed on the private constructor and should reference a symbol, which you want to allow access to the constructor.
And @:access
is the opposite: place it on the symbol and reference the constructor.
Yes Aleksandr, that what I wrote, I used @:access and not @:allow.
And then, I ask BTW, why this : @:allow( my.pack.FooClass.new )
didn’t work ?
In this return macro @:access( my.pack.FooClass.new ) new $myTypePath();
Because you need access here, allow goes on the private constructor to whitelist the places which can ignore the private modifier.
Sorry, I wrote too fast : I used “access” and not “allow” ! And with access it didn’t work !
I’m sorry, I melanged-the-pinceaux lol
Because @:allow
and @:access
are metas to be used on class fields or types.
While @:privateAccess
is a meta to be used on expression level.
Ok, thanks, now I understand… It’s hard sometimes to know which meta goes on expression level and which one not
© 2018-2020 Haxe Foundation - Powered by Discourse