From: Robert Varga Date: Thu, 12 Mar 2015 19:49:11 +0000 (+0100) Subject: BUG-2829: make static QName field hold a cached reference X-Git-Tag: release/beryllium~234^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=8b37e854da153729c0c5a77d568afe644fc2cebc;p=mdsal.git BUG-2829: make static QName field hold a cached reference A QName (and QNameModule) exposes an API to obtain a system-wide shared reference to an object. Use this facility to share QNameModules across all generated classes, as well as sharing potentially duplicate QNames. Change-Id: Icfd0c48edbd37e54be1a436480d5808d4efaf29d Signed-off-by: Robert Varga --- diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java index d9796236ed..8403a44a82 100644 --- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -25,7 +25,6 @@ import static org.opendaylight.yangtools.binding.generator.util.Types.typeForCla import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode; import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findNodeInSchemaContext; import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findParentModule; - import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; @@ -108,6 +107,7 @@ public class BindingGeneratorImpl implements BindingGenerator { private static final Splitter COLON_SPLITTER = Splitter.on(':'); private static final Splitter BSDOT_SPLITTER = Splitter.on("\\."); private static final char NEW_LINE = '\n'; + private static final String QNAME_FQCN = QName.class.getName(); /** * Constant with the concrete name of identifier. @@ -653,7 +653,9 @@ public class BindingGeneratorImpl implements BindingGenerator { private static Constant qnameConstant(final GeneratedTypeBuilderBase toBuilder, final String constantName, final QName name) { - final StringBuilder sb = new StringBuilder("org.opendaylight.yangtools.yang.common.QName"); + final StringBuilder sb = new StringBuilder(QNAME_FQCN); + sb.append(".cachedReference("); + sb.append(QNAME_FQCN); sb.append(".create("); sb.append('"'); sb.append(name.getNamespace()); @@ -661,7 +663,7 @@ public class BindingGeneratorImpl implements BindingGenerator { sb.append(name.getFormattedRevision()); sb.append("\",\""); sb.append(name.getLocalName()); - sb.append("\");"); + sb.append("\"))"); return toBuilder.addConstant(typeForClass(QName.class), constantName, sb.toString()); }