
org.sugarcubes.cloner.AbstractCopyContext Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sugar-cubes-cloner Show documentation
Show all versions of sugar-cubes-cloner Show documentation
Deep cloning of any objects
/*
* 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 org.sugarcubes.cloner;
import java.util.IdentityHashMap;
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;
/**
* Predefined system-wide singletons as map.
*/
@SuppressWarnings("checkstyle:Indentation")
private static final Map, Object[]> SYSTEM_SINGLETONS_AS_MAP =
JdkVersion.CONFIGURATION.getSystemWideSingletons().stream()
.collect(Collectors.toMap(
IdentityReference::new,
singleton -> new Object[] {singleton},
(key1, key2) -> {
throw Checks.mustNotHappen();
},
IdentityHashMap::new
));
/**
* 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