You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (JIRA)" <ji...@apache.org> on 2019/03/15 18:42:00 UTC

[jira] [Created] (GROOVY-9035) config script: unexpected NPE when processing compiler config DSL

Eric Milles created GROOVY-9035:
-----------------------------------

             Summary: config script: unexpected NPE when processing compiler config DSL
                 Key: GROOVY-9035
                 URL: https://issues.apache.org/jira/browse/GROOVY-9035
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 2.5.6
            Reporter: Eric Milles


I started experimenting with using config script to enable static compilation by default.  I ran into GROOVY-7856 pretty much right away.  So I decided to comment out my config script like this:
{code:groovy}
withConfig(configuration) {
    source(classValidator: { !it.isInterface() }) { ->
        //ast(groovy.transform.CompileStatic)
    }
}
{code}

Now I get this NPE because there is no delegate CompilationCustomizer found for the SourceAwareCustomizer.

{code}
java.lang.NullPointerException
	at org.codehaus.groovy.control.customizers.DelegatingCustomizer.<init>(DelegatingCustomizer.java:36)
	at org.codehaus.groovy.control.customizers.SourceAwareCustomizer.<init>(SourceAwareCustomizer.java:50)
	at org.codehaus.groovy.control.customizers.builder.SourceAwareCustomizerFactory.postCompleteNode(SourceAwareCustomizerFactory.java:95)
	at org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder.postNodeCompletion(CompilerCustomizationBuilder.groovy:48)
	at groovy.util.FactoryBuilderSupport.dispatchNodeCall(FactoryBuilderSupport.java:903)
	at groovy.util.FactoryBuilderSupport.doInvokeMethod(FactoryBuilderSupport.java:787)
	at groovy.util.FactoryBuilderSupport.invokeMethod(FactoryBuilderSupport.java:507)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeOnDelegationObjects(ClosureMetaClass.java:413)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:337)
	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:64)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:156)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:176)
	at config$_run_closure1.doCall(config.groovy:4)
	at config$_run_closure1.doCall(config.groovy)
...
{code}



Could the SourceAwareCustomizerFactory be more forgiving and supply a "no-op" CompilationCustomizer in newInstance?

{code}
    public Object newInstance(final FactoryBuilderSupport builder, final Object name, final Object value, final Map attributes) throws InstantiationException, IllegalAccessException {
        SourceOptions data = new SourceOptions();
        if (value instanceof CompilationCustomizer) {
            data.delegate = (CompilationCustomizer) value;
        }
        // add
        else {
            data.delegate = new CompilationCustomizer(0) {};
        }
        // end
        return data;
    }
{code}




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)