From e4e2bae64b5b2a8ce02a38d6ac8a250fcd8984d8 Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Wed, 25 Oct 2023 23:10:50 -0400 Subject: [PATCH 1/2] Remove deprecated Parameterizable interface JAVA-5143 --- .../main/org/bson/codecs/Parameterizable.java | 49 ---------- .../codecs/configuration/CodecRegistry.java | 1 - .../bson/internal/ProvidersCodecRegistry.java | 10 +- ...ProvidersCodecRegistrySpecification.groovy | 93 ------------------- 4 files changed, 1 insertion(+), 152 deletions(-) delete mode 100644 bson/src/main/org/bson/codecs/Parameterizable.java diff --git a/bson/src/main/org/bson/codecs/Parameterizable.java b/bson/src/main/org/bson/codecs/Parameterizable.java deleted file mode 100644 index 479ab205524..00000000000 --- a/bson/src/main/org/bson/codecs/Parameterizable.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2008-present MongoDB, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.bson.codecs; - -import org.bson.codecs.configuration.CodecProvider; -import org.bson.codecs.configuration.CodecRegistry; - -import java.lang.reflect.Type; -import java.util.Collection; -import java.util.List; - -/** - * An interface indicating that a Codec is for a type that can be parameterized by generic types. - * - * @since 4.8 - * @deprecated Since 4.10. Instead of implementing {@link Parameterizable} for a custom {@link Codec}, - * users should implement {@link CodecProvider#get(Class, List, CodecRegistry)} for a custom {@link CodecProvider}. - */ -@Deprecated -// After releasing this interface, we realized that our implementations of `Parameterizable.parameterize` were doing what -// `CodecProvider.get` is supposed to be doing. As a result, we introduced a new default method to `CodecProvider`, -// and deprecated `Parameterizable`. -public interface Parameterizable { - /** - * Recursively parameterize the codec with the given registry and generic type arguments. - * - * @param codecRegistry the code registry to use to resolve codecs for the generic type arguments - * @param types the types that are parameterizing the containing type. The size of the list should be equal to the number of type - * parameters of the class whose codec is being parameterized, e.g. for a {@link Collection} the size of the list - * would be one since {@code Collection} has a single type parameter. Additionally, the size will never be 0 - * since there is no purpose in parameterizing a codec for a type that has no type parameters. - * @return the Codec parameterized with the given types - */ - Codec parameterize(CodecRegistry codecRegistry, List types); -} diff --git a/bson/src/main/org/bson/codecs/configuration/CodecRegistry.java b/bson/src/main/org/bson/codecs/configuration/CodecRegistry.java index 31479d31820..f77ad80068c 100644 --- a/bson/src/main/org/bson/codecs/configuration/CodecRegistry.java +++ b/bson/src/main/org/bson/codecs/configuration/CodecRegistry.java @@ -64,7 +64,6 @@ public interface CodecRegistry extends CodecProvider { * @throws CodecConfigurationException if no codec can be found for the given class and type arguments. * @throws AssertionError by default, if the implementation does not override this method, or if no codec can be found * for the given class and type arguments. - * @see org.bson.codecs.Parameterizable * @since 4.8 */ default Codec get(Class clazz, List typeArguments) { diff --git a/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java b/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java index 3decf4b1d1d..daa5a8db05e 100644 --- a/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java +++ b/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java @@ -89,17 +89,9 @@ public Codec get(final ChildCodecRegistry context) { } @Nullable - @SuppressWarnings("deprecation") public static Codec getFromCodecProvider(final CodecProvider provider, final Class clazz, final List typeArguments, final CodecRegistry registry) { - Codec codec = provider.get(clazz, typeArguments, registry); - // `Parameterizable` is deprecated, but we still have to support it until it is removed - if (codec instanceof org.bson.codecs.Parameterizable && !typeArguments.isEmpty()) { - @SuppressWarnings("unchecked") - Codec parameterizedCodec = (Codec) ((org.bson.codecs.Parameterizable) codec).parameterize(registry, typeArguments); - codec = parameterizedCodec; - } - return codec; + return provider.get(clazz, typeArguments, registry); } @Override diff --git a/bson/src/test/unit/org/bson/internal/ProvidersCodecRegistrySpecification.groovy b/bson/src/test/unit/org/bson/internal/ProvidersCodecRegistrySpecification.groovy index c007a23718b..40897b3a5aa 100644 --- a/bson/src/test/unit/org/bson/internal/ProvidersCodecRegistrySpecification.groovy +++ b/bson/src/test/unit/org/bson/internal/ProvidersCodecRegistrySpecification.groovy @@ -25,10 +25,7 @@ import org.bson.ByteBufNIO import org.bson.codecs.Codec import org.bson.codecs.DecoderContext import org.bson.codecs.EncoderContext -import org.bson.codecs.IntegerCodec import org.bson.codecs.MinKeyCodec -import org.bson.codecs.Parameterizable -import org.bson.codecs.ValueCodecProvider import org.bson.codecs.configuration.CodecConfigurationException import org.bson.codecs.configuration.CodecProvider import org.bson.codecs.configuration.CodecRegistry @@ -38,12 +35,9 @@ import org.bson.types.MaxKey import org.bson.types.MinKey import spock.lang.Specification -import java.lang.reflect.Type import java.nio.ByteBuffer import static java.util.Arrays.asList -import static org.bson.codecs.ContainerCodecHelper.getCodec -import static org.bson.codecs.configuration.CodecRegistries.fromCodecs class ProvidersCodecRegistrySpecification extends Specification { @@ -169,93 +163,6 @@ class ProvidersCodecRegistrySpecification extends Specification { expect: ((SimpleCodec) provider.get(Simple, registry)).registry.is(registry) } - - def 'should parameterize codec'() { - given: - def registry = new ProvidersCodecRegistry([fromCodecs(new CollectionCodec()), new ValueCodecProvider()]) - - when: - def codec = registry.get(Collection, [Integer]) - - then: - codec instanceof ParameterizedCollectionCodec - (codec as ParameterizedCollectionCodec).getCodec() instanceof IntegerCodec - - when: - def secondCodec = registry.get(Collection, [Integer]) - - then: - codec == secondCodec - } - - def 'should parameterize codec with cycles'() { - given: - def registry = new ProvidersCodecRegistry([fromCodecs(new CollectionCodec()), new ValueCodecProvider()]) - - when: - def codec = registry.get(Collection, [Holder.getField('c').getGenericType()]) - - then: - codec instanceof ParameterizedCollectionCodec - (codec as ParameterizedCollectionCodec).getCodec() instanceof LazyCodec - - when: - def secondCodec = registry.get(Collection, [Holder.getField('c').getGenericType()]) - - then: - codec == secondCodec - } -} - -class CollectionCodec implements Codec>, Parameterizable { - - @Override - Collection decode(BsonReader reader, DecoderContext decoderContext) { - throw new UnsupportedOperationException() - } - - @Override - void encode(BsonWriter writer, Collection value, EncoderContext encoderContext) { - throw new UnsupportedOperationException() - } - - @Override - Class> getEncoderClass() { - Collection - } - - @Override - Codec parameterize(CodecRegistry codecRegistry, List types) { - new ParameterizedCollectionCodec(getCodec(codecRegistry, types.get(0))) - } -} - -class ParameterizedCollectionCodec implements Codec> { - - private final Codec codec - - ParameterizedCollectionCodec(Codec codec) { - this.codec = codec - } - - Codec getCodec() { - codec - } - - @Override - Collection decode(BsonReader reader, DecoderContext decoderContext) { - throw new UnsupportedOperationException() - } - - @Override - void encode(BsonWriter writer, Collection value, EncoderContext encoderContext) { - throw new UnsupportedOperationException() - } - - @Override - Class> getEncoderClass() { - Collection - } } class SingleCodecProvider implements CodecProvider { From a051548fa3f97a8d6c4bc77efc76b6747064bccc Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Tue, 14 Nov 2023 15:52:47 -0500 Subject: [PATCH 2/2] inline method refactoring --- .../OverridableUuidRepresentationCodecProvider.java | 3 +-- .../org/bson/internal/ProvidersCodecRegistry.java | 11 ++--------- .../main/com/mongodb/Jep395RecordCodecProvider.java | 3 +-- .../src/main/com/mongodb/KotlinCodecProvider.java | 6 ++---- 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/bson/src/main/org/bson/codecs/configuration/OverridableUuidRepresentationCodecProvider.java b/bson/src/main/org/bson/codecs/configuration/OverridableUuidRepresentationCodecProvider.java index e1c6223cfb3..f46964fedd3 100644 --- a/bson/src/main/org/bson/codecs/configuration/OverridableUuidRepresentationCodecProvider.java +++ b/bson/src/main/org/bson/codecs/configuration/OverridableUuidRepresentationCodecProvider.java @@ -25,7 +25,6 @@ import java.util.List; import static org.bson.assertions.Assertions.notNull; -import static org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider; final class OverridableUuidRepresentationCodecProvider implements CodecProvider { @@ -44,7 +43,7 @@ public Codec get(final Class clazz, final CodecRegistry registry) { @Override public Codec get(final Class clazz, final List typeArguments, final CodecRegistry registry) { - Codec codec = getFromCodecProvider(wrapped, clazz, typeArguments, registry); + Codec codec = wrapped.get(clazz, typeArguments, registry); if (codec instanceof OverridableUuidRepresentationCodec) { @SuppressWarnings("unchecked") Codec codecWithUuidRepresentation = ((OverridableUuidRepresentationCodec) codec).withUuidRepresentation(uuidRepresentation); diff --git a/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java b/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java index daa5a8db05e..ddb3c44355d 100644 --- a/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java +++ b/bson/src/main/org/bson/internal/ProvidersCodecRegistry.java @@ -22,7 +22,6 @@ import org.bson.codecs.configuration.CodecRegistry; import org.bson.internal.CodecCache.CodecCacheKey; -import javax.annotation.Nullable; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; @@ -67,7 +66,7 @@ public Codec get(final Class clazz, final CodecRegistry registry) { @Override public Codec get(final Class clazz, final List typeArguments, final CodecRegistry registry) { for (CodecProvider provider : codecProviders) { - Codec codec = getFromCodecProvider(provider, clazz, typeArguments, registry); + Codec codec = provider.get(clazz, typeArguments, registry); if (codec != null) { return codec; } @@ -79,7 +78,7 @@ public Codec get(final ChildCodecRegistry context) { CodecCacheKey codecCacheKey = new CodecCacheKey(context.getCodecClass(), context.getTypes().orElse(null)); return codecCache.get(codecCacheKey).orElseGet(() -> { for (CodecProvider provider : codecProviders) { - Codec codec = getFromCodecProvider(provider, context.getCodecClass(), context.getTypes().orElse(emptyList()), context); + Codec codec = provider.get(context.getCodecClass(), context.getTypes().orElse(emptyList()), context); if (codec != null) { return codecCache.putIfAbsent(codecCacheKey, codec); } @@ -88,12 +87,6 @@ public Codec get(final ChildCodecRegistry context) { }); } - @Nullable - public static Codec getFromCodecProvider(final CodecProvider provider, - final Class clazz, final List typeArguments, final CodecRegistry registry) { - return provider.get(clazz, typeArguments, registry); - } - @Override public boolean equals(final Object o) { if (this == o) { diff --git a/driver-core/src/main/com/mongodb/Jep395RecordCodecProvider.java b/driver-core/src/main/com/mongodb/Jep395RecordCodecProvider.java index 69d0ab12233..b53d8595b6f 100644 --- a/driver-core/src/main/com/mongodb/Jep395RecordCodecProvider.java +++ b/driver-core/src/main/com/mongodb/Jep395RecordCodecProvider.java @@ -27,7 +27,6 @@ import java.util.List; import static com.mongodb.internal.VisibleForTesting.AccessModifier.PRIVATE; -import static org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider; /** @@ -66,7 +65,7 @@ public Codec get(final Class clazz, final CodecRegistry registry) { @Override @Nullable public Codec get(final Class clazz, final List typeArguments, final CodecRegistry registry) { - return RECORD_CODEC_PROVIDER != null ? getFromCodecProvider(RECORD_CODEC_PROVIDER, clazz, typeArguments, registry) : null; + return RECORD_CODEC_PROVIDER != null ? RECORD_CODEC_PROVIDER.get(clazz, typeArguments, registry) : null; } /** diff --git a/driver-core/src/main/com/mongodb/KotlinCodecProvider.java b/driver-core/src/main/com/mongodb/KotlinCodecProvider.java index 74f88ed0956..5a1a2f84645 100644 --- a/driver-core/src/main/com/mongodb/KotlinCodecProvider.java +++ b/driver-core/src/main/com/mongodb/KotlinCodecProvider.java @@ -26,8 +26,6 @@ import java.util.Collections; import java.util.List; -import static org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider; - /** * A CodecProvider for Kotlin data classes. * Delegates to {@code org.bson.codecs.kotlinx.KotlinSerializerCodecProvider} @@ -76,11 +74,11 @@ public Codec get(final Class clazz, final CodecRegistry registry) { public Codec get(final Class clazz, final List typeArguments, final CodecRegistry registry) { Codec codec = null; if (KOTLIN_SERIALIZABLE_CODEC_PROVIDER != null) { - codec = getFromCodecProvider(KOTLIN_SERIALIZABLE_CODEC_PROVIDER, clazz, typeArguments, registry); + codec = KOTLIN_SERIALIZABLE_CODEC_PROVIDER.get(clazz, typeArguments, registry); } if (codec == null && DATA_CLASS_CODEC_PROVIDER != null) { - codec = getFromCodecProvider(DATA_CLASS_CODEC_PROVIDER, clazz, typeArguments, registry); + codec = DATA_CLASS_CODEC_PROVIDER.get(clazz, typeArguments, registry); } return codec; }