From 7af816d4d24c5e59415d1bb9ddbaac0fcd2f561c Mon Sep 17 00:00:00 2001 From: Ivan Hrasko Date: Tue, 30 Nov 2021 11:53:40 +0100 Subject: [PATCH 1/1] Remove remaining concepts.(Checked)Builder references To complete elimination of concepts.(Checked)Builder usage we have to remove references from manually created Builder classes and Types.java as well. JIRA: MDSAL-690 Change-Id: I4a4129bf006d99cf430af6c4d08234208b6620d4 Signed-off-by: Ivan Hrasko Signed-off-by: Robert Varga --- .../binding/api/query/StructuralBuilder.java | 15 +++++++++---- .../binding/dom/adapter/AdapterBuilder.java | 18 +++++++++------ .../adapter/query/SimpleQueryExecutor.java | 10 ++++++--- .../type/builder/AnnotationTypeBuilder.java | 9 ++++---- .../api/type/builder/GeneratedTOBuilder.java | 8 +++---- .../type/builder/GeneratedTypeBuilder.java | 9 +++----- .../mdsal/binding/model/ri/Types.java | 13 ----------- .../spi/ModuleInfoSnapshotBuilder.java | 12 ++++++---- .../yang/binding/InstanceIdentifier.java | 6 ++--- .../yang/binding/util/BindingMap.java | 22 +++++++++++++++++-- 10 files changed, 69 insertions(+), 53 deletions(-) diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/query/StructuralBuilder.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/query/StructuralBuilder.java index eb62b2329d..be677bb7a6 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/query/StructuralBuilder.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/query/StructuralBuilder.java @@ -8,14 +8,21 @@ package org.opendaylight.mdsal.binding.api.query; import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.concepts.CheckedBuilder; +import org.eclipse.jdt.annotation.NonNull; /** - * A specialization of {@link CheckedBuilder}, whose {@code build()} method throws a {@link QueryStructureException}. + * Builder object which {@code build()} method produces a product or throws {@link QueryStructureException}. * * @param

Product of builder */ @Beta -public interface StructuralBuilder

extends CheckedBuilder { - +public interface StructuralBuilder

{ + /** + * Returns instance of the product. Multiple calls to this method are not required to return same instance if + * the state of the builder has changed. + * + * @return A newly-built instance + * @throws QueryStructureException if the builder's state is not sufficiently initialized + */ + @NonNull P build() throws QueryStructureException; } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java index ef6f035994..47e27f0198 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java @@ -7,15 +7,15 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkState; + import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.concepts.Builder; -public abstract class AdapterBuilder implements Builder { +public abstract class AdapterBuilder { private final ClassToInstanceMap delegates = MutableClassToInstanceMap.create(); @@ -25,7 +25,7 @@ public abstract class AdapterBuilder implements Builder { private void checkAllRequiredServices() { for (final Class type : getRequiredDelegates()) { - Preconditions.checkState(delegates.get(type) != null, "Requires service %s is not defined.",type); + checkState(delegates.get(type) != null, "Requires service %s is not defined.", type); } } @@ -33,10 +33,14 @@ public abstract class AdapterBuilder implements Builder { delegates.put(type,impl); } - @Override - public final T build() { + /** + * Check that all required {@code delegates} are present and return an instance of type {@code T}. + * + * @return Instance of {@code T} + * @throws IllegalStateException if a required delegate instance is missing + */ + public final @NonNull T build() { checkAllRequiredServices(); return createInstance(ImmutableClassToInstanceMap.copyOf(delegates)); } - } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/query/SimpleQueryExecutor.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/query/SimpleQueryExecutor.java index c19d493b56..5f85ed9b00 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/query/SimpleQueryExecutor.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/query/SimpleQueryExecutor.java @@ -50,7 +50,7 @@ public final class SimpleQueryExecutor implements QueryExecutor { return new Builder(codec); } - public static final class Builder implements org.opendaylight.yangtools.concepts.Builder { + public static final class Builder { private final DataContainerNodeBuilder rootBuilder = Builders.containerBuilder() .withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME)); private final BindingCodecTree codec; @@ -67,8 +67,12 @@ public final class SimpleQueryExecutor implements QueryExecutor { return this; } - @Override - public SimpleQueryExecutor build() { + /** + * Build an instance of {@link SimpleQueryExecutor}. + * + * @return An {@link SimpleQueryExecutor} instance + */ + public @NonNull SimpleQueryExecutor build() { return new SimpleQueryExecutor(rootBuilder.build()); } } diff --git a/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotationTypeBuilder.java b/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotationTypeBuilder.java index 3a5e4b6cd4..a8c7205db8 100644 --- a/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotationTypeBuilder.java +++ b/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/AnnotationTypeBuilder.java @@ -8,9 +8,9 @@ package org.opendaylight.mdsal.binding.model.api.type.builder; import java.util.List; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.model.api.AnnotationType; import org.opendaylight.mdsal.binding.model.api.Type; -import org.opendaylight.yangtools.concepts.Builder; /** * Annotation Type Builder Interface serves for creation and instantiation of @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.concepts.Builder; * * @see AnnotationType */ -public interface AnnotationTypeBuilder extends Type, Builder { +public interface AnnotationTypeBuilder extends Type { /** * The method creates new AnnotationTypeBuilder containing specified package * name an annotation name.
@@ -33,7 +33,7 @@ public interface AnnotationTypeBuilder extends Type, Builder { * @param name Name of Annotation Type * @return new instance of Annotation Type Builder. */ - AnnotationTypeBuilder addAnnotation(String packageName, String name); + @NonNull AnnotationTypeBuilder addAnnotation(String packageName, String name); /** * Adds the parameter into List of parameters for Annotation Type.
@@ -76,6 +76,5 @@ public interface AnnotationTypeBuilder extends Type, Builder { * * @return new immutable instance of Annotation Type. */ - @Override - AnnotationType build(); + @NonNull AnnotationType build(); } diff --git a/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTOBuilder.java b/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTOBuilder.java index b032d16f1f..38097e1f30 100644 --- a/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTOBuilder.java +++ b/binding/mdsal-binding-model-api/src/main/java/org/opendaylight/mdsal/binding/model/api/type/builder/GeneratedTOBuilder.java @@ -7,9 +7,9 @@ */ package org.opendaylight.mdsal.binding.model.api.type.builder; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject; import org.opendaylight.mdsal.binding.model.api.Restrictions; -import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; /** @@ -18,8 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.TypeDefinition; * * @see GeneratedTransferObject */ -public interface GeneratedTOBuilder extends GeneratedTypeBuilderBase, - Builder { +public interface GeneratedTOBuilder extends GeneratedTypeBuilderBase { /** * Add Generated Transfer Object from which will be extended current Generated Transfer Object.
@@ -70,8 +69,7 @@ public interface GeneratedTOBuilder extends GeneratedTypeBuilderBase, Builder { - +public interface GeneratedTypeBuilder extends GeneratedTypeBuilderBase { /** * Returns the new immutable instance of Generated Type. * * @return the new immutable instance of Generated Type. */ - @Override - GeneratedType build(); - + @NonNull GeneratedType build(); } diff --git a/binding/mdsal-binding-model-ri/src/main/java/org/opendaylight/mdsal/binding/model/ri/Types.java b/binding/mdsal-binding-model-ri/src/main/java/org/opendaylight/mdsal/binding/model/ri/Types.java index 186582d60b..132de64d03 100644 --- a/binding/mdsal-binding-model-ri/src/main/java/org/opendaylight/mdsal/binding/model/ri/Types.java +++ b/binding/mdsal-binding-model-ri/src/main/java/org/opendaylight/mdsal/binding/model/ri/Types.java @@ -35,7 +35,6 @@ import org.opendaylight.mdsal.binding.model.api.ParameterizedType; import org.opendaylight.mdsal.binding.model.api.Restrictions; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.api.WildcardType; -import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; @@ -56,7 +55,6 @@ public final class Types { public static final @NonNull ConcreteType STRING = typeForClass(String.class); public static final @NonNull ConcreteType VOID = typeForClass(Void.class); - private static final @NonNull ConcreteType BUILDER = typeForClass(Builder.class); private static final @NonNull ConcreteType LIST_TYPE = typeForClass(List.class); private static final @NonNull ConcreteType LISTENABLE_FUTURE = typeForClass(ListenableFuture.class); private static final @NonNull ConcreteType MAP_TYPE = typeForClass(Map.class); @@ -235,17 +233,6 @@ public final class Types { return parameterizedTypeFor(LISTENABLE_FUTURE, valueType); } - /** - * Returns an instance of {@link ParameterizedType} describing the typed - * {@link Builder}<V> with concrete type of value. - * - * @param valueType Value Type - * @return Description of type instance of Builder - */ - public static @NonNull ParameterizedType builderTypeFor(final Type valueType) { - return parameterizedTypeFor(BUILDER, valueType); - } - /** * Creates instance of type {@link org.opendaylight.mdsal.binding.model.api.ParameterizedType ParameterizedType}. * diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java index 2c5ffd7cb4..b4c12b0b1e 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/ModuleInfoSnapshotBuilder.java @@ -19,7 +19,6 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; -import org.opendaylight.yangtools.concepts.CheckedBuilder; import org.opendaylight.yangtools.yang.binding.BindingObject; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -30,7 +29,7 @@ import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException; @Beta -public final class ModuleInfoSnapshotBuilder implements CheckedBuilder { +public final class ModuleInfoSnapshotBuilder { private final Set moduleInfos = new HashSet<>(); private final YangParserFactory parserFactory; @@ -78,8 +77,13 @@ public final class ModuleInfoSnapshotBuilder implements CheckedBuilder mappedInfos = new HashMap<>(); final Map classLoaders = new HashMap<>(); diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java index 2b5a5e4cf0..c2840c4b23 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java @@ -25,7 +25,6 @@ import java.util.Objects; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.concepts.HierarchicalIdentifier; import org.opendaylight.yangtools.util.HashCodeBuilder; @@ -827,7 +826,7 @@ public class InstanceIdentifier } } - public interface InstanceIdentifierBuilder extends Builder> { + public interface InstanceIdentifierBuilder { /** * Append the specified container as a child of the current InstanceIdentifier referenced by the builder. This * method should be used when you want to build an instance identifier by appending top-level elements, for @@ -912,8 +911,7 @@ public class InstanceIdentifier * * @return Resulting instance identifier. */ - @Override - InstanceIdentifier build(); + @NonNull InstanceIdentifier build(); } private Object writeReplace() throws ObjectStreamException { diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingMap.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingMap.java index d74159c8b3..db16dcfd84 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingMap.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/util/BindingMap.java @@ -492,8 +492,7 @@ public final class BindingMap { * @param the {@code Map}'s key type * @param the {@code Map}'s value type */ - public abstract static class Builder, V extends Identifiable> - implements org.opendaylight.yangtools.concepts.Builder> { + public abstract static class Builder, V extends Identifiable> { static final int DEFAULT_INITIAL_CAPACITY = 4; Builder() { @@ -536,8 +535,27 @@ public final class BindingMap { return this; } + /** + * Build map from existing map entries in this builder. + * + * @return Resulting map + * @throws IllegalArgumentException if duplicate keys were added + */ + public abstract @NonNull Map build(); + + /** + * Add map entry identified by its {@code key} and containing {@code value} to this builder. + * + * @param key Key of the map entry + * @param value Value of the map entry + */ abstract void addEntry(K key, V value); + /** + * Add collection of map entries to this builder. + * + * @param entries Map entries to add + */ abstract void addEntries(Collection> entries); } -- 2.36.6