On 01/22/2018 12:18 PM, Alan Bateman wrote:
On 22/01/2018 09:58, Peter Levart wrote:
:

The 2nd problem is not trivial as you want to access a protected member on behalf of some other sub-class of the member's declaring class which is not cooperating (voluntarily handing you an instance of its Lookup object). This currently requires the package containing the member's declaring class to be opened at least to you (the Rexx interpreter) and using the member.setAccessible(true) trick or MethodHandles.privateLookupIn(declaringClass) equivalent for method handles. Which is awkward because libraries packed as modules would normally not specify that in their module descriptors and system modules don't either. So you are left with either --add-opens command line switches or deploying a javaagent to the JVM and using it's API point java.lang.instrument.Instrumentation#redefineModule to add opens to modules that way. Both approaches are not elegant, but that's what is currently available, I think.

I suspect it may be just a misunderstanding. One of Rony's mails had this example:

o=.bsf~new("mtest3.Class03A")             -- create Java object, get and assign proxy ooRexx object say "o:" o "o~myClassName:" o~myClassName -- get (static) field value in "mtest1.Class01A", accessible via inheritance

I read this as the Rexx script doing the equivalent of "new mtest3.Class03A()", in which case should be no expectation that protected members are accessible to the Rexx code.

-Alan.

I was asking myself the same question, yes. If Rony wants to call protected methods on "behalf" of subclasses, then Rexx runtime has to have features to subclass existing Java classes.

@Rony: So why does Rexx script want to call protected members? Is that because Rexx can extend existing Java classes?

Regards, Peter

Reply via email to