Question ad #AwkwardStrongEncapsulation (Re: Moving the changes in jake to jdk9/dev
Rony G. Flatscher
Rony.Flatscher at wu.ac.at
Tue Dec 13 18:07:38 UTC 2016
On 13.12.2016 16:56, Alan Bateman wrote:
> On 13/12/2016 15:47, Rony G. Flatscher wrote:
>
>> :
>>
>> So the current code does not take protected members into account. If protected members (cf. Alex'
>> comment) get added, wouldn't e.g. java.lang.reflect.Method.invoke(...) or
>> java.lang.reflect.Field.get(...) be the place to check in the next step, throwing an
>> IllegalAccessException if the object is not instantiated from a subclass of the class the protected
>> method to invoke or protected Field to get is defined?
>>
> If you mean you are asking for setAccessible(true) to succeed but still do the access check then
> it will cause a lot of complications.
>
> So I'm curious, are you calling setAccessible on protected members that you do have access or not?
> If you do have access (you are in the same package or a sub-type) then you don't need to call
> setAccessible. On the other hand, if you are looking to use the AccessibleObject to get into a
> different subtype then you are out of luck, the package needs to be open to you to do that.
The reason for the question is a language binding (to IBM's Object Rexx in the open-sourced form
called open Object Rexx, ooRexx, and heavily improved since in the hands of the Rexx Language
Assocation, www.rexxla.org) to Java that I have created 2000 (yup, quite some time) using Apache's
Bean scripting framework BSF (rooted in another open-source project at IBM) and have constantly
improved since then. The ooRexx Java bridge is available for Windows, Linux and MacOSX.
ooRexx is an interpreted language implemented in C++, the bridge to Java is realized via JNI and a
Java framework. It allows proxying Java objects with Rexx objects (no strong typing, caseless, quite
a few Smalltalk concepts, sending ooRexx messages cause the appropriate Java classes, members to be
looked up, methods to be invoked on behalf of the Rexx program), and proxying Rexx objects with Java
objects (causing Java method invocations to result in sending appropriate Rexx messages to the
proxied Rexx objects), including the ability to implement Java interface or abstract classes in
ooRexx (i.e. implement the abstract methods with ooRexx methods). The fact that ooRexx is based on
classic Rexx carrying forward the Rexx philosophy of "human-centricness" in its design makes it an
easy to learn language, yet a powerful one, which allows me at a Business Administration University
to teach oo-programming from zero knowledge to becoming able to interact and exploit Windows-OLE, C#
and then Java within one (sic!) semester with a four hour class. The Java support is intentionally
used to teach and demonstrate that it is rather easy to create applications, that do not lock-in
businesses into specific operating systems. ooRexx "surfing Java" allows one to do the same thing:
create applications that are open on all major operating system platforms by virtue of exploiting
Java under the covers.
To make a long story short: I have always adhered to the Java rules for the Rexx users, in that they
are only allowed to access public Java classes, public fields and public methods ("there must be a
reason why the Java language has defined these rules" :) ). The exception are protected members of a
Java class that are accessed via instances of subclasses (maybe even created for ooRexx on the fly
at runtime) in order to adhere to the Java model as close as possible. So the classic Java
reflection (BSF4Rexx the initial Rexx-Java bridge worked even with Java 1.1.8, sic!, on OS/2)
mechanism is really at the heart of this implementation, hence the question.
---rony
P.S.: Even if it is the first time you might have heard of Rexx/ooRexx do not mistake that with
Rexx/ooRexx not being deployed in quite a few large shops on quite a large scale in addition. For me
a great value lies in ooRexx easy syntax that allows me to teach it and the oo concepts faster than
in any other programming language that I have experimented with in the past 25 years with Business
Administration students.
More information about the jigsaw-dev
mailing list