[
https://issues.apache.org/jira/browse/GROOVY-11745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18018539#comment-18018539
]
ASF GitHub Bot commented on GROOVY-11745:
-----------------------------------------
Copilot commented on code in PR #2288:
URL: https://github.com/apache/groovy/pull/2288#discussion_r2326612527
##########
src/main/java/groovy/lang/MetaClassImpl.java:
##########
@@ -2095,11 +2095,12 @@ private boolean isSpecialProperty(final String name) {
}
private boolean isVisibleProperty(final MetaProperty field, final
MetaMethod method, final Class<?> sender) {
- if (!(field instanceof CachedField)) return false;
+ if (field == null
+ || sender == null // GROOVY-11745
+ || field.isPrivate()
+ || !(field instanceof CachedField cachedField)) return false;
Review Comment:
[nitpick] The combined condition check is hard to read and mixes different
types of validations. Consider separating the null checks from the business
logic checks for better readability and maintainability.
```suggestion
// Null checks
if (field == null || sender == null) // GROOVY-11745
return false;
// Access modifier check
if (field.isPrivate())
return false;
// Type check and pattern variable assignment
if (!(field instanceof CachedField cachedField))
return false;
```
> Groovy5 calling Groovy4 library with setter throws NPE
> ------------------------------------------------------
>
> Key: GROOVY-11745
> URL: https://issues.apache.org/jira/browse/GROOVY-11745
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 4.0.28, 5.0.0
> Reporter: Aleks Tamarkin
> Assignee: Eric Milles
> Priority: Major
>
> When Groovy5 calls Groovy4 code that sets a property which should be calling
> a setter under the hood, an NPE is thrown.
> The stack looks like
>
> {code:java}
> Exception in thread "main" java.lang.NullPointerException
> at java.base/java.lang.Class.isAssignableFrom(Native Method)
> at groovy.lang.MetaClassImpl.isVisibleProperty(MetaClassImpl.java:2104)
> at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2761)
> at
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setProperty(ScriptBytecodeAdapter.java:509){code}
> I am seeing this error fairly randomly on setters.
> One example in the Groovy4 code being called by Groovy5 looks like
> {code:java}
> HttpURLConnection c = "<someUrl>".toURL().openConnection() as
> HttpURLConnection
> ...
> c.useCaches = false // this line has the error{code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)