Content of file MappingFinder.java

The field it.tidalwave.util.impl.finder.MappingFinder.decorator is transient but isn't set by deserialization

This class contains a field that is updated at multiple places in the class, thus it seems to be part of the state of the class. However, since the field is marked as transient and not set in readObject or readResolve, it will contain the default value in any deserialized instance of the class.

/* * ********************************************************************************************************************* * * TheseFoolishThings: Miscellaneous utilities * http://tidalwave.it/projects/thesefoolishthings * * Copyright (C) 2009 - 2024 by Tidalwave s.a.s. (http://tidalwave.it) * * ********************************************************************************************************************* * * 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. * * ********************************************************************************************************************* * * git clone https://bitbucket.org/tidalwave/thesefoolishthings-src * git clone https://github.com/tidalwave-it/thesefoolishthings-src * * ********************************************************************************************************************* */ package it.tidalwave.util.impl.finder; import javax.annotation.Nonnull; import javax.annotation.concurrent.Immutable; import java.util.List; import java.util.function.Function; import it.tidalwave.util.Finder; import it.tidalwave.util.spi.SimpleFinderSupport; import static java.util.stream.Collectors.*; /*********************************************************************************************************************** * * A {@link Finder} which retrieve results from another instance applying a {@link Function}. * * @author Fabrizio Giudici * **********************************************************************************************************************/ @Immutable public final class MappingFinder<T, U> extends SimpleFinderSupport<T> { private static final long serialVersionUID = -6359683808082070089L; @Nonnull private final transient Finder<? extends U> delegate; @Nonnull private final transient Function<? super U, ? extends T> decorator; public MappingFinder (@Nonnull final Finder<? extends U> delegate, @Nonnull final Function<? super U, ? extends T> decorator) { this.delegate = delegate; this.decorator = decorator; } public MappingFinder (@Nonnull final MappingFinder other, @Nonnull final Object override) { super(other, override); final MappingFinder<T, U> source = getSource(MappingFinder.class, other, override); this.delegate = source.delegate; this.decorator = source.decorator; } @Override @Nonnull protected List<T> computeResults() { return delegate.results().stream().map(decorator).collect(toList()); } }