Do not use optional in createReactor() 91/104791/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 7 Mar 2023 18:29:45 +0000 (19:29 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 7 Mar 2023 18:30:31 +0000 (19:30 +0100)
We only ever return non-empty, codify that fact.

JIRA: YANGTOOLS-745
Change-Id: I25c2d791f024a44bcf0417379dfb30951393ef32
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java

index aaeb0bac2db28292cfa71abf12a1488f31e2eb68..84c7c9d775f5940159fd44ee92952eaa039f82aa 100644 (file)
@@ -28,7 +28,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.ServiceLoader;
 import java.util.Set;
 import java.util.function.Function;
@@ -220,60 +219,55 @@ class YangToSourcesProcessor {
         boolean sourcesPersisted = false;
 
         for (YangParserConfiguration parserConfig : parserConfigs) {
-            final Optional<ProcessorModuleReactor> optReactor = createReactor(yangFilesInProject,
-                parserConfig, dependencies, parsed);
-            if (optReactor.isPresent()) {
-                final ProcessorModuleReactor reactor = optReactor.orElseThrow();
+            final var moduleReactor = createReactor(yangFilesInProject, parserConfig, dependencies, parsed);
+            final var yangSw = Stopwatch.createStarted();
 
-                final Stopwatch sw = Stopwatch.createStarted();
-                final ContextHolder holder;
+            final ContextHolder holder;
+            try {
+                holder = moduleReactor.toContext();
+            } catch (YangParserException e) {
+                throw new MojoFailureException("Failed to process reactor " + moduleReactor, e);
+            } catch (IOException e) {
+                throw new MojoExecutionException("Failed to read reactor " + moduleReactor, e);
+            }
 
-                try {
-                    holder = reactor.toContext();
-                } catch (YangParserException e) {
-                    throw new MojoFailureException("Failed to process reactor " + reactor, e);
-                } catch (IOException e) {
-                    throw new MojoExecutionException("Failed to read reactor " + reactor, e);
-                }
+            LOG.info("{} {} YANG models processed in {}", LOG_PREFIX, holder.getContext().getModules().size(), yangSw);
 
-                LOG.info("{} {} YANG models processed in {}", LOG_PREFIX, holder.getContext().getModules().size(), sw);
+            for (var factory : codeGenerators) {
+                if (!parserConfig.equals(factory.parserConfig())) {
+                    continue;
+                }
 
-                for (GeneratorTaskFactory factory : codeGenerators) {
-                    if (!parserConfig.equals(factory.parserConfig())) {
-                        continue;
-                    }
+                final var genSw = Stopwatch.createStarted();
+                final var generatorTask = factory.createTask(project, holder);
+                LOG.debug("{} Task {} initialized in {}", LOG_PREFIX, generatorTask, genSw);
 
-                    final Stopwatch genSw = Stopwatch.createStarted();
-                    final GeneratorTask task = factory.createTask(project, holder);
-                    LOG.debug("{} Task {} initialized in {}", LOG_PREFIX, task, genSw);
+                final List<FileState> files;
+                try {
+                    files = generatorTask.execute();
+                } catch (FileGeneratorException | IOException e) {
+                    throw new MojoFailureException(LOG_PREFIX + " Generator " + factory + " failed", e);
+                }
 
-                    final List<FileState> files;
-                    try {
-                        files = task.execute();
-                    } catch (FileGeneratorException | IOException e) {
-                        throw new MojoFailureException(LOG_PREFIX + " Generator " + factory + " failed", e);
-                    }
+                files.forEach(state -> buildContext.refresh(new File(state.path())));
+                outputFiles.addAll(files);
 
-                    files.forEach(state -> buildContext.refresh(new File(state.path())));
-                    outputFiles.addAll(files);
+                LOG.info("{} Sources generated by {}: {} in {}", LOG_PREFIX, factory.generatorName(), files.size(),
+                    genSw);
+            }
 
-                    LOG.info("{} Sources generated by {}: {} in {}", LOG_PREFIX, factory.generatorName(), files.size(),
-                        genSw);
+            if (!sourcesPersisted) {
+                // add META_INF/yang once
+                final var models = moduleReactor.getModelsInProject();
+                final Collection<FileState> sourceFileStates;
+                try {
+                    sourceFileStates = yangProvider.addYangsToMetaInf(project, models);
+                } catch (IOException e) {
+                    throw new MojoExecutionException("Failed write model files for " + models, e);
                 }
 
-                if (!sourcesPersisted) {
-                    // add META_INF/yang once
-                    final var models = reactor.getModelsInProject();
-                    final Collection<FileState> sourceFileStates;
-                    try {
-                        sourceFileStates = yangProvider.addYangsToMetaInf(project, models);
-                    } catch (IOException e) {
-                        throw new MojoExecutionException("Failed write model files for " + models, e);
-                    }
-
-                    sourcesPersisted = true;
-                    outputFiles.addAll(sourceFileStates);
-                }
+                sourcesPersisted = true;
+                outputFiles.addAll(sourceFileStates);
             }
         }
 
@@ -340,7 +334,7 @@ class YangToSourcesProcessor {
     }
 
     @SuppressWarnings("checkstyle:illegalCatch")
-    private Optional<ProcessorModuleReactor> createReactor(final List<File> yangFilesInProject,
+    private @NonNull ProcessorModuleReactor createReactor(final List<File> yangFilesInProject,
             final YangParserConfiguration parserConfig, final Collection<ScannedDependency> dependencies,
             final List<Entry<YangTextSchemaSource, YangIRSchemaSource>> parsed) throws MojoExecutionException {
 
@@ -363,7 +357,7 @@ class YangToSourcesProcessor {
 
             final ProcessorModuleReactor reactor = new ProcessorModuleReactor(parser, sourcesInProject, dependencies);
             LOG.debug("Initialized reactor {} with {}", reactor, yangFilesInProject);
-            return Optional.of(reactor);
+            return reactor;
         } catch (IOException | YangSyntaxErrorException | RuntimeException e) {
             // MojoExecutionException is thrown since execution cannot continue
             LOG.error("{} Unable to parse YANG files from {}", LOG_PREFIX, yangFilesRootDir, e);