Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-3946

Allow overriding the default Groovy class loader

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 1.6.7
    • Fix Version/s: 1.6.8, 1.7.1, 1.8-beta-1
    • Component/s: None
    • Labels:
      None

      Description

      I am using Groovy with JSR-223 and I need to override the default Groovy class loader so I can provide a custom CompilationUnit with an additional PrimaryClassNodeOperation in the SEMANTIC_ANALYSIS phase.

      I don't know too much about Groovy internals, but as GroovyScriptEngineImpl's loader field is private and never gets reassigned, the only way I found for making it work is using reflection:

      private void overrideDefaultGroovyClassLoader(final ScriptEngine engine) throws Exception {
        final Field classLoader = engine.getClass().getDeclaredField("loader");
        classLoader.setAccessible(true);
        classLoader.set(engine, new CustomGroovyClassLoader());
      }
      

      If there is not a better way for doing this today, maybe GroovyScriptEngineImpl should provide a setter or a post construct-like callback method for allowing overriding such field.

        Attachments

        1. JSR223SecurityTest.java
          5 kB
          Tiago Fernandez
        2. GroovyScriptEngineImpl.java
          18 kB
          Tiago Fernandez

          Activity

            People

            • Assignee:
              Guillaume Guillaume Delcroix
              Reporter:
              tiago182 Tiago Fernandez
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: