Merge "Bug 762: Verify input in typedef codecs"
authorTony Tkacik <ttkacik@cisco.com>
Tue, 1 Jul 2014 14:51:27 +0000 (14:51 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 1 Jul 2014 14:51:27 +0000 (14:51 +0000)
20 files changed:
code-generator/binding-generator-impl/pom.xml
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/LazyGeneratedCodecRegistry.java
code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtilTest.java
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/GeneratorUtil.java
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/InterfaceTemplate.xtend
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/AugmentToUsesInAugmentCompilationTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/CascadeUsesCompilationTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/ClassCodeGeneratorTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/CompilationTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/GenerateInnerClassForBitsAndUnionInLeavesTest.java
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java
code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/class-name-collision [new file with mode: 0644]
code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/configuration [new file with mode: 0644]
code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/other-module [new file with mode: 0644]
code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/GeneratorImpl.xtend
code-generator/pom.xml
model/pom.xml

index d1ebe6357c7c0fb7e8fcd95ba2445218fde2ed0f..fbf4098b0511f36d88e2e8595d5f2d339f8826e7 100644 (file)
@@ -46,7 +46,6 @@
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>binding-type-provider</artifactId>
-            <version>${project.version}</version>
         </dependency>
         <dependency>
             <groupId>com.google.code.findbugs</groupId>
index e132035e88951006d243db6d68dbf0b724f1060a..68685792593181f5beeb6d61e7dd91ec37b3f392 100644 (file)
@@ -706,7 +706,7 @@ class LazyGeneratedCodecRegistry implements //
             if (adaptedForPaths.contains(path)) {
                 return;
             }
-            LOG.info("Adapting mixin codec {} for path {}",this,path);
+            LOG.debug("Adapting mixin codec {} for path {}",this,path);
             /**
              * We search in schema context if the use of this location aware
              * codec (augmentable codec, case codec) makes sense on provided
index ba26baf8d124167ed057276e92b4744fbfac178d..ef268c7ed998cef2e10637677fe3828b351a8531 100644 (file)
@@ -101,6 +101,7 @@ public class BindingGeneratorUtilTest {
 
         // test of exception part of the method moduleNamespaceToPackageName()
         ModuleBuilder moduleBuilder = new ModuleBuilder("module-withut-revision", null);
+        moduleBuilder.setSource("");
         Module moduleWithoutRevision = moduleBuilder.build();
         boolean passedSuccesfully = false;
         try {
index fc9535e0d2bd84386d3fd8545be3511bb22b6f06..ababc45775c1109d26845bd472cd22adb951b411 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject
 import java.util.Collection
 import java.util.Arrays
+import java.util.HashMap
 
 abstract class BaseTemplate {
 
@@ -34,7 +35,7 @@ abstract class BaseTemplate {
             throw new IllegalArgumentException("Generated type reference cannot be NULL!")
         }
         this.type = _type;
-        this.importMap = GeneratorUtil.createImports(type)
+        this.importMap = new HashMap<String,String>()
     }
 
     def packageDefinition() '''package «type.packageName»;'''
@@ -259,8 +260,8 @@ abstract class BaseTemplate {
     def protected generateToString(Collection<GeneratedProperty> properties) '''
         «IF !properties.empty»
             @Override
-            public String toString() {
-                StringBuilder builder = new StringBuilder("«type.name» [");
+            public «String.importedName» toString() {
+                «StringBuilder.importedName» builder = new «StringBuilder.importedName»("«type.name» [");
                 boolean first = true;
 
                 «FOR property : properties»
index 7d954465df34d83b3234563e28d66c7065d81462..7dd355230387a27ca245954b12a8ab9dd826e705 100644 (file)
@@ -406,7 +406,7 @@ class BuilderTemplate extends BaseTemplate {
 
     def private generateAugmentField(boolean init) '''
         «IF augmentField != null»
-            private final «Map.importedName»<Class<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»> «augmentField.name»«IF init» = new «HashMap.importedName»<>()«ENDIF»;
+            private «Map.importedName»<«Class.importedName»<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»> «augmentField.name» = new «HashMap.importedName»<>();
         «ENDIF»
     '''
 
@@ -426,7 +426,7 @@ class BuilderTemplate extends BaseTemplate {
         «ENDFOR»
         «IF augmentField != null»
 
-            public «type.name»«BUILDER» add«augmentField.name.toFirstUpper»(Class<? extends «augmentField.returnType.importedName»> augmentationType, «augmentField.returnType.importedName» augmentation) {
+            public «type.name»«BUILDER» add«augmentField.name.toFirstUpper»(«Class.importedName»<? extends «augmentField.returnType.importedName»> augmentationType, «augmentField.returnType.importedName» augmentation) {
                 this.«augmentField.name».put(augmentationType, augmentation);
                 return this;
             }
@@ -479,8 +479,8 @@ class BuilderTemplate extends BaseTemplate {
                     this.«augmentField.name» = «Collections.importedName».emptyMap();
                     break;
                 case 1:
-                    final «Map.importedName».Entry<Class<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»> e = builder.«augmentField.name».entrySet().iterator().next();
-                    this.«augmentField.name» = «Collections.importedName».<Class<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»>singletonMap(e.getKey(), e.getValue());
+                    final «Map.importedName».Entry<«Class.importedName»<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»> e = builder.«augmentField.name».entrySet().iterator().next();
+                    this.«augmentField.name» = «Collections.importedName».<«Class.importedName»<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»>singletonMap(e.getKey(), e.getValue());
                     break;
                 default :
                     this.«augmentField.name» = new «HashMap.importedName»<>(builder.«augmentField.name»);
@@ -535,7 +535,7 @@ class BuilderTemplate extends BaseTemplate {
 
             @SuppressWarnings("unchecked")
             «IF addOverride»@Override«ENDIF»
-            public <E extends «augmentField.returnType.importedName»> E get«augmentField.name.toFirstUpper»(Class<E> augmentationType) {
+            public <E extends «augmentField.returnType.importedName»> E get«augmentField.name.toFirstUpper»(«Class.importedName»<E> augmentationType) {
                 if (augmentationType == null) {
                     throw new IllegalArgumentException("Augmentation Type reference cannot be NULL!");
                 }
@@ -578,7 +578,7 @@ class BuilderTemplate extends BaseTemplate {
     def protected generateEquals() '''
         «IF !properties.empty || augmentField != null»
             @Override
-            public boolean equals(java.lang.Object obj) {
+            public boolean equals(«Object.importedName» obj) {
                 if (this == obj) {
                     return true;
                 }
@@ -621,8 +621,8 @@ class BuilderTemplate extends BaseTemplate {
     def override generateToString(Collection<GeneratedProperty> properties) '''
         «IF !(properties === null)»
             @Override
-            public String toString() {
-                StringBuilder builder = new StringBuilder("«type.name» [");
+            public «String.importedName» toString() {
+                «StringBuilder.importedName» builder = new «StringBuilder.importedName» ("«type.name» [");
                 boolean first = true;
 
                 «FOR property : properties»
index ad65cba6ee6c8059dd739343f12f6150bb5acef0..fd033e4c74ade1dd93512759a0ed3740aef76c97 100644 (file)
@@ -185,8 +185,9 @@ class ClassTemplate extends BaseTemplate {
     def protected genUnionConstructor() '''
     «FOR p : allProperties»
         «val List<GeneratedProperty> other = new ArrayList(properties)»
-        «val added = other.remove(p)»
-        «genConstructor(p, other)»
+        «IF other.remove(p)»
+            «genConstructor(p, other)»
+        «ENDIF»
     «ENDFOR»
 
     '''
index c2b97b090aeffe5235fbb132bb6157c34adf3865..dae2d33a769432539a76e4136a35bcbe376fce52 100644 (file)
@@ -14,7 +14,6 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.opendaylight.yangtools.binding.generator.util.TypeConstants;
 import org.opendaylight.yangtools.binding.generator.util.Types;
 import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType;
@@ -258,15 +257,11 @@ public final class GeneratorUtil {
             }
         } else {
             builder = new StringBuilder();
-            if (typePackageName.startsWith("java.lang")) {
-                builder.append(type.getName());
-            } else {
                 if (!typePackageName.isEmpty()) {
                     builder.append(typePackageName + Constants.DOT + type.getName());
                 } else {
                     builder.append(type.getName());
                 }
-            }
             if (type.equals(Types.voidType())) {
                 return "void";
             }
index 329680808073322ee87d9b9ebd29b713bddec487..54c2eeb45d16a6f641eee1a0c48831c64de979dc 100644 (file)
@@ -87,7 +87,7 @@ class InterfaceTemplate extends BaseTemplate {
     def private generateAnnotations(List<AnnotationType> annotations) '''
         «IF annotations != null && !annotations.empty»
             «FOR annotation : annotations»
-                @«annotation.name»
+                @«annotation.importedName»
                 «IF annotation.parameters != null && !annotation.parameters.empty»
                 (
                 «FOR param : annotation.parameters SEPARATOR ","»
index 833fcab8545be0bc6b3533aafccafda5592bc3e1..da17a504ea9d42a353fce373296b99e71ea24c6f 100644 (file)
@@ -8,19 +8,28 @@
 package org.opendaylight.yangtools.sal.java.api.generator.test;
 
 import static org.junit.Assert.assertTrue;
-import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.*;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.BASE_PKG;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.COMPILER_OUTPUT_PATH;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.FS;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.GENERATOR_OUTPUT_PATH;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.NS_BAR;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.NS_BAZ;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.NS_FOO;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertFilesCount;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertImplementsIfc;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.cleanUp;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.getSourceFiles;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.testAugmentation;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.testCompilation;
 
 import java.io.File;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
-
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class AugmentToUsesInAugmentCompilationTest extends BaseCompilationTest {
@@ -33,8 +42,7 @@ public class AugmentToUsesInAugmentCompilationTest extends BaseCompilationTest {
         assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
 
         final List<File> sourceFiles = getSourceFiles("/compilation/augment-uses-to-augment");
-        final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
-        final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
+        final SchemaContext context = parser.parseFiles(sourceFiles);
         final List<Type> types = bindingGenerator.generateTypes(context);
         final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
         generator.generateToFile(sourcesOutputDir);
index a4f42fe8605c9b74e141ef9d7c671aafc8e5d571..b49be322c6d9ea2292649f4c77334c47a428286b 100644 (file)
@@ -7,8 +7,22 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator.test;
 
-import static org.junit.Assert.*;
-import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.BASE_PKG;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.COMPILER_OUTPUT_PATH;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.FS;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.GENERATOR_OUTPUT_PATH;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.NS_BAR;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.NS_BAZ;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.NS_FOO;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertFilesCount;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertImplementsIfc;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.cleanUp;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.getSourceFiles;
+import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.testCompilation;
 
 import java.io.File;
 import java.lang.reflect.Constructor;
@@ -17,12 +31,9 @@ import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
-
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 public class CascadeUsesCompilationTest extends BaseCompilationTest {
@@ -35,8 +46,7 @@ public class CascadeUsesCompilationTest extends BaseCompilationTest {
         assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
 
         final List<File> sourceFiles = getSourceFiles("/compilation/cascade-uses");
-        final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
-        final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
+        final SchemaContext context = parser.parseFiles(sourceFiles);
         final List<Type> types = bindingGenerator.generateTypes(context);
         final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
         generator.generateToFile(sourcesOutputDir);
index 9a318715275a70362a5dbda35790181a6da37c19..ca9c664e18fb4100864f89ae64da2fe0e7e93afc 100644 (file)
@@ -7,14 +7,15 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator.test;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
-
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -29,9 +30,8 @@ import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
 import org.opendaylight.yangtools.sal.java.api.generator.TOGenerator;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
+import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 
 public class ClassCodeGeneratorTest {
@@ -46,10 +46,9 @@ public class ClassCodeGeneratorTest {
     }
 
     @Test
-    public void compositeKeyClassTest() {
-        final YangModelParser parser = new YangParserImpl();
-        final Set<Module> modules = parser.parseYangModels(testModels);
-        final SchemaContext context = parser.resolveSchemaContext(modules);
+    public void compositeKeyClassTest() throws IOException {
+        final YangContextParser parser = new YangParserImpl();
+        final SchemaContext context = parser.parseFiles(testModels);
 
         assertNotNull(context);
         final BindingGenerator bindingGen = new BindingGeneratorImpl();
@@ -83,7 +82,7 @@ public class ClassCodeGeneratorTest {
                     final String outputStr = clsGen.generate(genTO);
 
                     assertNotNull(outputStr);
-                    assertTrue(outputStr.contains("public CompositeKeyListKey(Byte _key1, String _key2)"));
+                    assertTrue(outputStr.contains("public CompositeKeyListKey(java.lang.Byte _key1, java.lang.String _key2)"));
 
                     assertEquals(2, propertyCount);
                     genTOsCount++;
index b9f73bb3b2b14ecbe1f9559a841744de024c42f4..5597486584d53d219d12217e75d44f6ae33bbca7 100644 (file)
@@ -41,12 +41,10 @@ import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
 import org.opendaylight.yangtools.yang.binding.annotations.RoutingContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 /**
@@ -537,10 +535,21 @@ public class CompilationTest extends BaseCompilationTest {
         cleanUp(sourcesOutputDir, compiledOutputDir);
     }
 
+    @Test
+    public void classNamesColisionTest() throws Exception {
+        final File sourcesOutputDir = new File(GENERATOR_OUTPUT_PATH + FS + "class-name-collision");
+        assertTrue("Failed to create test file '" + sourcesOutputDir + "'", sourcesOutputDir.mkdir());
+        final File compiledOutputDir = new File(COMPILER_OUTPUT_PATH + FS + "class-name-collision");
+        assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
+
+        generateTestSources("/compilation/class-name-collision", sourcesOutputDir);
+        testCompilation(sourcesOutputDir, compiledOutputDir);
+        cleanUp(sourcesOutputDir, compiledOutputDir);
+    }
+
     private void generateTestSources(String resourceDirPath, File sourcesOutputDir) throws Exception {
         final List<File> sourceFiles = getSourceFiles(resourceDirPath);
-        final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
-        final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
+        final SchemaContext context = parser.parseFiles(sourceFiles);
         final List<Type> types = bindingGenerator.generateTypes(context);
         final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
         generator.generateToFile(sourcesOutputDir);
index 70fe5df6a098945f3206221092faa80b085244d4..87fa00dea6e24e19b46440222433137772c06e6a 100644 (file)
@@ -11,11 +11,8 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.File;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
-
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator;
 import org.opendaylight.yangtools.sal.binding.generator.impl.BindingGeneratorImpl;
@@ -23,27 +20,25 @@ import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
+import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 
 public class GenerateInnerClassForBitsAndUnionInLeavesTest {
 
-    private SchemaContext resolveSchemaContextFromFiles(final URI... yangFiles) {
-        final YangModelParser parser = new YangParserImpl();
+    private SchemaContext resolveSchemaContextFromFiles(final URI... yangFiles) throws Exception {
+        final YangContextParser parser = new YangParserImpl();
 
         final List<File> inputFiles = new ArrayList<File>();
         for (int i = 0; i < yangFiles.length; ++i) {
             inputFiles.add(new File(yangFiles[i]));
         }
 
-        final Set<Module> modules = parser.parseYangModels(inputFiles);
-        return parser.resolveSchemaContext(modules);
+        return parser.parseFiles(inputFiles);
     }
 
     @Test
-    public void testInnerClassCreationForBitsAndUnionsInLeafes() throws URISyntaxException {
+    public void testInnerClassCreationForBitsAndUnionsInLeafes() throws Exception {
         final URI yangTypesPath = getClass().getResource("/bit_and_union_in_leaf.yang").toURI();
 
         final SchemaContext context = resolveSchemaContextFromFiles(yangTypesPath);
index fdaa5a832a45445f9645b7315e0ae5a90c4bde7b..1af8d64ecedb05dd82169c72403f0ea97d89322a 100644 (file)
@@ -37,11 +37,9 @@ import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 /**
@@ -61,8 +59,7 @@ public class TypedefCompilationTest extends BaseCompilationTest {
         assertTrue("Failed to create test file '" + compiledOutputDir + "'", compiledOutputDir.mkdir());
 
         final List<File> sourceFiles = getSourceFiles("/compilation/typedef");
-        final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
-        final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
+        final SchemaContext context = parser.parseFiles(sourceFiles);
         final List<Type> types = bindingGenerator.generateTypes(context);
         final GeneratorJavaFile generator = new GeneratorJavaFile(new HashSet<>(types));
         generator.generateToFile(sourcesOutputDir);
diff --git a/code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/class-name-collision b/code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/class-name-collision
new file mode 100644 (file)
index 0000000..6325820
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+module class-name-collision {
+    yang-version 1;
+    namespace "urn:class:name:collision";
+    prefix "bar";
+
+    revision "2014-04-28" {
+
+    }
+
+    list string {
+    }
+
+    list string-builder {
+    }
+
+    list class {
+    }
+
+    list set {
+    }
+
+    list map {
+    }
+}
diff --git a/code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/configuration b/code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/configuration
new file mode 100644 (file)
index 0000000..10058ab
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+module configuration {
+    yang-version 1;
+    namespace "urn:configuration";
+    prefix "bar";
+
+    revision "2014-04-30" {
+    }
+
+    container configuration {
+        list class {
+            key "name";
+            leaf name {
+                type string;
+            }
+            leaf value {
+                type string;
+            }
+       }
+    }
+}
diff --git a/code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/other-module b/code-generator/binding-java-api-generator/src/test/resources/compilation/class-name-collision/other-module
new file mode 100644 (file)
index 0000000..46964be
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+module other-module {
+    yang-version 1;
+    namespace "urn:other-module";
+    prefix "bar";
+
+    revision "2014-04-29" {
+    }
+
+    list foo {
+    }
+
+    list boo {
+    }
+}
index 3225300ebb8f15ed87e9e5f442fade10abcaa0ae..01f94dff04685700333ab605828ba2f746977c22 100644 (file)
@@ -766,7 +766,7 @@ class GeneratorImpl {
 
     def CharSequence printUses(UsesNode usesNode) {
         return '''
-            «strong(listItem("uses", typeAnchorLink(usesNode.groupingPath, usesNode.groupingPath.path.last.localName)))»
+            «strong(listItem("uses", typeAnchorLink(usesNode.groupingPath, usesNode.groupingPath.pathTowardsRoot.iterator.next.localName)))»
             <ul>
             <li>refines:
                 <ul>
index d191f1be0e1989076ab8185e332536da87844164..51b19da27d8bc0a1e85804c2a90d13316aa6885a 100644 (file)
@@ -15,8 +15,6 @@
         <version>0.6.2-SNAPSHOT</version>
         <relativePath>../common/parent</relativePath>
     </parent>
-    <groupId>org.opendaylight.yangtools</groupId>
-    <version>0.6.2-SNAPSHOT</version>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>binding-generator</artifactId>
     <packaging>pom</packaging>
index f0b7c6549d3663a674dddd410214eb903923a2fb..3dd76b81ecaddd085208653fa56c7c06d59eee34 100644 (file)
@@ -35,7 +35,6 @@
             <plugin>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yang-maven-plugin</artifactId>
-                <version>0.6.2-SNAPSHOT</version>
                 <executions>
                     <execution>
                         <goals>
@@ -77,7 +76,6 @@
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
-                <version>1.8</version>
                 <executions>
                     <execution>
                         <phase>generate-sources</phase>