blob: 194041a88942cb403ca9b6de7ce29205bdeb430c [file] [log] [blame]
Brian Silverman9c614bc2016-02-15 20:20:02 -05001#region Copyright notice and license
2// Protocol Buffers - Google's data interchange format
3// Copyright 2008 Google Inc. All rights reserved.
4// https://developers.google.com/protocol-buffers/
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10// * Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12// * Redistributions in binary form must reproduce the above
13// copyright notice, this list of conditions and the following disclaimer
14// in the documentation and/or other materials provided with the
15// distribution.
16// * Neither the name of Google Inc. nor the names of its
17// contributors may be used to endorse or promote products derived from
18// this software without specific prior written permission.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31#endregion
32
33namespace Google.Protobuf.Reflection
34{
35 /// <summary>
36 /// Base class for nearly all descriptors, providing common functionality.
37 /// </summary>
38 public abstract class DescriptorBase : IDescriptor
39 {
40 private readonly FileDescriptor file;
41 private readonly string fullName;
42 private readonly int index;
43
44 internal DescriptorBase(FileDescriptor file, string fullName, int index)
45 {
46 this.file = file;
47 this.fullName = fullName;
48 this.index = index;
49 }
50
51 /// <value>
52 /// The index of this descriptor within its parent descriptor.
53 /// </value>
54 /// <remarks>
55 /// This returns the index of this descriptor within its parent, for
56 /// this descriptor's type. (There can be duplicate values for different
57 /// types, e.g. one enum type with index 0 and one message type with index 0.)
58 /// </remarks>
59 public int Index
60 {
61 get { return index; }
62 }
63
64 /// <summary>
65 /// Returns the name of the entity (field, message etc) being described.
66 /// </summary>
67 public abstract string Name { get; }
68
69 /// <summary>
70 /// The fully qualified name of the descriptor's target.
71 /// </summary>
72 public string FullName
73 {
74 get { return fullName; }
75 }
76
77 /// <value>
78 /// The file this descriptor was declared in.
79 /// </value>
80 public FileDescriptor File
81 {
82 get { return file; }
83 }
84 }
85}