From abc01c9a2e43ada97dfd003066848a63e958d3b1 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 29 Oct 2020 21:19:15 +0100 Subject: [PATCH] Add RootStmtContext marker interface This is a useful marker which we can expose in APIs, i.e. for users which already have a RootStmtContext available. The thinking here is that, for example, Lookups in global context are shorter from root than from any old context. JIRA: YANGTOOLS-1158 Change-Id: Ib69d70ded9d4b46524be21fb5524311b427d9245 Signed-off-by: Robert Varga --- .../stmt/reactor/RootStatementContext.java | 3 +- .../yang/parser/spi/meta/RootStmtContext.java | 32 +++++++++++++++++++ .../yang/parser/spi/meta/StmtContext.java | 4 +-- 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/RootStmtContext.java diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java index 0a1baff79c..e9089250d6 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java @@ -34,6 +34,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType; +import org.opendaylight.yangtools.yang.parser.spi.meta.RootStmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.IncludedModuleContext; import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; @@ -42,7 +43,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReferenc * of this class, hence recursive lookups from them cross this class. */ public final class RootStatementContext, E extends EffectiveStatement> - extends AbstractResumedStatement { + extends AbstractResumedStatement implements RootStmtContext.Mutable { public static final YangVersion DEFAULT_VERSION = YangVersion.VERSION_1; diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/RootStmtContext.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/RootStmtContext.java new file mode 100644 index 0000000000..8c1c484487 --- /dev/null +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/RootStmtContext.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.parser.spi.meta; + +import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; + +/** + * A marker interface for a {@link StmtContext}. Useful for operations which make assumption about the context's + * hierarchy. + * + * @param Argument type + * @param Declared Statement representation + * @param Effective Statement representation + */ +@Beta +public interface RootStmtContext, E extends EffectiveStatement> + extends StmtContext { + + interface Mutable, E extends EffectiveStatement> + extends StmtContext.Mutable, RootStmtContext { + + @Override + RootStmtContext.Mutable getRoot(); + } +} diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java index 337a5fba1a..8419a5f517 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java @@ -151,7 +151,7 @@ public interface StmtContext, E extends Effect > Map getAllFromCurrentStmtCtxNamespace(Class type); - @NonNull StmtContext getRoot(); + @NonNull RootStmtContext getRoot(); /** * Return declared substatements. These are the statements which are explicitly written in the source model. @@ -271,7 +271,7 @@ public interface StmtContext, E extends Effect T key, U value); @Override - Mutable getRoot(); + RootStmtContext.Mutable getRoot(); /** * Create a child sub-statement, which is a child of this statement, inheriting all attributes from specified -- 2.36.6