##### Coverage Report - org.apache.commons.configuration.plist.ParseException

Classes in this File | Line Coverage | Branch Coverage | Complexity

ParseException

47% | 31/66

75% | 9/12

5.2;5,2

1

     /* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */

2

     package org.apache.commons.configuration.plist;

3

4

     /**

5

      * This exception is thrown when parse errors are encountered.

6

      * You can explicitly create objects of this exception type by

7

      * calling the method generateParseException in the generated

8

      * parser.

9

      *

10

      * You can modify this class to customize your error reporting

11

      * mechanisms so long as you retain the public fields.

12

      */

13

     class ParseException extends Exception {

14

15

       /**

16

        * This constructor is used by the method "generateParseException"

17

        * in the generated parser.  Calling this constructor generates

18

        * a new object of this type with the fields "currentToken",

19

        * "expectedTokenSequences", and "tokenImage" set.  The boolean

20

        * flag "specialConstructor" is also set to true to indicate that

21

        * this constructor was used to create this object.

22

        * This constructor calls its super class with the empty string

23

        * to force the "toString" method of parent class "Throwable" to

24

        * print the error message in the form:

25

        *     ParseException: <result of getMessage>

26

        */

27

       public ParseException(Token currentTokenVal,

28

                             int[][] expectedTokenSequencesVal,

29

                             String[] tokenImageVal

30

                            )

31

       {

32

1

         super("");

33

1

         specialConstructor = true;

34

1

         currentToken = currentTokenVal;

35

1

         expectedTokenSequences = expectedTokenSequencesVal;

36

1

         tokenImage = tokenImageVal;

37

1

       }

38

39

       /**

40

        * The following constructors are for use by you for whatever

41

        * purpose you can think of.  Constructing the exception in this

42

        * manner makes the exception behave in the normal way - i.e., as

43

        * documented in the class "Throwable".  The fields "errorToken",

44

        * "expectedTokenSequences", and "tokenImage" do not contain

45

        * relevant information.  The JavaCC generated code does not use

46

        * these constructors.

47

        */

48

49

       public ParseException() {

50

0

         super();

51

0

         specialConstructor = false;

52

0

       }

53

54

       public ParseException(String message) {

55

0

         super(message);

56

0

         specialConstructor = false;

57

0

       }

58

59

       /**

60

        * This variable determines which constructor was used to create

61

        * this object and thereby affects the semantics of the

62

        * "getMessage" method (see below).

63

        */

64

       protected boolean specialConstructor;

65

66

       /**

67

        * This is the last token that has been consumed successfully.  If

68

        * this object has been created due to a parse error, the token

69

        * followng this token will (therefore) be the first error token.

70

        */

71

       public Token currentToken;

72

73

       /**

74

        * Each entry in this array is an array of integers.  Each array

75

        * of integers represents a sequence of tokens (by their ordinal

76

        * values) that is expected at this point of the parse.

77

        */

78

       public int[][] expectedTokenSequences;

79

80

       /**

81

        * This is a reference to the "tokenImage" array of the generated

82

        * parser within which the parse error occurred.  This array is

83

        * defined in the generated ...Constants interface.

84

        */

85

       public String[] tokenImage;

86

87

       /**

88

        * This method has the standard behavior when this object has been

89

        * created using the standard constructors.  Otherwise, it uses

90

        * "currentToken" and "expectedTokenSequences" to generate a parse

91

        * error message and returns it.  If this object has been created

92

        * due to a parse error, and you do not catch it (it gets thrown

93

        * from the parser), then this method is called during the printing

94

        * of the final stack trace, and hence the correct error message

95

        * gets displayed.

96

        */

97

       public String getMessage() {

98

1

         if (!specialConstructor) {

99

0

           return super.getMessage();

100

         }

101

1

         String expected = "";

102

1

         int maxSize = 0;

103

2

         for (int i = 0; i < expectedTokenSequences.length; i++) {

104

1

           if (maxSize < expectedTokenSequences[i].length) {

105

1

             maxSize = expectedTokenSequences[i].length;

106

           }

107

2

           for (int j = 0; j < expectedTokenSequences[i].length; j++) {

108

1

             expected += tokenImage[expectedTokenSequences[i][j]] + " ";

109

           }

110

1

           if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {

111

1

             expected += "...";

112

           }

113

1

           expected += eol + "    ";

114

         }

115

1

         String retval = "Encountered \"";

116

1

         Token tok = currentToken.next;

117

1

         for (int i = 0; i < maxSize; i++) {

118

1

           if (i != 0) retval += " ";

119

1

           if (tok.kind == 0) {

120

1

             retval += tokenImage[0];

121

1

             break;

122

           }

123

0

           retval += add_escapes(tok.image);

124

0

           tok = tok.next;

125

         }

126

1

         retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;

127

1

         retval += "." + eol;

128

1

         if (expectedTokenSequences.length == 1) {

129

1

           retval += "Was expecting:" + eol + "    ";

130

         } else {

131

0

           retval += "Was expecting one of:" + eol + "    ";

132

         }

133

1

         retval += expected;

134

1

         return retval;

135

       }

136

137

       /**

138

        * The end of line string for this machine.

139

        */

140

1

       protected String eol = System.getProperty("line.separator", "\n");

141

142

       /**

143

        * Used to convert raw characters to their escaped version

144

        * when these raw version cannot be used as part of an ASCII

145

        * string literal.

146

        */

147

       protected String add_escapes(String str) {

148

0

           StringBuffer retval = new StringBuffer();

149

           char ch;

150

0

           for (int i = 0; i < str.length(); i++) {

151

0

             switch (str.charAt(i))

152

             {

153

                case 0 :

154

0

                   continue;

155

                case '\b':

156

0

                   retval.append("\\b");

157

0

                   continue;

158

                case '\t':

159

0

                   retval.append("\\t");

160

0

                   continue;

161

                case '\n':

162

0

                   retval.append("\\n");

163

0

                   continue;

164

                case '\f':

165

0

                   retval.append("\\f");

166

0

                   continue;

167

                case '\r':

168

0

                   retval.append("\\r");

169

0

                   continue;

170

                case '\"':

171

0

                   retval.append("\\\"");

172

0

                   continue;

173

                case '\'':

174

0

                   retval.append("\\\'");

175

0

                   continue;

176

                case '\\':

177

0

                   retval.append("\\\\");

178

0

                   continue;

179

                default:

180

0

                   if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {

181

0

                      String s = "0000" + Integer.toString(ch, 16);

182

0

                      retval.append("\\u" + s.substring(s.length() - 4, s.length()));

183

                   } else {

184

0

                      retval.append(ch);

185

                   }

186

                   continue;

187

             }

188

           }

189

0

           return retval.toString();

190

        }

191

192

     }