From: Robert Varga Date: Thu, 2 Jul 2020 18:09:34 +0000 (+0200) Subject: Consolidate InstanceIdentifierTypeEffectiveStatementImpl X-Git-Tag: v5.0.4~28 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=95bf1fd2dd0a5341cc3e239e839d5197ecacda7d;p=yangtools.git Consolidate InstanceIdentifierTypeEffectiveStatementImpl TypeEffectiveStatementImpl can easily support the case of an instance-identifier type, migrate it. JIRA: YANGTOOLS-1065 Change-Id: I07db26a6e96a937c9335afe081d92441b29d3553 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java index 65950677cc..5d2aaba39c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; @@ -56,6 +57,7 @@ import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; import org.opendaylight.yangtools.yang.model.util.type.BitsTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.EnumerationTypeBuilder; +import org.opendaylight.yangtools.yang.model.util.type.InstanceIdentifierTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.InvalidLengthConstraintException; import org.opendaylight.yangtools.yang.model.util.type.LengthRestrictedTypeBuilder; import org.opendaylight.yangtools.yang.model.util.type.RangeRestrictedTypeBuilder; @@ -243,8 +245,7 @@ abstract class AbstractTypeStatementSupport } else if (baseType instanceof IdentityrefTypeDefinition) { return createIdentityref(ctx, (IdentityrefTypeDefinition) baseType, declared, substatements); } else if (baseType instanceof InstanceIdentifierTypeDefinition) { - return new InstanceIdentifierTypeEffectiveStatementImpl(ctx, - (InstanceIdentifierTypeDefinition) baseType); + return createInstanceIdentifier(ctx, (InstanceIdentifierTypeDefinition) baseType, declared, substatements); } else if (baseType instanceof Int8TypeDefinition) { return new IntegralTypeEffectiveStatementImpl<>(ctx, RestrictedTypes.newInt8Builder((Int8TypeDefinition) baseType, typeEffectiveSchemaPath(ctx))); @@ -466,6 +467,21 @@ abstract class AbstractTypeStatementSupport typeEffectiveSchemaPath(ctx))); } + private static @NonNull TypeEffectiveStatement createInstanceIdentifier( + final StmtContext ctx, final InstanceIdentifierTypeDefinition baseType, + final TypeStatement declared, final ImmutableList> substatements) { + final InstanceIdentifierTypeBuilder builder = RestrictedTypes.newInstanceIdentifierBuilder(baseType, + typeEffectiveSchemaPath(ctx)); + + for (EffectiveStatement stmt : substatements) { + if (stmt instanceof RequireInstanceEffectiveStatement) { + builder.setRequireInstance(((RequireInstanceEffectiveStatement)stmt).argument()); + } + } + + return new TypeEffectiveStatementImpl<>(declared, substatements, builder); + } + private static @NonNull TypeEffectiveStatement createUnion(final StmtContext ctx, final UnionTypeDefinition baseType, final TypeStatement declared, final ImmutableList> substatements) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierTypeEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierTypeEffectiveStatementImpl.java deleted file mode 100644 index 67f03e659c..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierTypeEffectiveStatementImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. 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.rfc7950.stmt.type; - -import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; -import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; -import org.opendaylight.yangtools.yang.model.util.type.InstanceIdentifierTypeBuilder; -import org.opendaylight.yangtools.yang.model.util.type.RestrictedTypes; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; - -final class InstanceIdentifierTypeEffectiveStatementImpl - extends DeclaredEffectiveStatementBase implements TypeEffectiveStatement { - private final @NonNull InstanceIdentifierTypeDefinition typeDefinition; - - InstanceIdentifierTypeEffectiveStatementImpl( - final StmtContext> ctx, - final InstanceIdentifierTypeDefinition baseType) { - super(ctx); - - final InstanceIdentifierTypeBuilder builder = - RestrictedTypes.newInstanceIdentifierBuilder(baseType, - AbstractTypeStatementSupport.typeEffectiveSchemaPath(ctx)); - - for (EffectiveStatement stmt : effectiveSubstatements()) { - if (stmt instanceof RequireInstanceEffectiveStatement) { - builder.setRequireInstance(((RequireInstanceEffectiveStatement)stmt).argument()); - } - if (stmt instanceof UnknownSchemaNode) { - builder.addUnknownSchemaNode((UnknownSchemaNode)stmt); - } - } - - typeDefinition = builder.build(); - } - - @Override - public InstanceIdentifierTypeDefinition getTypeDefinition() { - return typeDefinition; - } -}