Propagate @NonNull collection annotations
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / SchemaNode.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.yangtools.yang.model.api;
9
10 import org.eclipse.jdt.annotation.NonNull;
11 import org.opendaylight.yangtools.yang.common.QName;
12
13 /**
14  * SchemaNode represents a node in schema tree.
15  */
16 public interface SchemaNode extends DocumentedNode.WithStatus {
17     /**
18      * Returns QName of the instance of the type <code>SchemaNode</code>.
19      *
20      * @return QName with the name of the schema node
21      */
22     @NonNull QName getQName();
23
24     /**
25      * Returns the schema path of the instance of the type {@code SchemaNode}.
26      *
27      * @return schema path of the schema node
28      * @throws UnsupportedOperationException when the implementation does not support per-node unique paths
29      * @deprecated The idea of identifying SchemaNodes through a global path does not work. There are two problems:
30      *             <ul>
31      *               <li>SchemaPath does not work because it does not discern namespaces, i.e. we do not known whether
32      *                   the {@code QName} refers to a {@code grouping}, a {@code typedef} or a {@code container}.
33      *               </li>
34      *               <li>Such a path needs to be maintained by each SchemaNode and requires us to instantiate each
35      *                   effective statement as a separate object (because {@link #getPath()} is effectively an
36      *                   identity within a given {@link EffectiveModelContext}.
37      *               </li>
38      *             </ul>
39      */
40     @Deprecated
41     @NonNull SchemaPath getPath();
42 }