|
Groovy example source code file (Groovy3464Bug.groovy)
The Groovy Groovy3464Bug.groovy source code
package groovy.bugs
import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
import org.codehaus.groovy.control.CompilerConfiguration
/**
* GROOVY-3463:
* Spring/CGLIB proxies throw exception "object is not an instance of declaring class"
*
* @author Guillaume Laforge
*/
class Groovy3464Bug extends GroovyTestCase {
GroovyShell shell
File targetDir, stubDir
protected void setUp() {
super.setUp()
def config = new CompilerConfiguration()
config.with {
targetDirectory = createTempDir()
jointCompilationOptions = [stubDir: createTempDir()]
}
def groovyFile = new File('GroovyThing.groovy', config.targetDirectory)
def javaFile = new File('JavaThing.java', config.targetDirectory)
groovyFile << '''
class GroovyThing {
String m1() { "thing.m1" }
String m2() { m1() + " called from thing.m2"}
}
'''
javaFile << '''
public class JavaThing extends GroovyThing {
public String m3() {
return "javaThing.m3 calling m2 " + m2();
}
}
'''
def loader = new GroovyClassLoader(this.class.classLoader)
def cu = new JavaAwareCompilationUnit(config, loader)
cu.addSources([groovyFile, javaFile] as File[])
try {
cu.compile()
} catch (any) {
any.printStackTrace()
assert false, "Compilation of the Groovy and Java files should have succeeded"
}
this.shell = new GroovyShell(loader)
}
protected void tearDown() {
targetDir?.deleteDir()
stubDir?.deleteDir()
super.tearDown()
}
void testScenarioOne() {
shouldFail(MissingMethodException) {
shell.evaluate '''
def t = new GroovyThing()
assert t.m3() == "javaThing.m3 calling m2 thing.m1 called from thing.m2"
t = new JavaThing()
t.m3()
assert false, "Method m3() should not be found"
'''
}
}
void testScenarioTwo() {
shell.evaluate '''
def t = new GroovyThing()
assert t.m2() == "thing.m1 called from thing.m2"
t = new JavaThing()
assert t.m3() == "javaThing.m3 calling m2 thing.m1 called from thing.m2"
'''
}
static File createTempDir() {
File tempDirectory = File.createTempFile("Groovy3464Bug", Long.toString(System.currentTimeMillis()))
if (!(tempDirectory.delete())) {
throw new IOException("Impossible to delete temporary file: ${tempDirectory.absolutePath}")
}
if (!(tempDirectory.mkdir())) {
throw new IOException("Impossible to create temporary directory: ${tempDirectory.absolutePath}")
}
return tempDirectory
}
}
Other Groovy examples (source code examples)Here is a short list of links related to this Groovy Groovy3464Bug.groovy source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.