Relocate UnrecognizedEffectiveStatementImpl QName handling 18/94618/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 13 Jan 2021 11:02:16 +0000 (12:02 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 13 Jan 2021 11:02:36 +0000 (12:02 +0100)
We are hunting down StmtContext leaks, as a first step move the code
to UnrecognizedStatementSupport, which is better equipped to deal
with the problem.

JIRA: YANGTOOLS-1186
Change-Id: I90db7d9ed2b41127c01d4f0a05eeb0424e0b57d3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java

index 2e04e7c88de80204424052f0c02c7a1a66a57f52..e036fe1d09bb8214e95aaf79f86035808c4c5830 100644 (file)
@@ -11,11 +11,8 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedEffectiveStatement;
@@ -23,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,17 +32,9 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
     private final @Nullable SchemaPath path;
 
     UnrecognizedEffectiveStatementImpl(final Current<String, UnrecognizedStatement> stmt,
-            final @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+            final @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final QName qnameArgument) {
         super(stmt, substatements);
-
-        // FIXME: Remove following section after fixing 4380
-        final UnknownSchemaNode original = (UnknownSchemaNode) stmt.original();
-        if (original == null) {
-            final QName qname = qnameFromArgument(stmt);
-            maybeQNameArgument = qname != null ? qname : getNodeType();
-        } else {
-            maybeQNameArgument = original.getQName();
-        }
+        this.maybeQNameArgument = qnameArgument != null ? qnameArgument : getNodeType();
 
         SchemaPath maybePath;
         try {
@@ -74,27 +62,4 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
     public StatementDefinition statementDefinition() {
         return getDeclared().statementDefinition();
     }
-
-    private static QName qnameFromArgument(final Current<String, UnrecognizedStatement> stmt) {
-        final String value = stmt.argument();
-        if (value == null || value.isEmpty()) {
-            return stmt.publicDefinition().getStatementName();
-        }
-
-        final int colon = value.indexOf(':');
-        if (colon == -1) {
-            final UnqualifiedQName qname = UnqualifiedQName.tryCreate(value);
-            return qname == null ? null : qname.bindTo(StmtContextUtils.getRootModuleQName(stmt.caerbannog())).intern();
-        }
-
-        final QNameModule qnameModule = StmtContextUtils.getModuleQNameByPrefix(stmt.caerbannog(),
-            value.substring(0, colon));
-        if (qnameModule == null) {
-            return null;
-        }
-
-        final int next = value.indexOf(':', colon + 1);
-        final String localName = next == -1 ? value.substring(colon + 1) : value.substring(colon + 1, next);
-        return QName.create(qnameModule, localName).intern();
-    }
 }
index 8d5017e2cb88aa0c1241f76ec0377e07f46b9adf..75f11fe131131cb324f51a04f5232023327ca0ee 100644 (file)
@@ -10,6 +10,9 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension;
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.ArgumentDefinition;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -20,6 +23,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 final class UnrecognizedStatementSupport
@@ -69,6 +73,32 @@ final class UnrecognizedStatementSupport
     @Override
     protected UnrecognizedEffectiveStatement createEffective(final Current<String, UnrecognizedStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new UnrecognizedEffectiveStatementImpl(stmt, substatements);
+        // FIXME: Remove following section after fixing 4380
+        final UnknownSchemaNode original = (UnknownSchemaNode) stmt.original();
+        return new UnrecognizedEffectiveStatementImpl(stmt, substatements,
+            original == null ? qnameFromArgument(stmt) : original.getQName());
+    }
+
+    private static QName qnameFromArgument(final Current<String, UnrecognizedStatement> stmt) {
+        final String value = stmt.argument();
+        if (value == null || value.isEmpty()) {
+            return stmt.publicDefinition().getStatementName();
+        }
+
+        final int colon = value.indexOf(':');
+        if (colon == -1) {
+            final UnqualifiedQName qname = UnqualifiedQName.tryCreate(value);
+            return qname == null ? null : qname.bindTo(StmtContextUtils.getRootModuleQName(stmt.caerbannog())).intern();
+        }
+
+        final QNameModule qnameModule = StmtContextUtils.getModuleQNameByPrefix(stmt.caerbannog(),
+            value.substring(0, colon));
+        if (qnameModule == null) {
+            return null;
+        }
+
+        final int next = value.indexOf(':', colon + 1);
+        final String localName = next == -1 ? value.substring(colon + 1) : value.substring(colon + 1, next);
+        return QName.create(qnameModule, localName).intern();
     }
 }
\ No newline at end of file