Uploaded image for project: 'mdsal'
  1. mdsal
  2. MDSAL-533

Generated code with incompatible types

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Medium Medium
    • 7.0.3
    • None
    • Binding codegen
    • None

      module

       

      module a {
        yang-version 1;
        namespace "a";
        prefix "a";
      
        grouping foo_grp {
          leaf key_leaf1 {
            type leafref {
              path "../../../a:foo_list/a:name";
            }
          }
          leaf key_leaf2 {
            type string;
          }
          leaf key_leaf3 {
            type string;
          }
        }
        container foo_cont {
          list foo_list {
            key "name";
            leaf name {
              type string {
                length "1..255";
              }
            }
          }
          container foo_cont2 {
            list foo_list2 {
              key "key_leaf1 key_leaf2 key_leaf3";
              uses foo_grp;
            }
          }
        }
      }

      generates code with no error but when maven tries to compile it will receive an error:

       

       

      [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project lighty-models-skeleton: Compilation failure
      [ERROR] /home/miroslav/projects/java/pt-ldl/distribution/scripts/user/java/lighty-models-skeleton/target/generated-sources/mdsal-binding/org/opendaylight/yang/gen/v1/a/norev/foo_cont/foo_cont2/FooList2Builder.java:[157,60] incompatible types: java.lang.Object cannot be converted to java.lang.String

      the problem is with following generated code:

       

       

       

              FooList2Impl(FooList2Builder base) {
                  super(base.augmentation);
                  if (base.key() != null) {
                      this.key = base.key();
                  } else {
                      this.key = new FooList2Key(base.getKeyLeaf1(), base.getKeyLeaf2(), base.getKeyLeaf3());
                  }
                  this._keyLeaf1 = key.getKeyLeaf1();
                  this._keyLeaf2 = key.getKeyLeaf2();
                  this._keyLeaf3 = key.getKeyLeaf3();
              }
      

      here we can see that it is trying to create instance of FooList2KEY with three keys from base. Where base is:

       

       

      public class FooList2Builder implements Builder<FooList2> {    private      Object _keyLeaf1;
          private String _keyLeaf2;
          private String _keyLeaf3;
          private FooList2Key key;
      

      as you can see the first field is Object _keyLeaf1 which is a problem because FooList2Key constructor is generated like this:

      public FooList2Key(String _keyLeaf1, String _keyLeaf2, String _keyLeaf3) {
              this._keyLeaf1 = _keyLeaf1;
              this._keyLeaf2 = _keyLeaf2;
              this._keyLeaf3 = _keyLeaf3;
          }
      

      String _keyLeaf1 !!!

       

            ilyaigushev Ilya Igushev
            miro.kovac Miroslav Kovac
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: