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;
16 import org.eclipse.jdt.annotation.NonNullByDefault;
17 import org.eclipse.jdt.annotation.Nullable;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.QNameModule;
20 import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
27 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
31 import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
32 import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
33 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
34 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
35 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
36 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
37 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentEffectiveStatement;
38 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
39 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
40 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
41 import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement;
42 import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
43 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement;
44 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
45 import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement;
46 import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
47 import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
48 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
49 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
50 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
51 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement;
52 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
53 import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement;
54 import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement;
55 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
56 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
57 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
58 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
59 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement;
60 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
61 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateEffectiveStatement;
62 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
63 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationEffectiveStatement;
64 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
65 import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement;
66 import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement;
67 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement;
68 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement;
69 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement;
70 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
71 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement;
72 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
73 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
74 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
75 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsEffectiveStatement;
76 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement;
77 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
78 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
79 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement;
80 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
81 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureEffectiveStatement;
82 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
83 import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
84 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
85 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement;
86 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
87 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
88 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
89 import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
90 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
91 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
92 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
93 import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
94 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
95 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
96 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
97 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
98 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
99 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
100 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
101 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement;
102 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
103 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement;
104 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
105 import org.opendaylight.yangtools.yang.model.api.stmt.MustEffectiveStatement;
106 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
107 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceEffectiveStatement;
108 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
109 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
110 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
111 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
112 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
113 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement;
114 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement;
115 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
116 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
117 import org.opendaylight.yangtools.yang.model.api.stmt.PathEffectiveStatement;
118 import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
119 import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
120 import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
121 import org.opendaylight.yangtools.yang.model.api.stmt.PositionEffectiveStatement;
122 import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
123 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement;
124 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
125 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement;
126 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
127 import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement;
128 import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
129 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
130 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
131 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement;
132 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement;
133 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateEffectiveStatement;
134 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
135 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionEffectiveStatement;
136 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
137 import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement;
138 import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
139 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
140 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
141 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
142 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
143 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
144 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement;
145 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
146 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
147 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
148 import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement;
149 import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement;
150 import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
151 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
152 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement;
153 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
154 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementEffectiveStatement;
155 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
156 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
157 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyRequireInstanceStatement;
158 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyStatusStatement;
159 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl.EmptyYangVersionStatement;
160 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AbstractLeafEffectiveStatement;
161 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ActionEffectiveStatementImpl;
162 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.AugmentEffectiveStatementImpl;
163 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ChoiceEffectiveStatementImpl;
164 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl;
165 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredCaseEffectiveStatement;
166 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredInputEffectiveStatement;
167 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeclaredOutputEffectiveStatement;
168 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeviateEffectiveStatementImpl;
169 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.DeviationEffectiveStatementImpl;
170 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyAnydataEffectiveStatement;
171 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyAnyxmlEffectiveStatement;
172 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyArgumentEffectiveStatement;
173 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBaseEffectiveStatement;
174 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBelongsToEffectiveStatement;
175 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyBitEffectiveStatement;
176 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyConfigEffectiveStatement;
177 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyContactEffectiveStatement;
178 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDefaultEffectiveStatement;
179 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyDescriptionEffectiveStatement;
180 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyEnumEffectiveStatement;
181 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorAppTagEffectiveStatement;
182 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorMessageEffectiveStatement;
183 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFeatureEffectiveStatement;
184 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyForeignKeyEffectiveStatement;
185 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFractionDigitsEffectiveStatement;
186 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIdentityEffectiveStatement;
187 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIfFeatureEffectiveStatement;
188 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIncludeEffectiveStatement;
189 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafEffectiveStatement;
190 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLengthEffectiveStatement;
191 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyListEffectiveStatement;
192 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement;
193 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMandatoryEffectiveStatement;
194 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMaxElementsEffectiveStatement;
195 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMinElementsEffectiveStatement;
196 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyModifierEffectiveStatement;
197 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMustEffectiveStatement;
198 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyNamespaceEffectiveStatement;
199 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyOrderedByEffectiveStatement;
200 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyOrganizationEffectiveStatement;
201 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPathEffectiveStatement;
202 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPatternEffectiveStatement;
203 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPositionEffectiveStatement;
204 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPrefixEffectiveStatement;
205 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyPresenceEffectiveStatement;
206 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRangeEffectiveStatement;
207 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyReferenceEffectiveStatement;
208 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRequireInstanceEffectiveStatement;
209 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRevisionDateEffectiveStatement;
210 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyRevisionEffectiveStatement;
211 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyStatusEffectiveStatement;
212 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyUniqueEffectiveStatement;
213 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyUnitsEffectiveStatement;
214 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyValueEffectiveStatement;
215 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyWhenEffectiveStatement;
216 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyYangVersionEffectiveStatement;
217 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyYinElementEffectiveStatement;
218 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ExtensionEffectiveStatementImpl;
219 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.GroupingEffectiveStatementImpl;
220 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ImportEffectiveStatementImpl;
221 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.NotificationEffectiveStatementImpl;
222 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularAnydataEffectiveStatement;
223 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularAnyxmlEffectiveStatement;
224 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularArgumentEffectiveStatement;
225 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBaseEffectiveStatement;
226 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBelongsToEffectiveStatement;
227 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularBitEffectiveStatement;
228 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularConfigEffectiveStatement;
229 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularContactEffectiveStatement;
230 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDefaultEffectiveStatement;
231 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularDescriptionEffectiveStatement;
232 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularEnumEffectiveStatement;
233 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorAppTagEffectiveStatement;
234 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorMessageEffectiveStatement;
235 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFeatureEffectiveStatement;
236 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularForeignKeyEffectiveStatement;
237 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFractionDigitsEffectiveStatement;
238 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIdentityEffectiveStatement;
239 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIfFeatureEffectiveStatement;
240 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIncludeEffectiveStatement;
241 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafEffectiveStatement;
242 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLengthEffectiveStatement;
243 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularListEffectiveStatement;
244 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement;
245 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMandatoryEffectiveStatement;
246 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMaxElementsEffectiveStatement;
247 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMinElementsEffectiveStatement;
248 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularModifierEffectiveStatement;
249 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMustEffectiveStatement;
250 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularNamespaceEffectiveStatement;
251 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularOrderedByEffectiveStatement;
252 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularOrganizationEffectiveStatement;
253 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPathEffectiveStatement;
254 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPatternEffectiveStatement;
255 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPositionEffectiveStatement;
256 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPrefixEffectiveStatement;
257 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularPresenceEffectiveStatement;
258 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRangeEffectiveStatement;
259 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularReferenceEffectiveStatement;
260 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRequireInstanceEffectiveStatement;
261 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRevisionDateEffectiveStatement;
262 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularRevisionEffectiveStatement;
263 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularStatusEffectiveStatement;
264 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularUniqueEffectiveStatement;
265 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularUnitsEffectiveStatement;
266 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularValueEffectiveStatement;
267 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularWhenEffectiveStatement;
268 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYangVersionEffectiveStatement;
269 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYinElementEffectiveStatement;
270 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RpcEffectiveStatementImpl;
271 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.TypedefEffectiveStatementImpl;
272 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredCaseEffectiveStatement;
273 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredInputEffectiveStatement;
274 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredOutputEffectiveStatement;
275 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
278 * Static entry point to instantiating {@link EffectiveStatement} covered in the {@code RFC7950} metamodel.
282 public final class EffectiveStatements {
283 private EffectiveStatements() {
287 public static ActionEffectiveStatement copyAction(final ActionEffectiveStatement original, final QName argument,
289 checkArgument(original instanceof ActionEffectiveStatementImpl, "Unsupported original %s", original);
290 return new ActionEffectiveStatementImpl((ActionEffectiveStatementImpl) original, argument, flags);
293 public static ActionEffectiveStatement createAction(final ActionStatement declared, final QName argument,
294 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
295 throws SubstatementIndexingException {
296 return new ActionEffectiveStatementImpl(declared, argument, flags, substatements);
299 public static AnydataEffectiveStatement copyAnydata(final AnydataEffectiveStatement original, final QName argument,
300 final int flags, final @Nullable AnydataSchemaNode newOriginal) {
301 if (original instanceof RegularAnydataEffectiveStatement) {
302 return new RegularAnydataEffectiveStatement((RegularAnydataEffectiveStatement) original, argument, flags,
304 } else if (original instanceof EmptyAnydataEffectiveStatement) {
305 return new EmptyAnydataEffectiveStatement((EmptyAnydataEffectiveStatement) original, argument, flags,
308 throw new IllegalArgumentException("Unsupported original " + original);
312 public static AnydataEffectiveStatement createAnydata(final AnydataStatement declared, final QName argument,
313 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
314 final @Nullable AnydataSchemaNode original) {
315 return substatements.isEmpty() ? new EmptyAnydataEffectiveStatement(declared, argument, flags, original)
316 : new RegularAnydataEffectiveStatement(declared, argument, flags, original, substatements);
319 public static AnyxmlEffectiveStatement copyAnyxml(final AnyxmlEffectiveStatement original, final QName argument,
320 final int flags, final @Nullable AnyxmlSchemaNode newOriginal) {
321 if (original instanceof RegularAnyxmlEffectiveStatement) {
322 return new RegularAnyxmlEffectiveStatement((RegularAnyxmlEffectiveStatement) original, argument, flags,
324 } else if (original instanceof EmptyAnyxmlEffectiveStatement) {
325 return new EmptyAnyxmlEffectiveStatement((EmptyAnyxmlEffectiveStatement) original, argument, flags,
328 throw new IllegalArgumentException("Unsupported original " + original);
332 public static AnyxmlEffectiveStatement createAnyxml(final AnyxmlStatement declared, final QName argument,
333 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
334 final @Nullable AnyxmlSchemaNode original) {
335 return substatements.isEmpty() ? new EmptyAnyxmlEffectiveStatement(declared, argument, flags, original)
336 : new RegularAnyxmlEffectiveStatement(declared, argument, flags, original, substatements);
339 public static ArgumentEffectiveStatement createArgument(final ArgumentStatement declared,
340 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
341 return substatements.isEmpty() ? new EmptyArgumentEffectiveStatement(declared)
342 : new RegularArgumentEffectiveStatement(declared, substatements);
345 public static AugmentEffectiveStatement createAugment(final AugmentStatement declared,
346 final SchemaNodeIdentifier argument, final int flags, final QNameModule rootModuleQName,
347 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
348 final @Nullable AugmentationSchemaNode original) throws SubstatementIndexingException {
349 return new AugmentEffectiveStatementImpl(declared, argument, flags, rootModuleQName, substatements, original);
352 public static BaseEffectiveStatement createBase(final BaseStatement declared,
353 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
354 return substatements.isEmpty() ? new EmptyBaseEffectiveStatement(declared)
355 : new RegularBaseEffectiveStatement(declared, substatements);
358 public static BelongsToEffectiveStatement createBelongsTo(final BelongsToStatement declared,
359 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
360 return substatements.isEmpty() ? new EmptyBelongsToEffectiveStatement(declared)
361 : new RegularBelongsToEffectiveStatement(declared, substatements);
364 public static BitEffectiveStatement createBit(final BitStatement declared,
365 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
366 return substatements.isEmpty() ? new EmptyBitEffectiveStatement(declared)
367 : new RegularBitEffectiveStatement(declared, substatements);
370 public static CaseEffectiveStatement copyCase(final CaseEffectiveStatement original, final QName argument,
371 final int flags, final @Nullable CaseSchemaNode newOriginal) {
372 if (original instanceof DeclaredCaseEffectiveStatement) {
373 return new DeclaredCaseEffectiveStatement((DeclaredCaseEffectiveStatement) original, argument, flags,
375 } else if (original instanceof UndeclaredCaseEffectiveStatement) {
376 return new UndeclaredCaseEffectiveStatement((UndeclaredCaseEffectiveStatement) original, argument, flags,
379 throw new IllegalArgumentException("Unsupported origin " + original);
383 public static CaseEffectiveStatement createCase(final QName argument, final int flags,
384 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
385 final @Nullable CaseSchemaNode original) {
386 return new UndeclaredCaseEffectiveStatement(substatements, argument, flags, original);
389 public static CaseEffectiveStatement createCase(final CaseStatement declared, final QName argument,
390 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
391 final @Nullable CaseSchemaNode original) {
392 return new DeclaredCaseEffectiveStatement(declared, substatements, argument, flags, original);
395 public static ChoiceEffectiveStatement copyChoice(final ChoiceEffectiveStatement original,
396 final QName argument, final int flags, final @Nullable ChoiceSchemaNode newOriginal) {
397 checkArgument(original instanceof ChoiceEffectiveStatementImpl, "Unsupported original %s", original);
398 return new ChoiceEffectiveStatementImpl((ChoiceEffectiveStatementImpl) original, argument, flags, newOriginal);
401 public static ChoiceEffectiveStatement createChoice(final ChoiceStatement declared, final QName argument,
402 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
403 final @Nullable CaseSchemaNode defaultCase, final @Nullable ChoiceSchemaNode original) {
404 return new ChoiceEffectiveStatementImpl(declared, substatements, argument, flags, defaultCase, original);
407 public static ConfigEffectiveStatement createConfig(final boolean argument) {
408 return argument ? EmptyConfigEffectiveStatement.TRUE : EmptyConfigEffectiveStatement.FALSE;
411 public static ConfigEffectiveStatement createConfig(final ConfigStatement declared) {
412 return new EmptyConfigEffectiveStatement(declared);
415 public static ConfigEffectiveStatement createConfig(final ConfigStatement declared,
416 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
417 return substatements.isEmpty() ? createConfig(declared)
418 : new RegularConfigEffectiveStatement(declared, substatements);
421 public static ContactEffectiveStatement createContact(final ContactStatement declared) {
422 return new EmptyContactEffectiveStatement(declared);
425 public static ContactEffectiveStatement createContact(final ContactStatement declared,
426 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
427 return substatements.isEmpty() ? createContact(declared)
428 : new RegularContactEffectiveStatement(declared, substatements);
431 public static ContainerEffectiveStatement copyContainer(final ContainerEffectiveStatement original,
432 final QName argument, final int flags, final @Nullable ContainerSchemaNode orig) {
433 checkArgument(original instanceof ContainerEffectiveStatementImpl, "Unsupported original %s", original);
434 return new ContainerEffectiveStatementImpl((ContainerEffectiveStatementImpl) original, argument, flags, orig);
437 public static ContainerEffectiveStatement createContainer(final ContainerStatement declared, final QName argument,
438 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
439 final @Nullable ContainerSchemaNode original) {
440 return new ContainerEffectiveStatementImpl(declared, substatements, argument, flags, original);
443 public static DefaultEffectiveStatement createDefault(final DefaultStatement declared,
444 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
445 return substatements.isEmpty() ? new EmptyDefaultEffectiveStatement(declared)
446 : new RegularDefaultEffectiveStatement(declared, substatements);
449 public static DescriptionEffectiveStatement createDescription(final DescriptionStatement declared,
450 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
451 return substatements.isEmpty() ? new EmptyDescriptionEffectiveStatement(declared)
452 : new RegularDescriptionEffectiveStatement(declared, substatements);
455 public static DeviateEffectiveStatement createDeviate(final DeviateStatement declared,
456 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
457 return new DeviateEffectiveStatementImpl(declared, substatements);
460 public static DeviationEffectiveStatement createDeviation(final DeviationStatement declared,
461 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
462 return new DeviationEffectiveStatementImpl(declared, substatements);
465 public static EnumEffectiveStatement createEnum(final EnumStatement declared,
466 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
467 return substatements.isEmpty() ? new EmptyEnumEffectiveStatement(declared)
468 : new RegularEnumEffectiveStatement(declared, substatements);
471 public static ErrorAppTagEffectiveStatement createErrorAppTag(final ErrorAppTagStatement declared,
472 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
473 return substatements.isEmpty() ? new EmptyErrorAppTagEffectiveStatement(declared)
474 : new RegularErrorAppTagEffectiveStatement(declared, substatements);
477 public static ErrorMessageEffectiveStatement createErrorMessage(final ErrorMessageStatement declared,
478 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
479 return substatements.isEmpty() ? new EmptyErrorMessageEffectiveStatement(declared)
480 : new RegularErrorMessageEffectiveStatement(declared, substatements);
483 public static ExtensionEffectiveStatement createExtension(final ExtensionStatement declared,
484 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
485 return new ExtensionEffectiveStatementImpl(declared, substatements);
488 public static FeatureEffectiveStatement createFeature(final FeatureStatement declared, final int flags,
489 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
490 return substatements.isEmpty() ? new EmptyFeatureEffectiveStatement(declared, flags)
491 : new RegularFeatureEffectiveStatement(declared, flags, substatements);
494 public static FractionDigitsEffectiveStatement createFractionDigits(final FractionDigitsStatement declared) {
495 return new EmptyFractionDigitsEffectiveStatement(declared);
498 public static FractionDigitsEffectiveStatement createFractionDigits(final FractionDigitsStatement declared,
499 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
500 return substatements.isEmpty() ? createFractionDigits(declared)
501 : new RegularFractionDigitsEffectiveStatement(declared, substatements);
504 public static GroupingEffectiveStatement createGrouping(final GroupingStatement declared,
505 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final QName argument,
506 final int flags) throws SubstatementIndexingException {
507 return new GroupingEffectiveStatementImpl(declared, substatements, argument, flags);
510 public static IfFeatureEffectiveStatement createIfFeature(final IfFeatureStatement declared,
511 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
512 return substatements.isEmpty() ? new EmptyIfFeatureEffectiveStatement(declared)
513 : new RegularIfFeatureEffectiveStatement(declared, substatements);
516 public static IdentityEffectiveStatement createIdentity(final IdentityStatement declared) {
517 return new EmptyIdentityEffectiveStatement(declared);
520 public static IdentityEffectiveStatement createIdentity(final IdentityStatement declared, final int flags,
521 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
522 final ImmutableSet<IdentitySchemaNode> baseIdentities) {
523 return new RegularIdentityEffectiveStatement(declared, flags, substatements, baseIdentities);
526 public static ImportEffectiveStatement createImport(final ImportStatement declared,
527 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
528 final SourceIdentifier importedSource) {
529 return new ImportEffectiveStatementImpl(declared, substatements, importedSource);
532 public static IncludeEffectiveStatement createInclude(final IncludeStatement declared,
533 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
534 return substatements.isEmpty() ? new EmptyIncludeEffectiveStatement(declared)
535 : new RegularIncludeEffectiveStatement(declared, substatements);
538 public static InputEffectiveStatement copyInput(final InputEffectiveStatement original, final QName argument,
540 if (original instanceof DeclaredInputEffectiveStatement) {
541 return new DeclaredInputEffectiveStatement((DeclaredInputEffectiveStatement) original, argument, flags);
542 } else if (original instanceof UndeclaredInputEffectiveStatement) {
543 return new UndeclaredInputEffectiveStatement((UndeclaredInputEffectiveStatement) original, argument, flags);
545 throw new IllegalArgumentException("Unsupported original " + original);
549 public static InputEffectiveStatement createInput(final QName argument, final int flags,
550 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
551 throws SubstatementIndexingException {
552 return new UndeclaredInputEffectiveStatement(substatements, argument, flags);
555 public static InputEffectiveStatement createInput(final InputStatement declared, final QName argument,
556 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
557 throws SubstatementIndexingException {
558 return new DeclaredInputEffectiveStatement(declared, substatements, argument, flags);
561 public static KeyEffectiveStatement createKey(final KeyStatement declared, final Set<QName> argument,
562 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
563 if (substatements.isEmpty()) {
564 return argument.equals(declared.argument()) ? new EmptyLocalKeyEffectiveStatement(declared)
565 : new EmptyForeignKeyEffectiveStatement(declared, argument);
567 return argument.equals(declared.argument()) ? new RegularLocalKeyEffectiveStatement(declared, substatements)
568 : new RegularForeignKeyEffectiveStatement(declared, argument, substatements);
571 public static LeafEffectiveStatement copyLeaf(final LeafEffectiveStatement original, final QName argument,
572 final int flags, final @Nullable LeafSchemaNode newOriginal) {
573 checkArgument(original instanceof AbstractLeafEffectiveStatement, "Unsupported original %s", original);
574 return new RegularLeafEffectiveStatement((AbstractLeafEffectiveStatement) original, argument, flags,
578 public static LeafEffectiveStatement createLeaf(final LeafStatement declared, final QName argument, final int flags,
579 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
580 final @Nullable LeafSchemaNode original) throws SubstatementIndexingException {
581 return original == null ? new EmptyLeafEffectiveStatement(declared, argument, flags, substatements)
582 : new RegularLeafEffectiveStatement(declared, argument, flags, substatements, original);
585 public static LengthEffectiveStatement createLength(final LengthStatement declared,
586 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
587 return substatements.isEmpty() ? new EmptyLengthEffectiveStatement(declared)
588 : new RegularLengthEffectiveStatement(declared, substatements);
591 public static ListEffectiveStatement copyList(final ListEffectiveStatement original, final QName argument,
592 final int flags, final @Nullable ListSchemaNode newOriginal) {
593 if (original instanceof RegularListEffectiveStatement) {
594 return new RegularListEffectiveStatement((RegularListEffectiveStatement) original, argument, flags,
596 } else if (original instanceof EmptyListEffectiveStatement) {
597 return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original, argument, flags,
600 throw new IllegalArgumentException("Unsupported original " + original);
604 public static ListEffectiveStatement createList(final ListStatement declared, final QName argument,
605 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
606 final ImmutableList<QName> keyDefinition, final @Nullable ElementCountConstraint elementCountConstraint,
607 final @Nullable ListSchemaNode original) {
608 return original == null && elementCountConstraint == null
609 ? new EmptyListEffectiveStatement(declared, argument, flags, substatements, keyDefinition)
610 : new RegularListEffectiveStatement(declared, argument, flags, substatements, keyDefinition,
611 elementCountConstraint, original);
614 public static MandatoryEffectiveStatement createMandatory(final MandatoryStatement declared) {
615 return new EmptyMandatoryEffectiveStatement(declared);
618 public static MandatoryEffectiveStatement createMandatory(final MandatoryStatement declared,
619 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
620 return substatements.isEmpty() ? createMandatory(declared)
621 : new RegularMandatoryEffectiveStatement(declared, substatements);
624 public static MaxElementsEffectiveStatement createMaxElements(final MaxElementsStatement declared,
625 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
626 return substatements.isEmpty() ? new EmptyMaxElementsEffectiveStatement(declared)
627 : new RegularMaxElementsEffectiveStatement(declared, substatements);
630 public static MinElementsEffectiveStatement createMinElements(final MinElementsStatement declared) {
631 return new EmptyMinElementsEffectiveStatement(declared);
634 public static MinElementsEffectiveStatement createMinElements(final MinElementsStatement declared,
635 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
636 return substatements.isEmpty() ? createMinElements(declared)
637 : new RegularMinElementsEffectiveStatement(declared, substatements);
640 public static ModifierEffectiveStatement createModifier(final ModifierStatement declared,
641 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
642 return substatements.isEmpty() ? new EmptyModifierEffectiveStatement(declared)
643 : new RegularModifierEffectiveStatement(declared, substatements);
646 public static MustEffectiveStatement createMust(final MustStatement declared,
647 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
648 return substatements.isEmpty() ? new EmptyMustEffectiveStatement(declared)
649 : new RegularMustEffectiveStatement(declared, substatements);
652 public static NamespaceEffectiveStatement createNamespace(final NamespaceStatement declared,
653 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
654 return substatements.isEmpty() ? new EmptyNamespaceEffectiveStatement(declared)
655 : new RegularNamespaceEffectiveStatement(declared, substatements);
658 public static NotificationEffectiveStatement copyNotification(final NotificationEffectiveStatement original,
659 final QName argument, final int flags) {
660 checkArgument(original instanceof NotificationEffectiveStatementImpl, "Unsupported original %s", original);
661 return new NotificationEffectiveStatementImpl((NotificationEffectiveStatementImpl) original, argument, flags);
664 public static NotificationEffectiveStatement createNotification(final NotificationStatement declared,
665 final QName argument, final int flags,
666 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
667 throws SubstatementIndexingException {
668 return new NotificationEffectiveStatementImpl(declared, substatements, argument, flags);
671 public static OutputEffectiveStatement copyOutput(final OutputEffectiveStatement original, final QName argument,
673 if (original instanceof DeclaredOutputEffectiveStatement) {
674 return new DeclaredOutputEffectiveStatement((DeclaredOutputEffectiveStatement) original, argument, flags);
675 } else if (original instanceof UndeclaredOutputEffectiveStatement) {
676 return new UndeclaredOutputEffectiveStatement((UndeclaredOutputEffectiveStatement) original, argument,
679 throw new IllegalArgumentException("Unsupported original " + original);
683 public static OutputEffectiveStatement createOutput(final QName argument, final int flags,
684 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
685 throws SubstatementIndexingException {
686 return new UndeclaredOutputEffectiveStatement(substatements, argument, flags);
689 public static OutputEffectiveStatement createOutput(final OutputStatement declared, final QName argument,
690 final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements)
691 throws SubstatementIndexingException {
692 return new DeclaredOutputEffectiveStatement(declared, substatements, argument, flags);
695 public static OrderedByEffectiveStatement createOrderedBy(final OrderedByStatement declared) {
696 return new EmptyOrderedByEffectiveStatement(declared);
699 public static OrderedByEffectiveStatement createOrderedBy(final OrderedByStatement declared,
700 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
701 return substatements.isEmpty() ? createOrderedBy(declared)
702 : new RegularOrderedByEffectiveStatement(declared, substatements);
705 public static OrganizationEffectiveStatement createOrganization(final OrganizationStatement declared) {
706 return new EmptyOrganizationEffectiveStatement(declared);
709 public static OrganizationEffectiveStatement createOrganization(final OrganizationStatement declared,
710 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
711 return substatements.isEmpty() ? createOrganization(declared)
712 : new RegularOrganizationEffectiveStatement(declared, substatements);
715 public static PathEffectiveStatement createPath(final PathStatement declared,
716 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
717 return substatements.isEmpty() ? new EmptyPathEffectiveStatement(declared)
718 : new RegularPathEffectiveStatement(declared, substatements);
721 public static PatternEffectiveStatement createPattern(final PatternStatement declared,
722 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
723 return substatements.isEmpty() ? new EmptyPatternEffectiveStatement(declared)
724 : new RegularPatternEffectiveStatement(declared, substatements);
727 public static PositionEffectiveStatement createPosition(final PositionStatement declared) {
728 return new EmptyPositionEffectiveStatement(declared);
731 public static PositionEffectiveStatement createPosition(final PositionStatement declared,
732 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
733 return substatements.isEmpty() ? createPosition(declared)
734 : new RegularPositionEffectiveStatement(declared, substatements);
737 public static PrefixEffectiveStatement createPrefix(final PrefixStatement declared,
738 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
739 return substatements.isEmpty() ? new EmptyPrefixEffectiveStatement(declared)
740 : new RegularPrefixEffectiveStatement(declared, substatements);
743 public static PresenceEffectiveStatement createPresence(final PresenceStatement declared,
744 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
745 return substatements.isEmpty() ? new EmptyPresenceEffectiveStatement(declared)
746 : new RegularPresenceEffectiveStatement(declared, substatements);
749 public static RangeEffectiveStatement createRange(final RangeStatement declared,
750 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
751 return substatements.isEmpty() ? new EmptyRangeEffectiveStatement(declared)
752 : new RegularRangeEffectiveStatement(declared, substatements);
755 public static ReferenceEffectiveStatement createReference(final ReferenceStatement declared) {
756 return new EmptyReferenceEffectiveStatement(declared);
759 public static ReferenceEffectiveStatement createReference(final ReferenceStatement declared,
760 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
761 return substatements.isEmpty() ? createReference(declared)
762 : new RegularReferenceEffectiveStatement(declared, substatements);
765 public static RevisionEffectiveStatement createRevision(final RevisionStatement declared,
766 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
767 return substatements.isEmpty() ? new EmptyRevisionEffectiveStatement(declared)
768 : new RegularRevisionEffectiveStatement(declared, substatements);
771 public static RequireInstanceEffectiveStatement createRequireInstance(final boolean argument) {
772 return argument ? EmptyRequireInstanceEffectiveStatement.TRUE : EmptyRequireInstanceEffectiveStatement.FALSE;
775 public static RequireInstanceEffectiveStatement createRequireInstance(final RequireInstanceStatement declared) {
776 if (EmptyRequireInstanceStatement.TRUE.equals(declared)) {
777 return EmptyRequireInstanceEffectiveStatement.TRUE;
778 } else if (EmptyRequireInstanceStatement.FALSE.equals(declared)) {
779 return EmptyRequireInstanceEffectiveStatement.FALSE;
781 return new EmptyRequireInstanceEffectiveStatement(declared);
785 public static RequireInstanceEffectiveStatement createRequireInstance(final RequireInstanceStatement declared,
786 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
787 return substatements.isEmpty() ? createRequireInstance(declared)
788 : new RegularRequireInstanceEffectiveStatement(declared, substatements);
791 public static RevisionDateEffectiveStatement createRevisionDate(final RevisionDateStatement declared,
792 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
793 return substatements.isEmpty() ? new EmptyRevisionDateEffectiveStatement(declared)
794 : new RegularRevisionDateEffectiveStatement(declared, substatements);
797 public static RpcEffectiveStatement createRpc(final RpcStatement declared,
798 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final QName argument,
799 final int flags) throws SubstatementIndexingException {
800 return new RpcEffectiveStatementImpl(declared, substatements, argument, flags);
803 public static StatusEffectiveStatement createStatus(final StatusStatement declared) {
804 // Aggressively reuse effective instances which are backed by the corresponding empty declared instance, as this
805 // is the case unless there is a weird extension in use.
806 if (EmptyStatusStatement.DEPRECATED.equals(declared)) {
807 // Most likely to be seen (as current is the default)
808 return EmptyStatusEffectiveStatement.DEPRECATED;
809 } else if (EmptyStatusStatement.OBSOLETE.equals(declared)) {
811 return EmptyStatusEffectiveStatement.OBSOLETE;
812 } else if (EmptyStatusStatement.CURRENT.equals(declared)) {
813 // ... okay, why is this there? :)
814 return EmptyStatusEffectiveStatement.CURRENT;
816 return new EmptyStatusEffectiveStatement(declared);
820 public static StatusEffectiveStatement createStatus(final StatusStatement declared,
821 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
822 return substatements.isEmpty() ? createStatus(declared)
823 : new RegularStatusEffectiveStatement(declared, substatements);
826 public static TypedefEffectiveStatement createTypedef(final TypedefStatement declared, final int flags,
827 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
828 return new TypedefEffectiveStatementImpl(declared, flags, substatements);
831 public static UnitsEffectiveStatement createUnits(final UnitsStatement declared,
832 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
833 return substatements.isEmpty() ? new EmptyUnitsEffectiveStatement(declared)
834 : new RegularUnitsEffectiveStatement(declared, substatements);
837 public static UniqueEffectiveStatement createUnique(final UniqueStatement declared,
838 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
839 return substatements.isEmpty() ? new EmptyUniqueEffectiveStatement(declared)
840 : new RegularUniqueEffectiveStatement(declared, substatements);
843 public static ValueEffectiveStatement createValue(final ValueStatement declared) {
844 return new EmptyValueEffectiveStatement(declared);
847 public static ValueEffectiveStatement createValue(final ValueStatement declared,
848 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
849 return substatements.isEmpty() ? createValue(declared)
850 : new RegularValueEffectiveStatement(declared, substatements);
853 public static WhenEffectiveStatement createWhen(final WhenStatement declared,
854 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
855 return substatements.isEmpty() ? new EmptyWhenEffectiveStatement(declared)
856 : new RegularWhenEffectiveStatement(declared, substatements);
859 public static YangVersionEffectiveStatement createYangVersion(final YangVersionStatement declared) {
860 if (EmptyYangVersionStatement.VERSION_1.equals(declared)) {
861 return EmptyYangVersionEffectiveStatement.VERSION_1;
862 } else if (EmptyYangVersionStatement.VERSION_1_1.equals(declared)) {
863 return EmptyYangVersionEffectiveStatement.VERSION_1_1;
865 return new EmptyYangVersionEffectiveStatement(declared);
869 public static YangVersionEffectiveStatement createYangVersion(final YangVersionStatement declared,
870 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
871 return substatements.isEmpty() ? createYangVersion(declared)
872 : new RegularYangVersionEffectiveStatement(declared, substatements);
875 public static YinElementEffectiveStatement createYinElement(final YinElementStatement declared) {
876 return new EmptyYinElementEffectiveStatement(declared);
879 public static YinElementEffectiveStatement createYinElement(final YinElementStatement declared,
880 final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
881 return substatements.isEmpty() ? createYinElement(declared)
882 : new RegularYinElementEffectiveStatement(declared, substatements);