RFR: 8234959: FXMLLoader does not populate ENGINE_SCOPE Bindings with FILENAME and ARGV
Rony G.Flatscher
github.com+60214806+ronyfla at openjdk.java.net
Tue Feb 25 13:33:10 UTC 2020
On Sun, 23 Feb 2020 14:54:32 GMT, Rony G. Flatscher <github.com+60214806+ronyfla at openjdk.org> wrote:
>> …9: FXMLLoader does not populate ENGINE_SCOPE Bindings with FILENAME and ARGV
>
> OK, forgot to submit an explanatory text related to this fix. Posted [1] which explains the problem and the suggested solution for discussion.
>
> - This pull request relates to: <https://bugs.openjdk.java.net/browse/JDK-8234959>
>
> - Brief background: the controller code for a FXML file can be written in
> any of the Java script languages that implement the javax.script framework
> introduced with Java 6
>
> There are three possible types of script code definitions possible in fxml files:
>
> 1. in an empty script element where the source attribute denotes an external file
> that contains the code, e.g.:
>
> <fx:script source="somescript.rex" />
>
> This pull request uses the source attribute value as the filename.
>
> There are no arguments to be supplied.
>
> 2. text of a script element, e.g.:
>
> <fx:script>say 'code executed at:' .dateTime~new </fx:script>
>
> or:
>
> <fx:script><![CDATA[say 'code executed at:' .dateTime~new ]]></fx:script>
>
> This pull request uses the fxml-filename appended with the string
> "-script_starting_at_line_" and the starting line number of the code.
>
> There are no arguments to be supplied.
>
> Reasonings:
>
> - in the case that multiple fxml files employ script code it is important
> to learn the name of the fxml file that hosts the code that gets executed
>
> - the dash after the fxml filename is meant to ease parsing
>
> - in the case that there are multiple fx:script elements in a fxml file
> with inline code it is important to learn in which line the code starts
> that gets executed
>
> - the decorated filename thereby becomes self documentary and unambiguous to
> the script code developer when debugging
>
>
> 3. PCDATA text in an event attribute which by convention starts with "on", e.g. "onAction":
>
> <fx:button text="Hi!" onAction="say 'click at:' .dateTime~new', event='arg(1)~toString" />
>
> This pull request uses the fxml-filename appended with a dash "-", appended with the
> name of the event attribute, the string "_attribute_in_element_ending_at_line_" and
> the ending line number of the element.
>
> In the ScriptEventHandler constructor the decorated filename gets stored in addition
> to the script and the scriptEngine.
>
> Each time the event fires the event object argument will be stored in a copy of the
> engineBindings with the index EVENT_KEY as well as with a single capacity Object array
> stored with the index ScriptEngine.ARGV and the filename with the index
> ScriptEngine.FILENAME. The script's evaluation will get this engineBindings as
> its ENGINE_SCOPE Bindings supplied.
>
> Reasonings:
>
> - in the case that multiple fxml files employ script code it is important
> to learn the name of the fxml file that hosts the event code that gets
> executed
>
> - the dash after the fxml filename is meant to ease parsing
>
> - in the case that there are multiple event attributes in elements
> in a fxml file it is important to learn which event attribute in which
> element hosts the event script code that gets executed
>
> - the decorated filename thereby becomes self documentary and unambiguous to
> the script code developer when debugging
>
> - the structural change to the constructor (adding the decorated filename as
> a third argument) of the private static ScriptEventHandler class is confined
> to the FXMLLoader class and has no side effects
>
> [1] "Ad suggested test unit for 'JDK-8234959 FXMLLoader does not populate ENGINE_SCOPE Bindings with FILENAME and ARGV'": <https://mail.openjdk.java.net/pipermail/openjfx-dev/2020-February/025104.html>
Sorry, mixed up the link with the test unit WIP! :(
This is the correct link with the explanatory text related to this suggested fix. Posted [1] which explains the problem and the suggested solution for discussion.
[1] 'Ad suggested fix for "JDK-8234959 FXMLLoader does not populate ENGINE_SCOPE Bindings with FILENAME and ARGV"': <https://mail.openjdk.java.net/pipermail/openjfx-dev/2020-February/025102.html>
-------------
PR: https://git.openjdk.java.net/jfx/pull/122
More information about the openjfx-dev
mailing list