1/*
2 * [The "BSD licence"]
3 * Copyright (c) 2005-2008 Terence Parr
4 * All rights reserved.
5 *
6 * Conversion to C#:
7 * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 *    derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 * NOT 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 OF
30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33namespace Antlr.Runtime
34{
35    using System.Collections.Generic;
36    using Exception = System.Exception;
37    using SerializationInfo = System.Runtime.Serialization.SerializationInfo;
38    using StreamingContext = System.Runtime.Serialization.StreamingContext;
39
40    /** <summary>
41     *  We were expecting a token but it's not found.  The current token
42     *  is actually what we wanted next.  Used for tree node errors too.
43     *  </summary>
44     */
45    [System.Serializable]
46    public class MissingTokenException : MismatchedTokenException
47    {
48        private readonly object _inserted;
49
50        public MissingTokenException()
51        {
52        }
53
54        public MissingTokenException(string message)
55            : base(message)
56        {
57        }
58
59        public MissingTokenException(string message, Exception innerException)
60            : base(message, innerException)
61        {
62        }
63
64        public MissingTokenException(int expecting, IIntStream input, object inserted)
65            : this(expecting, input, inserted, null)
66        {
67        }
68
69        public MissingTokenException(int expecting, IIntStream input, object inserted, IList<string> tokenNames)
70            : base(expecting, input, tokenNames)
71        {
72            this._inserted = inserted;
73        }
74
75        public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames)
76            : base(message, expecting, input, tokenNames)
77        {
78            this._inserted = inserted;
79        }
80
81        public MissingTokenException(string message, int expecting, IIntStream input, object inserted, IList<string> tokenNames, Exception innerException)
82            : base(message, expecting, input, tokenNames, innerException)
83        {
84            this._inserted = inserted;
85        }
86
87        protected MissingTokenException(SerializationInfo info, StreamingContext context)
88            : base(info, context)
89        {
90        }
91
92        public virtual int MissingType
93        {
94            get
95            {
96                return Expecting;
97            }
98        }
99
100        public override string ToString()
101        {
102            if (_inserted != null && Token != null)
103            {
104                return "MissingTokenException(inserted " + _inserted + " at " + Token.Text + ")";
105            }
106            if (Token != null)
107            {
108                return "MissingTokenException(at " + Token.Text + ")";
109            }
110            return "MissingTokenException";
111        }
112    }
113}
114