Skip to content

GroovyClassLoader broken in Android API 24 #3

@gitsponge

Description

@gitsponge

The following String of code executed in the GroovyDroid shell runs fine on API 23 but fails in API 24 (only if it references a nested class as below):

def class Outer {
    def class Inner {}
}
new Outer.Inner()

Result in API 23

Result = Outer$Inner@a9ea1cd

Result in API 24

Result = null

Stacktrace in API 24

08-13 02:23:03.233 3147-3147/me.champeau.groovydroid E/GrooidShell: Dynamic loading failed!
                                                                    BUG! exception in phase 'semantic analysis' in source unit 'script14710549832242032452851.groovy' throw with null exception
                                                                        at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:935)
                                                                        at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
                                                                        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:542)
                                                                        at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
                                                                        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
                                                                        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254)
                                                                        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:211)
                                                                        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:221)
                                                                        at me.champeau.groovydroid.GrooidShell.evaluate(GrooidShell.java:85)
                                                                        at me.champeau.groovydroid.GroovyActivity.generateMessage(GroovyActivity.groovy:38)
                                                                        at me.champeau.groovydroid.GroovyActivity.executeCode(GroovyActivity.groovy:31)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at android.view.View$DeclaredOnClickListener.onClick(View.java:4693)
                                                                        at android.view.View.performClick(View.java:5610)
                                                                        at android.view.View$PerformClick.run(View.java:22260)
                                                                        at android.os.Handler.handleCallback(Handler.java:751)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                        at android.os.Looper.loop(Looper.java:154)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                     Caused by: java.lang.NullPointerException: throw with null exception
                                                                        at java.net.URLClassLoader.findClass(URLClassLoader.java:371)
                                                                        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
                                                                        at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:677)
                                                                        at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:545)
                                                                        at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:185)
                                                                        at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:170)
                                                                        at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:126)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:676)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:308)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolveNestedClass(ResolveVisitor.java:341)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:308)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:276)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:260)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:272)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.transformConstructorCallExpression(ResolveVisitor.java:1047)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:706)
                                                                        at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:142)
                                                                        at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:42)
                                                                        at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:37)
                                                                        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:166)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1318)
                                                                        at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:71)
                                                                        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:104)
                                                                        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:115)
                                                                        at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:53)
08-13 02:23:03.234 3147-3147/me.champeau.groovydroid E/GrooidShell:     at org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:201)
                                                                        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:126)
                                                                        at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1078)
                                                                        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:53)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1261)
                                                                        at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:176)
                                                                        at org.codehaus.groovy.control.CompilationUnit$11.call(CompilationUnit.java:651)
                                                                        at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
                                                                            ... 21 more

Thank you for your help.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions