Bug 4760: YANG leaf named 'class' breaks write with netconf connector 34/36134/2
authorFilip Gregor <fgregor@cisco.com>
Mon, 25 Jan 2016 15:15:39 +0000 (16:15 +0100)
committerRobert Varga <nite@hq.sk>
Thu, 12 May 2016 21:52:25 +0000 (21:52 +0000)
added new method for changing "Class" to "XmlClass" to bindingmapping
added tests

Change-Id: I27503d5756259b61500e2eaf90cdfceba0ebbe80
Signed-off-by: Filip Gregor <fgregor@cisco.com>
(cherry picked from commit da764a10f75b94c88c0641fbbcf1e1853f3b8dcf)

binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/gen/impl/DataNodeContainerSerializerSource.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/BindingCodecContext.java
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/stmt/parser/retest/CompilationTest.java
binding/mdsal-binding-java-api-generator/src/test/resources/compilation/bug4760/foo.yang [new file with mode: 0644]
binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/BindingMapping.java

index 8fc57dca2e75a22643d3b0466829d0527ffd6e39..21917eff708d0a84125dfa800d4605f1b5773e75 100644 (file)
@@ -124,8 +124,7 @@ abstract class DataNodeContainerSerializerSource extends DataObjectSerializerSou
                 prefix = "is";
             }
         }
-
-        return prefix + BindingMapping.getClassName(node.getQName().getLocalName());
+        return prefix + BindingMapping.getGetterSuffix(node.getQName());
     }
 
     private void emitBody(final StringBuilder b) {
index be83c9071b6c937394c47fa2bc26557070f8c5c8..04fa7d217027297268847d1d7469fa330be914d6 100644 (file)
@@ -238,8 +238,7 @@ final class BindingCodecContext implements CodecContextFactory, BindingCodecTree
     }
 
     private String getGetterName(final QName qName, TypeDefinition<?> typeDef) {
-        final String suffix = BindingMapping.getClassName(qName);
-
+        final String suffix = BindingMapping.getGetterSuffix(qName);
         while (typeDef.getBaseType() != null) {
             typeDef = typeDef.getBaseType();
         }
index 5fe7bde1d38314820ab041338d6b5f745094e34d..6b2c52327750294220d1eb43f998d687ffab3f06 100644 (file)
@@ -27,6 +27,7 @@ import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.rete
 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.cleanUp;
 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.getSourceFiles;
 import static org.opendaylight.yangtools.sal.java.api.generator.stmt.parser.retest.CompilationTestUtils.testCompilation;
+
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableSet;
@@ -538,6 +539,21 @@ public class CompilationTest extends BaseCompilationTest {
         cleanUp(sourcesOutputDir, compiledOutputDir);
     }
 
+    @Test
+    public void testBug4760() throws Exception {
+        final File sourcesOutputDir = new File(GENERATOR_OUTPUT_PATH + FS + "bug4760");
+        assertTrue("Failed to create test file '" + sourcesOutputDir + "'", sourcesOutputDir.mkdir());
+        final File compiledOutputDir = new File(COMPILER_OUTPUT_PATH + FS + "bug4760");
+        assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
+
+        generateTestSources("/compilation/bug4760", sourcesOutputDir);
+
+        // Test if sources are compilable
+        testCompilation(sourcesOutputDir, compiledOutputDir);
+
+        cleanUp(sourcesOutputDir, compiledOutputDir);
+    }
+
     /**
      * Test handling nested uses-augmentations.
      *
diff --git a/binding/mdsal-binding-java-api-generator/src/test/resources/compilation/bug4760/foo.yang b/binding/mdsal-binding-java-api-generator/src/test/resources/compilation/bug4760/foo.yang
new file mode 100644 (file)
index 0000000..17feefe
--- /dev/null
@@ -0,0 +1,11 @@
+module foo {
+    namespace "urn:test:foo";
+    prefix foo;
+
+    revision 2016-01-01 {
+    }
+
+    leaf class {
+        type string;
+    }
+}
\ No newline at end of file
index 3205cc2d8c17db82202697848f2badcd0ba33af8..9c3b0cfa8f79465d3f4e47e20a8d399517ae6389 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.binding;
 
 import static com.google.common.base.Preconditions.checkArgument;
+
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableSet;
@@ -155,6 +156,12 @@ public final class BindingMapping {
         return toFirstUpper(toCamelCase(name.getLocalName()));
     }
 
+    public static String getGetterSuffix(final QName name) {
+        checkArgument(name != null, "Name should not be null.");
+        final String candidate = toFirstUpper(toCamelCase(name.getLocalName()));
+        return ("Class".equals(candidate) ? "XmlClass" : candidate);
+    }
+
     public static String getPropertyName(final String yangIdentifier) {
         final String potential = toFirstLower(toCamelCase(yangIdentifier));
         if ("class".equals(potential)) {