[ 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)