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

Reply via email to