[ 
https://issues.apache.org/jira/browse/GROOVY-10746?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul King closed GROOVY-10746.
------------------------------

> Calling method in Super class causes java.lang.StackOverflowError with Java 
> 1.8
> -------------------------------------------------------------------------------
>
>                 Key: GROOVY-10746
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10746
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.5.17, 3.0.12, 4.0.4
>            Reporter: Troy Harris
>            Assignee: Eric Milles
>            Priority: Major
>              Labels: StackOverflowError
>             Fix For: 4.0.0
>
>
> Consider the class SortedProperties below which extends java.util.Properties 
> and overrides Properties.keys().
> {code:java}
> import java.util.Enumeration;
> import java.util.Collections;
> class SortedProperties extends Properties {
>     
>   @Override 
>   public synchronized Enumeration keys() {
>      Enumeration keysEnum = super.keys();
>      Vector keyList = new Vector();
>      while(keysEnum.hasMoreElements()){
>        keyList.add(keysEnum.nextElement());
>      }
>      Collections.sort(keyList);
>      return keyList.elements();
>   }
> }   {code}
> In this scenario the Groovy class above is compiled with Groovy 3.0.12 and 
> JDK 11 but using the flag "--release 1.8" for JDK 1.8 compatibility.
> Attempting to call the overridden keys() method from the following TestGroovy 
> class (compiled the same way) will yield a StackOverflowException when 
> running with Java 1.8.  This error is not reproduceable when running with 
> Java 11.
> {code:java}
> import java.util.Properties;
> public class TestGroovy {
>   public static void main(String[] args) {
>         SortedProperties properties = new SortedProperties();
>         properties.setProperty("FirstName", "John");
>         properties.setProperty("LastName", "Doe");
>         properties.keys();
>     }
> } {code}
> Truncated Stacktrace:
> {noformat}
> Exception in thread "main" java.lang.StackOverflowError
>         at 
> org.codehaus.groovy.runtime.metaclass.MetaMethodIndex.getMethods(MetaMethodIndex.java:210)
>         at 
> groovy.lang.MetaClassImpl.getMethodWithCaching(MetaClassImpl.java:1371)
>         at groovy.lang.MetaClassImpl.getMetaMethod(MetaClassImpl.java:1280)
>         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1132)
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:164)
>         at com.foo.SortedProperties.keys(SortedProperties.groovy:12)
>         at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
>         at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
>         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1268)
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:164)
>         at com.foo.SortedProperties.keys(SortedProperties.groovy:12)
>         at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
>         at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
>         at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1268)
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
>         at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:164)
>         at com.foo.SortedProperties.keys(SortedProperties.groovy:12){noformat}
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to