rt/emul/compact/src/main/java/java/util/regex/PatternSyntaxException.java
author Jaroslav Tulach <jtulach@netbeans.org>
Mon, 07 Oct 2013 16:13:27 +0200
branchjdk7-b147
changeset 1348 bca65655b36b
child 1350 f14e9730d4e9
permissions -rw-r--r--
Adding RegEx implementation
     1 /*
     2  * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    25 
    26 package java.util.regex;
    27 
    28 import sun.security.action.GetPropertyAction;
    29 
    30 
    31 /**
    32  * Unchecked exception thrown to indicate a syntax error in a
    33  * regular-expression pattern.
    34  *
    35  * @author  unascribed
    36  * @since 1.4
    37  * @spec JSR-51
    38  */
    39 
    40 public class PatternSyntaxException
    41     extends IllegalArgumentException
    42 {
    43     private static final long serialVersionUID = -3864639126226059218L;
    44 
    45     private final String desc;
    46     private final String pattern;
    47     private final int index;
    48 
    49     /**
    50      * Constructs a new instance of this class.
    51      *
    52      * @param  desc
    53      *         A description of the error
    54      *
    55      * @param  regex
    56      *         The erroneous pattern
    57      *
    58      * @param  index
    59      *         The approximate index in the pattern of the error,
    60      *         or <tt>-1</tt> if the index is not known
    61      */
    62     public PatternSyntaxException(String desc, String regex, int index) {
    63         this.desc = desc;
    64         this.pattern = regex;
    65         this.index = index;
    66     }
    67 
    68     /**
    69      * Retrieves the error index.
    70      *
    71      * @return  The approximate index in the pattern of the error,
    72      *         or <tt>-1</tt> if the index is not known
    73      */
    74     public int getIndex() {
    75         return index;
    76     }
    77 
    78     /**
    79      * Retrieves the description of the error.
    80      *
    81      * @return  The description of the error
    82      */
    83     public String getDescription() {
    84         return desc;
    85     }
    86 
    87     /**
    88      * Retrieves the erroneous regular-expression pattern.
    89      *
    90      * @return  The erroneous pattern
    91      */
    92     public String getPattern() {
    93         return pattern;
    94     }
    95 
    96     private static final String nl =
    97         java.security.AccessController
    98             .doPrivileged(new GetPropertyAction("line.separator"));
    99 
   100     /**
   101      * Returns a multi-line string containing the description of the syntax
   102      * error and its index, the erroneous regular-expression pattern, and a
   103      * visual indication of the error index within the pattern.
   104      *
   105      * @return  The full detail message
   106      */
   107     public String getMessage() {
   108         StringBuffer sb = new StringBuffer();
   109         sb.append(desc);
   110         if (index >= 0) {
   111             sb.append(" near index ");
   112             sb.append(index);
   113         }
   114         sb.append(nl);
   115         sb.append(pattern);
   116         if (index >= 0) {
   117             sb.append(nl);
   118             for (int i = 0; i < index; i++) sb.append(' ');
   119             sb.append('^');
   120         }
   121         return sb.toString();
   122     }
   123 
   124 }