X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=parser%2Fyang-parser-reactor%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Freactor%2FReactorStmtCtx.java;h=a00b5446e56db4d2fbfd566267cc50fec0fd18af;hb=a964a780e67e0f094f275a35c20a9079cb902a47;hp=2c7fcbc99ab205c3447140a3daf45b06701477c7;hpb=b0aea307301907059ea1d82ca39d7d257d28e1c6;p=yangtools.git
diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
index 2c7fcbc99a..a00b5446e5 100644
--- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
+++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
@@ -17,6 +17,7 @@ import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.Empty;
@@ -33,21 +34,21 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStatementState;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent;
import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.ExecutionOrder;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementFactory;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamespace;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -191,10 +192,10 @@ abstract class ReactorStmtCtx, E extends Effec
public abstract RootStatementContext, ?, ?> getRoot();
@Override
- public abstract Collection extends StatementContextBase, ?, ?>> mutableDeclaredSubstatements();
+ public abstract Collection extends @NonNull StatementContextBase, ?, ?>> mutableDeclaredSubstatements();
@Override
- public final @NonNull Registry getBehaviourRegistry() {
+ public final Registry getBehaviourRegistry() {
return getRoot().getBehaviourRegistryImpl();
}
@@ -235,14 +236,8 @@ abstract class ReactorStmtCtx, E extends Effec
@Override
public final QName moduleName() {
- final RootStatementContext, ?, ?> root = getRoot();
- return QName.create(StmtContextUtils.getRootModuleQName(root), root.getRawArgument());
- }
-
- @Override
- @Deprecated(since = "7.0.9", forRemoval = true)
- public final EffectiveStatement, ?> original() {
- return getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
+ final var root = getRoot();
+ return QName.create(StmtContextUtils.getModuleQName(root), root.getRawArgument());
}
//
@@ -304,16 +299,12 @@ abstract class ReactorStmtCtx, E extends Effec
private String refString() {
final int current = refcount;
- switch (current) {
- case REFCOUNT_DEFUNCT:
- return "DEFUNCT";
- case REFCOUNT_SWEEPING:
- return "SWEEPING";
- case REFCOUNT_SWEPT:
- return "SWEPT";
- default:
- return String.valueOf(refcount);
- }
+ return switch (current) {
+ case REFCOUNT_DEFUNCT -> "DEFUNCT";
+ case REFCOUNT_SWEEPING -> "SWEEPING";
+ case REFCOUNT_SWEPT -> "SWEPT";
+ default -> String.valueOf(refcount);
+ };
}
/**
@@ -330,25 +321,22 @@ abstract class ReactorStmtCtx, E extends Effec
//
@Override
- public final > V namespaceItem(final Class<@NonNull N> type,
- final T key) {
+ public final V namespaceItem(final ParserNamespace type, final T key) {
return getBehaviourRegistry().getNamespaceBehaviour(type).getFrom(this, key);
}
@Override
- public final > Map namespace(final Class<@NonNull N> type) {
+ public final Map namespace(final ParserNamespace type) {
return getNamespace(type);
}
@Override
- public final >
- Map localNamespacePortion(final Class<@NonNull N> type) {
+ public final Map localNamespacePortion(final ParserNamespace type) {
return getLocalNamespace(type);
}
@Override
- protected > void onNamespaceElementAdded(final Class type, final K key,
- final V value) {
+ protected void onNamespaceElementAdded(final ParserNamespace type, final K key, final V value) {
// definition().onNamespaceElementAdded(this, type, key, value);
}
@@ -403,6 +391,20 @@ abstract class ReactorStmtCtx, E extends Effec
abstract @NonNull E createEffective();
+ /**
+ * Routing of the request to build an effective statement from {@link InferredStatementContext} towards the original
+ * definition site. This is needed to pick the correct instantiation method: for declared statements we will
+ * eventually land in {@link AbstractResumedStatement}, for underclared statements that will be
+ * {@link UndeclaredStmtCtx}.
+ *
+ * @param factory Statement factory
+ * @param ctx Inferred statement context, i.e. where the effective statement is instantiated
+ * @return Built effective stateue
+ */
+ abstract @NonNull E createInferredEffective(@NonNull StatementFactory factory,
+ @NonNull InferredStatementContext ctx, Stream extends ReactorStmtCtx, ?, ?>> declared,
+ Stream extends ReactorStmtCtx, ?, ?>> effective);
+
/**
* Attach an effective copy of this statement. This essentially acts as a map, where we make a few assumptions:
*
@@ -463,8 +465,9 @@ abstract class ReactorStmtCtx, E extends Effec
//
//
+ // Non-final form ImplicitStmtCtx
@Override
- public final boolean isSupportedToBuildEffective() {
+ public boolean isSupportedToBuildEffective() {
return isSupportedToBuildEffective;
}
@@ -489,7 +492,8 @@ abstract class ReactorStmtCtx, E extends Effec
*/
if (isParentSupportedByFeatures()) {
// If the set of supported features has not been provided, all features are supported by default.
- final Set supportedFeatures = getFromNamespace(SupportedFeaturesNamespace.class, Empty.value());
+ final Set supportedFeatures = getFromNamespace(ParserNamespaces.SUPPORTED_FEATURES,
+ Empty.value());
if (supportedFeatures == null || StmtContextUtils.checkFeatureSupport(this, supportedFeatures)) {
flags |= SET_SUPPORTED_BY_FEATURES;
return true;
@@ -647,17 +651,17 @@ abstract class ReactorStmtCtx, E extends Effec
}
final Object argument = argument();
- if (argument instanceof QName) {
- return ((QName) argument).getModule();
+ if (argument instanceof QName qname) {
+ return qname.getModule();
}
- if (argument instanceof String) {
+ if (argument instanceof String str) {
// FIXME: This may yield illegal argument exceptions
- return StmtContextUtils.qnameFromArgument(getOriginalCtx().orElse(this), (String) argument).getModule();
+ return StmtContextUtils.qnameFromArgument(getOriginalCtx().orElse(this), str).getModule();
}
- if (argument instanceof SchemaNodeIdentifier
+ if (argument instanceof SchemaNodeIdentifier sni
&& (producesDeclared(AugmentStatement.class) || producesDeclared(RefineStatement.class)
|| producesDeclared(DeviationStatement.class))) {
- return ((SchemaNodeIdentifier) argument).lastNodeIdentifier().getModule();
+ return sni.lastNodeIdentifier().getModule();
}
return coerceParent().effectiveNamespace();