[MDSAL-448] Cannot generate sources for action with grouping inside grouping Created: 14/May/19  Updated: 15/May/19  Resolved: 15/May/19

Status: Resolved
Project: mdsal
Component/s: Binding codegen
Affects Version/s: Fluorine SR2
Fix Version/s: Fluorine SR3, 3.0.9, 4.0.2

Type: Bug Priority: Highest
Reporter: Anna Bencúrová Assignee: Robert Varga
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: File test@2019-05-14.yang    

 Description   

There is a problem to generate sources for yang, where is action, which is contained inside grouping and also which is containing a grouping. Example yang is provided as attachment. Bellow is an error message from building procedure.

 

[ERROR] yang-to-sources: Unable to generate sources with org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl generator
 java.lang.NullPointerException
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addImplementedInterfaceFromUses (AbstractTypeGenerator.java:2031)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addDefaultInterfaceDefinition (AbstractTypeGenerator.java:1700)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addDefaultInterfaceDefinition (AbstractTypeGenerator.java:1658)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.processDataSchemaNode (AbstractTypeGenerator.java:275)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.actionContainer (AbstractTypeGenerator.java:465)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.actionsToGenType (AbstractTypeGenerator.java:424)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.groupingsToGenTypes (AbstractTypeGenerator.java:691)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.moduleToGenTypes (AbstractTypeGenerator.java:225)
     at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.<init> (AbstractTypeGenerator.java:194)
     at org.opendaylight.mdsal.binding.generator.impl.CodegenTypeGenerator.<init> (CodegenTypeGenerator.java:32)
     at org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl.generateTypes (BindingGeneratorImpl.java:70)
     at org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl.generateSources (CodeGeneratorImpl.java:70)
     at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.generateSourcesWithOneGenerator (YangToSourcesProcessor.java:380)
     at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.generateSources (YangToSourcesProcessor.java:330)
     at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.conditionalExecute (YangToSourcesProcessor.java:157)
     at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute (YangToSourcesMojo.java:124)
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
     at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
     at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke (Method.java:498)
     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
     at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
     at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
 [ERROR] yang-to-sources: One or more code generators failed, including failed list(generatorClass=exception) {org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl=java.lang.NullPointerException}


 Comments   
Comment by Robert Varga [ 15/May/19 ]

The NPE is incorrect, as it should be an ISE, with the call site fixed we get:

[ERROR] yang-to-sources: Unable to generate sources with org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl generator
java.lang.IllegalStateException: Grouping AbsoluteSchemaPath{path=[(urn:example:test?revision=2019-05-14)the-grouping]}is not resolved for Input
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addImplementedInterfaceFromUses (AbstractTypeGenerator.java:1886)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addDefaultInterfaceDefinition (AbstractTypeGenerator.java:1621)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.addDefaultInterfaceDefinition (AbstractTypeGenerator.java:1589)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.processDataSchemaNode (AbstractTypeGenerator.java:280)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.actionContainer (AbstractTypeGenerator.java:474)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.actionsToGenType (AbstractTypeGenerator.java:433)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.groupingsToGenTypes (AbstractTypeGenerator.java:703)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.moduleToGenTypes (AbstractTypeGenerator.java:230)
    at org.opendaylight.mdsal.binding.generator.impl.AbstractTypeGenerator.<init> (AbstractTypeGenerator.java:199)
    at org.opendaylight.mdsal.binding.generator.impl.CodegenTypeGenerator.<init> (CodegenTypeGenerator.java:32)
    at org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl.generateTypes (BindingGeneratorImpl.java:64)
Comment by Robert Varga [ 15/May/19 ]

The problem is that we are processing actions within grouping definitions, and thus we are ending up attempting to use a grouping type which has not been processed. This comes from the fact that GroupingDefinitionDependencySort does not handle the action/input case gracefully, it would seem.

Generated at Wed Feb 07 20:09:50 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.