<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>binding-type-provider</artifactId>
- <version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
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
// 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 {
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject
import java.util.Collection
import java.util.Arrays
+import java.util.HashMap
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»;'''
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»
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»
'''
«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;
}
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»);
@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!");
}
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;
}
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»
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»
'''
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;
}
} 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";
}
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 ","»
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 {
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);
*/
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;
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 {
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);
*/
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;
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 {
}
@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();
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++;
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;
/**
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);
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;
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);
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;
/**
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);
--- /dev/null
+/*
+ * 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 {
+ }
+}
--- /dev/null
+/*
+ * 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;
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * 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 {
+ }
+}
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>
<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>
<plugin>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-maven-plugin</artifactId>
- <version>0.6.2-SNAPSHOT</version>
<executions>
<execution>
<goals>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
- <version>1.8</version>
<executions>
<execution>
<phase>generate-sources</phase>