Skip to content

Commit

Permalink
fix for #1327
Browse files Browse the repository at this point in the history
  • Loading branch information
bartoszwalacik committed Nov 12, 2023
1 parent 336d55b commit 67beeae
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 25 deletions.
7 changes: 4 additions & 3 deletions javers-core/src/main/java/org/javers/core/JaversBuilder.java
Expand Up @@ -84,7 +84,6 @@
*/
public class JaversBuilder extends AbstractContainerBuilder {
public static final Logger logger = LoggerFactory.getLogger(JaversBuilder.class);

private final Map<Class, ClientsClassDefinition> clientsClassDefinitions = new LinkedHashMap<>();

private final Map<Class, Function<Object, String>> mappedToStringFunction = new ConcurrentHashMap<>();
Expand Down Expand Up @@ -171,10 +170,12 @@ protected Javers assembleJaversInstance(){
classesToScan.forEach(c -> typeMapper().getJaversType(c));
typeMapper().addPluginTypes(additionalTypes);

// register core / well known types last in case client definitions or other modules
// would like to register them with different comparators, converters etc.
// register core / well known types last
typeMapper().registerCoreTypes(coreConfiguration, clientsClassDefinitions.values());

// client definitions (explicit types) should have the highest priority
// if a client would like to register overwrite core types with
// different comparators, converters etc.
mapRegisteredClasses();

bootRepository();
Expand Down
Expand Up @@ -78,8 +78,14 @@ public boolean isShallowReference(){
}

public JaversProperty copyAsShallowReference() {
boolean isListedAsShallowReference = true;
return new JaversProperty(propertyType, getMember(), hasTransientAnn(), hasShallowReferenceAnn(), getName(), isHasIncludedAnn(), isListedAsShallowReference);
return new JaversProperty(
propertyType,
getMember(),
hasTransientAnn(),
hasShallowReferenceAnn(),
getName(),
isHasIncludedAnn(),
true);
}

@Override
Expand Down
Expand Up @@ -59,7 +59,7 @@ List<JaversProperty> filterProperties(List<JaversProperty> allProperties){

private List<JaversProperty> applyShallowPropertiesConfiguration(List<JaversProperty> allProperties) {
return allProperties.stream()
.map(it -> shallowProperties.contains(it.getName()) && !it.isShallowReference()
.map(it -> shallowProperties.contains(it.getName())
? it.copyAsShallowReference()
: it)
.collect(Collectors.toList());
Expand Down
Expand Up @@ -96,18 +96,17 @@ JaversType infer(Type javaType, Optional<JaversType> prototype) {

if (prototype.isPresent()) {
JaversType jType = spawnFromPrototype(javaRichType, prototype.get());
logger.debug("javersType for '{}' spawned as {} from prototype {}",
javaRichType.getTypeName(),
jType.getClass().getSimpleName(), prototype.get());
logger.debug("registering prototype-based type: {} -> {}, inferred from prototype {}",
javaType.getTypeName(), jType.getClass().getSimpleName(), prototype.get());
return jType;
}

Optional<JaversType> dynamicType = dynamicMappingStrategy.map(javaType);

return dynamicType
.orElseGet(() -> inferFromAnnotations(javaRichType).map(jType -> {
logger.debug("javersType for '{}' inferred from annotations as {}",
javaRichType.getTypeName(), jType.getClass().getSimpleName());
logger.debug("registering dynamicType: {} -> {}, inferred from annotations",
javaType.getTypeName(), jType.getClass().getSimpleName());
return jType;
})
.orElseGet(() -> inferFromHints(javaRichType)
Expand Down Expand Up @@ -152,7 +151,9 @@ private JaversType spawnFromPrototype(JavaRichType javaRichType, JaversType prot
}

private JaversType createDefaultType(JavaRichType t) {
logger.debug("javersType for '{}' defaulted to ValueObjectType", t.getTypeName());
logger.debug("registering default type: {} -> {}",
t.getTypeName(), ValueObjectType.class.getSimpleName());

return create(valueObjectDefinition(t.javaClass)
.withTypeName(t.getScan().typeName())
.defaultType()
Expand Down
Expand Up @@ -110,10 +110,6 @@ public JaversType getJaversType(Type javaType) {
return engine.computeIfAbsent(javaType, j -> typeFactory.infer(j, findPrototype(j)));
}

public boolean isShallowReferenceType(Type javaType) {
return getJaversType(javaType) instanceof ShallowReferenceType;
}

public ClassType getJaversClassType(Type javaType) {
argumentIsNotNull(javaType);
JaversType jType = getJaversType(javaType);
Expand Down Expand Up @@ -214,8 +210,8 @@ public <T extends JaversType> T getPropertyType(Property property){
public void registerClientsClass(ClientsClassDefinition def) {
JaversType newType = typeFactory.create(def);

logger.debug("javersType of '{}' " + "mapped explicitly to {}",
def.getBaseJavaClass().getSimpleName(), newType.getClass().getSimpleName());
logger.debug("registering explicit type: {} -> {}",
def.getBaseJavaClass().getName(), newType.getClass().getSimpleName());

engine.registerExplicitType(newType);
}
Expand Down
Expand Up @@ -10,6 +10,7 @@
import org.javers.core.json.typeadapter.util.UtilTypeCoreAdapters;
import org.javers.core.metamodel.clazz.ClientsClassDefinition;
import org.javers.java8support.Java8TypeAdapters;
import org.slf4j.Logger;

import java.lang.reflect.Type;
import java.util.*;
Expand All @@ -23,6 +24,7 @@
* thread-safe, mutable state of JaversTypes mapping
*/
class TypeMapperEngine {
static final Logger logger = TypeMapper.logger;

private final Map<String, JaversType> mappedTypes = new ConcurrentHashMap<>();
private final Map<DuckType, Class> mappedTypeNames = new ConcurrentHashMap<>();
Expand All @@ -42,12 +44,6 @@ private void putIfAbsent(Type javaType, final JaversType jType) {
addFullMapping(javaType, jType);
}

@Deprecated
private void putWithOverwrite(Type javaType, final JaversType jType) {
Validate.argumentsAreNotNull(javaType, jType);
addFullMapping(javaType, jType);
}

void registerCoreTypes(ListCompareAlgorithm listCompareAlgorithm,
Collection<ClientsClassDefinition> classesToSkip){
List<JaversType> coreTypes = new ArrayList<>();
Expand Down Expand Up @@ -95,6 +91,7 @@ void registerExplicitType(JaversType javersType) {
}

private void registerCoreType(JaversType jType) {
logger.debug("registering coreType: {} -> {} ", jType.getBaseJavaType().getTypeName(), jType.getClass().getSimpleName());
putIfAbsent(jType.getBaseJavaType(), jType);
}

Expand Down
2 changes: 1 addition & 1 deletion javers-core/src/test/resources/logback-test.xml
Expand Up @@ -14,4 +14,4 @@
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
</configuration>

0 comments on commit 67beeae

Please sign in to comment.