- final Map<YangInstanceIdentifier.PathArgument, NodeContextSupplier> byYangBuilder = new HashMap<>();
- final Map<Method, NodeContextSupplier> tmpMethodToSupplier = new HashMap<>();
- final Map<Class<?>, DataContainerCodecPrototype<?>> byStreamClassBuilder = new HashMap<>();
- final Map<Class<?>, DataContainerCodecPrototype<?>> byBindingArgClassBuilder = new HashMap<>();
-
- // Adds leaves to mapping
- for (final ValueNodeCodecContext leaf : leafChild.values()) {
- tmpMethodToSupplier.put(leaf.getGetter(), leaf);
- byYangBuilder.put(leaf.getDomPathArgument(), leaf);
- }
-
- for (final Entry<Class<?>, Method> childDataObj : clsToMethod.entrySet()) {
- final Method method = childDataObj.getValue();
- verify(!method.isDefault(), "Unexpected default method %s in %s", method, bindingClass);
-
- final Class<?> retClass = childDataObj.getKey();
- if (OpaqueObject.class.isAssignableFrom(retClass)) {
- // Filter OpaqueObjects, they are not containers
- continue;
- }
-
- final DataContainerCodecPrototype<?> childProto = loadChildPrototype(retClass);
- tmpMethodToSupplier.put(method, childProto);
- byStreamClassBuilder.put(childProto.getBindingClass(), childProto);
- byYangBuilder.put(childProto.getYangArg(), childProto);
- if (childProto.isChoice()) {
- final ChoiceNodeCodecContext<?> choice = (ChoiceNodeCodecContext<?>) childProto.get();
- for (final Class<?> cazeChild : choice.getCaseChildrenClasses()) {
- byBindingArgClassBuilder.put(cazeChild, childProto);
- }
- }
- }
-
- // Make sure properties are alpha-sorted
- final Method[] properties = tmpMethodToSupplier.keySet().toArray(new Method[0]);
- Arrays.sort(properties, METHOD_BY_ALPHABET);
- final Builder<Method, NodeContextSupplier> propBuilder = ImmutableMap.builderWithExpectedSize(
- properties.length);
- for (Method prop : properties) {
- propBuilder.put(prop, verifyNotNull(tmpMethodToSupplier.get(prop)));
- }
-
- this.byYang = ImmutableMap.copyOf(byYangBuilder);
- this.byStreamClass = ImmutableMap.copyOf(byStreamClassBuilder);
- byBindingArgClassBuilder.putAll(byStreamClass);
- this.byBindingArgClass = ImmutableMap.copyOf(byBindingArgClassBuilder);
-
- final CtClass superClass;
- final MethodType ctorType;
- if (Augmentable.class.isAssignableFrom(bindingClass)) {
- this.possibleAugmentations = factory().getRuntimeContext().getAvailableAugmentationTypes(getSchema());
- superClass = AUGMENTABLE_SUPERCLASS;
- ctorType = AUGMENTABLE_CONSTRUCTOR_TYPE;
- } else {
- this.possibleAugmentations = ImmutableMap.of();
- superClass = SUPERCLASS;
- ctorType = CONSTRUCTOR_TYPE;
- }
- reloadAllAugmentations();
-
- final Class<?> generatedClass;