Retain DeclarationReference in DeclaredStatements
[yangtools.git] / yang / yang-model-ri / src / main / java / org / opendaylight / yangtools / yang / model / ri / stmt / DeclaredStatementDecorators.java
1 /*
2  * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.model.ri.stmt;
9
10 import com.google.common.annotations.Beta;
11 import org.eclipse.jdt.annotation.NonNullByDefault;
12 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
13 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
14 import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
15 import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement;
16 import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement;
17 import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement;
18 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
19 import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
23 import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
24 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement;
26 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
27 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement;
28 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
29 import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement;
30 import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement;
31 import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement;
32 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement;
33 import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement;
34 import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
35 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement;
36 import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement;
37 import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement;
38 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
39 import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement;
40 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
41 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
42 import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
43 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
44 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
45 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
46 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
47 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
48 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
49 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement;
50 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
51 import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement;
52 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
53 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
54 import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement;
55 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement;
56 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
57 import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement;
58 import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement;
59 import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement;
60 import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
61 import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement;
62 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
63 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
64 import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement;
65 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
66 import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
67 import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement;
68 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement;
69 import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
70 import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement;
71 import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement;
72 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
73 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
74 import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement;
75 import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement;
76 import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement;
77 import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
78 import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement;
79 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
80 import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement;
81 import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement;
82 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefActionStatement;
83 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefAnydataStatement;
84 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefAnyxmlStatement;
85 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefArgumentStatement;
86 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefAugmentStatement;
87 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefBaseStatement;
88 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefBelongsToStatement;
89 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefBitStatement;
90 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefCaseStatement;
91 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefChoiceStatement;
92 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefConfigStatement;
93 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefContactStatement;
94 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefContainerStatement;
95 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefDefaultStatement;
96 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefDescriptionStatement;
97 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefDeviateStatement;
98 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefDeviationStatement;
99 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefEnumStatement;
100 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefErrorAppTagStatement;
101 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefErrorMessageStatement;
102 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefExtensionStatement;
103 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefFeatureStatement;
104 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefFractionDigitsStatement;
105 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefGroupingStatement;
106 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefIdentityStatement;
107 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefIfFeatureStatement;
108 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefImportStatement;
109 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefIncludeStatement;
110 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefInputStatement;
111 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefKeyStatement;
112 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefLeafListStatement;
113 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefLeafStatement;
114 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefLengthStatement;
115 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefListStatement;
116 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefMandatoryStatement;
117 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefMaxElementsStatement;
118 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefMinElementsStatement;
119 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefModifierStatement;
120 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefModuleStatement;
121 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefMustStatement;
122 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefNamespaceStatement;
123 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefNotificationStatement;
124 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefOrderedByStatement;
125 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefOrganizationStatement;
126 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefOutputStatement;
127 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefPathStatement;
128 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefPatternStatement;
129 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefPositionStatement;
130 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefPrefixStatement;
131 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefPresenceStatement;
132 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefRangeStatement;
133 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefReferenceStatement;
134 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefRefineStatement;
135 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefRequireInstanceStatement;
136 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefRevisionDateStatement;
137 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefRevisionStatement;
138 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefRpcStatement;
139 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefStatusStatement;
140 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefSubmoduleStatement;
141 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefTypeStatement;
142 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefTypedefStatement;
143 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefUniqueStatement;
144 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefUnitsStatement;
145 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefUsesStatement;
146 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefValueStatement;
147 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefWhenStatement;
148 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefYangVersionStatement;
149 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref.RefYinElementStatement;
150
151 /**
152  * Static entry point to enriching {@link DeclaredStatement}s covered in the {@code RFC7950} metamodel with
153  * {@link DeclarationReference}s.
154  */
155 @Beta
156 @NonNullByDefault
157 public final class DeclaredStatementDecorators {
158     private DeclaredStatementDecorators() {
159         // Hidden on purpose
160     }
161
162     public static ActionStatement decorateAction(final ActionStatement stmt, final DeclarationReference ref) {
163         return new RefActionStatement(stmt, ref);
164     }
165
166     public static AnydataStatement decorateAnydata(final AnydataStatement stmt, final DeclarationReference ref) {
167         return new RefAnydataStatement(stmt, ref);
168     }
169
170     public static AnyxmlStatement decorateAnyxml(final AnyxmlStatement stmt, final DeclarationReference ref) {
171         return new RefAnyxmlStatement(stmt, ref);
172     }
173
174     public static ArgumentStatement decorateArgument(final ArgumentStatement stmt, final DeclarationReference ref) {
175         return new RefArgumentStatement(stmt, ref);
176     }
177
178     public static AugmentStatement decorateAugment(final AugmentStatement stmt, final DeclarationReference ref) {
179         return new RefAugmentStatement(stmt, ref);
180     }
181
182     public static BaseStatement decorateBase(final BaseStatement stmt, final DeclarationReference ref) {
183         return new RefBaseStatement(stmt, ref);
184     }
185
186     public static BelongsToStatement decorateBelongsTo(final BelongsToStatement stmt, final DeclarationReference ref) {
187         return new RefBelongsToStatement(stmt, ref);
188     }
189
190     public static BitStatement decorateBit(final BitStatement stmt, final DeclarationReference ref) {
191         return new RefBitStatement(stmt, ref);
192     }
193
194     public static CaseStatement decorateCase(final CaseStatement stmt, final DeclarationReference ref) {
195         return new RefCaseStatement(stmt, ref);
196     }
197
198     public static ChoiceStatement decorateChoice(final ChoiceStatement stmt, final DeclarationReference ref) {
199         return new RefChoiceStatement(stmt, ref);
200     }
201
202     public static ConfigStatement decorateConfig(final ConfigStatement stmt, final DeclarationReference ref) {
203         return new RefConfigStatement(stmt, ref);
204     }
205
206     public static ContactStatement decorateContact(final ContactStatement stmt, final DeclarationReference ref) {
207         return new RefContactStatement(stmt, ref);
208     }
209
210     public static ContainerStatement decorateContainer(final ContainerStatement stmt, final DeclarationReference ref) {
211         return new RefContainerStatement(stmt, ref);
212     }
213
214     public static DefaultStatement decorateDefault(final DefaultStatement stmt, final DeclarationReference ref) {
215         return new RefDefaultStatement(stmt, ref);
216     }
217
218     public static DescriptionStatement decorateDescription(final DescriptionStatement stmt,
219             final DeclarationReference ref) {
220         return new RefDescriptionStatement(stmt, ref);
221     }
222
223     public static DeviateStatement decorateDeviate(final DeviateStatement stmt, final DeclarationReference ref) {
224         return new RefDeviateStatement(stmt, ref);
225     }
226
227     public static DeviationStatement decorateDeviation(final DeviationStatement stmt, final DeclarationReference ref) {
228         return new RefDeviationStatement(stmt, ref);
229     }
230
231     public static EnumStatement decorateEnum(final EnumStatement stmt, final DeclarationReference ref) {
232         return new RefEnumStatement(stmt, ref);
233     }
234
235     public static ErrorAppTagStatement decorateErrorAppTag(final ErrorAppTagStatement stmt,
236             final DeclarationReference ref) {
237         return new RefErrorAppTagStatement(stmt, ref);
238     }
239
240     public static ErrorMessageStatement decorateErrorMessage(final ErrorMessageStatement stmt,
241             final DeclarationReference ref) {
242         return new RefErrorMessageStatement(stmt, ref);
243     }
244
245     public static ExtensionStatement decorateExtesion(final ExtensionStatement stmt, final DeclarationReference ref) {
246         return new RefExtensionStatement(stmt, ref);
247     }
248
249     public static FeatureStatement decorateFeature(final FeatureStatement stmt, final DeclarationReference ref) {
250         return new RefFeatureStatement(stmt, ref);
251     }
252
253     public static FractionDigitsStatement decorateFractionDigits(final FractionDigitsStatement stmt,
254             final DeclarationReference ref) {
255         return new RefFractionDigitsStatement(stmt, ref);
256     }
257
258     public static GroupingStatement decorateGrouping(final GroupingStatement stmt, final DeclarationReference ref) {
259         return new RefGroupingStatement(stmt, ref);
260     }
261
262     public static IdentityStatement decorateIdentity(final IdentityStatement stmt, final DeclarationReference ref) {
263         return new RefIdentityStatement(stmt, ref);
264     }
265
266     public static IfFeatureStatement decorateIfFeature(final IfFeatureStatement stmt, final DeclarationReference ref) {
267         return new RefIfFeatureStatement(stmt, ref);
268     }
269
270     public static ImportStatement decorateImport(final ImportStatement stmt, final DeclarationReference ref) {
271         return new RefImportStatement(stmt, ref);
272     }
273
274     public static IncludeStatement decorateInclude(final IncludeStatement stmt, final DeclarationReference ref) {
275         return new RefIncludeStatement(stmt, ref);
276     }
277
278     public static InputStatement decorateInput(final InputStatement stmt, final DeclarationReference ref) {
279         return new RefInputStatement(stmt, ref);
280     }
281
282     public static KeyStatement decorateKey(final KeyStatement stmt, final DeclarationReference ref) {
283         return new RefKeyStatement(stmt, ref);
284     }
285
286     public static LeafStatement decorateLeaf(final LeafStatement stmt, final DeclarationReference ref) {
287         return new RefLeafStatement(stmt, ref);
288     }
289
290     public static LeafListStatement decorateLeafList(final LeafListStatement stmt, final DeclarationReference ref) {
291         return new RefLeafListStatement(stmt, ref);
292     }
293
294     public static LengthStatement decorateLength(final LengthStatement stmt, final DeclarationReference ref) {
295         return new RefLengthStatement(stmt, ref);
296     }
297
298     public static ListStatement decorateList(final ListStatement stmt, final DeclarationReference ref) {
299         return new RefListStatement(stmt, ref);
300     }
301
302     public static MandatoryStatement decorateMandatory(final MandatoryStatement stmt, final DeclarationReference ref) {
303         return new RefMandatoryStatement(stmt, ref);
304     }
305
306     public static MaxElementsStatement decorateMaxElements(final MaxElementsStatement stmt,
307             final DeclarationReference ref) {
308         return new RefMaxElementsStatement(stmt, ref);
309     }
310
311     public static MinElementsStatement decorateMinElements(final MinElementsStatement stmt,
312             final DeclarationReference ref) {
313         return new RefMinElementsStatement(stmt, ref);
314     }
315
316     public static ModifierStatement decorateModifier(final ModifierStatement stmt, final DeclarationReference ref) {
317         return new RefModifierStatement(stmt, ref);
318     }
319
320     public static ModuleStatement decorateModule(final ModuleStatement stmt, final DeclarationReference ref) {
321         return new RefModuleStatement(stmt, ref);
322     }
323
324     public static MustStatement decorateMust(final MustStatement stmt, final DeclarationReference ref) {
325         return new RefMustStatement(stmt, ref);
326     }
327
328     public static NamespaceStatement decorateNamespace(final NamespaceStatement stmt, final DeclarationReference ref) {
329         return new RefNamespaceStatement(stmt, ref);
330     }
331
332     public static NotificationStatement decorateNotification(final NotificationStatement stmt,
333             final DeclarationReference ref) {
334         return new RefNotificationStatement(stmt, ref);
335     }
336
337     public static OrderedByStatement decorateOrderedBy(final OrderedByStatement stmt,
338             final DeclarationReference ref) {
339         return new RefOrderedByStatement(stmt, ref);
340     }
341
342     public static OrganizationStatement decorateOrganization(final OrganizationStatement stmt,
343             final DeclarationReference ref) {
344         return new RefOrganizationStatement(stmt, ref);
345     }
346
347     public static OutputStatement decorateOutput(final OutputStatement stmt, final DeclarationReference ref) {
348         return new RefOutputStatement(stmt, ref);
349     }
350
351     public static PathStatement decoratePath(final PathStatement stmt, final DeclarationReference ref) {
352         return new RefPathStatement(stmt, ref);
353     }
354
355     public static PatternStatement decoratePattern(final PatternStatement stmt, final DeclarationReference ref) {
356         return new RefPatternStatement(stmt, ref);
357     }
358
359     public static PositionStatement decoratePosition(final PositionStatement stmt, final DeclarationReference ref) {
360         return new RefPositionStatement(stmt, ref);
361     }
362
363     public static PrefixStatement decoratePrefix(final PrefixStatement stmt, final DeclarationReference ref) {
364         return new RefPrefixStatement(stmt, ref);
365     }
366
367     public static PresenceStatement decoratePresence(final PresenceStatement stmt,
368             final DeclarationReference ref) {
369         return new RefPresenceStatement(stmt, ref);
370     }
371
372     public static RangeStatement decorateRange(final RangeStatement stmt, final DeclarationReference ref) {
373         return new RefRangeStatement(stmt, ref);
374     }
375
376     public static ReferenceStatement decorateReference(final ReferenceStatement stmt, final DeclarationReference ref) {
377         return new RefReferenceStatement(stmt, ref);
378     }
379
380     public static RefineStatement decorateRefine(final RefineStatement stmt, final DeclarationReference ref) {
381         return new RefRefineStatement(stmt, ref);
382     }
383
384     public static RequireInstanceStatement decorateRequireInstance(final RequireInstanceStatement stmt,
385             final DeclarationReference ref) {
386         return new RefRequireInstanceStatement(stmt, ref);
387     }
388
389     public static RevisionStatement decorateRevision(final RevisionStatement stmt, final DeclarationReference ref) {
390         return new RefRevisionStatement(stmt, ref);
391     }
392
393     public static RevisionDateStatement decorateRevisionDate(final RevisionDateStatement stmt,
394             final DeclarationReference ref) {
395         return new RefRevisionDateStatement(stmt, ref);
396     }
397
398     public static RpcStatement decorateRpc(final RpcStatement stmt, final DeclarationReference ref) {
399         return new RefRpcStatement(stmt, ref);
400     }
401
402     public static StatusStatement decorateStatus(final StatusStatement stmt, final DeclarationReference ref) {
403         return new RefStatusStatement(stmt, ref);
404     }
405
406     public static SubmoduleStatement decorateSubmodule(final SubmoduleStatement stmt, final DeclarationReference ref) {
407         return new RefSubmoduleStatement(stmt, ref);
408     }
409
410     public static TypeStatement decorateType(final TypeStatement stmt, final DeclarationReference ref) {
411         return new RefTypeStatement(stmt, ref);
412     }
413
414     public static TypedefStatement decorateTypedef(final TypedefStatement stmt, final DeclarationReference ref) {
415         return new RefTypedefStatement(stmt, ref);
416     }
417
418     public static UniqueStatement decorateUnique(final UniqueStatement stmt, final DeclarationReference ref) {
419         return new RefUniqueStatement(stmt, ref);
420     }
421
422     public static UnitsStatement decorateUnits(final UnitsStatement stmt, final DeclarationReference ref) {
423         return new RefUnitsStatement(stmt, ref);
424     }
425
426     public static UsesStatement decorateUses(final UsesStatement stmt, final DeclarationReference ref) {
427         return new RefUsesStatement(stmt, ref);
428     }
429
430     public static ValueStatement decorateValue(final ValueStatement stmt, final DeclarationReference ref) {
431         return new RefValueStatement(stmt, ref);
432     }
433
434     public static WhenStatement decorateWhen(final WhenStatement stmt, final DeclarationReference ref) {
435         return new RefWhenStatement(stmt, ref);
436     }
437
438     public static YangVersionStatement decorateYangVersion(final YangVersionStatement stmt,
439             final DeclarationReference ref) {
440         return new RefYangVersionStatement(stmt, ref);
441     }
442
443     public static YinElementStatement decorateYinElement(final YinElementStatement stmt,
444             final DeclarationReference ref) {
445         return new RefYinElementStatement(stmt, ref);
446     }
447 }