If there is not already such an exception, it would seem like a good idea to 
have an exception that formats such a message from constructor parameters 
providing the details so that it’s the same everywhere, and so that it can be 
changed in once place if needed.

Gregg

> On May 3, 2017, at 9:48 AM, Kevin Rushforth <kevin.rushfo...@oracle.com> 
> wrote:
> 
> OK, I'll create a more informative message. I think it will be more clear in 
> the message to just say that it needs to "open" the package to javafx.base, 
> since that would be the recommendation for a package that isn't already 
> exported unconditionally. I'll send out a new webrev this morning with all 
> feedback incorporated.
> 
> -- Kevin
> 
> 
> Mandy Chung wrote:
>>> On May 2, 2017, at 2:22 PM, Kevin Rushforth <kevin.rushfo...@oracle.com> 
>>> wrote:
>>> 
>>> Here is the message:
>>> 
>>> IllegalAccessException: class com.sun.javafx.property.MethodHelper cannot 
>>> access class com.foo (in module foo.app) because module foo.app does not 
>>> open com.foo to javafx.base 
>>>    
>> 
>> It would be better to emit a more informative message e.g. “javafx.base 
>> cannot access class com.foo (in module foo.app).  Either exports com.foo 
>> unqualifiedly or open com.foo to javafx.base”.  Also in MethodUtil::invoke
>>  61            if (!module.isExported(packageName)) {
>> You can do this check only if module.isNamed.
>> 
>>  
>>> It is roughly the same message that any similar illegal access would 
>>> generate (e.g., we get similar error messages when FXML tries to call 
>>> setAccessible for a field annotated with @FXML if the module is not "open" 
>>> to javafx.fxml).
>>> 
>>>    
>>>> javafx.base/src/main/java/com/sun/javafx/property/MethodHelper.java
>>>> javafx.fxml/src/main/java/com/sun/javafx/fxml/MethodHelper.java
>>>> javafx.web/src/main/java/com/sun/webkit/MethodHelper.java
>>>>  45     public static Object invoke(Method m, Object obj, Object[] params)
>>>> 
>>>> To avoid 3 ModuleHelper classes, the invoke method can take
>>>> the callerModule argument to replace this line:   56         final Module 
>>>> thisModule = MethodHelper.class.getModule();
>>>>        
>>> I'm fairly certain that won't work. Module::addOpens is caller sensitive 
>>> and will only work when called from the module in question.
>>> 
>>>    
>> 
>> You are right.  Wont’t work.
>>  
>>>> javafx.base/src/main/java/com/sun/javafx/reflect/MethodUtil.java
>>>>  There are a few other public methods which I think JavaFX doesn’t
>>>>  need and can be removed.
>>>>        
>>> Yes, I could do this to reduce the public footprint of the class. To 
>>> minimize the diffs between the original and our copy, I might just comment 
>>> out the "public". That would also make it easier to add them back in a 
>>> future version (e.g., to eventually get rid of all dependency on 
>>> sun.reflect.misc). Thoughts?
>>>    
>> 
>> I will leave it up to you.
>> Mandy
>> 
>>  

Reply via email to