2 * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.model.ri.stmt;
10 import static com.google.common.base.Preconditions.checkArgument;
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.ImmutableList;
14 import com.google.common.collect.ImmutableSet;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.eclipse.jdt.annotation.Nullable;
17 import org.opendaylight.yangtools.concepts.Immutable;
18 import org.opendaylight.yangtools.yang.common.QNameModule;
19 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
28 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
29 import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
30 import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
31 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
32 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
33 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
34 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
35 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentEffectiveStatement;
36 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
37 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
38 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
39 import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement;
40 import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
41 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement;
42 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
43 import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement;
44 import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
45 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
46 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
47 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
48 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
49 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement;
50 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
51 import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement;
52 import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement;
53 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
54 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
55 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
56 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
57 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement;
58 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
59 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateEffectiveStatement;
60 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
61 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationEffectiveStatement;
62 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
63 import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement;
64 import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement;
65 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement;
66 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement;
67 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement;
68 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
69 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement;
70 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
71 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
72 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
73 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsEffectiveStatement;
74 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement;
75 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
76 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
77 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement;
78 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
79 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureEffectiveStatement;
80 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
81 import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
82 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
83 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement;
84 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
85 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
86 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
87 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
88 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
89 import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
90 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
91 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
92 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
93 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
94 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
95 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement;
96 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
97 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement;
98 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
99 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceEffectiveStatement;
100 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
101 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
102 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
103 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
104 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
105 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement;
106 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement;
107 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
108 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
109 import org.opendaylight.yangtools.yang.model.api.stmt.PathEffectiveStatement;
110 import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
111 import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
112 import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
113 import org.opendaylight.yangtools.yang.model.api.stmt.PositionEffectiveStatement;
114 import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
115 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement;
116 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
117 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement;
118 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
119 import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement;
120 import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
121 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
122 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
123 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement;
124 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement;
125 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateEffectiveStatement;
126 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
127 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionEffectiveStatement;
128 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
129 import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
130 import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
131 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
132 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
133 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
134 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
135 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
136 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
137 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
138 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
139 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
140 import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement;
141 import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement;
142 import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
143 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
144 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement;
145 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
146 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementEffectiveStatement;
147 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
148 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
149 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyRequireInstanceStatement;
150 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyStatusStatement;
151 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyYangVersionStatement;
152 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AbstractLeafEffectiveStatement;
153 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ActionEffectiveStatementImpl;
154 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AugmentEffectiveStatementImpl;
155 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ChoiceEffectiveStatementImpl;
156 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl;
157 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredCaseEffectiveStatement;
158 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredInputEffectiveStatement;
159 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredOutputEffectiveStatement;
160 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeviateEffectiveStatementImpl;
161 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeviationEffectiveStatementImpl;
162 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyAnydataEffectiveStatement;
163 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyAnyxmlEffectiveStatement;
164 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyArgumentEffectiveStatement;
165 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBaseEffectiveStatement;
166 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBelongsToEffectiveStatement;
167 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBitEffectiveStatement;
168 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyConfigEffectiveStatement;
169 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyContactEffectiveStatement;
170 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDefaultEffectiveStatement;
171 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDescriptionEffectiveStatement;
172 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyEnumEffectiveStatement;
173 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorAppTagEffectiveStatement;
174 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorMessageEffectiveStatement;
175 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFeatureEffectiveStatement;
176 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFractionDigitsEffectiveStatement;
177 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIdentityEffectiveStatement;
178 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIfFeatureEffectiveStatement;
179 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIncludeEffectiveStatement;
180 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafEffectiveStatement;
181 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLengthEffectiveStatement;
182 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMandatoryEffectiveStatement;
183 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMaxElementsEffectiveStatement;
184 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMinElementsEffectiveStatement;
185 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyModifierEffectiveStatement;
186 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyNamespaceEffectiveStatement;
187 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyOrderedByEffectiveStatement;
188 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyOrganizationEffectiveStatement;
189 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPathEffectiveStatement;
190 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPatternEffectiveStatement;
191 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPositionEffectiveStatement;
192 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPrefixEffectiveStatement;
193 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPresenceEffectiveStatement;
194 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRangeEffectiveStatement;
195 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyReferenceEffectiveStatement;
196 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRequireInstanceEffectiveStatement;
197 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRevisionDateEffectiveStatement;
198 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRevisionEffectiveStatement;
199 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyStatusEffectiveStatement;
200 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyUniqueEffectiveStatement;
201 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyUnitsEffectiveStatement;
202 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyValueEffectiveStatement;
203 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyWhenEffectiveStatement;
204 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyYangVersionEffectiveStatement;
205 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyYinElementEffectiveStatement;
206 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ExtensionEffectiveStatementImpl;
207 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.GroupingEffectiveStatementImpl;
208 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ImportEffectiveStatementImpl;
209 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.NotificationEffectiveStatementImpl;
210 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularAnydataEffectiveStatement;
211 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularAnyxmlEffectiveStatement;
212 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularArgumentEffectiveStatement;
213 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBaseEffectiveStatement;
214 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBelongsToEffectiveStatement;
215 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBitEffectiveStatement;
216 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularConfigEffectiveStatement;
217 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularContactEffectiveStatement;
218 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDefaultEffectiveStatement;
219 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDescriptionEffectiveStatement;
220 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularEnumEffectiveStatement;
221 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorAppTagEffectiveStatement;
222 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorMessageEffectiveStatement;
223 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFeatureEffectiveStatement;
224 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFractionDigitsEffectiveStatement;
225 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIdentityEffectiveStatement;
226 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIfFeatureEffectiveStatement;
227 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIncludeEffectiveStatement;
228 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafEffectiveStatement;
229 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLengthEffectiveStatement;
230 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMandatoryEffectiveStatement;
231 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMaxElementsEffectiveStatement;
232 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMinElementsEffectiveStatement;
233 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularModifierEffectiveStatement;
234 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularNamespaceEffectiveStatement;
235 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularOrderedByEffectiveStatement;
236 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularOrganizationEffectiveStatement;
237 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPathEffectiveStatement;
238 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPatternEffectiveStatement;
239 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPositionEffectiveStatement;
240 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPrefixEffectiveStatement;
241 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPresenceEffectiveStatement;
242 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRangeEffectiveStatement;
243 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularReferenceEffectiveStatement;
244 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRequireInstanceEffectiveStatement;
245 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRevisionDateEffectiveStatement;
246 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRevisionEffectiveStatement;
247 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularStatusEffectiveStatement;
248 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularUniqueEffectiveStatement;
249 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularUnitsEffectiveStatement;
250 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularValueEffectiveStatement;
251 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularWhenEffectiveStatement;
252 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYangVersionEffectiveStatement;
253 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYinElementEffectiveStatement;
254 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RpcEffectiveStatementImpl;
255 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.TypedefEffectiveStatementImpl;
256 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredCaseEffectiveStatement;
257 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredInputEffectiveStatement;
258 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredOutputEffectiveStatement;
259 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
262 * Static entry point to instantiating {@link EffectiveStatement} covered in the {@code RFC7950} metamodel.
266 public final class EffectiveStatements {
267 private EffectiveStatements() {
271 public static ActionEffectiveStatement copyAction(final ActionEffectiveStatement original, final Immutable path,
273 checkArgument(original instanceof ActionEffectiveStatementImpl, "Unsupported original %s", original);
274 return new ActionEffectiveStatementImpl((ActionEffectiveStatementImpl) original, path, flags);
277 public static ActionEffectiveStatement createAction(final ActionStatement declared, final Immutable path,
278 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
279 throws SubstatementIndexingException {
280 return new ActionEffectiveStatementImpl(declared, path, flags, substatements);
283 public static AnydataEffectiveStatement copyAnydata(final AnydataEffectiveStatement original, final Immutable path,
284 final int flags, final @Nullable AnydataSchemaNode newOriginal) {
285 if (original instanceof RegularAnydataEffectiveStatement) {
286 return new RegularAnydataEffectiveStatement((RegularAnydataEffectiveStatement) original, path, flags,
288 } else if (original instanceof EmptyAnydataEffectiveStatement) {
289 return new EmptyAnydataEffectiveStatement((EmptyAnydataEffectiveStatement) original, path, flags,
292 throw new IllegalArgumentException("Unsupported original " + original);
296 public static AnydataEffectiveStatement createAnydata(final AnydataStatement declared, final Immutable path,
297 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
298 final @Nullable AnydataSchemaNode original) {
299 return substatements.isEmpty() ? new EmptyAnydataEffectiveStatement(declared, path, flags, original)
300 : new RegularAnydataEffectiveStatement(declared, path, flags, original, substatements);
303 public static AnyxmlEffectiveStatement copyAnyxml(final AnyxmlEffectiveStatement original, final Immutable path,
304 final int flags, final @Nullable AnyxmlSchemaNode newOriginal) {
305 if (original instanceof RegularAnyxmlEffectiveStatement) {
306 return new RegularAnyxmlEffectiveStatement((RegularAnyxmlEffectiveStatement) original, path, flags,
308 } else if (original instanceof EmptyAnyxmlEffectiveStatement) {
309 return new EmptyAnyxmlEffectiveStatement((EmptyAnyxmlEffectiveStatement) original, path, flags,
312 throw new IllegalArgumentException("Unsupported original " + original);
316 public static AnyxmlEffectiveStatement createAnyxml(final AnyxmlStatement declared, final Immutable path,
317 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
318 final @Nullable AnyxmlSchemaNode original) {
319 return substatements.isEmpty() ? new EmptyAnyxmlEffectiveStatement(declared, path, flags, original)
320 : new RegularAnyxmlEffectiveStatement(declared, path, flags, original, substatements);
323 public static ArgumentEffectiveStatement createArgument(final ArgumentStatement declared,
324 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
325 return substatements.isEmpty() ? new EmptyArgumentEffectiveStatement(declared)
326 : new RegularArgumentEffectiveStatement(declared, substatements);
329 public static AugmentEffectiveStatement createAugment(final AugmentStatement declared,
330 final SchemaNodeIdentifier argument, final int flags, final QNameModule rootModuleQName,
331 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
332 final @Nullable AugmentationSchemaNode original) throws SubstatementIndexingException {
333 return new AugmentEffectiveStatementImpl(declared, argument, flags, rootModuleQName, substatements, original);
336 public static BaseEffectiveStatement createBase(final BaseStatement declared,
337 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
338 return substatements.isEmpty() ? new EmptyBaseEffectiveStatement(declared)
339 : new RegularBaseEffectiveStatement(declared, substatements);
342 public static BelongsToEffectiveStatement createBelongsTo(final BelongsToStatement declared,
343 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
344 return substatements.isEmpty() ? new EmptyBelongsToEffectiveStatement(declared)
345 : new RegularBelongsToEffectiveStatement(declared, substatements);
348 public static BitEffectiveStatement createBit(final BitStatement declared,
349 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
350 return substatements.isEmpty() ? new EmptyBitEffectiveStatement(declared)
351 : new RegularBitEffectiveStatement(declared, substatements);
354 public static CaseEffectiveStatement copyCase(final CaseEffectiveStatement original,
355 final Immutable path, final int flags, final @Nullable CaseSchemaNode newOriginal) {
356 if (original instanceof DeclaredCaseEffectiveStatement) {
357 return new DeclaredCaseEffectiveStatement((DeclaredCaseEffectiveStatement) original, path, flags,
359 } else if (original instanceof UndeclaredCaseEffectiveStatement) {
360 return new UndeclaredCaseEffectiveStatement((UndeclaredCaseEffectiveStatement) original, path, flags,
363 throw new IllegalArgumentException("Unsupported origin " + original);
367 public static CaseEffectiveStatement createCase(final Immutable path,
368 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
369 final @Nullable CaseSchemaNode original) {
370 return new UndeclaredCaseEffectiveStatement(substatements, path, flags, original);
373 public static CaseEffectiveStatement createCase(final CaseStatement declared, final Immutable path,
374 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
375 final @Nullable CaseSchemaNode original) {
376 return new DeclaredCaseEffectiveStatement(declared, substatements, path, flags, original);
379 public static ChoiceEffectiveStatement copyChoice(final ChoiceEffectiveStatement original,
380 final Immutable path, final int flags, final @Nullable ChoiceSchemaNode newOriginal) {
381 checkArgument(original instanceof ChoiceEffectiveStatementImpl, "Unsupported original %s", original);
382 return new ChoiceEffectiveStatementImpl((ChoiceEffectiveStatementImpl) original, path, flags, newOriginal);
385 public static ChoiceEffectiveStatement createChoice(final ChoiceStatement declared, final Immutable path,
386 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
387 final @Nullable CaseSchemaNode defaultCase, final @Nullable ChoiceSchemaNode original) {
388 return new ChoiceEffectiveStatementImpl(declared, substatements, path, flags, defaultCase, original);
391 public static ConfigEffectiveStatement createConfig(final boolean argument) {
392 return argument ? EmptyConfigEffectiveStatement.TRUE : EmptyConfigEffectiveStatement.FALSE;
395 public static ConfigEffectiveStatement createConfig(final ConfigStatement declared) {
396 return new EmptyConfigEffectiveStatement(declared);
399 public static ConfigEffectiveStatement createConfig(final ConfigStatement declared,
400 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
401 return substatements.isEmpty() ? createConfig(declared)
402 : new RegularConfigEffectiveStatement(declared, substatements);
405 public static ContactEffectiveStatement createContact(final ContactStatement declared) {
406 return new EmptyContactEffectiveStatement(declared);
409 public static ContactEffectiveStatement createContact(final ContactStatement declared,
410 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
411 return substatements.isEmpty() ? createContact(declared)
412 : new RegularContactEffectiveStatement(declared, substatements);
415 public static ContainerEffectiveStatement copyContainer(final ContainerEffectiveStatement original,
416 final Immutable path, final int flags, final @Nullable ContainerSchemaNode orig) {
417 checkArgument(original instanceof ContainerEffectiveStatementImpl, "Unsupported original %s", original);
418 return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original, path, flags, orig);
421 public static ContainerEffectiveStatement createContainer(final ContainerStatement declared, final Immutable path,
422 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
423 final @Nullable ContainerSchemaNode original) {
424 return new ContainerEffectiveStatementImpl(declared, substatements, path, flags, original);
427 public static DefaultEffectiveStatement createDefault(final DefaultStatement declared,
428 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
429 return substatements.isEmpty() ? new EmptyDefaultEffectiveStatement(declared)
430 : new RegularDefaultEffectiveStatement(declared, substatements);
433 public static DescriptionEffectiveStatement createDescription(final DescriptionStatement declared,
434 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
435 return substatements.isEmpty() ? new EmptyDescriptionEffectiveStatement(declared)
436 : new RegularDescriptionEffectiveStatement(declared, substatements);
439 public static DeviateEffectiveStatement createDeviate(final DeviateStatement declared,
440 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
441 return new DeviateEffectiveStatementImpl(declared, substatements);
444 public static DeviationEffectiveStatement createDeviation(final DeviationStatement declared,
445 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
446 return new DeviationEffectiveStatementImpl(declared, substatements);
449 public static EnumEffectiveStatement createEnum(final EnumStatement declared,
450 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
451 return substatements.isEmpty() ? new EmptyEnumEffectiveStatement(declared)
452 : new RegularEnumEffectiveStatement(declared, substatements);
455 public static ErrorAppTagEffectiveStatement createErrorAppTag(final ErrorAppTagStatement declared,
456 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
457 return substatements.isEmpty() ? new EmptyErrorAppTagEffectiveStatement(declared)
458 : new RegularErrorAppTagEffectiveStatement(declared, substatements);
461 public static ErrorMessageEffectiveStatement createErrorMessage(final ErrorMessageStatement declared,
462 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
463 return substatements.isEmpty() ? new EmptyErrorMessageEffectiveStatement(declared)
464 : new RegularErrorMessageEffectiveStatement(declared, substatements);
467 public static ExtensionEffectiveStatement createExtension(final ExtensionStatement declared,
468 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
469 final @Nullable SchemaPath schemaPath) {
470 return new ExtensionEffectiveStatementImpl(declared, substatements, schemaPath);
473 public static FeatureEffectiveStatement createFeature(final FeatureStatement declared, final Immutable path,
474 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
475 return substatements.isEmpty() ? new EmptyFeatureEffectiveStatement(declared, path, flags)
476 : new RegularFeatureEffectiveStatement(declared, path, flags, substatements);
479 public static FractionDigitsEffectiveStatement createFractionDigits(final FractionDigitsStatement declared) {
480 return new EmptyFractionDigitsEffectiveStatement(declared);
483 public static FractionDigitsEffectiveStatement createFractionDigits(final FractionDigitsStatement declared,
484 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
485 return substatements.isEmpty() ? createFractionDigits(declared)
486 : new RegularFractionDigitsEffectiveStatement(declared, substatements);
489 public static GroupingEffectiveStatement createGrouping(final GroupingStatement declared,
490 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Immutable path,
491 final int flags) throws SubstatementIndexingException {
492 return new GroupingEffectiveStatementImpl(declared, substatements, path, flags);
495 public static IfFeatureEffectiveStatement createIfFeature(final IfFeatureStatement declared,
496 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
497 return substatements.isEmpty() ? new EmptyIfFeatureEffectiveStatement(declared)
498 : new RegularIfFeatureEffectiveStatement(declared, substatements);
501 public static IdentityEffectiveStatement createIdentity(final IdentityStatement declared, final Immutable path) {
502 return new EmptyIdentityEffectiveStatement(declared, path);
505 public static IdentityEffectiveStatement createIdentity(final IdentityStatement declared, final Immutable path,
506 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
507 final ImmutableSet<IdentitySchemaNode> baseIdentities) {
508 return new RegularIdentityEffectiveStatement(declared, path, flags, substatements, baseIdentities);
511 public static ImportEffectiveStatement createImport(final ImportStatement declared,
512 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
513 final SourceIdentifier importedSource) {
514 return new ImportEffectiveStatementImpl(declared, substatements, importedSource);
517 public static IncludeEffectiveStatement createInclude(final IncludeStatement declared,
518 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
519 return substatements.isEmpty() ? new EmptyIncludeEffectiveStatement(declared)
520 : new RegularIncludeEffectiveStatement(declared, substatements);
523 public static InputEffectiveStatement copyInput(final InputEffectiveStatement original, final Immutable path,
525 if (original instanceof DeclaredInputEffectiveStatement) {
526 return new DeclaredInputEffectiveStatement((DeclaredInputEffectiveStatement) original, path, flags);
527 } else if (original instanceof UndeclaredInputEffectiveStatement) {
528 return new UndeclaredInputEffectiveStatement((UndeclaredInputEffectiveStatement) original, path, flags);
530 throw new IllegalArgumentException("Unsupported original " + original);
534 public static InputEffectiveStatement createInput(final Immutable path, final int flags,
535 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
536 throws SubstatementIndexingException {
537 return new UndeclaredInputEffectiveStatement(substatements, path, flags);
540 public static InputEffectiveStatement createInput(final InputStatement declared, final Immutable path,
541 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
542 throws SubstatementIndexingException {
543 return new DeclaredInputEffectiveStatement(declared, substatements, path, flags);
546 public static LeafEffectiveStatement copyLeaf(final LeafEffectiveStatement original, final Immutable path,
547 final int flags, final @Nullable LeafSchemaNode newOriginal) {
548 checkArgument(original instanceof AbstractLeafEffectiveStatement, "Unsupported original %s", original);
549 return new RegularLeafEffectiveStatement((AbstractLeafEffectiveStatement) original, path, flags, newOriginal);
552 public static LeafEffectiveStatement createLeaf(final LeafStatement declared, final Immutable path,
553 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
554 final @Nullable LeafSchemaNode original) throws SubstatementIndexingException {
555 return original == null ? new EmptyLeafEffectiveStatement(declared, path, flags, substatements)
556 : new RegularLeafEffectiveStatement(declared, path, flags, substatements, original);
559 public static LengthEffectiveStatement createLength(final LengthStatement declared,
560 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
561 return substatements.isEmpty() ? new EmptyLengthEffectiveStatement(declared)
562 : new RegularLengthEffectiveStatement(declared, substatements);
565 public static MandatoryEffectiveStatement createMandatory(final MandatoryStatement declared) {
566 return new EmptyMandatoryEffectiveStatement(declared);
569 public static MandatoryEffectiveStatement createMandatory(final MandatoryStatement declared,
570 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
571 return substatements.isEmpty() ? createMandatory(declared)
572 : new RegularMandatoryEffectiveStatement(declared, substatements);
575 public static MaxElementsEffectiveStatement createMaxElements(final MaxElementsStatement declared,
576 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
577 return substatements.isEmpty() ? new EmptyMaxElementsEffectiveStatement(declared)
578 : new RegularMaxElementsEffectiveStatement(declared, substatements);
581 public static MinElementsEffectiveStatement createMinElements(final MinElementsStatement declared) {
582 return new EmptyMinElementsEffectiveStatement(declared);
585 public static MinElementsEffectiveStatement createMinElements(final MinElementsStatement declared,
586 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
587 return substatements.isEmpty() ? createMinElements(declared)
588 : new RegularMinElementsEffectiveStatement(declared, substatements);
591 public static ModifierEffectiveStatement createModifier(final ModifierStatement declared,
592 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
593 return substatements.isEmpty() ? new EmptyModifierEffectiveStatement(declared)
594 : new RegularModifierEffectiveStatement(declared, substatements);
597 public static NamespaceEffectiveStatement createNamespace(final NamespaceStatement declared,
598 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
599 return substatements.isEmpty() ? new EmptyNamespaceEffectiveStatement(declared)
600 : new RegularNamespaceEffectiveStatement(declared, substatements);
603 public static NotificationEffectiveStatement copyNotification(final NotificationEffectiveStatement original,
604 final Immutable path, final int flags) {
605 checkArgument(original instanceof NotificationEffectiveStatementImpl, "Unsupported original %s", original);
606 return new NotificationEffectiveStatementImpl((NotificationEffectiveStatementImpl) original, path, flags);
609 public static NotificationEffectiveStatement createNotification(final NotificationStatement declared,
610 final Immutable path, final int flags,
611 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
612 throws SubstatementIndexingException {
613 return new NotificationEffectiveStatementImpl(declared, substatements, path, flags);
616 public static OutputEffectiveStatement copyOutput(final OutputEffectiveStatement original, final Immutable path,
618 if (original instanceof DeclaredOutputEffectiveStatement) {
619 return new DeclaredOutputEffectiveStatement((DeclaredOutputEffectiveStatement) original, path, flags);
620 } else if (original instanceof UndeclaredOutputEffectiveStatement) {
621 return new UndeclaredOutputEffectiveStatement((UndeclaredOutputEffectiveStatement) original, path, flags);
623 throw new IllegalArgumentException("Unsupported original " + original);
627 public static OutputEffectiveStatement createOutput(final Immutable path, final int flags,
628 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
629 throws SubstatementIndexingException {
630 return new UndeclaredOutputEffectiveStatement(substatements, path, flags);
633 public static OutputEffectiveStatement createOutput(final OutputStatement declared, final Immutable path,
634 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
635 throws SubstatementIndexingException {
636 return new DeclaredOutputEffectiveStatement(declared, substatements, path, flags);
639 public static OrderedByEffectiveStatement createOrderedBy(final OrderedByStatement declared) {
640 return new EmptyOrderedByEffectiveStatement(declared);
643 public static OrderedByEffectiveStatement createOrderedBy(final OrderedByStatement declared,
644 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
645 return substatements.isEmpty() ? createOrderedBy(declared)
646 : new RegularOrderedByEffectiveStatement(declared, substatements);
649 public static OrganizationEffectiveStatement createOrganization(final OrganizationStatement declared) {
650 return new EmptyOrganizationEffectiveStatement(declared);
653 public static OrganizationEffectiveStatement createOrganization(final OrganizationStatement declared,
654 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
655 return substatements.isEmpty() ? createOrganization(declared)
656 : new RegularOrganizationEffectiveStatement(declared, substatements);
659 public static PathEffectiveStatement createPath(final PathStatement declared,
660 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
661 return substatements.isEmpty() ? new EmptyPathEffectiveStatement(declared)
662 : new RegularPathEffectiveStatement(declared, substatements);
665 public static PatternEffectiveStatement createPattern(final PatternStatement declared,
666 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
667 return substatements.isEmpty() ? new EmptyPatternEffectiveStatement(declared)
668 : new RegularPatternEffectiveStatement(declared, substatements);
671 public static PositionEffectiveStatement createPosition(final PositionStatement declared) {
672 return new EmptyPositionEffectiveStatement(declared);
675 public static PositionEffectiveStatement createPosition(final PositionStatement declared,
676 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
677 return substatements.isEmpty() ? createPosition(declared)
678 : new RegularPositionEffectiveStatement(declared, substatements);
681 public static PrefixEffectiveStatement createPrefix(final PrefixStatement declared,
682 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
683 return substatements.isEmpty() ? new EmptyPrefixEffectiveStatement(declared)
684 : new RegularPrefixEffectiveStatement(declared, substatements);
687 public static PresenceEffectiveStatement createPresence(final PresenceStatement declared,
688 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
689 return substatements.isEmpty() ? new EmptyPresenceEffectiveStatement(declared)
690 : new RegularPresenceEffectiveStatement(declared, substatements);
693 public static RangeEffectiveStatement createRange(final RangeStatement declared,
694 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
695 return substatements.isEmpty() ? new EmptyRangeEffectiveStatement(declared)
696 : new RegularRangeEffectiveStatement(declared, substatements);
699 public static ReferenceEffectiveStatement createReference(final ReferenceStatement declared) {
700 return new EmptyReferenceEffectiveStatement(declared);
703 public static ReferenceEffectiveStatement createReference(final ReferenceStatement declared,
704 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
705 return substatements.isEmpty() ? createReference(declared)
706 : new RegularReferenceEffectiveStatement(declared, substatements);
709 public static RevisionEffectiveStatement createRevision(final RevisionStatement declared,
710 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
711 return substatements.isEmpty() ? new EmptyRevisionEffectiveStatement(declared)
712 : new RegularRevisionEffectiveStatement(declared, substatements);
715 public static RequireInstanceEffectiveStatement createRequireInstance(final boolean argument) {
716 return argument ? EmptyRequireInstanceEffectiveStatement.TRUE : EmptyRequireInstanceEffectiveStatement.FALSE;
719 public static RequireInstanceEffectiveStatement createRequireInstance(final RequireInstanceStatement declared) {
720 if (EmptyRequireInstanceStatement.TRUE.equals(declared)) {
721 return EmptyRequireInstanceEffectiveStatement.TRUE;
722 } else if (EmptyRequireInstanceStatement.FALSE.equals(declared)) {
723 return EmptyRequireInstanceEffectiveStatement.FALSE;
725 return new EmptyRequireInstanceEffectiveStatement(declared);
729 public static RequireInstanceEffectiveStatement createRequireInstance(final RequireInstanceStatement declared,
730 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
731 return substatements.isEmpty() ? createRequireInstance(declared)
732 : new RegularRequireInstanceEffectiveStatement(declared, substatements);
735 public static RevisionDateEffectiveStatement createRevisionDate(final RevisionDateStatement declared,
736 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
737 return substatements.isEmpty() ? new EmptyRevisionDateEffectiveStatement(declared)
738 : new RegularRevisionDateEffectiveStatement(declared, substatements);
741 public static RpcEffectiveStatement createRpc(final RpcStatement declared,
742 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final Immutable path,
743 final int flags) throws SubstatementIndexingException {
744 return new RpcEffectiveStatementImpl(declared, substatements, path, flags);
747 public static StatusEffectiveStatement createStatus(final StatusStatement declared) {
748 // Aggressively reuse effective instances which are backed by the corresponding empty declared instance, as this
749 // is the case unless there is a weird extension in use.
750 if (EmptyStatusStatement.DEPRECATED.equals(declared)) {
751 // Most likely to be seen (as current is the default)
752 return EmptyStatusEffectiveStatement.DEPRECATED;
753 } else if (EmptyStatusStatement.OBSOLETE.equals(declared)) {
755 return EmptyStatusEffectiveStatement.OBSOLETE;
756 } else if (EmptyStatusStatement.CURRENT.equals(declared)) {
757 // ... okay, why is this there? :)
758 return EmptyStatusEffectiveStatement.CURRENT;
760 return new EmptyStatusEffectiveStatement(declared);
764 public static StatusEffectiveStatement createStatus(final StatusStatement declared,
765 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
766 return substatements.isEmpty() ? createStatus(declared)
767 : new RegularStatusEffectiveStatement(declared, substatements);
770 public static TypedefEffectiveStatement createTypedef(final TypedefStatement declared,
771 final Immutable path, final int flags,
772 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
773 return new TypedefEffectiveStatementImpl(declared, path, flags, substatements);
776 public static UnitsEffectiveStatement createUnits(final UnitsStatement declared,
777 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
778 return substatements.isEmpty() ? new EmptyUnitsEffectiveStatement(declared)
779 : new RegularUnitsEffectiveStatement(declared, substatements);
782 public static UniqueEffectiveStatement createUnique(final UniqueStatement declared,
783 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
784 return substatements.isEmpty() ? new EmptyUniqueEffectiveStatement(declared)
785 : new RegularUniqueEffectiveStatement(declared, substatements);
788 public static ValueEffectiveStatement createValue(final ValueStatement declared) {
789 return new EmptyValueEffectiveStatement(declared);
792 public static ValueEffectiveStatement createValue(final ValueStatement declared,
793 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
794 return substatements.isEmpty() ? createValue(declared)
795 : new RegularValueEffectiveStatement(declared, substatements);
798 public static WhenEffectiveStatement createWhen(final WhenStatement declared,
799 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
800 return substatements.isEmpty() ? new EmptyWhenEffectiveStatement(declared)
801 : new RegularWhenEffectiveStatement(declared, substatements);
804 public static YangVersionEffectiveStatement createYangVersion(final YangVersionStatement declared) {
805 if (EmptyYangVersionStatement.VERSION_1.equals(declared)) {
806 return EmptyYangVersionEffectiveStatement.VERSION_1;
807 } else if (EmptyYangVersionStatement.VERSION_1_1.equals(declared)) {
808 return EmptyYangVersionEffectiveStatement.VERSION_1_1;
810 return new EmptyYangVersionEffectiveStatement(declared);
814 public static YangVersionEffectiveStatement createYangVersion(final YangVersionStatement declared,
815 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
816 return substatements.isEmpty() ? createYangVersion(declared)
817 : new RegularYangVersionEffectiveStatement(declared, substatements);
820 public static YinElementEffectiveStatement createYinElement(final YinElementStatement declared) {
821 return new EmptyYinElementEffectiveStatement(declared);
824 public static YinElementEffectiveStatement createYinElement(final YinElementStatement declared,
825 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
826 return substatements.isEmpty() ? createYinElement(declared)
827 : new RegularYinElementEffectiveStatement(declared, substatements);