From 73be7eaf765ace720c65d305a9d89b3073428199 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 28 Sep 2015 17:09:31 +0200 Subject: [PATCH] Do not instantiate QNameModules needlessly Rather than using URL-based QName constructor, use a QNameModule-based one, which saves object instantiation and results in potential reuse. Change-Id: Ia0bd87743b062ed71c32d4d2ed2563525e681ce8 Signed-off-by: Robert Varga --- .../impl/YangStatementParserListenerImpl.java | 37 +++++++++---------- .../stmt/reactor/SourceSpecificContext.java | 2 +- .../yang/parser/stmt/rfc6020/Utils.java | 4 +- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangStatementParserListenerImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangStatementParserListenerImpl.java index da76c3aec9..d54cf679ea 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangStatementParserListenerImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangStatementParserListenerImpl.java @@ -9,54 +9,53 @@ package org.opendaylight.yangtools.yang.parser.impl; import java.util.ArrayList; import java.util.List; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; -import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import javax.annotation.concurrent.Immutable; import org.antlr.v4.runtime.tree.ParseTree; import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser; import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParserBaseListener; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.YangConstants; +import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; +import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; -import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; - -import javax.annotation.concurrent.Immutable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Immutable public class YangStatementParserListenerImpl extends YangStatementParserBaseListener { private StatementWriter writer; - private String sourceName; + private final String sourceName; private QNameToStatementDefinition stmtDef; private PrefixToModule prefixes; - private List toBeSkipped = new ArrayList<>(); + private final List toBeSkipped = new ArrayList<>(); private boolean isType = false; private static final Logger LOG = LoggerFactory.getLogger(YangStatementParserListenerImpl.class); - public YangStatementParserListenerImpl(String sourceName) { + public YangStatementParserListenerImpl(final String sourceName) { this.sourceName = sourceName; } - public void setAttributes(StatementWriter writer, QNameToStatementDefinition stmtDef) { + public void setAttributes(final StatementWriter writer, final QNameToStatementDefinition stmtDef) { this.writer = writer; this.stmtDef = stmtDef; } - public void setAttributes(StatementWriter writer, QNameToStatementDefinition stmtDef, PrefixToModule prefixes) { + public void setAttributes(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) { this.writer = writer; this.stmtDef = stmtDef; this.prefixes = prefixes; } @Override - public void enterStatement(YangStatementParser.StatementContext ctx) { + public void enterStatement(final YangStatementParser.StatementContext ctx) { final StatementSourceReference ref = DeclarationInTextSource.atPosition(sourceName, ctx.getText(), ctx .getStart().getLine(), ctx.getStart().getCharPositionInLine()); boolean action = true; @@ -65,7 +64,7 @@ public class YangStatementParserListenerImpl extends YangStatementParserBaseList ParseTree child = ctx.getChild(i); if (child instanceof YangStatementParser.KeywordContext) { try { - identifier = new QName(YangConstants.RFC6020_YIN_NAMESPACE, + identifier = QName.create(YangConstants.RFC6020_YIN_MODULE, ((YangStatementParser.KeywordContext) child).children.get(0).getText()); if (stmtDef != null && Utils.isValidStatementDefinition(prefixes, stmtDef, identifier) && toBeSkipped.isEmpty()) { if (identifier.equals(Rfc6020Mapping.TYPE.getStatementName())) { @@ -90,9 +89,9 @@ public class YangStatementParserListenerImpl extends YangStatementParserBaseList final String argument = Utils.stringFromStringContext((YangStatementParser.ArgumentContext) child); if (isType) { if (TypeUtils.isYangTypeBodyStmtString(argument)) { - writer.startStatement(new QName(YangConstants.RFC6020_YIN_NAMESPACE, argument), ref); + writer.startStatement(QName.create(YangConstants.RFC6020_YIN_MODULE, argument), ref); } else { - writer.startStatement(new QName(YangConstants.RFC6020_YIN_NAMESPACE, Rfc6020Mapping + writer.startStatement(QName.create(YangConstants.RFC6020_YIN_MODULE, Rfc6020Mapping .TYPE.getStatementName().getLocalName()), ref); } writer.argumentValue(argument, ref); @@ -111,7 +110,7 @@ public class YangStatementParserListenerImpl extends YangStatementParserBaseList } @Override - public void exitStatement(YangStatementParser.StatementContext ctx) { + public void exitStatement(final YangStatementParser.StatementContext ctx) { final StatementSourceReference ref = DeclarationInTextSource.atPosition(sourceName, ctx.getText(), ctx.getStart().getLine(), ctx .getStart().getCharPositionInLine()); for (int i = 0; i < ctx.getChildCount(); i++) { @@ -119,7 +118,7 @@ public class YangStatementParserListenerImpl extends YangStatementParserBaseList if (child instanceof YangStatementParser.KeywordContext) { try { String statementName = ((YangStatementParser.KeywordContext) child).children.get(0).getText(); - QName identifier = new QName(YangConstants.RFC6020_YIN_NAMESPACE, statementName); + QName identifier = QName.create(YangConstants.RFC6020_YIN_MODULE, statementName); if (stmtDef != null && Utils.isValidStatementDefinition(prefixes, stmtDef, identifier) && toBeSkipped.isEmpty()) { writer.endStatement(ref); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java index a8c823e2ab..db760d0792 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java @@ -376,7 +376,7 @@ public class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeh for (Map.Entry>> extension : extensions .entrySet()) { qNameToStmtDefMap - .put(new QName(YangConstants.RFC6020_YIN_NAMESPACE, + .put(QName.create(YangConstants.RFC6020_YIN_MODULE, extension.getKey().getLocalName()), (StatementDefinition) ((StatementContextBase) extension .getValue()).definition() diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java index d8ed70f09b..7737c5e258 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java @@ -160,10 +160,10 @@ public final class Utils { String prefix = namesParts[0]; String localName = namesParts[1]; if (prefixes != null && prefixes.get(prefix) != null - && stmtDef.get(new QName(YangConstants.RFC6020_YIN_NAMESPACE, localName)) != null) { + && stmtDef.get(QName.create(YangConstants.RFC6020_YIN_MODULE, localName)) != null) { return true; } else { - if (stmtDef.get(new QName(YangConstants.RFC6020_YIN_NAMESPACE, localName)) != null) { + if (stmtDef.get(QName.create(YangConstants.RFC6020_YIN_MODULE, localName)) != null) { return true; } } -- 2.36.6