X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fgenerator%2Fimpl%2FRuntimeTypeGenerator.java;h=ee661724368dccd11fe732f90483e8119c784678;hb=refs%2Fchanges%2F37%2F93137%2F6;hp=355a0df3217e24098f3a543106be338248e4fd03;hpb=4bc170fb392d2100d676199abcf059b1116de2b5;p=mdsal.git diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/RuntimeTypeGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/RuntimeTypeGenerator.java index 355a0df321..ee66172436 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/RuntimeTypeGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/RuntimeTypeGenerator.java @@ -7,84 +7,85 @@ */ package org.opendaylight.mdsal.binding.generator.impl; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import java.util.Collection; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import org.opendaylight.mdsal.binding.generator.api.BindingRuntimeTypes; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.Type; -import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder; -import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder; import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase; import org.opendaylight.mdsal.binding.model.api.type.builder.TypeMemberBuilder; +import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeTypes; import org.opendaylight.mdsal.binding.yang.types.RuntimeTypeProvider; +import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.DocumentedNode; import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; final class RuntimeTypeGenerator extends AbstractTypeGenerator { - RuntimeTypeGenerator(final SchemaContext context) { - super(context, new RuntimeTypeProvider(context)); + RuntimeTypeGenerator(final EffectiveModelContext context, final Map renames) { + super(context, new RuntimeTypeProvider(context, renames), renames); } - BindingRuntimeTypes toTypeMapping() { + @NonNull BindingRuntimeTypes toTypeMapping() { final Map augmentationToSchema = new HashMap<>(); - final BiMap typeToDefiningSchema = HashBiMap.create(); + final Map typeToSchema = new HashMap<>(); final Multimap choiceToCases = HashMultimap.create(); final Map identities = new HashMap<>(); + // Note: we are keying through WithStatus, but these nodes compare on semantics, so equivalent schema nodes + // can result in two distinct types. We certainly need to keep them separate. + final Map schemaToType = new IdentityHashMap<>(); + /* - * Fun parts are here. ModuleContext maps have Builders in them, we want plan types. We may encounter each + * Fun parts are here. ModuleContext maps have Builders in them, we want plain types. We may encounter each * builder multiple times, hence we keep a builder->instance cache. */ final Map builderToType = new IdentityHashMap<>(); + for (final ModuleContext ctx : moduleContexts()) { for (Entry e : ctx.getTypeToAugmentation().entrySet()) { augmentationToSchema.put(builtType(builderToType, e.getKey()), e.getValue()); } for (Entry e : ctx.getTypeToSchema().entrySet()) { - typeToDefiningSchema.put(builtType(builderToType, e.getKey()), e.getValue()); + final Type type = builtType(builderToType, e.getKey()); + typeToSchema.put(type, e.getValue()); + schemaToType.put(e.getValue(), type); } for (Entry e : ctx.getChoiceToCases().entries()) { choiceToCases.put(builtType(builderToType, e.getKey()), builtType(builderToType, e.getValue())); } - for (Entry e : ctx.getIdentities().entrySet()) { + for (Entry e : ctx.getIdentities().entrySet()) { identities.put(e.getKey(), builtType(builderToType, e.getValue())); } } - return new BindingRuntimeTypes(augmentationToSchema, typeToDefiningSchema, choiceToCases, identities); + return new BindingRuntimeTypes(schemaContext(), augmentationToSchema, typeToSchema, schemaToType, choiceToCases, + identities); } private static Type builtType(final Map knownTypes, final Type type) { - final Type existing = knownTypes.get(type); - if (existing != null) { - return existing; - } + if (type instanceof Builder) { + final Type existing = knownTypes.get(type); + if (existing != null) { + return existing; + } - final Type built; - if (type instanceof AnnotationTypeBuilder) { - built = ((AnnotationTypeBuilder) type).toInstance(); - } else if (type instanceof GeneratedTOBuilder) { - built = ((GeneratedTOBuilder) type).toInstance(); - } else if (type instanceof GeneratedTypeBuilder) { - built = ((GeneratedTypeBuilder) type).toInstance(); - } else { - built = type; + final Type built = (Type) ((Builder)type).build(); + knownTypes.put(type, built); + return built; } - - knownTypes.put(type, built); - return built; + return type; } @Override @@ -99,7 +100,7 @@ final class RuntimeTypeGenerator extends AbstractTypeGenerator { @Override void addCodegenInformation(final GeneratedTypeBuilder interfaceBuilder, final Module module, final String string, - final Set nodes) { + final Collection nodes) { // No-op } @@ -107,4 +108,9 @@ final class RuntimeTypeGenerator extends AbstractTypeGenerator { void addComment(final TypeMemberBuilder genType, final DocumentedNode node) { // No-op } + + @Override + void addRpcMethodComment(final TypeMemberBuilder genType, final RpcDefinition node) { + // No-op + } }