<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:09:27 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[MDSAL-300] Binding V1 fails when action input is augmented</title>
                <link>https://jira.opendaylight.org/browse/MDSAL-300</link>
                <project id="10137" key="MDSAL">mdsal</project>
                    <description>&lt;p&gt;Yangtools fails to parse following augmentation present in&lt;br/&gt;
ietf-mpls@2017-07-02.yang:&lt;/p&gt;

&lt;p&gt;  augment&lt;br/&gt;
    &quot;/rt:routing-state/rt:ribs/rt:rib/rt:active-route/rt:input&quot; &lt;/p&gt;
{
    description
      &quot;This augment adds the input parameter of the &apos;active-route&apos;
       action.&quot;;
    uses nhlfe-contents;
  }
&lt;p&gt;  augment &quot;/rt:routing-state/rt:ribs/rt:rib/rt:active-route/&quot;&lt;br/&gt;
        + &quot;rt:output/rt:route&quot; &lt;/p&gt;
{
    description
      &quot;This augment adds the destination prefix to the reply of the
       &apos;active-route&apos; action.&quot;;
    uses nhlfe-contents;
  }

&lt;p&gt;where active-route is defined as(ietf-routing@2016-08-18.yang):&lt;/p&gt;

&lt;p&gt;action active-route {&lt;br/&gt;
          description&lt;br/&gt;
            &quot;Return the active RIB route that is used for the&lt;br/&gt;
             destination address.&lt;/p&gt;

&lt;p&gt;             Address family specific modules MUST augment input&lt;br/&gt;
             parameters with a leaf named &apos;destination-address&apos;.&quot;;&lt;br/&gt;
          output {&lt;/p&gt;

&lt;p&gt;            container route {&lt;br/&gt;
              description&lt;br/&gt;
                &quot;The active RIB route for the specified destination.&lt;/p&gt;

&lt;p&gt;                 If no route exists in the RIB for the destination&lt;br/&gt;
                 address, no output is returned.&lt;/p&gt;

&lt;p&gt;                 Address family specific modules MUST augment this&lt;br/&gt;
                 container with appropriate route contents.&quot;;&lt;br/&gt;
              container next-hop &lt;/p&gt;
{
                description
                  &quot;Route&apos;s next-hop attribute.&quot;;
                uses next-hop-state-content;
              }
&lt;p&gt;              uses route-metadata;&lt;br/&gt;
            }&lt;br/&gt;
          }&lt;br/&gt;
        }&lt;/p&gt;

&lt;p&gt;with following exception:&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;ERROR&amp;#93;&lt;/span&gt; Failed to parse YANG from source SourceSpecificContext &lt;span class=&quot;error&quot;&gt;&amp;#91;source=META-INF/yang/ietf-mpls@2017-07-02.yang, current=EFFECTIVE_MODEL, finished=FULL_DECLARATION&amp;#93;&lt;/span&gt;: Augment target &apos;Absolute&lt;/p&gt;
{path=[(urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)routing-state, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)ribs, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)rib, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)active-route, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)input]}
&lt;p&gt;&apos; not found &lt;span class=&quot;error&quot;&gt;&amp;#91;at META-INF/yang/ietf-mpls@2017-07-02.yang:366:2&amp;#93;&lt;/span&gt;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;ERROR&amp;#93;&lt;/span&gt; yang-to-sources: Unable to parse yang files from /home/m/hc2vpp/mpls/api/src/main/yang&lt;br/&gt;
org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException: Some of EFFECTIVE_MODEL modifiers for statements were not resolved.&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;...&amp;#93;&lt;/span&gt;&lt;br/&gt;
Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Augment target &apos;Absolute&lt;/p&gt;
{path=[(urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)routing-state, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)ribs, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)rib, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)active-route, (urn:ietf:params:xml:ns:yang:ietf-routing?revision=2016-08-18)input]}
&lt;p&gt;&apos; not found &lt;span class=&quot;error&quot;&gt;&amp;#91;at META-INF/yang/ietf-mpls@2017-07-02.yang:366:2&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.AugmentStatementImpl$Definition$1.prerequisiteFailed(AugmentStatementImpl.java:187)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:87)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:341)&lt;br/&gt;
	... 35 more&lt;/p&gt;
</description>
                <environment></environment>
        <key id="29035">MDSAL-300</key>
            <summary>Binding V1 fails when action input is augmented</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="rovarga">Robert Varga</assignee>
                                    <reporter username="mgradzki">Marek Gradzki</reporter>
                        <labels>
                    </labels>
                <created>Thu, 4 Jan 2018 10:43:19 +0000</created>
                <updated>Fri, 29 Jun 2018 10:15:14 +0000</updated>
                            <resolved>Fri, 29 Jun 2018 10:15:14 +0000</resolved>
                                    <version>Nitrogen SR1</version>
                    <version>Carbon SR2</version>
                                    <fixVersion>Fluorine</fixVersion>
                                    <component>Binding codegen</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="60590" author="rovarga" created="Thu, 4 Jan 2018 10:46:57 +0000"  >&lt;p&gt;The general approach on how to solve this issue in binding V1 needs to be decided. There are multiple options ranging from ignoring the constructs to mapping actions to routed RPCs.&lt;/p&gt;</comment>
                            <comment id="61559" author="rovarga" created="Thu, 8 Mar 2018 14:58:25 +0000"  >&lt;p&gt;With the following models:&lt;/p&gt;

&lt;p&gt;&lt;del&gt;rw-rw-r&lt;/del&gt;-. 1 nite nite 16830 Mar&#160; 8 15:55 src/main/yang/ietf-inet-types@2013-07-15.yang&lt;br/&gt;
&lt;del&gt;rw-rw-r&lt;/del&gt;-. 1 nite nite 24219 Mar&#160; 8 15:55 src/main/yang/ietf-interfaces@2014-05-08.yang&lt;br/&gt;
&lt;del&gt;rw-rw-r&lt;/del&gt;-. 1 nite nite&#160; 9817 Mar&#160; 8 15:53 src/main/yang/ietf-mpls@2017-07-02.yang&lt;br/&gt;
&lt;del&gt;rw-rw-r&lt;/del&gt;-. 1 nite nite 16836 Mar&#160; 8 15:54 src/main/yang/ietf-routing@2016-11-04.yang&lt;br/&gt;
&lt;del&gt;rw-rw-r&lt;/del&gt;-. 1 nite nite 24480 Mar&#160; 8 15:54 src/main/yang/ietf-routing-types@2017-12-04.yang&lt;br/&gt;
&lt;del&gt;rw-rw-r&lt;/del&gt;-. 1 nite nite 17933 Mar&#160; 8 15:55 &lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;mailto:src/main/yang/ietf-yang-types@2013-07-15.yang&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;src/main/yang/ietf-yang-types@2013-07-15.yang&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://jira.opendaylight.org/images/icons/mail_small.gif&quot; height=&quot;12&quot; width=&quot;13&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;I get the following codegen issue:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;[ERROR] yang-to-sources: Unable to generate sources with org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl generator
java.lang.NullPointerException: Target type not yet generated: RPC input input
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl.augmentationToGenTypes(BindingGeneratorImpl.java:872)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl.allAugmentsToGenTypes(BindingGeneratorImpl.java:416)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl.generateTypes(BindingGeneratorImpl.java:249)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl.generateSources(CodeGeneratorImpl.java:61)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.generateSourcesWithOneGenerator(YangToSourcesProcessor.java:379)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.generateSources(YangToSourcesProcessor.java:329)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.conditionalExecute(YangToSourcesProcessor.java:156)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:123)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at java.lang.reflect.Method.invoke(Method.java:498)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
&#160;&#160;&#160;&#160;&#160;&#160;&#160; at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;with current mdsal + yangtools-2.0.2.&lt;/p&gt;</comment>
                            <comment id="61560" author="rovarga" created="Thu, 8 Mar 2018 15:21:19 +0000"  >&lt;p&gt;The root cause is that an augmentation class is being generated for an action input &#8211; and actions are not mapped not anything, hence the target type is not found.&lt;/p&gt;</comment>
                            <comment id="61673" author="rovarga" created="Mon, 12 Mar 2018 12:12:24 +0000"  >&lt;p&gt;Generating actions/notifications is not really a problem per se, but unfortunately they end up living in the same namespace as regular data nodes and groupings &#8211; which means we could end up regressing against current models (which compile just fine because of these elements being ignored).&lt;/p&gt;

&lt;p&gt;An obvious solution would be similar to &lt;a href=&quot;https://jira.opendaylight.org/browse/MDSAL-309&quot; title=&quot;V1 codegen generates enum constants that are not valid Java identifiers&quot; class=&quot;issue-link&quot; data-issue-key=&quot;MDSAL-309&quot;&gt;&lt;del&gt;MDSAL-309&lt;/del&gt;&lt;/a&gt;, e.g. first determine all elements which need to be assigned into (hierarchical because of nested subclasses) namespace structure and then run legacy mapping, followed by bijective mapping (which needs to be augmented to take care of nested subclasses).&lt;/p&gt;

&lt;p&gt;Note that mapping of identifiers should be slightly easier, as we are dealing with input identifiers, which are defined in &lt;a href=&quot;https://tools.ietf.org/html/rfc7950#section-6.2&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://tools.ietf.org/html/rfc7950#section-6.2&lt;/a&gt; as:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;   Identifiers are used to identify different kinds of YANG items by
   name.  Each identifier starts with an uppercase or lowercase ASCII
   letter or an underscore character, followed by zero or more ASCII
   letters, digits, underscore characters, hyphens, and dots.
   Implementations MUST support identifiers up to 64 characters in
   length and MAY support longer identifiers.  Identifiers are case
   sensitive.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And in section 14:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;   identifier          = (ALPHA / &quot;_&quot;)
                         *(ALPHA / DIGIT / &quot;_&quot; / &quot;-&quot; / &quot;.&quot;)
   ALPHA               = %x41-5A / %x61-7A
                         ; A-Z / a-z
   DIGIT               = %x30-39
                         ; 0-9&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="61704" author="rovarga" created="Tue, 13 Mar 2018 00:03:15 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/69414&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/69414&lt;/a&gt; adds a very simplistic encoding, which has just two escapes: &quot;$$&quot; for &apos;.&apos; and &quot;$_&quot; for &apos;-&apos;, which I think is a reasonable way of mapping mapping these:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;YANG&lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Binding $&lt;/th&gt;
&lt;th class=&apos;confluenceTh&apos;&gt;Binding _$&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;foo&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;foo&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;foo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;true&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$true&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;_&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$_&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$_&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;__&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$__&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$__&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar-baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar$_baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar--baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar$_$_baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar__baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar.baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar$$baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar$baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar..baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar$$$$baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar$$baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$bar_baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar__baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar__baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$bar__baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_.baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_$$baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$bar_$$baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar-.baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_$_$$baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_$baz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_-baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;bar_$_baz&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;$bar_$_baz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;The code currently does &apos;Binding $&apos;.&lt;/p&gt;

&lt;p&gt;If we treat &apos;&lt;em&gt;&apos; as a special character (and hence escape it), the much more appealing form &apos;Binding _$&apos; can be used. In that scheme &apos;$&apos; is used as the initial escape meaning &apos;.&apos; &#8211; and since &apos;.&apos; cannot be at the start of YANG identifier, it is a padding escape on the first position indicating &apos;keep underscores as they are, dashes are escaped as &apos;$&lt;/em&gt;&apos; . Since underscore is less prevalent than dash in most YANG files, this escape should rarely be encountered with standard models. Vendor models use &apos;_&apos; in conjunction with all-capitals, which is probably a C language leak. Vendors should fix this by mapping underscore back to dash.&lt;/p&gt;</comment>
                            <comment id="61706" author="rovarga" created="Tue, 13 Mar 2018 00:29:20 +0000"  >&lt;p&gt;Alternatively we could try to find a valid Java identitifer part from (at least all of unicode is allowed). The trouble becomes typing it out.&lt;/p&gt;</comment>
                            <comment id="61707" author="rovarga" created="Tue, 13 Mar 2018 00:34:15 +0000"  >&lt;p&gt;At any rate, this does not help us that much, as there are conflicts possible with the old mapping, and hence we really will need a mapping name assignement phase (e.g. collect all candidates at the specified package/containing class name and choose an unambiguous mapping.&lt;/p&gt;</comment>
                            <comment id="61793" author="rovarga" created="Mon, 19 Mar 2018 17:18:13 +0000"  >&lt;p&gt;Perhaps we can get away with just adding a combined Service, just as we are doing with RPCs, to the package where the actions are define &#8211; e.g. for&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;container foo {
    action foo-bar;
    action bar-baz;
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;we would end up generating&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;package &amp;lt;prefix&amp;gt;.foo;

public interface FooActionService extends ActionService {
    ListenableFuture&amp;lt;RpcResult&amp;lt;FooBarOutput&amp;gt; fooBar(InstanceIdentifier&amp;lt;Foo&amp;gt; context, FooBarInput input);
    ListenableFuture&amp;lt;RpcResult&amp;lt;BarBazOutput&amp;gt; barBaz(InstanceIdentifier&amp;lt;Foo&amp;gt; context, BarBazInput input);
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="63665" author="rovarga" created="Mon, 25 Jun 2018 16:03:06 +0000"  >&lt;p&gt;Actually we do not want to aggregate the service, as that is just creating headaches around identifier mapping. Since RFC7950 specifies we cannot overlap with containers and similar:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;   o  All leafs, leaf-lists, lists, containers, choices, rpcs, actions,
      notifications, anydatas, and anyxmls defined (directly or through
      a &quot;uses&quot; statement) within a parent node or at the top level of
      the module or its submodules share the same identifier namespace.
      This namespace is scoped to the parent node or module, unless the
      parent node is a case node.  In that case, the namespace is scoped
      to the closest ancestor node that is not a case or choice node.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="28626">YANGTOOLS-841</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10001">
                    <name>Cloners</name>
                                            <outwardlinks description="clones">
                                        <issuelink>
            <issuekey id="28626">YANGTOOLS-841</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i0399z:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>