From ba72ac069856dd2b2f2f27654ea48f61076393cc Mon Sep 17 00:00:00 2001 From: Degubi Date: Wed, 4 Sep 2019 23:08:54 +0200 Subject: [PATCH] Refactor MappingContext MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gyúróczki Gergő --- .../yasson/internal/MappingContext.java | 69 ++++--------------- 1 file changed, 14 insertions(+), 55 deletions(-) diff --git a/src/main/java/org/eclipse/yasson/internal/MappingContext.java b/src/main/java/org/eclipse/yasson/internal/MappingContext.java index 2f3c0984d..f512701d9 100644 --- a/src/main/java/org/eclipse/yasson/internal/MappingContext.java +++ b/src/main/java/org/eclipse/yasson/internal/MappingContext.java @@ -19,7 +19,6 @@ import java.util.ArrayDeque; import java.util.Deque; -import java.util.Iterator; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -34,31 +33,6 @@ * @author Roman Grigoriadi */ public class MappingContext { - - private static class ParseClassModelFunction implements Function { - - private ClassModel parentClassModel; - - private ClassParser classParser; - - private JsonbContext jsonbContext; - - public ParseClassModelFunction(ClassModel parentClassModel, ClassParser classParser, JsonbContext jsonbContext) { - this.parentClassModel = parentClassModel; - this.classParser = classParser; - this.jsonbContext = jsonbContext; - } - - @Override - public ClassModel apply(Class aClass) { - final JsonbAnnotatedElement> clsElement = jsonbContext.getAnnotationIntrospector().collectAnnotations(aClass); - final ClassCustomization customization = jsonbContext.getAnnotationIntrospector().introspectCustomization(clsElement); - final ClassModel newClassModel = new ClassModel(aClass, customization, parentClassModel, jsonbContext.getConfigProperties().getPropertyNamingStrategy()); - classParser.parseProperties(newClassModel, clsElement); - return newClassModel; - } - } - private final JsonbContext jsonbContext; private final ConcurrentHashMap, ClassModel> classes = new ConcurrentHashMap<>(); @@ -90,48 +64,33 @@ public ClassModel getOrCreateClassModel(Class clazz) { if (classModel != null) { return classModel; } - final Deque newClassModels = new ArrayDeque<>(); - for (Class classToParse = clazz; classToParse != Object.class; classToParse = classToParse.getSuperclass()) { + + Deque> newClassModels = new ArrayDeque<>(); + for (Class classToParse = clazz; classToParse != Object.class; classToParse = classToParse.getSuperclass()) { if (classToParse == null){ break; } newClassModels.push(classToParse); } if (clazz == Object.class) { - classes.computeIfAbsent(clazz, (c) -> new ClassModel(c, null, null, null)); - return classes.get(clazz); + return classes.computeIfAbsent(clazz, (c) -> new ClassModel(c, null, null, null)); } ClassModel parentClassModel = null; while (!newClassModels.isEmpty()) { - Class toParse = newClassModels.pop(); - parentClassModel = classes.computeIfAbsent(toParse, new ParseClassModelFunction(parentClassModel, classParser, jsonbContext)); + Class toParse = newClassModels.pop(); + parentClassModel = classes.computeIfAbsent(toParse, createParseClassModelFunction(parentClassModel, classParser, jsonbContext)); } return classes.get(clazz); } - /** - * Provided class class model is returned first by iterator. - * Following class models are sorted by hierarchy from provided class up to the Object.class. - * - * @param clazz class to start iteration of class models from - * @return iterator of class models - */ - public Iterator classModelIterator(final Class clazz) { - return new Iterator() { - private Class next = clazz; - - @Override - public boolean hasNext() { - return next != Object.class; - } - - @Override - public ClassModel next() { - final ClassModel result = classes.get(next); - next = next.getSuperclass(); - return result; - } + private static Function, ClassModel> createParseClassModelFunction(ClassModel parentClassModel, ClassParser classParser, JsonbContext jsonbContext){ + return aClass -> { + JsonbAnnotatedElement> clsElement = jsonbContext.getAnnotationIntrospector().collectAnnotations(aClass); + ClassCustomization customization = jsonbContext.getAnnotationIntrospector().introspectCustomization(clsElement); + ClassModel newClassModel = new ClassModel(aClass, customization, parentClassModel, jsonbContext.getConfigProperties().getPropertyNamingStrategy()); + classParser.parseProperties(newClassModel, clsElement); + return newClassModel; }; } @@ -164,4 +123,4 @@ public ContainerSerializerProvider getSerializerProvider(Class clazz) { public void addSerializerProvider(Class clazz, ContainerSerializerProvider serializerProvider) { serializers.putIfAbsent(clazz, serializerProvider); } -} +} \ No newline at end of file