*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder;
-import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypeBuilder;
+import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypes;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DataSchemaNodeMixin;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MandatoryMixin;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.MustConstraintMixin;
DataSchemaNodeMixin<QName, LeafStatement>, MandatoryMixin<QName, LeafStatement>,
MustConstraintMixin<QName, LeafStatement> {
private final @NonNull Object substatements;
- private final @Nullable SchemaPath path;
+ private final @NonNull Immutable path;
private final @NonNull TypeDefinition<?> type;
private final int flags;
- AbstractLeafEffectiveStatement(final LeafStatement declared, final SchemaPath path, final int flags,
+ AbstractLeafEffectiveStatement(final LeafStatement declared, final Immutable path, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(declared);
+ this.path = requireNonNull(path);
this.substatements = maskList(substatements);
- this.path = path;
this.flags = flags;
// TODO: lazy instantiation?
this.type = buildType();
}
+ AbstractLeafEffectiveStatement(final AbstractLeafEffectiveStatement original, final Immutable path,
+ final int flags) {
+ super(original);
+ this.path = requireNonNull(path);
+ this.substatements = original.substatements;
+ this.flags = flags;
+ // FIXME: share with original?
+ this.type = buildType();
+ }
+
@Override
public final ImmutableList<? extends EffectiveStatement<?, ?>> effectiveSubstatements() {
return unmaskList(substatements);
}
@Override
- @Deprecated
- public final SchemaPath getPath() {
- return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+ public final Immutable pathObject() {
+ return path;
}
@Override
private TypeDefinition<?> buildType() {
final TypeEffectiveStatement<?> typeStmt = findFirstEffectiveSubstatement(TypeEffectiveStatement.class).get();
final ConcreteTypeBuilder<?> builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(),
- getPath());
+ getQName());
for (final EffectiveStatement<?, ?> stmt : effectiveSubstatements()) {
if (stmt instanceof DefaultEffectiveStatement) {
builder.setDefaultValue(((DefaultEffectiveStatement)stmt).argument());