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

Eduardo updated GROOVY-10876:
-----------------------------
    Description: 
GroovyScriptEngineImpl seems not to work correctly when reusing classes. The 
classes are being cached and this does not work correctly.

A simple testcase which demonstrates the problem:
{code:java}
def simpleJavaClass = """
public class SimpleClass {
  public String getMessage() {
    return new SimpleClass2().getMessage();
  }
}
"""

def simpleJavaClass2 = """
public class SimpleClass2 {
  private final String message;  public SimpleClass2() {
    message = "Some text created by John";
  }
  
  public String getMessage() {
    return message;
  }
}
"""

def main = """
SimpleClass simpleClass = new SimpleClass()
return simpleClass.getMessage()
"""

println GroovySystem.version
println System.getProperty("java.version")e = new 
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl()
println "Starting"
  
println e.eval(simpleJavaClass2)
println e.eval(simpleJavaClass)
println e.eval(main)
  
println "waiting..."
sleep(2000)
  
simpleJavaClass2 = simpleJavaClass2.replace("John", "Catalina")
  
//println simpleJavaClass2
println e.eval(simpleJavaClass2)
println e.eval(simpleJavaClass)
println e.eval(main){code}
Output:
{code:java}
4.0.6
17.0.5
Starting
class SimpleClass2
class SimpleClass
Some text created by John
waiting...
class SimpleClass2
class SimpleClass
Some text created by John {code}
Expected:
{code:java}
4.0.6
17.0.5
Starting
class SimpleClass2
class SimpleClass
Some text created by John
waiting...
class SimpleClass2
class SimpleClass
Some text created by Catalina {code}

  was:
GroovyScriptEngineImpl seems not to work correctly when reusing classes. The 
classes are being cached and this does not work correctly.

A simple testcase which demonstrates the problem:
{code:java}
def simpleJavaClass = """
public class SimpleClass {
  public String getMessage() {
    return new SimpleClass2().getMessage();
  }
}
"""
def simpleJavaClass2 = """
public class SimpleClass2 {
  private final String message;  public SimpleClass2() {
    message = "Some text created by John";
  }
  
  public String getMessage() {
    return message;
  }
}"""def main = """
SimpleClass simpleClass = new SimpleClass()
return simpleClass.getMessage()
"""
println GroovySystem.version
println System.getProperty("java.version")e = new 
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl()
println "Starting"
  
println e.eval(simpleJavaClass2)
println e.eval(simpleJavaClass)
println e.eval(main)
  
println "waiting..."
sleep(2000)
  
simpleJavaClass2 = simpleJavaClass2.replace("John", "Catalina")
  
//println simpleJavaClass2
println e.eval(simpleJavaClass2)
println e.eval(simpleJavaClass)
println e.eval(main){code}
Output:
{code:java}
4.0.6
17.0.5
Starting
class SimpleClass2
class SimpleClass
Some text created by John
waiting...
class SimpleClass2
class SimpleClass
Some text created by John {code}
Expected:
{code:java}
4.0.6
17.0.5
Starting
class SimpleClass2
class SimpleClass
Some text created by John
waiting...
class SimpleClass2
class SimpleClass
Some text created by Catalina {code}


> GroovyScriptEngineImpl cache bug
> --------------------------------
>
>                 Key: GROOVY-10876
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10876
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 4.0.6
>            Reporter: Eduardo
>            Priority: Major
>
> GroovyScriptEngineImpl seems not to work correctly when reusing classes. The 
> classes are being cached and this does not work correctly.
> A simple testcase which demonstrates the problem:
> {code:java}
> def simpleJavaClass = """
> public class SimpleClass {
>   public String getMessage() {
>     return new SimpleClass2().getMessage();
>   }
> }
> """
> def simpleJavaClass2 = """
> public class SimpleClass2 {
>   private final String message;  public SimpleClass2() {
>     message = "Some text created by John";
>   }
>   
>   public String getMessage() {
>     return message;
>   }
> }
> """
> def main = """
> SimpleClass simpleClass = new SimpleClass()
> return simpleClass.getMessage()
> """
> println GroovySystem.version
> println System.getProperty("java.version")e = new 
> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl()
> println "Starting"
>   
> println e.eval(simpleJavaClass2)
> println e.eval(simpleJavaClass)
> println e.eval(main)
>   
> println "waiting..."
> sleep(2000)
>   
> simpleJavaClass2 = simpleJavaClass2.replace("John", "Catalina")
>   
> //println simpleJavaClass2
> println e.eval(simpleJavaClass2)
> println e.eval(simpleJavaClass)
> println e.eval(main){code}
> Output:
> {code:java}
> 4.0.6
> 17.0.5
> Starting
> class SimpleClass2
> class SimpleClass
> Some text created by John
> waiting...
> class SimpleClass2
> class SimpleClass
> Some text created by John {code}
> Expected:
> {code:java}
> 4.0.6
> 17.0.5
> Starting
> class SimpleClass2
> class SimpleClass
> Some text created by John
> waiting...
> class SimpleClass2
> class SimpleClass
> Some text created by Catalina {code}



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

Reply via email to