From 84079727baba1e211444b1b4b8fe878911ec25fe Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 25 May 2017 00:52:22 +0200 Subject: [PATCH] Consolidate range to string code Contraint range emission code is duplicate, consolidate and speed it up. Also fix a few sonar and eclipse warnings. Change-Id: I9826200c0dedf9e8d1bc7b7d53a7a13655cbe283 Signed-off-by: Robert Varga --- .../model/export/SchemaContextEmitter.java | 91 ++++++++++--------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java index 9ec95a5b11..9df4a6db7f 100644 --- a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java +++ b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java @@ -431,12 +431,8 @@ class SchemaContextEmitter { } private void emitTypeNodeDerived(final TypeDefinition typeDefinition) { - final TypeDefinition baseType; - if (typeDefinition.getBaseType() != null) { - baseType = typeDefinition.getBaseType(); - } else { - baseType = typeDefinition; - } + final TypeDefinition b = typeDefinition.getBaseType(); + final TypeDefinition baseType = b == null ? typeDefinition : b; writer.startTypeNode(baseType.getQName()); emitTypeBodyNodes(typeDefinition); writer.endNode(); @@ -535,49 +531,60 @@ class SchemaContextEmitter { } private static String toLengthString(final List list) { - final StringBuilder lengthStr = new StringBuilder(); - final Iterator constIt = list.iterator(); - while (constIt.hasNext()) { - final LengthConstraint current = constIt.next(); - if (current.getMin() == current.getMax()) { - lengthStr.append(current.getMin()); - } else { - lengthStr.append(current.getMin()); - lengthStr.append(".."); - lengthStr.append(current.getMax()); - } - if (constIt.hasNext()) { - lengthStr.append("|"); - } + final Iterator it = list.iterator(); + if (!it.hasNext()) { + return ""; } - return lengthStr.toString(); + + final StringBuilder sb = new StringBuilder(); + boolean haveNext; + do { + final LengthConstraint current = it.next(); + haveNext = it.hasNext(); + appendRange(sb, current.getMin(), current.getMax(), haveNext); + } while (haveNext); + + return sb.toString(); } private static String toRangeString(final List list) { - final StringBuilder lengthStr = new StringBuilder(); - final Iterator constIt = list.iterator(); - while (constIt.hasNext()) { - final RangeConstraint current = constIt.next(); - if (current.getMin() == current.getMax()) { - lengthStr.append(current.getMin()); - } else { - lengthStr.append(current.getMin()); - lengthStr.append(".."); - lengthStr.append(current.getMax()); - } - if (constIt.hasNext()) { - lengthStr.append("|"); - } + final Iterator it = list.iterator(); + if (!it.hasNext()) { + return ""; + } + + final StringBuilder sb = new StringBuilder(); + boolean haveNext; + do { + final RangeConstraint current = it.next(); + haveNext = it.hasNext(); + appendRange(sb, current.getMin(), current.getMax(), haveNext); + } while (haveNext); + + return sb.toString(); + } + + private static void appendRange(final StringBuilder sb, final Number min, final Number max, + final boolean haveNext) { + sb.append(min); + if (!min.equals(max)) { + sb.append(".."); + sb.append(max); + } + if (haveNext) { + sb.append('|'); } - return lengthStr.toString(); } private void emitPatternNode(final PatternConstraint pattern) { writer.startPatternNode(pattern.getRawRegularExpression()); - emitErrorMessageNode(pattern.getErrorMessage()); // FIXME: BUG-2444: Optional - emitErrorAppTagNode(pattern.getErrorAppTag()); // FIXME: BUG-2444: Optional + // FIXME: BUG-2444: Optional + emitErrorMessageNode(pattern.getErrorMessage()); + // FIXME: BUG-2444: Optional + emitErrorAppTagNode(pattern.getErrorAppTag()); emitDescriptionNode(pattern.getDescription()); - emitReferenceNode(pattern.getReference()); // FIXME: BUG-2444: Optional + // FIXME: BUG-2444: Optional + emitReferenceNode(pattern.getReference()); writer.endNode(); } @@ -586,7 +593,6 @@ class SchemaContextEmitter { writer.startDefaultNode(object.toString()); writer.endNode(); } - } private void emitEnumSpecification(final EnumTypeDefinition typeDefinition) { @@ -606,8 +612,7 @@ class SchemaContextEmitter { private void emitLeafrefSpecification(final LeafrefTypeDefinition typeDefinition) { emitPathNode(typeDefinition.getPathStatement()); - // FIXME: BUG-2444: requireInstanceNode /Optional removed with (RFC6020 - Errata ID - // 2949) + // FIXME: BUG-2444: requireInstanceNode /Optional removed with (RFC6020 - Errata ID 2949) // Added in Yang 1.1 } @@ -1164,7 +1169,7 @@ class SchemaContextEmitter { private static boolean isExplicitStatement(final ContainerSchemaNode node) { return node instanceof EffectiveStatement - && ((EffectiveStatement) node).getDeclared().getStatementSource() == StatementSource.DECLARATION; + && ((EffectiveStatement) node).getDeclared().getStatementSource() == StatementSource.DECLARATION; } private void emitNotificationNode(final NotificationDefinition notification) { -- 2.36.6