diff options
Diffstat (limited to 'third_party/jformatstring/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java')
-rw-r--r-- | third_party/jformatstring/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/third_party/jformatstring/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java b/third_party/jformatstring/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java new file mode 100644 index 0000000000..9ddfc21a77 --- /dev/null +++ b/third_party/jformatstring/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java @@ -0,0 +1,145 @@ +/* + * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +/* This file has been extensively modified from the original Sun implementation + * to provide for compile time checking of Format Strings. + * + * These modifications were performed by Bill Pugh, this code is free software. + * + */ +package edu.umd.cs.findbugs.formatStringChecker; + +import java.util.DuplicateFormatFlagsException; +import java.util.UnknownFormatFlagsException; + +class Flags { + private int flags; + + static final Flags NONE = new Flags(0); // '' + + // duplicate declarations from Formattable.java + static final Flags LEFT_JUSTIFY = new Flags(1 << 0); // '-' + static final Flags UPPERCASE = new Flags(1 << 1); // '^' + static final Flags ALTERNATE = new Flags(1 << 2); // '#' + + // numerics + static final Flags PLUS = new Flags(1 << 3); // '+' + static final Flags LEADING_SPACE = new Flags(1 << 4); // ' ' + static final Flags ZERO_PAD = new Flags(1 << 5); // '0' + static final Flags GROUP = new Flags(1 << 6); // ',' + static final Flags PARENTHESES = new Flags(1 << 7); // '(' + + // indexing + static final Flags PREVIOUS = new Flags(1 << 8); // '<' + + private Flags(int f) { + flags = f; + } + + public int valueOf() { + return flags; + } + + public boolean contains(Flags f) { + return (flags & f.valueOf()) == f.valueOf(); + } + + public Flags dup() { + return new Flags(flags); + } + + Flags add(Flags f) { + flags |= f.valueOf(); + return this; + } + + public Flags remove(Flags f) { + flags &= ~f.valueOf(); + return this; + } + + public static Flags parse(String s) { + char[] ca = s.toCharArray(); + Flags f = new Flags(0); + for (int i = 0; i < ca.length; i++) { + Flags v = parse(ca[i]); + if (f.contains(v)) + throw new DuplicateFormatFlagsException(v.toString()); + f.add(v); + } + return f; + } + + // parse those flags which may be provided by users + private static Flags parse(char c) { + switch (c) { + case '-': + return LEFT_JUSTIFY; + case '#': + return ALTERNATE; + case '+': + return PLUS; + case ' ': + return LEADING_SPACE; + case '0': + return ZERO_PAD; + case ',': + return GROUP; + case '(': + return PARENTHESES; + case '<': + return PREVIOUS; + default: + throw new UnknownFormatFlagsException(String.valueOf(c)); + } + } + + // Returns a string representation of the current <tt>Flags</tt>. + public static String toString(Flags f) { + return f.toString(); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + if (contains(LEFT_JUSTIFY)) + sb.append('-'); + if (contains(UPPERCASE)) + sb.append('^'); + if (contains(ALTERNATE)) + sb.append('#'); + if (contains(PLUS)) + sb.append('+'); + if (contains(LEADING_SPACE)) + sb.append(' '); + if (contains(ZERO_PAD)) + sb.append('0'); + if (contains(GROUP)) + sb.append(','); + if (contains(PARENTHESES)) + sb.append('('); + if (contains(PREVIOUS)) + sb.append('<'); + return sb.toString(); + } +}
\ No newline at end of file |