From 08144dbae178351a098748c2edab0321d763669f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 22 Dec 2019 14:07:51 +0100 Subject: [PATCH] Propagate EffectiveModelContext for codegen plugins yang-maven-plugin infra is giving us EffectiveModelContext, which allows us to eventually switch code generation to work on EffectiveStatements rather than on SchemaNodes. This propagates EffectiveModelContext closer to actual users. Change-Id: I90dd2aa983e05748c0ac838731580adbe5055003 Signed-off-by: Robert Varga --- .../api/gen/plugin/CodeGeneratorImpl.java | 7 +++---- .../unified/doc/generator/GeneratorImpl.xtend | 18 +++++++++--------- .../wadl/generator/WadlRestconfGenerator.xtend | 6 +++--- .../api/generator/YangModuleInfoTemplate.xtend | 6 +++--- .../generator/test/BaseCompilationTest.java | 4 ++-- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java index 98036d6165..5a0aa38ffc 100644 --- a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java +++ b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java @@ -40,7 +40,6 @@ import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator; import org.opendaylight.yangtools.yang2sources.spi.BuildContextAware; import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware; @@ -127,7 +126,7 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext } private Collection generateModuleInfos(final File outputBaseDir, final Set yangModules, - final SchemaContext context, final Function> moduleResourcePathResolver) { + final EffectiveModelContext context, final Function> moduleResourcePathResolver) { Builder result = ImmutableSet.builder(); Builder bindingProviders = ImmutableSet.builder(); for (Module module : yangModules) { @@ -193,8 +192,8 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext this.buildContext = requireNonNull(buildContext); } - private Set generateYangModuleInfo(final File outputBaseDir, final Module module, final SchemaContext ctx, - final Function> moduleResourcePathResolver, + private Set generateYangModuleInfo(final File outputBaseDir, final Module module, + final EffectiveModelContext ctx, final Function> moduleResourcePathResolver, final Builder providerSourceSet) { Builder generatedFiles = ImmutableSet.builder(); diff --git a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend index 6a3bbf8517..dfe3adc4a4 100644 --- a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend +++ b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/GeneratorImpl.xtend @@ -34,6 +34,7 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode import org.opendaylight.yangtools.yang.model.api.DataNodeContainer import org.opendaylight.yangtools.yang.model.api.DataSchemaNode +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext import org.opendaylight.yangtools.yang.model.api.ElementCountConstraintAware import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition import org.opendaylight.yangtools.yang.model.api.GroupingDefinition @@ -42,7 +43,6 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode import org.opendaylight.yangtools.yang.model.api.ListSchemaNode import org.opendaylight.yangtools.yang.model.api.Module import org.opendaylight.yangtools.yang.model.api.NotificationDefinition -import org.opendaylight.yangtools.yang.model.api.SchemaContext import org.opendaylight.yangtools.yang.model.api.SchemaNode import org.opendaylight.yangtools.yang.model.api.SchemaPath import org.opendaylight.yangtools.yang.model.api.TypeDefinition @@ -71,14 +71,14 @@ class GeneratorImpl { val Map imports = new HashMap(); var Module currentModule; - var SchemaContext ctx; + var EffectiveModelContext ctx; var File path StringBuilder augmentChildNodesAsString DataSchemaNode lastNodeInTargetPath = null - def generate(BuildContext buildContext, SchemaContext context, File targetPath, Set modulesToGen) + def generate(BuildContext buildContext, EffectiveModelContext context, File targetPath, Set modulesToGen) throws IOException { path = targetPath; path.mkdirs(); @@ -89,7 +89,7 @@ class GeneratorImpl { return it; } - def generateDocumentation(BuildContext buildContext, Module module, SchemaContext ctx) { + def generateDocumentation(BuildContext buildContext, Module module, EffectiveModelContext ctx) { val destination = new File(path, '''«module.name».html''') this.ctx = ctx; module.imports.forEach[importModule | this.imports.put(importModule.prefix, importModule.moduleName)] @@ -106,7 +106,7 @@ class GeneratorImpl { return destination; } - def generate(Module module, SchemaContext ctx) ''' + def generate(Module module, EffectiveModelContext ctx) ''' @@ -118,7 +118,7 @@ class GeneratorImpl { ''' - def body(Module module, SchemaContext ctx) ''' + def body(Module module, EffectiveModelContext ctx) ''' «header(module)» «typeDefinitionsSummary(module)» @@ -307,7 +307,7 @@ class GeneratorImpl { ''' } - def augmentations(Module module, SchemaContext context) { + def augmentations(Module module, EffectiveModelContext context) { if (module.augmentations.empty) { return ''; } @@ -488,7 +488,7 @@ class GeneratorImpl { ''' } - private def augmentationsSummary(Module module, SchemaContext context) { + private def augmentationsSummary(Module module, EffectiveModelContext context) { if (module.augmentations.empty) { return ''; } @@ -1209,7 +1209,7 @@ class GeneratorImpl { return it.toString; } - private def String schemaPathToString(Module module, SchemaPath schemaPath, SchemaContext ctx, DataNodeContainer dataNode) { + private def String schemaPathToString(Module module, SchemaPath schemaPath, EffectiveModelContext ctx, DataNodeContainer dataNode) { val List path = Lists.newArrayList(schemaPath.pathFromRoot); val StringBuilder pathString = new StringBuilder() if (schemaPath.absolute) { diff --git a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend index d85916982c..7cbdcec13b 100644 --- a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend +++ b/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/yang/wadl/generator/WadlRestconfGenerator.xtend @@ -19,10 +19,10 @@ import java.util.Set import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode import org.opendaylight.yangtools.yang.model.api.DataNodeContainer import org.opendaylight.yangtools.yang.model.api.DataSchemaNode +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode import org.opendaylight.yangtools.yang.model.api.ListSchemaNode import org.opendaylight.yangtools.yang.model.api.Module -import org.opendaylight.yangtools.yang.model.api.SchemaContext import org.sonatype.plexus.build.incremental.BuildContext class WadlRestconfGenerator { @@ -30,7 +30,7 @@ class WadlRestconfGenerator { static val PATH_DELIMETER = '/' val BuildContext buildContext; val File path - var SchemaContext context; + var EffectiveModelContext context; var List configData; var List operationalData; var Module module; @@ -42,7 +42,7 @@ class WadlRestconfGenerator { this.buildContext = buildContext } - def generate(SchemaContext context, Set modules) { + def generate(EffectiveModelContext context, Set modules) { val result = new HashSet; this.context = context for (module : modules) { diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoTemplate.xtend index e27d7cdec4..4b73b6a4f4 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoTemplate.xtend @@ -25,8 +25,8 @@ import org.eclipse.xtend.lib.annotations.Accessors import org.gaul.modernizer_maven_annotations.SuppressModernizer import org.opendaylight.yangtools.yang.binding.YangModuleInfo import org.opendaylight.yangtools.yang.common.Revision +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext import org.opendaylight.yangtools.yang.model.api.Module -import org.opendaylight.yangtools.yang.model.api.SchemaContext /** * Template for {@link YangModuleInfo} implementation for a particular module. Aside from fulfilling that contract, @@ -62,7 +62,7 @@ class YangModuleInfoTemplate { ''' val Module module - val SchemaContext ctx + val EffectiveModelContext ctx val Function> moduleFilePathResolver var importedTypes = CORE_IMPORT_STR @@ -73,7 +73,7 @@ class YangModuleInfoTemplate { @Accessors val String modelBindingProviderName - new(Module module, SchemaContext ctx, Function> moduleFilePathResolver) { + new(Module module, EffectiveModelContext ctx, Function> moduleFilePathResolver) { Preconditions.checkArgument(module !== null, "Module must not be null.") this.module = module this.ctx = ctx diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java index c0ca8d4263..00e6a43fa0 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java @@ -28,8 +28,8 @@ import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile; import org.opendaylight.mdsal.binding.java.api.generator.YangModuleInfoTemplate; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public abstract class BaseCompilationTest { @@ -66,7 +66,7 @@ public abstract class BaseCompilationTest { protected final List generateTestSources(final String resourceDirPath, final File sourcesOutputDir) throws IOException, URISyntaxException { final List sourceFiles = CompilationTestUtils.getSourceFiles(resourceDirPath); - final SchemaContext context = YangParserTestUtils.parseYangFiles(sourceFiles); + final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); final List types = bindingGenerator.generateTypes(context); generateTestSources(types, sourcesOutputDir); -- 2.36.6