
io.github.sugarcubes.cloner.AbstractCopyContext Maven / Gradle / Ivy
/*
* Copyright 2017-2023 the original author or authors.
*
* 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 io.github.sugarcubes.cloner;
import java.util.Map;
import java.util.function.Supplier;
import java.util.stream.Collectors;
/**
* Abstract copy context. Contains common code for the context implementations.
*
* @author Maxim Butov
*/
public abstract class AbstractCopyContext implements CopyContext {
/**
* Copier provider.
*/
private final CopierProvider copierProvider;
/**
* Previously copied objects.
*/
private final Map, Object[]> clones;
/**
* JDK configuration.
*/
private static final JdkConfiguration JDK_CONFIGURATION = JdkConfigurationHolder.CONFIGURATION;
/**
* Predefined system-wide singletons as map.
*/
@SuppressWarnings("checkstyle:Indentation")
private static final Map, Object[]> SYSTEM_SINGLETONS_AS_MAP =
JDK_CONFIGURATION.getSystemWideSingletons().stream()
.collect(Collectors.toMap(IdentityReference::new, singleton -> new Object[] {singleton}));
/**
* Creates context with specified copier provider, clones map and predefined cloned objects.
*
* @param copierProvider copier provider
* @param cacheSupplier cache supplier
* @param clones predefined cloned objects
*/
protected AbstractCopyContext(CopierProvider copierProvider, Supplier
© 2015 - 2025 Weber Informatics LLC | Privacy Policy