diff -Nru jformatstring-0.10~20081016/LICENSE jformatstring-0.10~20131207/LICENSE --- jformatstring-0.10~20081016/LICENSE 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,347 +0,0 @@ -The GNU General Public License (GPL) - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software is -covered by the GNU Library General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for this service if you wish), -that you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs; and that you know you -can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny -you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of the -software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for -a fee, you must give the recipients all the rights that you have. You must -make sure that they, too, receive or can get the source code. And you must -show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If the -software is modified by someone else and passed on, we want its recipients to -know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program proprietary. -To prevent this, we have made it clear that any patent must be licensed for -everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms of -this General Public License. The "Program", below, refers to any such program -or work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or -translated into another language. (Hereinafter, translation is included -without limitation in the term "modification".) Each licensee is addressed as -"you". - -Activities other than copying, distribution and modification are not covered by -this License; they are outside its scope. The act of running the Program is -not restricted, and the output from the Program is covered only if its contents -constitute a work based on the Program (independent of having been made by -running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as -you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and give any other recipients of the -Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may -at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus -forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all of -these conditions: - - a) You must cause the modified files to carry prominent notices stating - that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in whole or - in part contains or is derived from the Program or any part thereof, to be - licensed as a whole at no charge to all third parties under the terms of - this License. - - c) If the modified program normally reads commands interactively when run, - you must cause it, when started running for such interactive use in the - most ordinary way, to print or display an announcement including an - appropriate copyright notice and a notice that there is no warranty (or - else, saying that you provide a warranty) and that users may redistribute - the program under these conditions, and telling the user how to view a copy - of this License. (Exception: if the Program itself is interactive but does - not normally print such an announcement, your work based on the Program is - not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, and -its terms, do not apply to those sections when you distribute them as separate -works. But when you distribute the same sections as part of a whole which is a -work based on the Program, the distribution of the whole must be on the terms -of this License, whose permissions for other licensees extend to the entire -whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Program. - -In addition, mere aggregation of another work not based on the Program with the -Program (or with a work based on the Program) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - -3. You may copy and distribute the Program (or a work based on it, under -Section 2) in object code or executable form under the terms of Sections 1 and -2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source - code, which must be distributed under the terms of Sections 1 and 2 above - on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three years, to - give any third party, for a charge no more than your cost of physically - performing source distribution, a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of Sections 1 - and 2 above on a medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to - distribute corresponding source code. (This alternative is allowed only - for noncommercial distribution and only if you received the program in - object code or executable form with such an offer, in accord with - Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and installation -of the executable. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the source -code from the same place counts as distribution of the source code, even though -third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, or -rights, from you under this License will not have their licenses terminated so -long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. -However, nothing else grants you permission to modify or distribute the Program -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Program (or -any work based on the Program), you indicate your acceptance of this License to -do so, and all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor to -copy, distribute or modify the Program subject to these terms and conditions. -You may not impose any further restrictions on the recipients' exercise of the -rights granted herein. You are not responsible for enforcing compliance by -third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), conditions -are imposed on you (whether by court order, agreement or otherwise) that -contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Program at all. -For example, if a patent license would not permit royalty-free redistribution -of the Program by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system, which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the -General Public License from time to time. Such new versions will be similar in -spirit to the present version, but may differ in detail to address new problems -or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software Foundation. -If the Program does not specify a version number of this License, you may -choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software Foundation, -write to the Free Software Foundation; we sometimes make exceptions for this. -Our decision will be guided by the two goals of preserving the free status of -all derivatives of our free software and of promoting the sharing and reuse of -software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE -PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR -INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA -BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER -OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively convey the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - - One line to give the program's name and a brief idea of what it does. - - Copyright (C) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your option) - any later version. - - This program 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 for - more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., 59 - Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it -starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author Gnomovision comes - with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free - software, and you are welcome to redistribute it under certain conditions; - type 'show c' for details. - -The hypothetical commands 'show w' and 'show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than 'show w' and 'show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the program, if necessary. Here -is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - 'Gnomovision' (which makes passes at compilers) written by James Hacker. - - signature of Ty Coon, 1 April 1989 - - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General Public -License instead of this License. - - -"CLASSPATH" EXCEPTION TO THE GPL - -Certain source files distributed by Sun Microsystems, Inc. are subject to -the following clarification and special exception to the GPL, but only where -Sun has expressly included in the particular source file's header the words -"Sun designates this particular file as subject to the "Classpath" exception -as provided by Sun in the LICENSE file that accompanied this code." - - Linking this library statically or dynamically with other modules is making - a combined work based on this library. Thus, the terms and conditions of - the GNU General Public License cover the whole combination. - - As a special exception, the copyright holders of this library give you - permission to link this library with independent modules to produce an - executable, regardless of the license terms of these independent modules, - and to copy and distribute the resulting executable under terms of your - choice, provided that you also meet, for each linked independent module, - the terms and conditions of the license of that module. An independent - module is a module which is not derived from or based on this library. If - you modify this library, you may extend this exception to your version of - the library, but you are not obligated to do so. If you do not wish to do - so, delete this exception statement from your version. diff -Nru jformatstring-0.10~20081016/build.xml jformatstring-0.10~20131207/build.xml --- jformatstring-0.10~20081016/build.xml 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/build.xml 2013-12-09 00:34:10.000000000 +0000 @@ -1,43 +1,78 @@ + - - - + - + + + + + + + - - - - + + + + - + - + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + FB home ${findbugs.home} + FB ant ${anttask.jar} + + + + + + - - - + + + + + + + + diff -Nru jformatstring-0.10~20081016/debian/changelog jformatstring-0.10~20131207/debian/changelog --- jformatstring-0.10~20081016/debian/changelog 2013-09-03 14:25:11.000000000 +0000 +++ jformatstring-0.10~20131207/debian/changelog 2013-12-09 13:30:02.000000000 +0000 @@ -1,3 +1,10 @@ +jformatstring (0.10~20131207-1) unstable; urgency=low + + * Findbugs uses google code to host the code of jformatstring. + * Add test module in ant.xml + + -- ShuxiongYe Sat, 07 Dec 2013 12:35:21 +0800 + jformatstring (0.10~20081016-2) unstable; urgency=low * add patch for building findbugs diff -Nru jformatstring-0.10~20081016/debian/control jformatstring-0.10~20131207/debian/control --- jformatstring-0.10~20081016/debian/control 2013-08-30 08:57:53.000000000 +0000 +++ jformatstring-0.10~20131207/debian/control 2013-12-09 13:02:01.000000000 +0000 @@ -3,14 +3,14 @@ Maintainer: Debian Java Maintainers Uploaders: ShuxiongYe Build-Depends: debhelper (>= 9.0.0), default-jdk, ant, junit4, ant-optional -Standards-Version: 3.9.4 +Standards-Version: 3.9.5 Section: libs -Homepage: http://pkgs.fedoraproject.org/cgit/jFormatString.git/ +Homepage: http://code.google.com/p/j-format-string/ Vcs-Git: git://git.debian.org/git/pkg-java/jformatstring.git Vcs-Browser: http://git.debian.org/?p=pkg-java/jformatstring.git;a=summary Package: libjformatstring-java -Section: java +Section: java Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Java format string compile-time checker diff -Nru jformatstring-0.10~20081016/debian/copyright jformatstring-0.10~20131207/debian/copyright --- jformatstring-0.10~20081016/debian/copyright 2013-08-30 07:43:58.000000000 +0000 +++ jformatstring-0.10~20131207/debian/copyright 2013-12-09 13:03:07.000000000 +0000 @@ -1,6 +1,6 @@ Format: http://dep.debian.net/deps/dep5 -Ustream-Name: jformatstring -Source: http://kojipkgs.fedoraproject.org/packages/jFormatString/0/0.10.20081016svn.fc20/src/ +Ustream-Name: jformatstring +Source: http://code.google.com/p/j-format-string/ Files: * Copyright: 2013 Bill Pugh, pugh@cs.umd.edu diff -Nru jformatstring-0.10~20081016/debian/patches/0001-RemoveExternalLibDependencyAndFixTestModule.patch jformatstring-0.10~20131207/debian/patches/0001-RemoveExternalLibDependencyAndFixTestModule.patch --- jformatstring-0.10~20081016/debian/patches/0001-RemoveExternalLibDependencyAndFixTestModule.patch 1970-01-01 00:00:00.000000000 +0000 +++ jformatstring-0.10~20131207/debian/patches/0001-RemoveExternalLibDependencyAndFixTestModule.patch 2013-12-09 13:01:00.000000000 +0000 @@ -0,0 +1,173 @@ +Index: jformatstring-0.10~20131207/build.xml +=================================================================== +--- jformatstring-0.10~20131207.orig/build.xml 2013-12-09 08:44:03.355428356 +0800 ++++ jformatstring-0.10~20131207/build.xml 2013-12-09 08:50:41.975425237 +0800 +@@ -5,13 +5,7 @@ + + + +- +- +- +- +- +- +- ++ + + + +@@ -20,9 +14,9 @@ + + + ++ + + +- + + + +@@ -37,42 +31,35 @@ + + + ++ ++ ++ Running JUnit test cases for jformatstring... ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + + + +- +- +- FB home ${findbugs.home} +- FB ant ${anttask.jar} +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- + + + +Index: jformatstring-0.10~20131207/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterRuntimeTest.java +=================================================================== +--- jformatstring-0.10~20131207.orig/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterRuntimeTest.java 2013-12-09 08:30:37.751434000 +0800 ++++ jformatstring-0.10~20131207/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterRuntimeTest.java 2013-12-06 22:59:53.870953000 +0800 +@@ -33,13 +33,9 @@ + + import org.junit.Test; + +-import edu.umd.cs.findbugs.annotations.ExpectWarning; +-import edu.umd.cs.findbugs.annotations.NoWarning; +- + public class FormatterRuntimeTest { + + @Test +- @NoWarning("FS") + public void shouldWork() { + System.out.println(String.format("%d%n%d", 42, (short) 42)); + System.out.println(String.format("%d%n", new BigInteger("42"))); +@@ -48,35 +44,29 @@ + } + + @Test(expected = IllegalFormatConversionException.class) +- @ExpectWarning("FS") + public void stringWhereIntegerExpected() { + System.out.println(String.format("%d", "test")); + } + + @Test(expected = MissingFormatArgumentException.class) +- @ExpectWarning("FS") + public void notEnoughParameters() { + System.out.println(String.format("%s%s", "test")); + } + +- @ExpectWarning("VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY") + public void passingAnArray() { + System.out.println(System.out.printf("%s", new int[] { 42, 17 })); + } + +- @ExpectWarning("FS") + public void passingAnIntToABoolean() { + System.out.println(System.out.printf("%b", 0)); + } + + @Test(expected = UnknownFormatConversionException.class) +- @ExpectWarning("FS") + public void formatDateWithY() { + System.out.println(String.format("%Y", new Date())); + } + + @Test +- @NoWarning("FS") + public void testBug1874856FalsePositive() { + // None of these should yield warnings + Calendar c = new GregorianCalendar(1993, 4, 23); +@@ -95,7 +85,6 @@ + } + + @Test(expected = MissingFormatArgumentException.class) +- @ExpectWarning("FS") + public void testBug1874856TruePositive() { + Calendar c = new GregorianCalendar(1993, 4, 23); + // Actually, this one should generate a warning +@@ -107,13 +96,11 @@ + } + + @Test(expected = IllegalFormatConversionException.class) +- @ExpectWarning("FS") + public void testDateMismatch() { + System.out.printf("%tY\n", "2008"); + } + + @Test +- @ExpectWarning("FS") + public void testSqlDates() { + Calendar c = new GregorianCalendar(1993, 4, 23, 12, 34, 56); + java.sql.Date date = new java.sql.Date(c.getTimeInMillis()); diff -Nru jformatstring-0.10~20081016/debian/patches/0001-fix-lib-dir.patch jformatstring-0.10~20131207/debian/patches/0001-fix-lib-dir.patch --- jformatstring-0.10~20081016/debian/patches/0001-fix-lib-dir.patch 2013-08-30 07:43:58.000000000 +0000 +++ jformatstring-0.10~20131207/debian/patches/0001-fix-lib-dir.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -Index: jformatstring-0.10~20081016/build.xml -=================================================================== ---- jformatstring-0.10~20081016.orig/build.xml 2008-10-16 13:22:04.000000000 +0800 -+++ jformatstring-0.10~20081016/build.xml 2013-08-30 08:01:08.317258790 +0800 -@@ -2,10 +2,7 @@ - - - -- -- -- -- -+ - - - diff -Nru jformatstring-0.10~20081016/debian/patches/0002-add-junit4-test.patch jformatstring-0.10~20131207/debian/patches/0002-add-junit4-test.patch --- jformatstring-0.10~20081016/debian/patches/0002-add-junit4-test.patch 2013-08-30 07:43:58.000000000 +0000 +++ jformatstring-0.10~20131207/debian/patches/0002-add-junit4-test.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,299 +0,0 @@ -Index: jformatstring-0.10~20081016/build.xml -=================================================================== ---- jformatstring-0.10~20081016.orig/build.xml 2013-08-30 12:17:55.880831093 +0800 -+++ jformatstring-0.10~20081016/build.xml 2013-08-30 12:19:54.533419465 +0800 -@@ -29,11 +29,30 @@ - - - -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -Index: jformatstring-0.10~20081016/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java -=================================================================== ---- jformatstring-0.10~20081016.orig/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java 2013-08-30 12:17:46.148782831 +0800 -+++ jformatstring-0.10~20081016/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java 2013-08-30 13:02:51.470197796 +0800 -@@ -5,13 +5,14 @@ - import java.util.GregorianCalendar; - import java.util.IllegalFormatException; - -+import junit.framework.Assert; -+ - - import org.junit.Test; - --public class FormatterCompileTimeTest { -+public class FormatterCompileTimeTest extends junit.framework.TestCase{ - -- @Test -- public void shouldWork() throws ExtraFormatArgumentsException, -+ public void testShouldWork() throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { - Formatter.check("%d%n%d", "Ljava/lang/Integer;", "Ljava/lang/Short;"); - -@@ -19,64 +20,83 @@ - Formatter.check("%f\n", "Ljava/math/BigDecimal;"); - } - -- @Test(expected = IllegalFormatConversionException.class) -- public void stringWhereIntegerExpected() -- throws ExtraFormatArgumentsException, -- IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -- Formatter.check("%d", "Ljava/lang/String;"); -- } -- -- @Test(expected = MissingFormatArgumentException.class) -- public void notEnoughParameters() throws ExtraFormatArgumentsException, -- IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -- Formatter.check("%s%s", "Ljava/lang/String;"); -- } -- -- @Test(expected = IllegalFormatConversionException.class) -- public void passingAnArray() throws ExtraFormatArgumentsException, -- IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -- Formatter.check("%s", "[I"); -- } -- -- @Test(expected = IllegalFormatConversionException.class) -- public void passingAnIntToABoolean() throws ExtraFormatArgumentsException, -- IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -- Formatter.check("%b", "Ljava/lang/Integer;"); -- } -- -- @Test(expected=ExtraFormatArgumentsException.class) -- public void tooManyParameters() throws ExtraFormatArgumentsException, -- IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -- Formatter.check("%s%s", "Ljava/lang/String;", "Ljava/lang/String;", -- "Ljava/lang/String;"); -+ public void testStringWhereIntegerExpected(){ -+ try { -+ Formatter.check("%d", "Ljava/lang/String;"); -+ } catch (Exception e) { -+ Assert.assertTrue(e.getClass()==IllegalFormatConversionException.class); -+ } -+ } -+ -+ public void testNotEnoughParameters(){ -+ try { -+ Formatter.check("%s%s", "Ljava/lang/String;"); -+ } catch (Exception e) { -+ Assert.assertTrue(e.getClass()==MissingFormatArgumentException.class); -+ } -+ } -+ -+ public void testPassingAnArray(){ -+ try { -+ Formatter.check("%s", "[I"); -+ } catch (Exception e) { -+ Assert.assertTrue(e.getClass()==IllegalFormatConversionException.class); -+ } -+ } -+ -+ public void passingAnIntToABoolean(){ -+ try { -+ Formatter.check("%b", "Ljava/lang/Integer;"); -+ } catch (Exception e) { -+ Assert.assertTrue(e.getClass()==IllegalFormatConversionException.class); -+ } -+ } -+ -+ public void testTooManyParameters(){ -+ try { -+ Formatter.check("%s%s", "Ljava/lang/String;", "Ljava/lang/String;", -+ "Ljava/lang/String;"); -+ } catch (Exception e) { -+ Assert.assertTrue(e.getClass()==ExtraFormatArgumentsException.class); -+ } - } - -- @Test -- public void testBug1874856FalsePositive() throws FormatFlagsConversionMismatchException, IllegalFormatException, ExtraFormatArgumentsException, IllegalFormatConversionException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -+ public void testBug1874856FalsePositive(){ - // None of these should yield warnings - Calendar c = new GregorianCalendar(1993, 4, 23); -- Formatter.check("s1 Duke's Birthday: %1$tm %1$te, %1$tY", "Ljava/util/GregorianCalendar;"); -- Formatter.check("s2 Duke's Birthday: %1$tm % parse(String s) throws FormatFlagsConversionMismatchException { -+ private static List parse(String s) throws FormatFlagsConversionMismatchException, FormatterNumberFormatException { - ArrayList al = new ArrayList(); - Matcher m = fsPattern.matcher(s); - int i = 0; -Index: jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterNumberFormatException.java -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterNumberFormatException.java 2013-09-03 22:06:16.781660064 +0800 -@@ -0,0 +1,26 @@ -+package edu.umd.cs.findbugs.formatStringChecker; -+ -+public class FormatterNumberFormatException extends FormatterException { -+ private static final long serialVersionUID = 1L; -+ final String txt, kind; -+ -+ /** -+ * @return the txt -+ */ -+ public String getTxt() { -+ return txt; -+ } -+ -+ /** -+ * @return the msg -+ */ -+ public String getKind() { -+ return kind; -+ } -+ -+ public FormatterNumberFormatException(String txt, String kind) { -+ this.txt = txt; -+ this.kind = kind; -+ -+ } -+} -Index: jformatstring-0.10~20081016/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java -=================================================================== ---- jformatstring-0.10~20081016.orig/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java 2013-09-03 21:59:28.957658728 +0800 -+++ jformatstring-0.10~20081016/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java 2013-09-03 22:04:56.193659799 +0800 -@@ -13,7 +13,7 @@ - public class FormatterCompileTimeTest extends junit.framework.TestCase{ - - public void testShouldWork() throws ExtraFormatArgumentsException, -- IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { -+ IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException, FormatterNumberFormatException { - Formatter.check("%d%n%d", "Ljava/lang/Integer;", "Ljava/lang/Short;"); - - Formatter.check("%d\n", "Ljava/math/BigInteger;"); -@@ -80,7 +80,9 @@ - e.printStackTrace(); - } catch (MissingFormatArgumentException e) { - e.printStackTrace(); -- } -+ } catch (FormatterNumberFormatException e) { -+ e.printStackTrace(); -+ } - } - - public void testBug1874856TruePositive(){ diff -Nru jformatstring-0.10~20081016/debian/patches/series jformatstring-0.10~20131207/debian/patches/series --- jformatstring-0.10~20081016/debian/patches/series 2013-09-03 14:18:40.000000000 +0000 +++ jformatstring-0.10~20131207/debian/patches/series 2013-12-09 13:01:00.000000000 +0000 @@ -1,3 +1 @@ -0001-fix-lib-dir.patch -0002-add-junit4-test.patch -0003-FormatterNumberFormatException.patch +0001-RemoveExternalLibDependencyAndFixTestModule.patch diff -Nru jformatstring-0.10~20081016/debian/rules jformatstring-0.10~20131207/debian/rules --- jformatstring-0.10~20081016/debian/rules 2013-08-30 08:27:22.000000000 +0000 +++ jformatstring-0.10~20131207/debian/rules 2013-12-09 13:04:20.000000000 +0000 @@ -5,16 +5,18 @@ #export DH_VERBOSE=1 %: - dh $@ + dh $@ override_dh_auto_build: ant -f $(CURDIR)/build.xml build override_dh_auto_clean: ant -f $(CURDIR)/build.xml clean + rm -rf build + dh_auto_clean override_dh_install: dh_install --sourcedir=$(CURDIR) -#override_dh_auto_test: -# ant -f $(CURDIR)/build.xml test +override_dh_auto_test: + ant -f $(CURDIR)/build.xml test diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/Conversion.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/Conversion.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/Conversion.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/Conversion.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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; class Conversion { diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/DateTime.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/DateTime.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/DateTime.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/DateTime.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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; class DateTime { @@ -70,6 +75,7 @@ // (Sat Nov 04 12:02:33 EST 1999) static final char DATE = 'D'; // (mm/dd/yy) static final char ISO_STANDARD_DATE = 'F'; // (%Y-%m-%d) + // * static final char LOCALE_DATE = 'x'; // (mm/dd/yy) static boolean isValid(char c) { diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/ExtraFormatArgumentsException.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/ExtraFormatArgumentsException.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/ExtraFormatArgumentsException.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/ExtraFormatArgumentsException.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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; public class ExtraFormatArgumentsException extends FormatterException { @@ -30,8 +35,8 @@ private static final long serialVersionUID = 1L; public final int provided; public final int used; - -public ExtraFormatArgumentsException(int provided, int used) { + + public ExtraFormatArgumentsException(int provided, int used) { this.provided = provided; this.used = used; } diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/Flags.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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; diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatSpecifier.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatSpecifier.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatSpecifier.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatSpecifier.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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.io.Serializable; @@ -48,16 +53,16 @@ private char c; private final String source; - public String toString() { return source; } - private int index(String s) { + + private int index(String s) throws FormatterNumberFormatException { if (s != null) { try { index = Integer.parseInt(s.substring(0, s.length() - 1)); } catch (NumberFormatException x) { - assert (false); + throw new FormatterNumberFormatException(s, "index"); } } else { index = 0; @@ -80,7 +85,7 @@ return f; } - private int width(String s) { + private int width(String s) throws FormatterNumberFormatException { width = -1; if (s != null) { try { @@ -88,13 +93,13 @@ if (width < 0) throw new IllegalFormatWidthException(width); } catch (NumberFormatException x) { - assert (false); + throw new FormatterNumberFormatException(s, "width"); } } return width; } - private int precision(String s) { + private int precision(String s) throws FormatterNumberFormatException { precision = -1; if (s != null) { try { @@ -103,7 +108,7 @@ if (precision < 0) throw new IllegalFormatPrecisionException(precision); } catch (NumberFormatException x) { - assert (false); + throw new FormatterNumberFormatException(s, "precision"); } } return precision; @@ -127,7 +132,9 @@ return c; } - FormatSpecifier(String source, String[] sa) throws FormatFlagsConversionMismatchException { + FormatSpecifier(String source, String[] sa) + throws FormatFlagsConversionMismatchException, + FormatterNumberFormatException { int idx = 0; this.source = source; index(sa[idx++]); @@ -260,7 +267,7 @@ throw new IllegalFormatFlagsException(f.toString()); break; default: - assert false; + throw new UnknownFormatConversionException(String.valueOf(c)); } } @@ -302,7 +309,7 @@ case Conversion.PERCENT_SIGN: break; default: - assert false; + throw new UnknownFormatConversionException(String.valueOf(c)); } } catch (IllegalFormatConversionException e) { e.setArgIndex(argIndex); @@ -355,8 +362,9 @@ throws IllegalFormatConversionException { if (mightBeUnknown(arg)) return; - if (matchSig(arg, Long.class, Date.class, java.sql.Date.class, - Calendar.class, GregorianCalendar.class)) { + if (matchSig(arg, Long.class, Date.class, java.sql.Date.class, + java.sql.Time.class, java.sql.Timestamp.class, Calendar.class, + GregorianCalendar.class)) { } else { failConversion(arg); } @@ -406,8 +414,11 @@ throw new FormatFlagsConversionMismatchException(fs, c); } - private void failConversion(String arg) + private void failConversion(String arg) throws IllegalFormatConversionException { + if (dt) + throw new IllegalFormatConversionException(this.toString(), + f.contains(Flags.UPPERCASE) ? 'T' : 't', arg); throw new IllegalFormatConversionException(this.toString(), c, arg); } diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/Formatter.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/Formatter.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/Formatter.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/Formatter.java 2013-12-09 00:34:10.000000000 +0000 @@ -23,6 +23,13 @@ * 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.ArrayList; @@ -37,7 +44,9 @@ public static void check(String format, String... args) throws ExtraFormatArgumentsException, - IllegalFormatConversionException, IllegalFormatException, FormatFlagsConversionMismatchException, MissingFormatArgumentException { + IllegalFormatConversionException, IllegalFormatException, + FormatFlagsConversionMismatchException, + MissingFormatArgumentException, FormatterNumberFormatException { // index of last argument referenced int last = -1; @@ -55,21 +64,24 @@ break; case -1: // relative index if (last < 0 || last > args.length - 1) - throw new MissingFormatArgumentException(last, fs.toString()); + throw new MissingFormatArgumentException(last, + fs.toString()); fs.print(args[last], last); break; case 0: // ordinary index lasto++; last = lasto; if (lasto > args.length - 1) - throw new MissingFormatArgumentException(lasto, fs.toString()); + throw new MissingFormatArgumentException(lasto, + fs.toString()); maxIndex = Math.max(maxIndex, lasto); fs.print(args[lasto], lasto); break; default: // explicit index last = index - 1; if (last > args.length - 1) - throw new MissingFormatArgumentException(last, fs.toString()); + throw new MissingFormatArgumentException(last, + fs.toString()); maxIndex = Math.max(maxIndex, last); fs.print(args[last], last); break; @@ -87,7 +99,9 @@ private static Pattern fsPattern = Pattern.compile(formatSpecifier); // Look for format specifiers in the format string. - private static List parse(String s) throws FormatFlagsConversionMismatchException { + private static List parse(String s) + throws FormatFlagsConversionMismatchException, + FormatterNumberFormatException { ArrayList al = new ArrayList(); Matcher m = fsPattern.matcher(s); int i = 0; diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterException.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterException.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterException.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterException.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,10 +22,15 @@ * 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; -public class FormatterException extends Exception { +public abstract class FormatterException extends Exception { private static final long serialVersionUID = 1L; diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterNumberFormatException.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterNumberFormatException.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterNumberFormatException.java 1970-01-01 00:00:00.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/FormatterNumberFormatException.java 2013-12-09 00:34:10.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright 2013 by Bill Pugh. + * + * 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. This + * particular file as subject to the "Classpath" exception. + * + * 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. + * + */ + +package edu.umd.cs.findbugs.formatStringChecker; + +public class FormatterNumberFormatException extends FormatterException { + private static final long serialVersionUID = 1L; + final String txt, kind; + + /** + * @return the txt + */ + public String getTxt() { + return txt; + } + + /** + * @return the msg + */ + public String getKind() { + return kind; + } + + public FormatterNumberFormatException(String txt, String kind) { + this.txt = txt; + this.kind = kind; + + } +} diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/IllegalFormatConversionException.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/IllegalFormatConversionException.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/IllegalFormatConversionException.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/IllegalFormatConversionException.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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; public class IllegalFormatConversionException extends FormatterException { @@ -44,29 +49,34 @@ * @param signature * Signature of the mismatched argument */ - public IllegalFormatConversionException(String formatSpecifier, char conversion, String signature) { + public IllegalFormatConversionException(String formatSpecifier, + char conversion, String signature) { if (signature == null) throw new NullPointerException(); - + this.conversion = conversion; this.formatSpecifier = formatSpecifier; this.signature = signature; } public void setArgIndex(int argIndex) { - if (argIndex == -1) throw new IllegalStateException("arg index already set"); + if (argIndex == -1) + throw new IllegalStateException("arg index already set"); this.argIndex = argIndex; } - + public int getArgIndex() { return argIndex; } + public String getFormatSpecifier() { return formatSpecifier; } + public char getConversion() { return conversion; } + /** * Returns the class of the mismatched argument. * diff -Nru jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/MissingFormatArgumentException.java jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/MissingFormatArgumentException.java --- jformatstring-0.10~20081016/src/java/edu/umd/cs/findbugs/formatStringChecker/MissingFormatArgumentException.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/java/edu/umd/cs/findbugs/formatStringChecker/MissingFormatArgumentException.java 2013-12-09 00:34:10.000000000 +0000 @@ -22,7 +22,12 @@ * 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; public class MissingFormatArgumentException extends FormatterException { diff -Nru jformatstring-0.10~20081016/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java jformatstring-0.10~20131207/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java --- jformatstring-0.10~20081016/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java 2013-08-29 23:55:13.000000000 +0000 +++ jformatstring-0.10~20131207/src/junit/edu/umd/cs/findbugs/formatStringChecker/FormatterCompileTimeTest.java 2013-12-09 00:34:10.000000000 +0000 @@ -1,82 +1,110 @@ +/* + * Copyright 2013 by Bill Pugh. + * + * 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. This + * particular file as subject to the "Classpath" exception. + * + * 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. + * + */ package edu.umd.cs.findbugs.formatStringChecker; -import java.util.Calendar; -import java.util.FormatFlagsConversionMismatchException; -import java.util.GregorianCalendar; -import java.util.IllegalFormatException; - - import org.junit.Test; public class FormatterCompileTimeTest { @Test - public void shouldWork() throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { + public void shouldWork() + throws FormatterException { Formatter.check("%d%n%d", "Ljava/lang/Integer;", "Ljava/lang/Short;"); - + Formatter.check("%d\n", "Ljava/math/BigInteger;"); Formatter.check("%f\n", "Ljava/math/BigDecimal;"); } @Test(expected = IllegalFormatConversionException.class) public void stringWhereIntegerExpected() - throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { + throws FormatterException { Formatter.check("%d", "Ljava/lang/String;"); } @Test(expected = MissingFormatArgumentException.class) - public void notEnoughParameters() throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { + public void notEnoughParameters() + throws FormatterException { Formatter.check("%s%s", "Ljava/lang/String;"); } @Test(expected = IllegalFormatConversionException.class) - public void passingAnArray() throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { + public void passingAnArray() + throws FormatterException { Formatter.check("%s", "[I"); } @Test(expected = IllegalFormatConversionException.class) - public void passingAnIntToABoolean() throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { + public void passingAnIntToABoolean() + throws FormatterException { Formatter.check("%b", "Ljava/lang/Integer;"); } - @Test(expected=ExtraFormatArgumentsException.class) - public void tooManyParameters() throws ExtraFormatArgumentsException, - IllegalFormatConversionException, FormatFlagsConversionMismatchException, IllegalFormatException, edu.umd.cs.findbugs.formatStringChecker.MissingFormatArgumentException { + @Test(expected = ExtraFormatArgumentsException.class) + public void tooManyParameters() + throws FormatterException { Formatter.check("%s%s", "Ljava/lang/String;", "Ljava/lang/String;", "Ljava/lang/String;"); } - + + @Test + public void testBug1874856FalsePositive() + throws FormatterException { + Formatter.check("s1 Duke's Birthday: %1$tm %1$te, %1$tY", + "Ljava/util/GregorianCalendar;"); + Formatter.check("s2 Duke's Birthday: %1$tm %