From b6d5169f024e8e8b8742abfd6c46d65e9172ac6a Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 16 Dec 2023 21:41:36 +0100 Subject: [PATCH] Use @Nullable in AbstractExplicitGenerator.runtimeType() Rather than using Optional, split the two user groups to those who check for null and who assume non-null. The former continue to call runtimeType() and latter defer to getRuntimeType(). Change-Id: I0818d806204007127a956f7598267735c90faca9 Signed-off-by: Robert Varga --- .../impl/BindingRuntimeTypesFactory.java | 22 +++++----- .../impl/DefaultBindingGenerator.java | 21 +++++----- .../reactor/AbstractExplicitGenerator.java | 40 ++++++++++++++----- .../reactor/AbstractTypeObjectGenerator.java | 4 +- .../generator/impl/reactor/Generator.java | 4 +- .../generator/impl/reactor/ListGenerator.java | 2 +- .../impl/reactor/ModuleGenerator.java | 5 +-- 7 files changed, 57 insertions(+), 41 deletions(-) diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java index 9a88b9a0cc..8d28821b53 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/BindingRuntimeTypesFactory.java @@ -55,8 +55,8 @@ final class BindingRuntimeTypesFactory implements Mutable { static @NonNull BindingRuntimeTypes createTypes(final @NonNull EffectiveModelContext context) { final var moduleGens = new GeneratorReactor(context).execute(TypeBuilderFactory.runtime()); - final Stopwatch sw = Stopwatch.createStarted(); - final BindingRuntimeTypesFactory factory = new BindingRuntimeTypesFactory(); + final var sw = Stopwatch.createStarted(); + final var factory = new BindingRuntimeTypesFactory(); factory.indexModules(moduleGens); LOG.debug("Indexed {} generators in {}", moduleGens.size(), sw); @@ -69,14 +69,12 @@ final class BindingRuntimeTypesFactory implements Mutable { final var modGen = entry.getValue(); // index the module's runtime type - safePut(modules, "modules", entry.getKey(), modGen.runtimeType().orElseThrow()); + safePut(modules, "modules", entry.getKey(), modGen.getRuntimeType()); // index module's identities and RPC input/outputs for (var gen : modGen) { if (gen instanceof IdentityGenerator idGen) { - idGen.runtimeType().ifPresent(identity -> { - safePut(identities, "identities", identity.statement().argument(), identity); - }); + safePut(identities, "identities", idGen.statement().argument(), idGen.getRuntimeType()); } } } @@ -85,18 +83,18 @@ final class BindingRuntimeTypesFactory implements Mutable { } private void indexRuntimeTypes(final Iterable generators) { - for (Generator gen : generators) { - if (gen instanceof AbstractExplicitGenerator explicitGen && gen.generatedType().isPresent()) { - final var type = explicitGen.runtimeType().orElseThrow(); - if (type.javaType() instanceof GeneratedType genType) { + for (var gen : generators) { + if (gen instanceof AbstractExplicitGenerator explicit) { + final var type = explicit.generatedRuntimeType(); + if (type != null && type.javaType() instanceof GeneratedType genType) { final var name = genType.getIdentifier(); final var prev = allTypes.put(name, type); verify(prev == null || prev == type, "Conflict on runtime type mapping of %s between %s and %s", name, prev, type); // Global indexing of cases generated for a particular choice. We look at the Generated type - // and make assumptions about its shape -- which works just fine without touching the - // ChoiceRuntimeType for cases. + // and make assumptions about its shape -- which works just fine without touching + // the ChoiceRuntimeType for cases. if (type instanceof CaseRuntimeType caseType) { final var ifaces = genType.getImplements(); // The appropriate choice and DataObject at the very least. The choice interface is the first diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java index 5e7b6bf407..c79892a484 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/DefaultBindingGenerator.java @@ -11,20 +11,17 @@ import com.google.common.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.kohsuke.MetaInfServices; import org.opendaylight.mdsal.binding.generator.BindingGenerator; import org.opendaylight.mdsal.binding.generator.impl.reactor.Generator; import org.opendaylight.mdsal.binding.generator.impl.reactor.GeneratorReactor; -import org.opendaylight.mdsal.binding.generator.impl.reactor.ModuleGenerator; import org.opendaylight.mdsal.binding.generator.impl.reactor.TypeBuilderFactory; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; /** * Default implementation of {@link BindingGenerator}. @@ -61,11 +58,11 @@ public final class DefaultBindingGenerator implements BindingGenerator { @VisibleForTesting static @NonNull List generateFor(final EffectiveModelContext context, final Collection modules) { - final Set filter = modules.stream().map(Module::asEffectiveStatement) + final var filter = modules.stream().map(Module::asEffectiveStatement) .collect(Collectors.toUnmodifiableSet()); - final List result = new ArrayList<>(); - for (ModuleGenerator gen : new GeneratorReactor(context).execute(TypeBuilderFactory.codegen()).values()) { + final var result = new ArrayList(); + for (var gen : new GeneratorReactor(context).execute(TypeBuilderFactory.codegen()).values()) { if (filter.contains(gen.statement())) { addTypes(result, gen); } @@ -75,11 +72,15 @@ public final class DefaultBindingGenerator implements BindingGenerator { } private static void addTypes(final List result, final Generator gen) { - gen.generatedType() - .filter(type -> type.getIdentifier().immediatelyEnclosingClass().isEmpty()) - .ifPresent(result::add); + final var type = gen.generatedType(); + if (type != null) { + if (type.getIdentifier().immediatelyEnclosingClass().isEmpty()) { + result.add(type); + } + } + result.addAll(gen.auxiliaryGeneratedTypes()); - for (Generator child : gen) { + for (var child : gen) { addTypes(result, child); } } diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractExplicitGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractExplicitGenerator.java index 1ffd292865..7e3ad91645 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractExplicitGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractExplicitGenerator.java @@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.VerifyException; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.generator.impl.reactor.CollisionDomain.Member; @@ -81,12 +80,17 @@ public abstract class AbstractExplicitGenerator runtimeType() { + public final @Nullable R generatedRuntimeType() { + final var type = generatedType(); + return type == null ? null : runtimeType(); + } + + private @Nullable R runtimeType() { if (!runtimeTypeInitialized) { final var type = runtimeJavaType(); if (type != null) { @@ -94,7 +98,21 @@ public abstract class AbstractExplicitGenerator builder, final Type returnType, final String methodName) { - final MethodSignatureBuilder getMethod = builder.addMethod(methodName).setReturnType(returnType); + final var getMethod = builder.addMethod(methodName).setReturnType(returnType); annotateDeprecatedIfNecessary(getMethod); diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractTypeObjectGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractTypeObjectGenerator.java index 7a5849c36c..cf8bdad11d 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractTypeObjectGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/AbstractTypeObjectGenerator.java @@ -472,8 +472,8 @@ abstract class AbstractTypeObjectGenerator, R return methodReturnTypeElement; } final var genType = generatedType(); - if (genType.isPresent()) { - return genType.orElseThrow(); + if (genType != null) { + return genType; } final var prev = verifyNotNull(previous(), "No previous generator for %s", this); return prev.runtimeJavaType(); diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/Generator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/Generator.java index 5158d576ac..97981adedb 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/Generator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/Generator.java @@ -76,8 +76,8 @@ public abstract class Generator implements Iterable { this.parent = requireNonNull(parent); } - public final @NonNull Optional generatedType() { - return Optional.ofNullable(result.generatedType()); + public final @Nullable GeneratedType generatedType() { + return result.generatedType(); } public @NonNull List auxiliaryGeneratedTypes() { diff --git a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ListGenerator.java b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ListGenerator.java index 7e1ab88bfe..6d8a7728a3 100644 --- a/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ListGenerator.java +++ b/binding/mdsal-binding-generator/src/main/java/org/opendaylight/mdsal/binding/generator/impl/reactor/ListGenerator.java @@ -89,7 +89,7 @@ final class ListGenerator extends CompositeSchemaTreeGenerator(); for (var child : ModuleGenerator.this) { if (child instanceof YangDataGenerator yangDataGen) { - yangDataGen.runtimeType().ifPresent(yangDataChildren::add); + yangDataChildren.add(yangDataGen.getRuntimeType()); } } -- 2.36.6