From 8cf98b6d1e8f6a82ad0aa57900e2281a4c6dff68 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 11 Nov 2018 21:19:16 +0100 Subject: [PATCH] Use FileGenerator for java-api-generator Do not use deprecated BasicCodeGenerator interface to interact with yang-maven-plugin. Using FileGenerator allows us to decouple lifecycle and eliminate a bit of duplication. JIRA: MDSAL-232 Change-Id: I04931ff6f70f548de5a49042201283c7e503f92e Signed-off-by: Robert Varga --- binding/binding-parent/pom.xml | 18 +- binding/maven-sal-api-gen-plugin/pom.xml | 17 +- .../api/gen/plugin/CodeGeneratorImpl.java | 292 ------------------ .../unified/doc/generator/GeneratorImpl.xtend | 2 +- .../mdsal-binding-java-api-generator/pom.xml | 8 + .../generator/CodeGeneratorGeneratedFile.java | 39 +++ .../java/api/generator/GeneratorJavaFile.java | 135 -------- .../java/api/generator/JavaFileGenerator.java | 135 ++++++++ .../generator/JavaFileGeneratorFactory.java | 25 ++ .../api/generator/SupplierGeneratedFile.java | 30 ++ ...AugmentToUsesInAugmentCompilationTest.java | 2 +- .../{test => }/BaseCompilationTest.java | 26 +- .../api/generator/{test => }/Bug1276Test.java | 2 +- .../api/generator/{test => }/Bug5151Test.java | 2 +- .../api/generator/{test => }/Bug532Test.java | 8 +- .../CascadeUsesCompilationTest.java | 18 +- .../{test => }/ClassCodeGeneratorTest.java | 3 +- .../generator/{test => }/CompilationTest.java | 2 +- .../{test => }/CompilationTestUtils.java | 2 +- .../{test => }/EncodingInJavaDocTest.java | 6 +- .../generator/{test => }/FileSearchUtil.java | 2 +- .../{test => }/GeneratorJavaFileTest.java | 2 +- .../NestedGroupingCompilationTest.java | 14 +- .../{test => }/SpecializingLeafrefTest.java | 16 +- .../{test => }/TypedefCompilationTest.java | 2 +- .../UnionTypedefUnusedImportTest.java | 10 +- .../{test => }/UnionWithIdentityrefTest.java | 2 +- .../YangModuleInfoCompilationTest.java | 57 ++-- .../java/api/generator/test/package-info.java | 8 - .../yang-module-info/import-module.yang | 0 .../yang-module-info/main-module.yang | 0 .../yang-module-info/submodule1.yang | 0 .../yang-module-info/submodule2.yang | 0 .../yang-module-info/submodule3.yang | 0 34 files changed, 349 insertions(+), 536 deletions(-) delete mode 100644 binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/CodeGeneratorGeneratedFile.java delete mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFile.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGeneratorFactory.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/SupplierGeneratedFile.java rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/AugmentToUsesInAugmentCompilationTest.java (98%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/BaseCompilationTest.java (78%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/Bug1276Test.java (97%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/Bug5151Test.java (97%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/Bug532Test.java (96%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/CascadeUsesCompilationTest.java (93%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/ClassCodeGeneratorTest.java (97%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/CompilationTest.java (99%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/CompilationTestUtils.java (99%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/EncodingInJavaDocTest.java (89%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/FileSearchUtil.java (97%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/GeneratorJavaFileTest.java (97%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/NestedGroupingCompilationTest.java (89%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/SpecializingLeafrefTest.java (98%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/TypedefCompilationTest.java (99%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/UnionTypedefUnusedImportTest.java (92%) rename binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/{test => }/UnionWithIdentityrefTest.java (97%) rename binding/{maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven => mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator}/YangModuleInfoCompilationTest.java (84%) delete mode 100644 binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/package-info.java rename binding/{maven-sal-api-gen-plugin => mdsal-binding-java-api-generator}/src/test/resources/yang-module-info/import-module.yang (100%) rename binding/{maven-sal-api-gen-plugin => mdsal-binding-java-api-generator}/src/test/resources/yang-module-info/main-module.yang (100%) rename binding/{maven-sal-api-gen-plugin => mdsal-binding-java-api-generator}/src/test/resources/yang-module-info/submodule1.yang (100%) rename binding/{maven-sal-api-gen-plugin => mdsal-binding-java-api-generator}/src/test/resources/yang-module-info/submodule2.yang (100%) rename binding/{maven-sal-api-gen-plugin => mdsal-binding-java-api-generator}/src/test/resources/yang-module-info/submodule3.yang (100%) diff --git a/binding/binding-parent/pom.xml b/binding/binding-parent/pom.xml index 72bc6319c4..3591fff7aa 100644 --- a/binding/binding-parent/pom.xml +++ b/binding/binding-parent/pom.xml @@ -60,11 +60,20 @@ yang-maven-plugin 7.0.3 + + org.opendaylight.mdsal + mdsal-binding-generator-impl + 8.0.0-SNAPSHOT + + + org.opendaylight.mdsal + mdsal-binding-java-api-generator + 8.0.0-SNAPSHOT + org.opendaylight.mdsal maven-sal-api-gen-plugin 8.0.0-SNAPSHOT - jar @@ -74,13 +83,6 @@ generate-sources - - - org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl - ${salGeneratorPath} - ${project.build.directory}/generated-sources/spi - - true diff --git a/binding/maven-sal-api-gen-plugin/pom.xml b/binding/maven-sal-api-gen-plugin/pom.xml index bd2ce79b0d..dc8a890c6a 100644 --- a/binding/maven-sal-api-gen-plugin/pom.xml +++ b/binding/maven-sal-api-gen-plugin/pom.xml @@ -47,16 +47,8 @@ yang-maven-plugin-spi - org.opendaylight.mdsal - mdsal-binding-generator-api - - - org.opendaylight.mdsal - mdsal-binding-generator-impl - - - org.opendaylight.mdsal - mdsal-binding-java-api-generator + org.eclipse.xtext + org.eclipse.xtext.xbase.lib @@ -75,6 +67,11 @@ plexus-build-api provided + + org.kohsuke.metainf-services + metainf-services + + org.opendaylight.yangtools yang-test-util 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 deleted file mode 100644 index d3459d1a98..0000000000 --- a/binding/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/mdsal/binding/maven/api/gen/plugin/CodeGeneratorImpl.java +++ /dev/null @@ -1,292 +0,0 @@ -/* - * 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 - */ -package org.opendaylight.mdsal.binding.maven.api.gen.plugin; - -import static java.util.Objects.requireNonNull; - -import com.google.common.base.Joiner; -import com.google.common.base.Stopwatch; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.MultimapBuilder; -import com.google.common.collect.Table; -import com.google.common.collect.Table.Cell; -import java.io.BufferedWriter; -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; -import java.util.Set; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import org.apache.maven.project.MavenProject; -import org.opendaylight.mdsal.binding.generator.api.BindingGenerator; -import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile; -import org.opendaylight.mdsal.binding.java.api.generator.GeneratorJavaFile.FileKind; -import org.opendaylight.mdsal.binding.java.api.generator.YangModuleInfoTemplate; -import org.opendaylight.mdsal.binding.model.api.GeneratedType; -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.repo.api.YangTextSchemaSource; -import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator; -import org.opendaylight.yangtools.yang2sources.spi.BuildContextAware; -import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware; -import org.opendaylight.yangtools.yang2sources.spi.ModuleResourceResolver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sonatype.plexus.build.incremental.BuildContext; - -public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContextAware, MavenProjectAware { - public static final String CONFIG_PERSISTENT_SOURCES_DIR = "persistentSourcesDir"; - public static final String CONFIG_IGNORE_DUPLICATE_FILES = "ignoreDuplicateFiles"; - - private static final Logger LOG = LoggerFactory.getLogger(CodeGeneratorImpl.class); - private static final String FS = File.separator; - - private BuildContext buildContext; - private File projectBaseDir; - private Map additionalConfig; - private MavenProject mavenProject; - private File resourceBaseDir; - - @Override - public Collection generateSources(final EffectiveModelContext context, final File outputDir, - final Set yangModules, final ModuleResourceResolver moduleResourcePathResolver) throws IOException { - final File outputBaseDir; - - outputBaseDir = outputDir == null ? getDefaultOutputBaseDir() : outputDir; - - // Step one: determine binding types which we are generating - final Stopwatch sw = Stopwatch.createStarted(); - final List types = ServiceLoader.load(BindingGenerator.class) - .findFirst().orElseThrow(() -> new IllegalStateException("No BindingGenerator implementation found")) - .generateTypes(context, yangModules); - LOG.info("Found {} Binding types in {}", types.size(), sw); - - final GeneratorJavaFile generator = new GeneratorJavaFile(types); - - File persistentSourcesDir = null; - boolean ignoreDuplicateFiles = true; - if (additionalConfig != null) { - String persistenSourcesPath = additionalConfig.get(CONFIG_PERSISTENT_SOURCES_DIR); - if (persistenSourcesPath != null) { - persistentSourcesDir = new File(persistenSourcesPath); - } - String ignoreDuplicateFilesString = additionalConfig.get(CONFIG_IGNORE_DUPLICATE_FILES); - if (ignoreDuplicateFilesString != null) { - ignoreDuplicateFiles = Boolean.parseBoolean(ignoreDuplicateFilesString); - } - } - if (persistentSourcesDir == null) { - persistentSourcesDir = new File(projectBaseDir, "src" + FS + "main" + FS + "java"); - } - - final Table> generatedFiles = generator.generateFileContent( - ignoreDuplicateFiles); - - // Step two: create generation tasks for each target file and group them by parent directory - final ListMultimap dirs = MultimapBuilder.hashKeys().arrayListValues().build(); - for (Cell> cell : generatedFiles.cellSet()) { - final File target; - switch (cell.getRowKey()) { - case PERSISTENT: - target = new File(persistentSourcesDir, cell.getColumnKey()); - if (target.exists()) { - LOG.debug("Skipping existing persistent {}", target); - continue; - } - break; - case TRANSIENT: - target = new File(outputBaseDir, cell.getColumnKey()); - break; - default: - throw new IllegalStateException("Unsupported file type in " + cell); - } - - dirs.put(target.getParentFile().toPath(), new GenerationTask(buildContext, target, cell.getValue())); - } - LOG.info("Generating {} Binding source files into {} directories", dirs.size(), dirs.keySet().size()); - - // Step three: submit parent directory creation tasks (via parallelStream()) and wait for them to complete - sw.reset().start(); - dirs.keySet().parallelStream().forEach(path -> { - try { - Files.createDirectories(path); - } catch (IOException e) { - throw new IllegalStateException("Failed to create " + path, e); - } - }); - LOG.debug("Parent directories created in {}", sw); - - // Step four: submit all code generation tasks (via parallelStream()) and wait for them to complete - sw.reset().start(); - final List result = dirs.values().parallelStream() - .map(GenerationTask::generateFile) - .collect(Collectors.toList()); - LOG.debug("{} Binding source type files generated in {}", result.size(), sw); - - // Step five: generate auxiliary files - result.addAll(generateModuleInfos(outputBaseDir, yangModules, context, moduleResourcePathResolver)); - return result; - } - - private Collection generateModuleInfos(final File outputBaseDir, final Set yangModules, - final EffectiveModelContext context, final ModuleResourceResolver moduleResourcePathResolver) - throws IOException { - Builder result = ImmutableSet.builder(); - Builder bindingProviders = ImmutableSet.builder(); - for (Module module : yangModules) { - Builder currentProvidersBuilder = ImmutableSet.builder(); - // TODO: do not mutate parameters, output of a method is defined by its return value - Set moduleInfoProviders = generateYangModuleInfo(outputBaseDir, module, context, - moduleResourcePathResolver, currentProvidersBuilder); - ImmutableSet currentProviders = currentProvidersBuilder.build(); - LOG.debug("Adding ModuleInfo providers {}", currentProviders); - bindingProviders.addAll(currentProviders); - result.addAll(moduleInfoProviders); - } - - result.add(writeMetaInfServices(resourceBaseDir, YangModelBindingProvider.class, bindingProviders.build())); - return result.build(); - } - - private File writeMetaInfServices(final File outputBaseDir, final Class serviceClass, - final ImmutableSet services) throws IOException { - File metainfServicesFolder = new File(outputBaseDir, "META-INF" + File.separator + "services"); - Files.createDirectories(metainfServicesFolder.toPath()); - File serviceFile = new File(metainfServicesFolder, serviceClass.getName()); - - String src = Joiner.on('\n').join(services); - - return writeFile(serviceFile, src); - } - - public static final String DEFAULT_OUTPUT_BASE_DIR_PATH = "target" + File.separator + "generated-sources" - + File.separator + "maven-sal-api-gen"; - - private File getDefaultOutputBaseDir() { - File outputBaseDir; - outputBaseDir = new File(DEFAULT_OUTPUT_BASE_DIR_PATH); - setOutputBaseDirAsSourceFolder(outputBaseDir, mavenProject); - LOG.debug("Adding {} as compile source root", outputBaseDir.getPath()); - return outputBaseDir; - } - - private static void setOutputBaseDirAsSourceFolder(final File outputBaseDir, final MavenProject mavenProject) { - requireNonNull(mavenProject, "Maven project needs to be set in this phase"); - mavenProject.addCompileSourceRoot(outputBaseDir.getPath()); - } - - @Override - public void setAdditionalConfig(final Map additionalConfiguration) { - this.additionalConfig = additionalConfiguration; - } - - @Override - public void setResourceBaseDir(final File resourceBaseDir) { - this.resourceBaseDir = resourceBaseDir; - } - - @Override - public void setMavenProject(final MavenProject project) { - this.mavenProject = project; - this.projectBaseDir = project.getBasedir(); - } - - @Override - public void setBuildContext(final BuildContext buildContext) { - this.buildContext = requireNonNull(buildContext); - } - - private Set generateYangModuleInfo(final File outputBaseDir, final Module module, - final EffectiveModelContext ctx, final ModuleResourceResolver moduleResourcePathResolver, - final Builder providerSourceSet) throws IOException { - Builder generatedFiles = ImmutableSet.builder(); - - final YangModuleInfoTemplate template = new YangModuleInfoTemplate(module, ctx, - mod -> moduleResourcePathResolver.findModuleResourcePath(mod, YangTextSchemaSource.class)); - String moduleInfoSource = template.generate(); - if (moduleInfoSource.isEmpty()) { - throw new IllegalStateException("Generated code should not be empty!"); - } - String providerSource = template.generateModelProvider(); - - final File packageDir = GeneratorJavaFile.packageToDirectory(outputBaseDir, - BindingMapping.getRootPackageName(module.getQNameModule())); - - generatedFiles.add(writeJavaSource(packageDir, BindingMapping.MODULE_INFO_CLASS_NAME, moduleInfoSource)); - generatedFiles.add(writeJavaSource(packageDir, BindingMapping.MODEL_BINDING_PROVIDER_CLASS_NAME, - providerSource)); - providerSourceSet.add(template.getModelBindingProviderName()); - - return generatedFiles.build(); - - } - - private File writeJavaSource(final File packageDir, final String className, final String source) - throws IOException { - Files.createDirectories(packageDir.toPath()); - final File file = new File(packageDir, className + ".java"); - writeFile(file, source); - return file; - } - - @SuppressWarnings("checkstyle:illegalCatch") - private File writeFile(final File file, final String source) { - try (OutputStream stream = buildContext.newFileOutputStream(file)) { - try (Writer fw = new OutputStreamWriter(stream, StandardCharsets.UTF_8)) { - try (BufferedWriter bw = new BufferedWriter(fw)) { - bw.write(source); - } - } catch (RuntimeException e) { - LOG.error("Could not write file: {}", file, e); - } - } catch (IOException e) { - LOG.error("Could not create file: {}", file, e); - } - return file; - } - - private static final class GenerationTask { - private final BuildContext buildContext; - private final Supplier contentSupplier; - private final File target; - - GenerationTask(final BuildContext buildContext, final File target, final Supplier contentSupplier) { - this.buildContext = requireNonNull(buildContext); - this.target = requireNonNull(target); - this.contentSupplier = requireNonNull(contentSupplier); - } - - File generateFile() { - try { - try (OutputStream stream = buildContext.newFileOutputStream(target)) { - try (Writer fw = new OutputStreamWriter(stream, StandardCharsets.UTF_8)) { - try (BufferedWriter bw = new BufferedWriter(fw)) { - bw.write(contentSupplier.get()); - } - } - } - } catch (IOException e) { - throw new IllegalStateException("Failed to generate file " + target, e); - } - return target; - } - } -} 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 1394217325..df0652ac75 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 @@ -65,7 +65,7 @@ class GeneratorImpl { static val Logger LOG = LoggerFactory.getLogger(GeneratorImpl) - val Map imports = new HashMap() + val Map imports = new HashMap val Map, SchemaPath> types = new IdentityHashMap var Module currentModule var EffectiveModelContext ctx diff --git a/binding/mdsal-binding-java-api-generator/pom.xml b/binding/mdsal-binding-java-api-generator/pom.xml index bfb2719c7f..cb14ff975a 100644 --- a/binding/mdsal-binding-java-api-generator/pom.xml +++ b/binding/mdsal-binding-java-api-generator/pom.xml @@ -28,6 +28,10 @@ org.opendaylight.yangtools yang-model-export + + org.opendaylight.yangtools + plugin-generator-api + org.eclipse.xtend org.eclipse.xtend.lib @@ -40,6 +44,10 @@ org.apache.commons commons-text + + org.kohsuke.metainf-services + metainf-services + org.opendaylight.yangtools diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/CodeGeneratorGeneratedFile.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/CodeGeneratorGeneratedFile.java new file mode 100644 index 0000000000..f362d3f421 --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/CodeGeneratorGeneratedFile.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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 + */ +package org.opendaylight.mdsal.binding.java.api.generator; + +import static java.util.Objects.requireNonNull; + +import com.google.common.base.MoreObjects.ToStringHelper; +import java.io.IOException; +import java.io.Writer; +import org.opendaylight.mdsal.binding.model.api.CodeGenerator; +import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.yangtools.plugin.generator.api.AbstractGeneratedTextFile; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFileLifecycle; + +final class CodeGeneratorGeneratedFile extends AbstractGeneratedTextFile { + private final CodeGenerator generator; + private final Type type; + + CodeGeneratorGeneratedFile(final GeneratedFileLifecycle lifecycle, final CodeGenerator generator, final Type type) { + super(lifecycle); + this.generator = requireNonNull(generator); + this.type = requireNonNull(type); + } + + @Override + protected void writeBody(final Writer output) throws IOException { + output.write(generator.generate(type)); + } + + @Override + protected ToStringHelper addToStringAttributes(final ToStringHelper helper) { + return super.addToStringAttributes(helper).add("generator", generator).add("type", type); + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFile.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFile.java deleted file mode 100644 index c7b1c37284..0000000000 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFile.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * 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 - */ -package org.opendaylight.mdsal.binding.java.api.generator; - -import static java.util.Objects.requireNonNull; - -import com.google.common.base.MoreObjects; -import com.google.common.collect.HashBasedTable; -import com.google.common.collect.Table; -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.function.Supplier; -import org.opendaylight.mdsal.binding.model.api.CodeGenerator; -import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; -import org.opendaylight.mdsal.binding.model.api.Type; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Generates files with JAVA source codes for every specified type. - */ -public final class GeneratorJavaFile { - public enum FileKind { - /** - * Transient file. It should be generated in target/generated-sources/ directory or similar. - */ - TRANSIENT, - /** - * Persistent file. It should be generated in src/main/java/ directory or similar. - */ - PERSISTENT, - } - - private static final class GeneratorStringSupplier implements Supplier { - private final CodeGenerator generator; - private final Type type; - - GeneratorStringSupplier(final CodeGenerator generator, final Type type) { - this.generator = requireNonNull(generator); - this.type = requireNonNull(type); - } - - @Override - public String get() { - return generator.generate(type); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this).add("generator", generator).add("type", type).toString(); - } - } - - private static final Logger LOG = LoggerFactory.getLogger(GeneratorJavaFile.class); - - /** - * List of CodeGenerator instances. - */ - private final List generators = new ArrayList<>(); - - /** - * Set of Type instances for which the JAVA code is generated. - */ - private final Collection types; - - /** - * Creates instance of this class with the set of types for which the JAVA code is generated. Generator - * instantiated this way uses the default build context, e.g. it will re-generate any and all files. The instances - * of concrete JAVA code generator are created. - * - * @param types set of types for which JAVA code should be generated - */ - public GeneratorJavaFile(final Collection types) { - this.types = requireNonNull(types); - generators.add(new InterfaceGenerator()); - generators.add(new TOGenerator()); - generators.add(new EnumGenerator()); - generators.add(new BuilderGenerator()); - } - - public Table> generateFileContent(final boolean ignoreDuplicates) { - final Table> result = HashBasedTable.create(); - for (Type type : types) { - for (CodeGenerator generator : generators) { - if (!generator.isAcceptable(type)) { - continue; - } - - final FileKind kind = type instanceof GeneratedTransferObject - && ((GeneratedTransferObject) type).isUnionTypeBuilder() - ? FileKind.PERSISTENT : FileKind.TRANSIENT; - final String file = type.getPackageName().replace('.', File.separatorChar) - + File.separator + generator.getUnitName(type) + ".java"; - - if (result.contains(kind, file)) { - if (ignoreDuplicates) { - LOG.warn("Naming conflict for type '{}': file with same name already exists and will not be " - + "generated.", type.getFullyQualifiedName()); - continue; - } - throw new IllegalStateException("Duplicate " + kind + " file '" + file + "' for " - + type.getFullyQualifiedName()); - } - - result.put(kind, file, new GeneratorStringSupplier(generator, type)); - } - } - - return result; - } - - /** - * Creates the package directory path as concatenation of parentDirectory and parsed - * packageName. The parsing of packageName is realized as replacement of the package name - * dots with the file system separator. - * - * @param parentDirectory File object with reference to parent directory - * @param packageName string with the name of the package - * @return File object which refers to the new directory for package packageName - */ - public static File packageToDirectory(final File parentDirectory, final String packageName) { - if (packageName == null) { - throw new IllegalArgumentException("Package Name cannot be NULL!"); - } - - return new File(parentDirectory, packageName.replace('.', File.separatorChar)); - } -} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java new file mode 100644 index 0000000000..963d87539d --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGenerator.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2020 PATHEON.tech, s.r.o. 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 + */ +package org.opendaylight.mdsal.binding.java.api.generator; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.CharMatcher; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSet.Builder; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Table; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; +import java.util.Set; +import org.opendaylight.mdsal.binding.generator.api.BindingGenerator; +import org.opendaylight.mdsal.binding.model.api.CodeGenerator; +import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.mdsal.binding.model.api.GeneratedType; +import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; +import org.opendaylight.yangtools.plugin.generator.api.FileGenerator; +import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorException; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFile; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFileLifecycle; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFilePath; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFileType; +import org.opendaylight.yangtools.plugin.generator.api.ModuleResourceResolver; +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.repo.api.YangTextSchemaSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +final class JavaFileGenerator implements FileGenerator { + public static final String CONFIG_IGNORE_DUPLICATE_FILES = "ignoreDuplicateFiles"; + + private static final Logger LOG = LoggerFactory.getLogger(JavaFileGenerator.class); + private static final CharMatcher DOT_MATCHER = CharMatcher.is('.'); + private static final String MODULE_INFO = BindingMapping.MODULE_INFO_CLASS_NAME + ".java"; + private static final String MODEL_BINDING_PROVIDER = BindingMapping.MODEL_BINDING_PROVIDER_CLASS_NAME + ".java"; + private static final GeneratedFilePath MODEL_BINDING_PROVIDER_SERVICE = + GeneratedFilePath.ofPath("META-INF/services/" + YangModelBindingProvider.class.getName()); + private static final List GENERATORS = List.of( + new InterfaceGenerator(), new TOGenerator(), new EnumGenerator(), new BuilderGenerator()); + + private final BindingGenerator bindingGenerator; + private final boolean ignoreDuplicateFiles; + + JavaFileGenerator(final Map additionalConfig) { + final String ignoreDuplicateFilesString = additionalConfig.get(CONFIG_IGNORE_DUPLICATE_FILES); + if (ignoreDuplicateFilesString != null) { + ignoreDuplicateFiles = Boolean.parseBoolean(ignoreDuplicateFilesString); + } else { + ignoreDuplicateFiles = true; + } + bindingGenerator = ServiceLoader.load(BindingGenerator.class).findFirst() + .orElseThrow(() -> new IllegalStateException("No BindingGenerator implementation found")); + } + + @Override + public Table generateFiles(final EffectiveModelContext context, + final Set localModules, final ModuleResourceResolver moduleResourcePathResolver) + throws FileGeneratorException { + final Table result = + generateFiles(bindingGenerator.generateTypes(context, localModules), ignoreDuplicateFiles); + + // YangModuleInfo files + final Builder bindingProviders = ImmutableSet.builder(); + for (Module module : localModules) { + final YangModuleInfoTemplate template = new YangModuleInfoTemplate(module, context, + mod -> moduleResourcePathResolver.findModuleResourcePath(mod, YangTextSchemaSource.class)); + final String path = DOT_MATCHER.replaceFrom(template.getPackageName(), '/') + "/"; + + result.put(GeneratedFileType.SOURCE, GeneratedFilePath.ofPath(path + MODULE_INFO), + new SupplierGeneratedFile(GeneratedFileLifecycle.TRANSIENT, template::generate)); + result.put(GeneratedFileType.SOURCE, GeneratedFilePath.ofPath(path + MODEL_BINDING_PROVIDER), + new SupplierGeneratedFile(GeneratedFileLifecycle.TRANSIENT, template::generateModelProvider)); + + bindingProviders.add(template.getModelBindingProviderName()); + } + + // META-INF/services entries, sorted to make the build predictable + final List sorted = new ArrayList<>(bindingProviders.build()); + sorted.sort(String::compareTo); + + result.put(GeneratedFileType.RESOURCE, MODEL_BINDING_PROVIDER_SERVICE, + GeneratedFile.of(GeneratedFileLifecycle.TRANSIENT, String.join("\n", sorted))); + + return ImmutableTable.copyOf(result); + } + + @VisibleForTesting + static Table generateFiles(final List types, + final boolean ignoreDuplicateFiles) { + final Table result = HashBasedTable.create(); + + for (Type type : types) { + for (CodeGenerator generator : GENERATORS) { + if (!generator.isAcceptable(type)) { + continue; + } + + final GeneratedFileLifecycle kind = type instanceof GeneratedTransferObject + && ((GeneratedTransferObject) type).isUnionTypeBuilder() + ? GeneratedFileLifecycle.PERSISTENT : GeneratedFileLifecycle.TRANSIENT; + final GeneratedFilePath file = GeneratedFilePath.ofFilePath( + type.getPackageName().replace('.', File.separatorChar) + + File.separator + generator.getUnitName(type) + ".java"); + + if (result.contains(GeneratedFileType.SOURCE, file)) { + if (ignoreDuplicateFiles) { + LOG.warn("Naming conflict for type '{}': file with same name already exists and will not be " + + "generated.", type.getFullyQualifiedName()); + continue; + } + throw new IllegalStateException("Duplicate " + kind + " file '" + file.getPath() + "' for " + + type.getFullyQualifiedName()); + } + + result.put(GeneratedFileType.SOURCE, file, new CodeGeneratorGeneratedFile(kind, generator, type)); + } + } + + return result; + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGeneratorFactory.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGeneratorFactory.java new file mode 100644 index 0000000000..90f1c5ae61 --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/JavaFileGeneratorFactory.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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 + */ +package org.opendaylight.mdsal.binding.java.api.generator; + +import java.util.Map; +import org.kohsuke.MetaInfServices; +import org.opendaylight.yangtools.plugin.generator.api.AbstractFileGeneratorFactory; +import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorFactory; + +@MetaInfServices(value = FileGeneratorFactory.class) +public final class JavaFileGeneratorFactory extends AbstractFileGeneratorFactory { + public JavaFileGeneratorFactory() { + super(JavaFileGenerator.class.getName()); + } + + @Override + public JavaFileGenerator newFileGenerator(final Map additionalConfiguration) { + return new JavaFileGenerator(additionalConfiguration); + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/SupplierGeneratedFile.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/SupplierGeneratedFile.java new file mode 100644 index 0000000000..5a871279ba --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/SupplierGeneratedFile.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. 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 + */ +package org.opendaylight.mdsal.binding.java.api.generator; + +import static java.util.Objects.requireNonNull; + +import java.io.IOException; +import java.io.Writer; +import java.util.function.Supplier; +import org.opendaylight.yangtools.plugin.generator.api.AbstractGeneratedTextFile; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFileLifecycle; + +final class SupplierGeneratedFile extends AbstractGeneratedTextFile { + private final Supplier supplier; + + SupplierGeneratedFile(final GeneratedFileLifecycle lifecycle, final Supplier supplier) { + super(lifecycle); + this.supplier = requireNonNull(supplier); + } + + @Override + protected void writeBody(final Writer output) throws IOException { + output.write(supplier.get()); + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/AugmentToUsesInAugmentCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/AugmentToUsesInAugmentCompilationTest.java similarity index 98% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/AugmentToUsesInAugmentCompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/AugmentToUsesInAugmentCompilationTest.java index 67fe80c047..e645754f41 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/AugmentToUsesInAugmentCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/AugmentToUsesInAugmentCompilationTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertTrue; 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/BaseCompilationTest.java similarity index 78% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/BaseCompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BaseCompilationTest.java index 0ae56db159..acc2fc39b6 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/BaseCompilationTest.java @@ -5,27 +5,27 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; +import static java.nio.file.Files.newOutputStream; import static org.junit.Assert.assertTrue; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Table; import com.google.common.collect.Table.Cell; import com.google.common.io.Files; import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Optional; -import java.util.function.Supplier; import org.junit.BeforeClass; import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingGenerator; -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.GeneratedType; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFile; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFilePath; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -45,12 +45,14 @@ public abstract class BaseCompilationTest { throws IOException { types.sort((o1, o2) -> o2.getName().compareTo(o1.getName())); - final GeneratorJavaFile generator = new GeneratorJavaFile(ImmutableSet.copyOf(types)); - final Table> generatedFiles = generator.generateFileContent(true); - for (Cell> cell : generatedFiles.cellSet()) { - final File target = new File(sourcesOutputDir, cell.getColumnKey()); + final Table generatedFiles = JavaFileGenerator.generateFiles(types, true); + for (Cell cell : generatedFiles.cellSet()) { + final File target = new File(sourcesOutputDir, cell.getColumnKey().getPath()); Files.createParentDirs(target); - Files.asCharSink(target, StandardCharsets.UTF_8).write(cell.getValue().get()); + + try (OutputStream os = newOutputStream(target.toPath())) { + cell.getValue().writeBody(os); + } } } @@ -66,8 +68,8 @@ public abstract class BaseCompilationTest { final YangModuleInfoTemplate template = new YangModuleInfoTemplate(module, context, mod -> Optional.of("fake/" + mod.getName())); - final File file = new File(GeneratorJavaFile.packageToDirectory(sourcesOutputDir, - BindingMapping.getRootPackageName(module.getQNameModule())), + final File file = new File(new File(sourcesOutputDir, + BindingMapping.getRootPackageName(module.getQNameModule()).replace('.', File.separatorChar)), BindingMapping.MODULE_INFO_CLASS_NAME + ".java"); Files.createParentDirs(file); Files.asCharSink(file, StandardCharsets.UTF_8).write(template.generate()); diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug1276Test.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug1276Test.java similarity index 97% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug1276Test.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug1276Test.java index 2223b7b68b..3a421db211 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug1276Test.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug1276Test.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import java.io.File; import java.lang.reflect.Constructor; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug5151Test.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug5151Test.java similarity index 97% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug5151Test.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug5151Test.java index b295efa693..910d366c0e 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug5151Test.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug5151Test.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug532Test.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug532Test.java similarity index 96% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug532Test.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug532Test.java index 87f307f840..92bc7adbfc 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/Bug532Test.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/Bug532Test.java @@ -5,13 +5,13 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.BASE_PKG; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.BASE_PKG; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.cleanUp; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.testCompilation; import com.google.common.collect.Lists; import java.io.File; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CascadeUsesCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CascadeUsesCompilationTest.java similarity index 93% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CascadeUsesCompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CascadeUsesCompilationTest.java index 461a9073d6..da586db213 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CascadeUsesCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CascadeUsesCompilationTest.java @@ -5,20 +5,20 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; 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.mdsal.binding.java.api.generator.test.CompilationTestUtils.BASE_PKG; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.NS_BAR; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.NS_BAZ; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.NS_FOO; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.assertFilesCount; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.assertImplementsIfc; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.BASE_PKG; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_BAR; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_BAZ; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_FOO; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.assertFilesCount; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.assertImplementsIfc; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.cleanUp; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.testCompilation; import java.io.File; import java.lang.reflect.Constructor; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/ClassCodeGeneratorTest.java similarity index 97% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/ClassCodeGeneratorTest.java index 5121bc2b31..0d76aa88ae 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/ClassCodeGeneratorTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/ClassCodeGeneratorTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; @@ -16,7 +16,6 @@ import static org.junit.Assert.assertNotNull; import java.util.List; import org.junit.Test; import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingGenerator; -import org.opendaylight.mdsal.binding.java.api.generator.TOGenerator; import org.opendaylight.mdsal.binding.model.api.GeneratedProperty; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CompilationTest.java similarity index 99% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CompilationTest.java index b1c9e3d628..68db74f46c 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CompilationTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.hamcrest.CoreMatchers.startsWith; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTestUtils.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CompilationTestUtils.java similarity index 99% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTestUtils.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CompilationTestUtils.java index fb5569b05e..07936751d7 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTestUtils.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/CompilationTestUtils.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static com.google.common.base.Preconditions.checkState; import static org.junit.Assert.assertEquals; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/EncodingInJavaDocTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/EncodingInJavaDocTest.java similarity index 89% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/EncodingInJavaDocTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/EncodingInJavaDocTest.java index b5aa586ac0..ac35bb35a3 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/EncodingInJavaDocTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/EncodingInJavaDocTest.java @@ -5,10 +5,10 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.cleanUp; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.testCompilation; import java.io.File; import org.junit.Test; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/FileSearchUtil.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/FileSearchUtil.java similarity index 97% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/FileSearchUtil.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/FileSearchUtil.java index b57dfd5472..4f9d6c1222 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/FileSearchUtil.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/FileSearchUtil.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFileTest.java similarity index 97% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFileTest.java index 2091a06a46..c7db1db8e5 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/GeneratorJavaFileTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/GeneratorJavaFileTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertTrue; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/NestedGroupingCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/NestedGroupingCompilationTest.java similarity index 89% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/NestedGroupingCompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/NestedGroupingCompilationTest.java index d4975eb157..9245830e13 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/NestedGroupingCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/NestedGroupingCompilationTest.java @@ -5,15 +5,15 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertTrue; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.BASE_PKG; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.NS_TEST; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.assertFilesCount; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.assertImplementsIfc; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.BASE_PKG; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.NS_TEST; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.assertFilesCount; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.assertImplementsIfc; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.cleanUp; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.testCompilation; import java.io.File; import java.net.URL; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/SpecializingLeafrefTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/SpecializingLeafrefTest.java similarity index 98% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/SpecializingLeafrefTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/SpecializingLeafrefTest.java index e108e8c2f9..425d498a43 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/SpecializingLeafrefTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/SpecializingLeafrefTest.java @@ -5,20 +5,20 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.DOUBLE_TAB; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.TAB; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.TRIPLE_TAB; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.doubleTab; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.getFiles; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.tab; -import static org.opendaylight.mdsal.binding.java.api.generator.test.FileSearchUtil.tripleTab; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.DOUBLE_TAB; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.TAB; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.TRIPLE_TAB; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.doubleTab; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.getFiles; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.tab; +import static org.opendaylight.mdsal.binding.java.api.generator.FileSearchUtil.tripleTab; import java.io.File; import java.io.IOException; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/TypedefCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/TypedefCompilationTest.java similarity index 99% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/TypedefCompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/TypedefCompilationTest.java index dd932fba0f..296395920e 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/TypedefCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/TypedefCompilationTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTypedefUnusedImportTest.java similarity index 92% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTypedefUnusedImportTest.java index 76f0b789a2..8e35df7a72 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionTypedefUnusedImportTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTypedefUnusedImportTest.java @@ -5,13 +5,13 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertFalse; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.FS; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.GENERATOR_OUTPUT_PATH; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.cleanUp; -import static org.opendaylight.mdsal.binding.java.api.generator.test.CompilationTestUtils.testCompilation; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.FS; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.GENERATOR_OUTPUT_PATH; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.cleanUp; +import static org.opendaylight.mdsal.binding.java.api.generator.CompilationTestUtils.testCompilation; import java.io.File; import java.io.IOException; diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionWithIdentityrefTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/UnionWithIdentityrefTest.java similarity index 97% rename from binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionWithIdentityrefTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/UnionWithIdentityrefTest.java index 18ba8c58cd..f7b9439641 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/UnionWithIdentityrefTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/UnionWithIdentityrefTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.java.api.generator.test; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; diff --git a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoCompilationTest.java similarity index 84% rename from binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java rename to binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoCompilationTest.java index 0b7c682553..f17beba5d1 100644 --- a/binding/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/mdsal/binding/yang/unified/doc/generator/maven/YangModuleInfoCompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/YangModuleInfoCompilationTest.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.yang.unified.doc.generator.maven; +package org.opendaylight.mdsal.binding.java.api.generator; import static org.hamcrest.CoreMatchers.startsWith; import static org.hamcrest.MatcherAssert.assertThat; @@ -15,18 +15,22 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Table; import java.io.File; import java.io.FileNotFoundException; +import java.io.OutputStream; import java.lang.reflect.Method; import java.net.URI; import java.net.URL; import java.net.URLClassLoader; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Optional; import java.util.Set; import javax.tools.Diagnostic; @@ -34,15 +38,15 @@ import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; -import org.apache.maven.project.MavenProject; import org.junit.BeforeClass; import org.junit.Test; -import org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFile; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFilePath; +import org.opendaylight.yangtools.plugin.generator.api.GeneratedFileType; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; -import org.sonatype.plexus.build.incremental.DefaultBuildContext; /** * Test correct generation of YangModuleInfo class. @@ -152,29 +156,36 @@ public class YangModuleInfoCompilationTest { throws Exception { final List sourceFiles = getSourceFiles(resourceDirPath); final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); - CodeGeneratorImpl codegen = new CodeGeneratorImpl(); - codegen.setBuildContext(new DefaultBuildContext()); - codegen.generateSources(context, sourcesOutputDir, Set.copyOf(context.getModules()), - (module, representation) -> Optional.of(resourceDirPath + File.separator + module.getName() - + YangConstants.RFC6020_YANG_FILE_EXTENSION)); + final Table codegen = new JavaFileGenerator(Map.of()) + .generateFiles(context, Set.copyOf(context.getModules()), + (module, representation) -> Optional.of(resourceDirPath + File.separator + module.getName() + + YangConstants.RFC6020_YANG_FILE_EXTENSION)); + + assertEquals(15, codegen.size()); + assertEquals(14, codegen.row(GeneratedFileType.SOURCE).size()); + assertEquals(1, codegen.row(GeneratedFileType.RESOURCE).size()); + + for (Entry entry : codegen.row(GeneratedFileType.SOURCE).entrySet()) { + final Path path = new File(sourcesOutputDir, + entry.getKey().getPath().replace(GeneratedFilePath.SEPARATOR, File.separatorChar)).toPath(); + + Files.createDirectories(path.getParent()); + try (OutputStream out = Files.newOutputStream(path)) { + entry.getValue().writeBody(out); + } + } } @Test public void generateTestSourcesWithAdditionalConfig() throws Exception { final List sourceFiles = getSourceFiles("/yang-module-info"); final EffectiveModelContext context = YangParserTestUtils.parseYangFiles(sourceFiles); - CodeGeneratorImpl codegen = new CodeGeneratorImpl(); - codegen.setBuildContext(new DefaultBuildContext()); - codegen.setResourceBaseDir(null); - codegen.setMavenProject(new MavenProject()); - codegen.setAdditionalConfig(ImmutableMap.of("test", "test")); - Collection files = codegen.generateSources(context, null, Set.copyOf(context.getModules()), - (module, representation) -> Optional.of(module.getName())); - assertFalse(files.isEmpty()); - files.forEach(file -> { - deleteTestDir(file); - assertFalse(file.exists()); - }); + JavaFileGenerator codegen = new JavaFileGenerator(Map.of("test", "test")); + Table files = codegen.generateFiles(context, + Set.copyOf(context.getModules()), (module, representation) -> Optional.of(module.getName())); + assertEquals(15, files.size()); + assertEquals(14, files.row(GeneratedFileType.SOURCE).size()); + assertEquals(1, files.row(GeneratedFileType.RESOURCE).size()); } private static void testCompilation(final File sourcesOutputDir, final File compiledOutputDir) { diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/package-info.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/package-info.java deleted file mode 100644 index 08ae043fe8..0000000000 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/* - * 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 - */ -package org.opendaylight.mdsal.binding.java.api.generator.test; diff --git a/binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/import-module.yang b/binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/import-module.yang similarity index 100% rename from binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/import-module.yang rename to binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/import-module.yang diff --git a/binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/main-module.yang b/binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/main-module.yang similarity index 100% rename from binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/main-module.yang rename to binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/main-module.yang diff --git a/binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/submodule1.yang b/binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/submodule1.yang similarity index 100% rename from binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/submodule1.yang rename to binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/submodule1.yang diff --git a/binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/submodule2.yang b/binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/submodule2.yang similarity index 100% rename from binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/submodule2.yang rename to binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/submodule2.yang diff --git a/binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/submodule3.yang b/binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/submodule3.yang similarity index 100% rename from binding/maven-sal-api-gen-plugin/src/test/resources/yang-module-info/submodule3.yang rename to binding/mdsal-binding-java-api-generator/src/test/resources/yang-module-info/submodule3.yang -- 2.36.6