Cleanup effectiveStatements() access
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / DeclaredEffectiveStatementBase.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
9
10 import com.google.common.base.Verify;
11 import javax.annotation.Nonnull;
12 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
13 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
14 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
15 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
16 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
17
18 public abstract class DeclaredEffectiveStatementBase<A, D extends DeclaredStatement<A>> extends
19         EffectiveStatementBase<A, D> {
20
21     private final StatementSource statementSource;
22     private final A argument;
23     private final D declaredInstance;
24
25     /**
26      * Constructor.
27      *
28      * @param ctx
29      *            context of statement.
30      */
31     protected DeclaredEffectiveStatementBase(StmtContext<A, D, ?> ctx) {
32         super(ctx);
33
34         this.argument = ctx.getStatementArgument();
35         this.statementSource = ctx.getStatementSource();
36
37         /*
38          * Share original instance of declared statement between all effective
39          * statements which have been copied or derived from this original
40          * declared statement.
41          */
42         @SuppressWarnings("unchecked")
43         final StatementContextBase<A, D, ?> originalCtx = (StatementContextBase<A, D, ?>) ctx.getOriginalCtx();
44         if (originalCtx != null) {
45             ctx = originalCtx;
46         }
47         declaredInstance = Verify.verifyNotNull(ctx.buildDeclared(), "Statement %s failed to build declared statement",
48                 ctx);
49     }
50
51     @Nonnull
52     @Override
53     public final StatementDefinition statementDefinition() {
54         return declaredInstance.statementDefinition();
55     }
56
57     @Override
58     public A argument() {
59         return argument;
60     }
61
62     @Nonnull
63     @Override
64     public final StatementSource getStatementSource() {
65         return statementSource;
66     }
67
68     @Override
69     public final D getDeclared() {
70         return declaredInstance;
71     }
72 }