You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/12/25 03:32:56 UTC
[commons-vfs] 06/20: Local changes
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to annotated tag japicmp-base-0.1.0
in repository https://gitbox.apache.org/repos/asf/commons-vfs.git
commit aeb5540b1be5b3ba367702754db8f08297883a34
Author: siom79 <ma...@googlemail.com>
AuthorDate: Thu May 22 23:32:08 2014 +0200
Local changes
---
.gitignore | 16 +-
LICENSE | 382 ++++++++++-----------
README.md~ | 109 ++++++
japicmp-testbase/japicmp-test-v1/pom.xml | 20 +-
.../src/main/java/japicmp/test/Modifier.java | 24 +-
.../src/main/java/japicmp/test/Removed.java | 8 +-
.../src/main/java/japicmp/test/Unchanged.java | 16 +-
.../java/japicmp/test/packageOne/PackageOne.java | 8 +-
.../java/japicmp/test/packageTwo/PackageTwo.java | 8 +-
japicmp-testbase/japicmp-test-v2/pom.xml | 20 +-
.../src/main/java/japicmp/test/Added.java | 8 +-
.../src/main/java/japicmp/test/Modifier.java | 24 +-
.../src/main/java/japicmp/test/Unchanged.java | 16 +-
.../java/japicmp/test/packageOne/PackageOne.java | 8 +-
.../java/japicmp/test/packageTwo/PackageTwo.java | 8 +-
japicmp-testbase/japicmp-test/pom.xml | 144 ++++----
.../src/test/java/japicmp/test/BasicTest.java | 72 ++--
.../src/test/java/japicmp/test/ModifierTest.java | 88 ++---
.../test/java/japicmp/test/PackageFilterTest.java | 192 +++++------
.../src/test/java/japicmp/test/util/Helper.java | 64 ++--
japicmp-testbase/pom.xml | 34 +-
japicmp/pom.xml | 140 ++++----
japicmp/src/main/java/japicmp/JApiCmp.java | 200 +++++------
japicmp/src/main/java/japicmp/cli/CliParser.java | 238 ++++++-------
.../src/main/java/japicmp/cmp/ClassComparator.java | 154 ++++-----
.../main/java/japicmp/cmp/ClassesComparator.java | 130 +++----
.../java/japicmp/cmp/JarArchiveComparator.java | 222 ++++++------
.../japicmp/cmp/JarArchiveComparatorOptions.java | 58 ++--
japicmp/src/main/java/japicmp/config/Options.java | 130 +++----
.../main/java/japicmp/config/PackageFilter.java | 36 +-
.../java/japicmp/exception/JApiCmpException.java | 44 +--
.../main/java/japicmp/model/AccessModifier.java | 30 +-
.../main/java/japicmp/model/JApiChangeStatus.java | 10 +-
japicmp/src/main/java/japicmp/model/JApiClass.java | 206 +++++------
.../src/main/java/japicmp/model/JApiMethod.java | 162 ++++-----
.../src/main/java/japicmp/model/JApiParameter.java | 32 +-
.../java/japicmp/output/OutputTransformer.java | 110 +++---
.../output/stdout/StdoutOutputGenerator.java | 142 ++++----
.../japicmp/output/xml/XmlOutputGenerator.java | 48 +--
.../japicmp/output/xml/model/JApiCmpXmlRoot.java | 86 ++---
.../src/main/java/japicmp/util/ModifierHelper.java | 58 ++--
.../main/java/japicmp/util/SignatureParser.java | 206 +++++------
.../java/japicmp/util/StringArrayEnumeration.java | 54 +--
japicmp/src/main/resources/log4j.properties | 14 +-
.../src/test/java/japicmp/cli/CliParserTest.java | 80 ++---
.../test/java/japicmp/cmp/PackageFilterTest.java | 90 ++---
.../test/java/japicmp/util/ModifierHelperTest.java | 82 ++---
.../java/japicmp/util/SignatureParserTest.java | 198 +++++------
.../japicmp/util/StringArrayEnumerationTest.java | 74 ++--
pom.xml | 320 ++++++++---------
structure101.java.hsp | 281 +++++++++++++++
51 files changed, 2647 insertions(+), 2257 deletions(-)
diff --git a/.gitignore b/.gitignore
index e2e9750..069d52e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,8 @@
-target
-.idea
-httpclient*.jar
-*.iml
-test.xml
-output.xml
-japicmp/guava-10.0.1.jar
-japicmp/guava-14.0.1.jar
+target
+.idea
+httpclient*.jar
+*.iml
+test.xml
+output.xml
+japicmp/guava-10.0.1.jar
+japicmp/guava-14.0.1.jar
diff --git a/LICENSE b/LICENSE
index 37ec93a..805e0da 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,191 +1,191 @@
-Apache License
-Version 2.0, January 2004
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and
-distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the copyright
-owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other entities
-that control, are controlled by, or are under common control with that entity.
-For the purposes of this definition, "control" means (i) the power, direct or
-indirect, to cause the direction or management of such entity, whether by
-contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
-outstanding shares, or (iii) beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising
-permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications, including
-but not limited to software source code, documentation source, and configuration
-files.
-
-"Object" form shall mean any form resulting from mechanical transformation or
-translation of a Source form, including but not limited to compiled object code,
-generated documentation, and conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object form, made
-available under the License, as indicated by a copyright notice that is included
-in or attached to the work (an example is provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object form, that
-is based on (or derived from) the Work and for which the editorial revisions,
-annotations, elaborations, or other modifications represent, as a whole, an
-original work of authorship. For the purposes of this License, Derivative Works
-shall not include works that remain separable from, or merely link (or bind by
-name) to the interfaces of, the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original version
-of the Work and any modifications or additions to that Work or Derivative Works
-thereof, that is intentionally submitted to Licensor for inclusion in the Work
-by the copyright owner or by an individual or Legal Entity authorized to submit
-on behalf of the copyright owner. For the purposes of this definition,
-"submitted" means any form of electronic, verbal, or written communication sent
-to the Licensor or its representatives, including but not limited to
-communication on electronic mailing lists, source code control systems, and
-issue tracking systems that are managed by, or on behalf of, the Licensor for
-the purpose of discussing and improving the Work, but excluding communication
-that is conspicuously marked or otherwise designated in writing by the copyright
-owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
-of whom a Contribution has been received by Licensor and subsequently
-incorporated within the Work.
-
-2. Grant of Copyright License.
-
-Subject to the terms and conditions of this License, each Contributor hereby
-grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
-irrevocable copyright license to reproduce, prepare Derivative Works of,
-publicly display, publicly perform, sublicense, and distribute the Work and such
-Derivative Works in Source or Object form.
-
-3. Grant of Patent License.
-
-Subject to the terms and conditions of this License, each Contributor hereby
-grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
-irrevocable (except as stated in this section) patent license to make, have
-made, use, offer to sell, sell, import, and otherwise transfer the Work, where
-such license applies only to those patent claims licensable by such Contributor
-that are necessarily infringed by their Contribution(s) alone or by combination
-of their Contribution(s) with the Work to which such Contribution(s) was
-submitted. If You institute patent litigation against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that the Work or a
-Contribution incorporated within the Work constitutes direct or contributory
-patent infringement, then any patent licenses granted to You under this License
-for that Work shall terminate as of the date such litigation is filed.
-
-4. Redistribution.
-
-You may reproduce and distribute copies of the Work or Derivative Works thereof
-in any medium, with or without modifications, and in Source or Object form,
-provided that You meet the following conditions:
-
-You must give any other recipients of the Work or Derivative Works a copy of
-this License; and
-You must cause any modified files to carry prominent notices stating that You
-changed the files; and
-You must retain, in the Source form of any Derivative Works that You distribute,
-all copyright, patent, trademark, and attribution notices from the Source form
-of the Work, excluding those notices that do not pertain to any part of the
-Derivative Works; and
-If the Work includes a "NOTICE" text file as part of its distribution, then any
-Derivative Works that You distribute must include a readable copy of the
-attribution notices contained within such NOTICE file, excluding those notices
-that do not pertain to any part of the Derivative Works, in at least one of the
-following places: within a NOTICE text file distributed as part of the
-Derivative Works; within the Source form or documentation, if provided along
-with the Derivative Works; or, within a display generated by the Derivative
-Works, if and wherever such third-party notices normally appear. The contents of
-the NOTICE file are for informational purposes only and do not modify the
-License. You may add Your own attribution notices within Derivative Works that
-You distribute, alongside or as an addendum to the NOTICE text from the Work,
-provided that such additional attribution notices cannot be construed as
-modifying the License.
-You may add Your own copyright statement to Your modifications and may provide
-additional or different license terms and conditions for use, reproduction, or
-distribution of Your modifications, or for any such Derivative Works as a whole,
-provided Your use, reproduction, and distribution of the Work otherwise complies
-with the conditions stated in this License.
-
-5. Submission of Contributions.
-
-Unless You explicitly state otherwise, any Contribution intentionally submitted
-for inclusion in the Work by You to the Licensor shall be under the terms and
-conditions of this License, without any additional terms or conditions.
-Notwithstanding the above, nothing herein shall supersede or modify the terms of
-any separate license agreement you may have executed with Licensor regarding
-such Contributions.
-
-6. Trademarks.
-
-This License does not grant permission to use the trade names, trademarks,
-service marks, or product names of the Licensor, except as required for
-reasonable and customary use in describing the origin of the Work and
-reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty.
-
-Unless required by applicable law or agreed to in writing, Licensor provides the
-Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
-including, without limitation, any warranties or conditions of TITLE,
-NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
-solely responsible for determining the appropriateness of using or
-redistributing the Work and assume any risks associated with Your exercise of
-permissions under this License.
-
-8. Limitation of Liability.
-
-In no event and under no legal theory, whether in tort (including negligence),
-contract, or otherwise, unless required by applicable law (such as deliberate
-and grossly negligent acts) or agreed to in writing, shall any Contributor be
-liable to You for damages, including any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License or
-out of the use or inability to use the Work (including but not limited to
-damages for loss of goodwill, work stoppage, computer failure or malfunction, or
-any and all other commercial damages or losses), even if such Contributor has
-been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability.
-
-While redistributing the Work or Derivative Works thereof, You may choose to
-offer, and charge a fee for, acceptance of support, warranty, indemnity, or
-other liability obligations and/or rights consistent with this License. However,
-in accepting such obligations, You may act only on Your own behalf and on Your
-sole responsibility, not on behalf of any other Contributor, and only if You
-agree to indemnify, defend, and hold each Contributor harmless for any liability
-incurred by, or claims asserted against, such Contributor by reason of your
-accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work
-
-To apply the Apache License to your work, attach the following boilerplate
-notice, with the fields enclosed by brackets "[]" replaced with your own
-identifying information. (Don't include the brackets!) The text should be
-enclosed in the appropriate comment syntax for the file format. We also
-recommend that a file or class name and description of purpose be included on
-the same "printed page" as the copyright notice for easier identification within
-third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and
+distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright
+owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities
+that control, are controlled by, or are under common control with that entity.
+For the purposes of this definition, "control" means (i) the power, direct or
+indirect, to cause the direction or management of such entity, whether by
+contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
+outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and configuration
+files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object code,
+generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made
+available under the License, as indicated by a copyright notice that is included
+in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that
+is based on (or derived from) the Work and for which the editorial revisions,
+annotations, elaborations, or other modifications represent, as a whole, an
+original work of authorship. For the purposes of this License, Derivative Works
+shall not include works that remain separable from, or merely link (or bind by
+name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version
+of the Work and any modifications or additions to that Work or Derivative Works
+thereof, that is intentionally submitted to Licensor for inclusion in the Work
+by the copyright owner or by an individual or Legal Entity authorized to submit
+on behalf of the copyright owner. For the purposes of this definition,
+"submitted" means any form of electronic, verbal, or written communication sent
+to the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control systems, and
+issue tracking systems that are managed by, or on behalf of, the Licensor for
+the purpose of discussing and improving the Work, but excluding communication
+that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
+of whom a Contribution has been received by Licensor and subsequently
+incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby
+grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
+irrevocable (except as stated in this section) patent license to make, have
+made, use, offer to sell, sell, import, and otherwise transfer the Work, where
+such license applies only to those patent claims licensable by such Contributor
+that are necessarily infringed by their Contribution(s) alone or by combination
+of their Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Work or a
+Contribution incorporated within the Work constitutes direct or contributory
+patent infringement, then any patent licenses granted to You under this License
+for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof
+in any medium, with or without modifications, and in Source or Object form,
+provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of
+this License; and
+You must cause any modified files to carry prominent notices stating that You
+changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute,
+all copyright, patent, trademark, and attribution notices from the Source form
+of the Work, excluding those notices that do not pertain to any part of the
+Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any
+Derivative Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those notices
+that do not pertain to any part of the Derivative Works, in at least one of the
+following places: within a NOTICE text file distributed as part of the
+Derivative Works; within the Source form or documentation, if provided along
+with the Derivative Works; or, within a display generated by the Derivative
+Works, if and wherever such third-party notices normally appear. The contents of
+the NOTICE file are for informational purposes only and do not modify the
+License. You may add Your own attribution notices within Derivative Works that
+You distribute, alongside or as an addendum to the NOTICE text from the Work,
+provided that such additional attribution notices cannot be construed as
+modifying the License.
+You may add Your own copyright statement to Your modifications and may provide
+additional or different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works as a whole,
+provided Your use, reproduction, and distribution of the Work otherwise complies
+with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted
+for inclusion in the Work by You to the Licensor shall be under the terms and
+conditions of this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify the terms of
+any separate license agreement you may have executed with Licensor regarding
+such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the Licensor, except as required for
+reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the
+Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
+including, without limitation, any warranties or conditions of TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
+solely responsible for determining the appropriateness of using or
+redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence),
+contract, or otherwise, unless required by applicable law (such as deliberate
+and grossly negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License or
+out of the use or inability to use the Work (including but not limited to
+damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has
+been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to
+offer, and charge a fee for, acceptance of support, warranty, indemnity, or
+other liability obligations and/or rights consistent with this License. However,
+in accepting such obligations, You may act only on Your own behalf and on Your
+sole responsibility, not on behalf of any other Contributor, and only if You
+agree to indemnify, defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason of your
+accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate
+notice, with the fields enclosed by brackets "[]" replaced with your own
+identifying information. (Don't include the brackets!) The text should be
+enclosed in the appropriate comment syntax for the file format. We also
+recommend that a file or class name and description of purpose be included on
+the same "printed page" as the copyright notice for easier identification within
+third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.md~ b/README.md~
new file mode 100644
index 0000000..422f899
--- /dev/null
+++ b/README.md~
@@ -0,0 +1,109 @@
+japicmp
+=======
+
+japicmp is a tool to compare two versions of a jar archive:
+
+ java -jar japicmp-0.0.2.jar -n new-version.jar -o old-version.jar
+
+It can also be used as a library:
+
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator();
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(oldArchive, newArchive);
+
+##Motivation##
+
+Every time you make a new release of a library or a product, you have to tell your clients or customers what
+has changed in comparison to the last release. Without the appropriate tooling, this task is tedious and error-prone.
+This tool/library helps you to determine the differences between the java class files that are contained in the two
+jar archives.
+In contrast to other libraries/tools, this library does not use the Java Reflection API to compute
+the differences, as the usage of the Reflection API makes it necessary to include all classes the jar archive under
+investigation depends on are available on the classpath. To prevent the inclusion of all dependent libraries, which
+can be a lot of work for bigger applications, this library makes use of the [javassist](http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/)
+library to inspect the class files. This way you only have to provide the two jar archives on the command line, that's it.
+
+##Features##
+
+* Comparison of two jar archives without the need to add all of their dependencies to the classpath.
+* Differences are printed on the command line in a simple diff format.
+* Differences can optionally be printed to an xml file. This can be transformed to an HTML file using XSLT.
+* Per default only public classes and class members are compared. If necessary, the access modifier of the classes and class members to be
+ compared can be set to package, protected or private.
+* Per default classes from all packages are compared. If necessary, certain packages can be excluded or only specific packages can be included.
+
+##Usage##
+
+The tool has a set of CLI parameters that are described in the following:
+
+ -h Prints this help.
+ -o <pathToOldVersionJar> Provides the path to the old version of the jar.
+ -n <pathToNewVersionJar> Provides the path to the new version of the jar.
+ -x <pathToXmlOutputFile> Provides the path to the xml output file. If not given, stdout is used.
+ -a <accessModifier> Sets the access modifier level (public, package, protected, private), which should be used.
+ -i <packagesToInclude> Comma separated list of package names to include, * can be used as wildcard.
+ -e <packagesToExclude> Comma separated list of package names to exclude, * can be used as wildcard.
+ -m Outputs only modified classes/methods. If not given, all classes and methods are printed.
+
+###Example###
+
+In the following you see the beginning of the xml output file after having computed the differences between the versions 4.0.1 and 4.2.3 of httpclient:
+
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <japicmp newJar="D:\Programmierung\japicmp\github\japicmp\japicmp\httpclient-4.2.3.jar" oldJar="D:\Programmierung\japicmp\github\japicmp\japicmp\httpclient-4.0.1.jar">
+ <class accessModifierNew="n.a." accessModifierOld="PUBLIC" changeStatus="REMOVED" fullyQualifiedName="org.apache.http.annotation.GuardedBy" type="ANNOTATION">
+ <method accessModifierNew="n.a." accessModifierOld="PUBLIC" changeStatus="REMOVED" name="value" returnType="java.lang.String"/>
+ </class>
+ <class accessModifierNew="n.a." accessModifierOld="PUBLIC" changeStatus="REMOVED" fullyQualifiedName="org.apache.http.annotation.Immutable" type="ANNOTATION"/>
+ <class accessModifierNew="n.a." accessModifierOld="PUBLIC" changeStatus="REMOVED" fullyQualifiedName="org.apache.http.annotation.NotThreadSafe" type="ANNOTATION"/>
+ <class accessModifierNew="n.a." accessModifierOld="PUBLIC" changeStatus="REMOVED" fullyQualifiedName="org.apache.http.annotation.ThreadSafe" type="ANNOTATION"/>
+ <class accessModifierNew="PUBLIC" accessModifierOld="PUBLIC" changeStatus="UNCHANGED" fullyQualifiedName="org.apache.http.auth.AUTH" type="CLASS"/>
+ <class accessModifierNew="PUBLIC" accessModifierOld="PUBLIC" changeStatus="UNCHANGED" fullyQualifiedName="org.apache.http.auth.AuthenticationException" type="CLASS"/>
+ <class accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" fullyQualifiedName="org.apache.http.auth.AuthOption" type="CLASS">
+ <method accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" name="getAuthScheme" returnType="org.apache.http.auth.AuthScheme"/>
+ <method accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" name="getCredentials" returnType="org.apache.http.auth.Credentials"/>
+ <method accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" name="toString" returnType="java.lang.String"/>
+ </class>
+ <class accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" fullyQualifiedName="org.apache.http.auth.AuthProtocolState" type="ENUM">
+ <method accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" name="valueOf" returnType="org.apache.http.auth.AuthProtocolState">
+ <parameter type="java.lang.String"/>
+ </method>
+ <method accessModifierNew="PUBLIC" accessModifierOld="n.a." changeStatus="NEW" name="values" returnType="org.apache.http.auth.AuthProtocolState[]"/>
+ </class>
+ ...
+
+The differences between the two Java APIs are also printed on the command line for a quick overview:
+
+ --- REMOVED ANNOTATION org.apache.http.annotation.GuardedBy
+ --- REMOVED METHOD value()
+ --- REMOVED ANNOTATION org.apache.http.annotation.Immutable
+ --- REMOVED ANNOTATION org.apache.http.annotation.NotThreadSafe
+ --- REMOVED ANNOTATION org.apache.http.annotation.ThreadSafe
+ === UNCHANGED CLASS org.apache.http.auth.AUTH
+ === UNCHANGED CLASS org.apache.http.auth.AuthenticationException
+ +++ NEW CLASS org.apache.http.auth.AuthOption
+ +++ NEW METHOD getAuthScheme()
+ +++ NEW METHOD getCredentials()
+ +++ NEW METHOD toString()
+ +++ NEW ENUM org.apache.http.auth.AuthProtocolState
+ +++ NEW METHOD valueOf(java.lang.String)
+ +++ NEW METHOD values()
+
+##Downloads##
+
+The following releases are available:
+
+* [Version 0.0.2](https://github.com/siom79/japicmp/releases/tag/japicmp-base-0.0.2)
+ * Changes:
+ * [Command-line option to filter packages](https://github.com/siom79/japicmp/issues/1)
+ * [CLI option for comparing public, package, protected or private classes/class members](https://github.com/siom79/japicmp/issues/2)
+ * ["No differences" output when comparing the same file](https://github.com/siom79/japicmp/issues/4)
+ * [Giving a non-jar file as argument should not output "Comparing..."](https://github.com/siom79/japicmp/issues/5)
+* [Version 0.0.1](http://repository-siom79.forge.cloudbees.com/release/japicmp/japicmp/0.0.1/japicmp-0.0.1.jar)
+
+The latest snapshot version can be downloaded here: [japicmp-SNAPSHOT](http://repository-siom79.forge.cloudbees.com/snapshot/japicmp/japicmp/)
+
+##Development##
+
+* [Jenkins build server](https://siom79.ci.cloudbees.com/job/japicmp)
+* [Maven snapshot repository](https://repository-siom79.forge.cloudbees.com/snapshot)
+* [Maven release repository](https://repository-siom79.forge.cloudbees.com/release)
diff --git a/japicmp-testbase/japicmp-test-v1/pom.xml b/japicmp-testbase/japicmp-test-v1/pom.xml
index e0cab16..029fe36 100644
--- a/japicmp-testbase/japicmp-test-v1/pom.xml
+++ b/japicmp-testbase/japicmp-test-v1/pom.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-testbase</artifactId>
- <version>0.0.3-SNAPSHOT</version>
- </parent>
-
- <artifactId>japicmp-test-v1</artifactId>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-testbase</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>japicmp-test-v1</artifactId>
</project>
\ No newline at end of file
diff --git a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Modifier.java b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Modifier.java
index b53a7bf..0bd10f4 100644
--- a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Modifier.java
+++ b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Modifier.java
@@ -1,12 +1,12 @@
-package japicmp.test;
-
-public class Modifier {
-
- public void publicToPrivateMethod() {
-
- }
-
- public static class ModifierPublicToProtected {
-
- }
-}
+package japicmp.test;
+
+public class Modifier {
+
+ public void publicToPrivateMethod() {
+
+ }
+
+ public static class ModifierPublicToProtected {
+
+ }
+}
diff --git a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Removed.java b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Removed.java
index 6ddead3..9ddd8da 100644
--- a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Removed.java
+++ b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Removed.java
@@ -1,4 +1,4 @@
-package japicmp.test;
-
-public class Removed {
-}
+package japicmp.test;
+
+public class Removed {
+}
diff --git a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Unchanged.java b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Unchanged.java
index d499de8..86d69a9 100644
--- a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Unchanged.java
+++ b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/Unchanged.java
@@ -1,8 +1,8 @@
-package japicmp.test;
-
-public class Unchanged {
-
- public void unchangedMethod(String str) {
- System.out.println(str);
- }
-}
+package japicmp.test;
+
+public class Unchanged {
+
+ public void unchangedMethod(String str) {
+ System.out.println(str);
+ }
+}
diff --git a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageOne/PackageOne.java b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageOne/PackageOne.java
index de59dc7..94e4eb3 100644
--- a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageOne/PackageOne.java
+++ b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageOne/PackageOne.java
@@ -1,4 +1,4 @@
-package japicmp.test.packageOne;
-
-public class PackageOne {
-}
+package japicmp.test.packageOne;
+
+public class PackageOne {
+}
diff --git a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageTwo/PackageTwo.java b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageTwo/PackageTwo.java
index 1ac7fef..372f19b 100644
--- a/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageTwo/PackageTwo.java
+++ b/japicmp-testbase/japicmp-test-v1/src/main/java/japicmp/test/packageTwo/PackageTwo.java
@@ -1,4 +1,4 @@
-package japicmp.test.packageTwo;
-
-public class PackageTwo {
-}
+package japicmp.test.packageTwo;
+
+public class PackageTwo {
+}
diff --git a/japicmp-testbase/japicmp-test-v2/pom.xml b/japicmp-testbase/japicmp-test-v2/pom.xml
index 6e22b3c..c1c68f4 100644
--- a/japicmp-testbase/japicmp-test-v2/pom.xml
+++ b/japicmp-testbase/japicmp-test-v2/pom.xml
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-testbase</artifactId>
- <version>0.0.3-SNAPSHOT</version>
- </parent>
-
- <artifactId>japicmp-test-v2</artifactId>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-testbase</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>japicmp-test-v2</artifactId>
</project>
\ No newline at end of file
diff --git a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Added.java b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Added.java
index 7c0398c..6f72a8f 100644
--- a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Added.java
+++ b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Added.java
@@ -1,4 +1,4 @@
-package japicmp.test;
-
-public class Added {
-}
+package japicmp.test;
+
+public class Added {
+}
diff --git a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Modifier.java b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Modifier.java
index 65bf223..81b11d8 100644
--- a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Modifier.java
+++ b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Modifier.java
@@ -1,12 +1,12 @@
-package japicmp.test;
-
-public class Modifier {
-
- private void publicToPrivateMethod() {
-
- }
-
- private static class ModifierPublicToProtected {
-
- }
-}
+package japicmp.test;
+
+public class Modifier {
+
+ private void publicToPrivateMethod() {
+
+ }
+
+ private static class ModifierPublicToProtected {
+
+ }
+}
diff --git a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Unchanged.java b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Unchanged.java
index d499de8..86d69a9 100644
--- a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Unchanged.java
+++ b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/Unchanged.java
@@ -1,8 +1,8 @@
-package japicmp.test;
-
-public class Unchanged {
-
- public void unchangedMethod(String str) {
- System.out.println(str);
- }
-}
+package japicmp.test;
+
+public class Unchanged {
+
+ public void unchangedMethod(String str) {
+ System.out.println(str);
+ }
+}
diff --git a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageOne/PackageOne.java b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageOne/PackageOne.java
index de59dc7..94e4eb3 100644
--- a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageOne/PackageOne.java
+++ b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageOne/PackageOne.java
@@ -1,4 +1,4 @@
-package japicmp.test.packageOne;
-
-public class PackageOne {
-}
+package japicmp.test.packageOne;
+
+public class PackageOne {
+}
diff --git a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageTwo/PackageTwo.java b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageTwo/PackageTwo.java
index 1ac7fef..372f19b 100644
--- a/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageTwo/PackageTwo.java
+++ b/japicmp-testbase/japicmp-test-v2/src/main/java/japicmp/test/packageTwo/PackageTwo.java
@@ -1,4 +1,4 @@
-package japicmp.test.packageTwo;
-
-public class PackageTwo {
-}
+package japicmp.test.packageTwo;
+
+public class PackageTwo {
+}
diff --git a/japicmp-testbase/japicmp-test/pom.xml b/japicmp-testbase/japicmp-test/pom.xml
index dcde855..6272d52 100644
--- a/japicmp-testbase/japicmp-test/pom.xml
+++ b/japicmp-testbase/japicmp-test/pom.xml
@@ -1,73 +1,73 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-testbase</artifactId>
- <version>0.0.3-SNAPSHOT</version>
- </parent>
-
- <artifactId>japicmp-test</artifactId>
-
- <dependencies>
- <dependency>
- <groupId>japicmp</groupId>
- <artifactId>japicmp</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-test-v1</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-test-v2</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <version>2.8</version>
- <executions>
- <execution>
- <id>copy</id>
- <phase>process-test-resources</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <artifactItems>
- <artifactItem>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-test-v1</artifactId>
- <version>${project.version}</version>
- <overWrite>true</overWrite>
- <outputDirectory>${project.build.directory}</outputDirectory>
- <destFileName>japicmp-test-v1.jar</destFileName>
- </artifactItem>
- <artifactItem>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-test-v2</artifactId>
- <version>${project.version}</version>
- <overWrite>true</overWrite>
- <outputDirectory>${project.build.directory}</outputDirectory>
- <destFileName>japicmp-test-v2.jar</destFileName>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-testbase</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>japicmp-test</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-test-v1</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-test-v2</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.8</version>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-test-v1</artifactId>
+ <version>${project.version}</version>
+ <overWrite>true</overWrite>
+ <outputDirectory>${project.build.directory}</outputDirectory>
+ <destFileName>japicmp-test-v1.jar</destFileName>
+ </artifactItem>
+ <artifactItem>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-test-v2</artifactId>
+ <version>${project.version}</version>
+ <overWrite>true</overWrite>
+ <outputDirectory>${project.build.directory}</outputDirectory>
+ <destFileName>japicmp-test-v2.jar</destFileName>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
</project>
\ No newline at end of file
diff --git a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/BasicTest.java b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/BasicTest.java
index 11d69a3..36b056e 100644
--- a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/BasicTest.java
+++ b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/BasicTest.java
@@ -1,36 +1,36 @@
-package japicmp.test;
-
-import japicmp.cmp.JarArchiveComparator;
-import japicmp.cmp.JarArchiveComparatorOptions;
-import japicmp.model.JApiChangeStatus;
-import japicmp.model.JApiClass;
-import org.junit.Test;
-
-import java.util.List;
-
-import static japicmp.test.util.Helper.getArchive;
-import static japicmp.test.util.Helper.getJApiClass;
-import static japicmp.test.util.Helper.getJApiMethod;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-public class BasicTest {
-
- @Test
- public void test() {
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(new JarArchiveComparatorOptions());
- List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- assertThat(jApiClasses.size(), is(7));
- JApiClass jApiClassRemoved = getJApiClass(jApiClasses, Removed.class.getName());
- JApiClass jApiClassAdded = getJApiClass(jApiClasses, Added.class.getName());
- JApiClass jApiClassUnchanged = getJApiClass(jApiClasses, Unchanged.class.getName());
- assertThat(jApiClassRemoved, is(notNullValue()));
- assertThat(jApiClassAdded, is(notNullValue()));
- assertThat(jApiClassUnchanged, is(notNullValue()));
- assertThat(jApiClassRemoved.getChangeStatus(), is(JApiChangeStatus.REMOVED));
- assertThat(jApiClassAdded.getChangeStatus(), is(JApiChangeStatus.NEW));
- assertThat(jApiClassUnchanged.getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
- assertThat(getJApiMethod(jApiClassUnchanged.getMethods(), "unchangedMethod"), is(notNullValue()));
- }
-}
+package japicmp.test;
+
+import japicmp.cmp.JarArchiveComparator;
+import japicmp.cmp.JarArchiveComparatorOptions;
+import japicmp.model.JApiChangeStatus;
+import japicmp.model.JApiClass;
+import org.junit.Test;
+
+import java.util.List;
+
+import static japicmp.test.util.Helper.getArchive;
+import static japicmp.test.util.Helper.getJApiClass;
+import static japicmp.test.util.Helper.getJApiMethod;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public class BasicTest {
+
+ @Test
+ public void test() {
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(new JarArchiveComparatorOptions());
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ assertThat(jApiClasses.size(), is(7));
+ JApiClass jApiClassRemoved = getJApiClass(jApiClasses, Removed.class.getName());
+ JApiClass jApiClassAdded = getJApiClass(jApiClasses, Added.class.getName());
+ JApiClass jApiClassUnchanged = getJApiClass(jApiClasses, Unchanged.class.getName());
+ assertThat(jApiClassRemoved, is(notNullValue()));
+ assertThat(jApiClassAdded, is(notNullValue()));
+ assertThat(jApiClassUnchanged, is(notNullValue()));
+ assertThat(jApiClassRemoved.getChangeStatus(), is(JApiChangeStatus.REMOVED));
+ assertThat(jApiClassAdded.getChangeStatus(), is(JApiChangeStatus.NEW));
+ assertThat(jApiClassUnchanged.getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
+ assertThat(getJApiMethod(jApiClassUnchanged.getMethods(), "unchangedMethod"), is(notNullValue()));
+ }
+}
diff --git a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/ModifierTest.java b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/ModifierTest.java
index 2cd6a5e..339cc7b 100644
--- a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/ModifierTest.java
+++ b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/ModifierTest.java
@@ -1,44 +1,44 @@
-package japicmp.test;
-
-import japicmp.model.AccessModifier;
-import japicmp.cmp.JarArchiveComparator;
-import japicmp.cmp.JarArchiveComparatorOptions;
-import japicmp.model.JApiChangeStatus;
-import japicmp.model.JApiClass;
-import japicmp.test.util.Helper;
-import org.junit.Test;
-
-import java.util.List;
-
-import static japicmp.test.util.Helper.getArchive;
-import static japicmp.test.util.Helper.getJApiClass;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-public class ModifierTest {
-
- @Test
- public void testOptionPublicModifier() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.setModifierLevel(AccessModifier.PUBLIC);
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- JApiClass modifierInnerClass = getJApiClass(jApiClasses, Modifier.ModifierPublicToProtected.class.getName());
- JApiClass modifierClass = getJApiClass(jApiClasses, Modifier.class.getName());
- assertThat(modifierInnerClass.getChangeStatus(), is(JApiChangeStatus.REMOVED));
- assertThat(Helper.getJApiMethod(modifierClass.getMethods(), "publicToPrivateMethod").getChangeStatus(), is(JApiChangeStatus.REMOVED));
- }
-
- @Test
- public void testOptionPrivateModifier() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.setModifierLevel(AccessModifier.PRIVATE);
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- JApiClass modifierInnerClass = getJApiClass(jApiClasses, Modifier.ModifierPublicToProtected.class.getName());
- JApiClass modifierClass = getJApiClass(jApiClasses, Modifier.class.getName());
- assertThat(modifierInnerClass.getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
- assertThat(Helper.getJApiMethod(modifierClass.getMethods(), "publicToPrivateMethod").getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
- }
-}
+package japicmp.test;
+
+import japicmp.model.AccessModifier;
+import japicmp.cmp.JarArchiveComparator;
+import japicmp.cmp.JarArchiveComparatorOptions;
+import japicmp.model.JApiChangeStatus;
+import japicmp.model.JApiClass;
+import japicmp.test.util.Helper;
+import org.junit.Test;
+
+import java.util.List;
+
+import static japicmp.test.util.Helper.getArchive;
+import static japicmp.test.util.Helper.getJApiClass;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public class ModifierTest {
+
+ @Test
+ public void testOptionPublicModifier() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.setModifierLevel(AccessModifier.PUBLIC);
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ JApiClass modifierInnerClass = getJApiClass(jApiClasses, Modifier.ModifierPublicToProtected.class.getName());
+ JApiClass modifierClass = getJApiClass(jApiClasses, Modifier.class.getName());
+ assertThat(modifierInnerClass.getChangeStatus(), is(JApiChangeStatus.REMOVED));
+ assertThat(Helper.getJApiMethod(modifierClass.getMethods(), "publicToPrivateMethod").getChangeStatus(), is(JApiChangeStatus.REMOVED));
+ }
+
+ @Test
+ public void testOptionPrivateModifier() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.setModifierLevel(AccessModifier.PRIVATE);
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ JApiClass modifierInnerClass = getJApiClass(jApiClasses, Modifier.ModifierPublicToProtected.class.getName());
+ JApiClass modifierClass = getJApiClass(jApiClasses, Modifier.class.getName());
+ assertThat(modifierInnerClass.getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
+ assertThat(Helper.getJApiMethod(modifierClass.getMethods(), "publicToPrivateMethod").getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
+ }
+}
diff --git a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/PackageFilterTest.java b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/PackageFilterTest.java
index f86f856..875f94d 100644
--- a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/PackageFilterTest.java
+++ b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/PackageFilterTest.java
@@ -1,96 +1,96 @@
-package japicmp.test;
-
-import japicmp.cmp.JarArchiveComparator;
-import japicmp.cmp.JarArchiveComparatorOptions;
-import japicmp.config.PackageFilter;
-import japicmp.model.JApiClass;
-import japicmp.test.packageOne.PackageOne;
-import japicmp.test.packageTwo.PackageTwo;
-import org.junit.Test;
-
-import java.util.List;
-
-import static japicmp.test.util.Helper.getArchive;
-import static japicmp.test.util.Helper.getJApiClass;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-public class PackageFilterTest {
-
- @Test
- public void onlyIncludeOnePackage() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.getPackagesInclude().add(new PackageFilter("japicmp.test.packageOne"));
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- getJApiClass(jApiClasses, PackageOne.class.getName());
- assertThat(jApiClasses.size(), is(1));
- }
-
- @Test
- public void onlyIncludeTwoPackages() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.getPackagesInclude().add(new PackageFilter("japicmp.test.packageOne"));
- options.getPackagesInclude().add(new PackageFilter("japicmp.test.packageTwo"));
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- getJApiClass(jApiClasses, PackageOne.class.getName());
- getJApiClass(jApiClasses, PackageTwo.class.getName());
- assertThat(jApiClasses.size(), is(2));
- }
-
- @Test
- public void onlyExcludeOnePackage() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.getPackagesExclude().add(new PackageFilter("japicmp.test.packageOne"));
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- assertThatExceptionIsThrown(new Callback() {
- public void callback() {
- getJApiClass(jApiClasses, PackageOne.class.getName());
- }
- });
- }
-
- @Test
- public void excludePackageJapicmpTest() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.getPackagesExclude().add(new PackageFilter("japicmp.test"));
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- assertThat(jApiClasses.size(), is(0));
- }
-
- @Test
- public void includePackageJapicmpTest() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.getPackagesInclude().add(new PackageFilter("japicmp.test"));
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- assertThat(getJApiClass(jApiClasses, PackageOne.class.getName()), is(notNullValue()));
- }
-
- @Test
- public void includePackageOneWithWildcard() {
- JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
- options.getPackagesInclude().add(new PackageFilter("japicmp.*.packageOne"));
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
- final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
- assertThat(getJApiClass(jApiClasses, PackageOne.class.getName()), is(notNullValue()));
- }
-
- private interface Callback {
- void callback();
- }
-
- private void assertThatExceptionIsThrown(Callback callback) {
- boolean exception = false;
- try {
- callback.callback();
- } catch (Exception e) {
- exception = true;
- }
- assertThat(exception, is(true));
- }
-}
+package japicmp.test;
+
+import japicmp.cmp.JarArchiveComparator;
+import japicmp.cmp.JarArchiveComparatorOptions;
+import japicmp.config.PackageFilter;
+import japicmp.model.JApiClass;
+import japicmp.test.packageOne.PackageOne;
+import japicmp.test.packageTwo.PackageTwo;
+import org.junit.Test;
+
+import java.util.List;
+
+import static japicmp.test.util.Helper.getArchive;
+import static japicmp.test.util.Helper.getJApiClass;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+public class PackageFilterTest {
+
+ @Test
+ public void onlyIncludeOnePackage() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.getPackagesInclude().add(new PackageFilter("japicmp.test.packageOne"));
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ getJApiClass(jApiClasses, PackageOne.class.getName());
+ assertThat(jApiClasses.size(), is(1));
+ }
+
+ @Test
+ public void onlyIncludeTwoPackages() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.getPackagesInclude().add(new PackageFilter("japicmp.test.packageOne"));
+ options.getPackagesInclude().add(new PackageFilter("japicmp.test.packageTwo"));
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ getJApiClass(jApiClasses, PackageOne.class.getName());
+ getJApiClass(jApiClasses, PackageTwo.class.getName());
+ assertThat(jApiClasses.size(), is(2));
+ }
+
+ @Test
+ public void onlyExcludeOnePackage() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.getPackagesExclude().add(new PackageFilter("japicmp.test.packageOne"));
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ assertThatExceptionIsThrown(new Callback() {
+ public void callback() {
+ getJApiClass(jApiClasses, PackageOne.class.getName());
+ }
+ });
+ }
+
+ @Test
+ public void excludePackageJapicmpTest() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.getPackagesExclude().add(new PackageFilter("japicmp.test"));
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ assertThat(jApiClasses.size(), is(0));
+ }
+
+ @Test
+ public void includePackageJapicmpTest() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.getPackagesInclude().add(new PackageFilter("japicmp.test"));
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ assertThat(getJApiClass(jApiClasses, PackageOne.class.getName()), is(notNullValue()));
+ }
+
+ @Test
+ public void includePackageOneWithWildcard() {
+ JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
+ options.getPackagesInclude().add(new PackageFilter("japicmp.*.packageOne"));
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
+ final List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
+ assertThat(getJApiClass(jApiClasses, PackageOne.class.getName()), is(notNullValue()));
+ }
+
+ private interface Callback {
+ void callback();
+ }
+
+ private void assertThatExceptionIsThrown(Callback callback) {
+ boolean exception = false;
+ try {
+ callback.callback();
+ } catch (Exception e) {
+ exception = true;
+ }
+ assertThat(exception, is(true));
+ }
+}
diff --git a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/util/Helper.java b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/util/Helper.java
index c98da86..8206dd7 100644
--- a/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/util/Helper.java
+++ b/japicmp-testbase/japicmp-test/src/test/java/japicmp/test/util/Helper.java
@@ -1,32 +1,32 @@
-package japicmp.test.util;
-
-import japicmp.model.JApiClass;
-import japicmp.model.JApiMethod;
-
-import java.io.File;
-import java.util.List;
-
-public class Helper {
-
- public static File getArchive(String filename) {
- return new File("target" + File.separator + filename);
- }
-
- public static JApiClass getJApiClass(List<JApiClass> jApiClasses, String fqn) {
- for (JApiClass jApiClass : jApiClasses) {
- if (jApiClass.getFullyQualifiedName().equals(fqn)) {
- return jApiClass;
- }
- }
- throw new IllegalArgumentException("No class found with name " + fqn + ".");
- }
-
- public static JApiMethod getJApiMethod(List<JApiMethod> jApiMethods, String name) {
- for(JApiMethod jApiMethod : jApiMethods) {
- if(jApiMethod.getName().equals(name)) {
- return jApiMethod;
- }
- }
- throw new IllegalArgumentException("No method found with name " + name + ".");
- }
-}
+package japicmp.test.util;
+
+import japicmp.model.JApiClass;
+import japicmp.model.JApiMethod;
+
+import java.io.File;
+import java.util.List;
+
+public class Helper {
+
+ public static File getArchive(String filename) {
+ return new File("target" + File.separator + filename);
+ }
+
+ public static JApiClass getJApiClass(List<JApiClass> jApiClasses, String fqn) {
+ for (JApiClass jApiClass : jApiClasses) {
+ if (jApiClass.getFullyQualifiedName().equals(fqn)) {
+ return jApiClass;
+ }
+ }
+ throw new IllegalArgumentException("No class found with name " + fqn + ".");
+ }
+
+ public static JApiMethod getJApiMethod(List<JApiMethod> jApiMethods, String name) {
+ for(JApiMethod jApiMethod : jApiMethods) {
+ if(jApiMethod.getName().equals(name)) {
+ return jApiMethod;
+ }
+ }
+ throw new IllegalArgumentException("No method found with name " + name + ".");
+ }
+}
diff --git a/japicmp-testbase/pom.xml b/japicmp-testbase/pom.xml
index f983041..3ade9b0 100644
--- a/japicmp-testbase/pom.xml
+++ b/japicmp-testbase/pom.xml
@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-base</artifactId>
- <version>0.0.3-SNAPSHOT</version>
- </parent>
-
- <artifactId>japicmp-testbase</artifactId>
- <packaging>pom</packaging>
-
- <modules>
- <module>japicmp-test-v1</module>
- <module>japicmp-test-v2</module>
- <module>japicmp-test</module>
- </modules>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-base</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>japicmp-testbase</artifactId>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>japicmp-test-v1</module>
+ <module>japicmp-test-v2</module>
+ <module>japicmp-test</module>
+ </modules>
</project>
\ No newline at end of file
diff --git a/japicmp/pom.xml b/japicmp/pom.xml
index 35c8867..0d78636 100644
--- a/japicmp/pom.xml
+++ b/japicmp/pom.xml
@@ -1,71 +1,71 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>japicmp</groupId>
- <artifactId>japicmp-base</artifactId>
- <version>0.0.3-SNAPSHOT</version>
- </parent>
-
- <artifactId>japicmp</artifactId>
-
- <dependencies>
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.12.1.GA</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>14.0.1</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- </plugin>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <mainClass>japicmp.JApiCmp</mainClass>
- </manifest>
- </archive>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- <finalName>${project.artifactId}-${project.version}</finalName>
- <appendAssemblyId>false</appendAssemblyId>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>findbugs-maven-plugin</artifactId>
- <version>2.5.2</version>
- <configuration>
- <xmlOutput>true</xmlOutput>
- <xmlOutputDirectory>target/site</xmlOutputDirectory>
- </configuration>
- </plugin>
- </plugins>
- </build>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-base</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>japicmp</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.12.1.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.17</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>14.0.1</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>japicmp.JApiCmp</mainClass>
+ </manifest>
+ </archive>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ <finalName>${project.artifactId}-${project.version}</finalName>
+ <appendAssemblyId>false</appendAssemblyId>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>2.5.2</version>
+ <configuration>
+ <xmlOutput>true</xmlOutput>
+ <xmlOutputDirectory>target/site</xmlOutputDirectory>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
\ No newline at end of file
diff --git a/japicmp/src/main/java/japicmp/JApiCmp.java b/japicmp/src/main/java/japicmp/JApiCmp.java
index bcb684d..cf940eb 100644
--- a/japicmp/src/main/java/japicmp/JApiCmp.java
+++ b/japicmp/src/main/java/japicmp/JApiCmp.java
@@ -1,100 +1,100 @@
-package japicmp;
-
-import japicmp.cli.CliParser;
-import japicmp.cmp.JarArchiveComparator;
-import japicmp.cmp.JarArchiveComparatorOptions;
-import japicmp.config.Options;
-import japicmp.exception.JApiCmpException;
-import japicmp.model.JApiClass;
-import japicmp.output.OutputTransformer;
-import japicmp.output.stdout.StdoutOutputGenerator;
-import japicmp.output.xml.XmlOutputGenerator;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.jar.JarFile;
-
-public class JApiCmp {
-
- public static void main(String[] args) {
- try {
- JApiCmp app = new JApiCmp();
- app.run(args);
- } catch (JApiCmpException e) {
- if (e.getReason() != JApiCmpException.Reason.NormalTermination) {
- System.err.println(e.getMessage());
- System.exit(-1);
- }
- } catch (Exception e) {
- System.err.println(String.format("Execution of %s failed: %s", JApiCmp.class.getSimpleName(), e.getMessage()));
- System.exit(-2);
- }
- }
-
- private void run(String[] args) {
- Options options = parseCliOptions(args);
- File oldArchive = new File(options.getOldArchive());
- File newArchive = new File(options.getNewArchive());
- verifyFiles(oldArchive, newArchive);
- JarArchiveComparatorOptions comparatorOptions = new JarArchiveComparatorOptions();
- copyOptions(options, comparatorOptions);
- JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(comparatorOptions);
- List<JApiClass> jApiClasses = jarArchiveComparator.compare(oldArchive, newArchive);
- generateOutput(options, oldArchive, newArchive, jApiClasses);
- }
-
- private void copyOptions(Options options, JarArchiveComparatorOptions comparatorOptions) {
- comparatorOptions.setModifierLevel(options.getAccessModifier());
- comparatorOptions.getPackagesInclude().addAll(options.getPackagesInclude());
- comparatorOptions.getPackagesExclude().addAll(options.getPackagesExclude());
- }
-
- private void generateOutput(Options options, File oldArchive, File newArchive, List<JApiClass> jApiClasses) {
- OutputTransformer.sortClassesAndMethods(jApiClasses);
- if (options.getXmlOutputFile().isPresent()) {
- XmlOutputGenerator xmlGenerator = new XmlOutputGenerator();
- xmlGenerator.generate(oldArchive, newArchive, jApiClasses, options);
- }
- StdoutOutputGenerator stdoutOutputGenerator = new StdoutOutputGenerator();
- String output = stdoutOutputGenerator.generate(oldArchive, newArchive, jApiClasses, options);
- System.out.println(output);
- }
-
- private Options parseCliOptions(String[] args) {
- try {
- CliParser cliParser = new CliParser();
- return cliParser.parse(args);
- } catch (IllegalArgumentException e) {
- throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, e.getMessage());
- } catch (Exception e) {
- throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, "Failed to parse command line options: " + e.getMessage());
- }
- }
-
- private void verifyFiles(File oldArchive, File newArchive) {
- if (!oldArchive.exists()) {
- String msg = String.format("File '%s' does not exist.", oldArchive.getAbsolutePath());
- throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
- }
- if (!newArchive.exists()) {
- String msg = String.format("File '%s' does not exist.", newArchive.getAbsolutePath());
- throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
- }
- if(oldArchive.equals(newArchive)) {
- String msg = String.format("Files '%s' and '%s' are the same.", oldArchive.getAbsolutePath(), newArchive.getAbsolutePath());
- throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
- }
- verifyJarArchive(oldArchive);
- verifyJarArchive(newArchive);
- }
-
- private void verifyJarArchive(File file) {
- try {
- new JarFile(file);
- } catch (IOException e) {
- String msg = String.format("File '%s' could not be opened as a jar file: %s", file.getAbsolutePath(), e.getMessage());
- throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
- }
- }
-}
+package japicmp;
+
+import japicmp.cli.CliParser;
+import japicmp.cmp.JarArchiveComparator;
+import japicmp.cmp.JarArchiveComparatorOptions;
+import japicmp.config.Options;
+import japicmp.exception.JApiCmpException;
+import japicmp.model.JApiClass;
+import japicmp.output.OutputTransformer;
+import japicmp.output.stdout.StdoutOutputGenerator;
+import japicmp.output.xml.XmlOutputGenerator;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.jar.JarFile;
+
+public class JApiCmp {
+
+ public static void main(String[] args) {
+ try {
+ JApiCmp app = new JApiCmp();
+ app.run(args);
+ } catch (JApiCmpException e) {
+ if (e.getReason() != JApiCmpException.Reason.NormalTermination) {
+ System.err.println(e.getMessage());
+ System.exit(-1);
+ }
+ } catch (Exception e) {
+ System.err.println(String.format("Execution of %s failed: %s", JApiCmp.class.getSimpleName(), e.getMessage()));
+ System.exit(-2);
+ }
+ }
+
+ private void run(String[] args) {
+ Options options = parseCliOptions(args);
+ File oldArchive = new File(options.getOldArchive());
+ File newArchive = new File(options.getNewArchive());
+ verifyFiles(oldArchive, newArchive);
+ JarArchiveComparatorOptions comparatorOptions = new JarArchiveComparatorOptions();
+ copyOptions(options, comparatorOptions);
+ JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(comparatorOptions);
+ List<JApiClass> jApiClasses = jarArchiveComparator.compare(oldArchive, newArchive);
+ generateOutput(options, oldArchive, newArchive, jApiClasses);
+ }
+
+ private void copyOptions(Options options, JarArchiveComparatorOptions comparatorOptions) {
+ comparatorOptions.setModifierLevel(options.getAccessModifier());
+ comparatorOptions.getPackagesInclude().addAll(options.getPackagesInclude());
+ comparatorOptions.getPackagesExclude().addAll(options.getPackagesExclude());
+ }
+
+ private void generateOutput(Options options, File oldArchive, File newArchive, List<JApiClass> jApiClasses) {
+ OutputTransformer.sortClassesAndMethods(jApiClasses);
+ if (options.getXmlOutputFile().isPresent()) {
+ XmlOutputGenerator xmlGenerator = new XmlOutputGenerator();
+ xmlGenerator.generate(oldArchive, newArchive, jApiClasses, options);
+ }
+ StdoutOutputGenerator stdoutOutputGenerator = new StdoutOutputGenerator();
+ String output = stdoutOutputGenerator.generate(oldArchive, newArchive, jApiClasses, options);
+ System.out.println(output);
+ }
+
+ private Options parseCliOptions(String[] args) {
+ try {
+ CliParser cliParser = new CliParser();
+ return cliParser.parse(args);
+ } catch (IllegalArgumentException e) {
+ throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, e.getMessage());
+ } catch (Exception e) {
+ throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, "Failed to parse command line options: " + e.getMessage());
+ }
+ }
+
+ private void verifyFiles(File oldArchive, File newArchive) {
+ if (!oldArchive.exists()) {
+ String msg = String.format("File '%s' does not exist.", oldArchive.getAbsolutePath());
+ throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
+ }
+ if (!newArchive.exists()) {
+ String msg = String.format("File '%s' does not exist.", newArchive.getAbsolutePath());
+ throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
+ }
+ if(oldArchive.equals(newArchive)) {
+ String msg = String.format("Files '%s' and '%s' are the same.", oldArchive.getAbsolutePath(), newArchive.getAbsolutePath());
+ throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
+ }
+ verifyJarArchive(oldArchive);
+ verifyJarArchive(newArchive);
+ }
+
+ private void verifyJarArchive(File file) {
+ try {
+ new JarFile(file);
+ } catch (IOException e) {
+ String msg = String.format("File '%s' could not be opened as a jar file: %s", file.getAbsolutePath(), e.getMessage());
+ throw new JApiCmpException(JApiCmpException.Reason.IllegalArgument, msg);
+ }
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/cli/CliParser.java b/japicmp/src/main/java/japicmp/cli/CliParser.java
index 17c9889..e5f87e3 100644
--- a/japicmp/src/main/java/japicmp/cli/CliParser.java
+++ b/japicmp/src/main/java/japicmp/cli/CliParser.java
@@ -1,119 +1,119 @@
-package japicmp.cli;
-
-import com.google.common.base.Optional;
-import japicmp.model.AccessModifier;
-import japicmp.config.PackageFilter;
-import japicmp.config.Options;
-import japicmp.exception.JApiCmpException;
-import japicmp.util.StringArrayEnumeration;
-
-public class CliParser {
-
- public Options parse(String[] args) throws IllegalArgumentException {
- Options options = new Options();
- StringArrayEnumeration sae = new StringArrayEnumeration(args);
- while (sae.hasMoreElements()) {
- String arg = sae.nextElement();
- if ("-n".equals(arg)) {
- String newArchive = getOptionWithArgument("-n", sae);
- options.setNewArchive(newArchive);
- }
- if ("-o".equals(arg)) {
- String oldArchive = getOptionWithArgument("-o", sae);
- options.setOldArchive(oldArchive);
- }
- if ("-x".equals(arg)) {
- String xmlOutputFile = getOptionWithArgument("-x", sae);
- options.setXmlOutputFile(Optional.of(xmlOutputFile));
- }
- if ("-m".equals(arg)) {
- options.setOutputOnlyModifications(true);
- }
- if ("-a".equals(arg)) {
- String accessModifierArg = getOptionWithArgument("-a", sae);
- try {
- AccessModifier accessModifier = AccessModifier.valueOf(accessModifierArg.toUpperCase());
- options.setAccessModifier(accessModifier);
- } catch (IllegalArgumentException e) {
- throw new IllegalArgumentException(String.format("Invalid value for option -a: %s. Possible values are: %s.", accessModifierArg, listOfAccessModifiers()));
- }
- }
- if ("-i".equals(arg)) {
- String packagesIncludeArg = getOptionWithArgument("-i", sae);
- String[] parts = packagesIncludeArg.split(",");
- for (String part : parts) {
- part = part.trim();
- try {
- options.getPackagesInclude().add(new PackageFilter(part));
- } catch (Exception e) {
- throw new IllegalArgumentException(String.format("Wrong syntax for include option '%s': %s", part, e.getMessage()));
- }
- }
- }
- if ("-e".equals(arg)) {
- String packagesExcludeArg = getOptionWithArgument("-e", sae);
- String[] parts = packagesExcludeArg.split(",");
- for (String part : parts) {
- part = part.trim();
- try {
- options.getPackagesInclude().add(new PackageFilter(part));
- } catch (Exception e) {
- throw new IllegalArgumentException(String.format("Wrong syntax for exclude option '%s': %s", part, e.getMessage()));
- }
- }
- }
- if ("-h".equals(arg)) {
- printHelp();
- }
- }
- checkForMandatoryOptions(options);
- return options;
- }
-
- private void printHelp() {
- System.out.println("Available parameters:");
- System.out.println("-h Prints this help.");
- System.out.println("-o <pathToOldVersionJar> Provides the path to the old version of the jar.");
- System.out.println("-n <pathToNewVersionJar> Provides the path to the new version of the jar.");
- System.out.println("-x <pathToXmlOutputFile> Provides the path to the xml output file. If not given, stdout is used.");
- System.out.println("-a <accessModifier> Sets the access modifier level (public, package, protected, private), which should be used.");
- System.out.println("-i <packagesToInclude> Comma separated list of package names to include, * can be used as wildcard.");
- System.out.println("-e <packagesToExclude> Comma separated list of package names to exclude, * can be used as wildcard.");
- System.out.println("-m Outputs only modified classes/methods. If not given, all classes and methods are printed.");
- throw new JApiCmpException(JApiCmpException.Reason.NormalTermination);
- }
-
- private void checkForMandatoryOptions(Options options) {
- if (options.getOldArchive() == null || options.getOldArchive().length() == 0) {
- throw new IllegalArgumentException("Missing option for old version: -o <pathToOldVersionJar>");
- }
- if (options.getNewArchive() == null || options.getNewArchive().length() == 0) {
- throw new IllegalArgumentException("Missing option for new version: -n <pathToNewVersionJar>");
- }
- }
-
- private String getOptionWithArgument(String option, StringArrayEnumeration sae) {
- if (sae.hasMoreElements()) {
- String value = sae.nextElement();
- if (value.startsWith("-")) {
- throw new IllegalArgumentException(String.format("Missing argument for option %s.", option));
- }
- return value;
- } else {
- throw new IllegalArgumentException(String.format("Missing argument for option %s.", option));
- }
- }
-
- private String listOfAccessModifiers() {
- StringBuilder sb = new StringBuilder();
- int i = 0;
- for (AccessModifier am : AccessModifier.values()) {
- if (i > 0) {
- sb.append(",");
- }
- sb.append(am.toString());
- i++;
- }
- return sb.toString();
- }
-}
+package japicmp.cli;
+
+import com.google.common.base.Optional;
+import japicmp.model.AccessModifier;
+import japicmp.config.PackageFilter;
+import japicmp.config.Options;
+import japicmp.exception.JApiCmpException;
+import japicmp.util.StringArrayEnumeration;
+
+public class CliParser {
+
+ public Options parse(String[] args) throws IllegalArgumentException {
+ Options options = new Options();
+ StringArrayEnumeration sae = new StringArrayEnumeration(args);
+ while (sae.hasMoreElements()) {
+ String arg = sae.nextElement();
+ if ("-n".equals(arg)) {
+ String newArchive = getOptionWithArgument("-n", sae);
+ options.setNewArchive(newArchive);
+ }
+ if ("-o".equals(arg)) {
+ String oldArchive = getOptionWithArgument("-o", sae);
+ options.setOldArchive(oldArchive);
+ }
+ if ("-x".equals(arg)) {
+ String xmlOutputFile = getOptionWithArgument("-x", sae);
+ options.setXmlOutputFile(Optional.of(xmlOutputFile));
+ }
+ if ("-m".equals(arg)) {
+ options.setOutputOnlyModifications(true);
+ }
+ if ("-a".equals(arg)) {
+ String accessModifierArg = getOptionWithArgument("-a", sae);
+ try {
+ AccessModifier accessModifier = AccessModifier.valueOf(accessModifierArg.toUpperCase());
+ options.setAccessModifier(accessModifier);
+ } catch (IllegalArgumentException e) {
+ throw new IllegalArgumentException(String.format("Invalid value for option -a: %s. Possible values are: %s.", accessModifierArg, listOfAccessModifiers()));
+ }
+ }
+ if ("-i".equals(arg)) {
+ String packagesIncludeArg = getOptionWithArgument("-i", sae);
+ String[] parts = packagesIncludeArg.split(",");
+ for (String part : parts) {
+ part = part.trim();
+ try {
+ options.getPackagesInclude().add(new PackageFilter(part));
+ } catch (Exception e) {
+ throw new IllegalArgumentException(String.format("Wrong syntax for include option '%s': %s", part, e.getMessage()));
+ }
+ }
+ }
+ if ("-e".equals(arg)) {
+ String packagesExcludeArg = getOptionWithArgument("-e", sae);
+ String[] parts = packagesExcludeArg.split(",");
+ for (String part : parts) {
+ part = part.trim();
+ try {
+ options.getPackagesInclude().add(new PackageFilter(part));
+ } catch (Exception e) {
+ throw new IllegalArgumentException(String.format("Wrong syntax for exclude option '%s': %s", part, e.getMessage()));
+ }
+ }
+ }
+ if ("-h".equals(arg)) {
+ printHelp();
+ }
+ }
+ checkForMandatoryOptions(options);
+ return options;
+ }
+
+ private void printHelp() {
+ System.out.println("Available parameters:");
+ System.out.println("-h Prints this help.");
+ System.out.println("-o <pathToOldVersionJar> Provides the path to the old version of the jar.");
+ System.out.println("-n <pathToNewVersionJar> Provides the path to the new version of the jar.");
+ System.out.println("-x <pathToXmlOutputFile> Provides the path to the xml output file. If not given, stdout is used.");
+ System.out.println("-a <accessModifier> Sets the access modifier level (public, package, protected, private), which should be used.");
+ System.out.println("-i <packagesToInclude> Comma separated list of package names to include, * can be used as wildcard.");
+ System.out.println("-e <packagesToExclude> Comma separated list of package names to exclude, * can be used as wildcard.");
+ System.out.println("-m Outputs only modified classes/methods. If not given, all classes and methods are printed.");
+ throw new JApiCmpException(JApiCmpException.Reason.NormalTermination);
+ }
+
+ private void checkForMandatoryOptions(Options options) {
+ if (options.getOldArchive() == null || options.getOldArchive().length() == 0) {
+ throw new IllegalArgumentException("Missing option for old version: -o <pathToOldVersionJar>");
+ }
+ if (options.getNewArchive() == null || options.getNewArchive().length() == 0) {
+ throw new IllegalArgumentException("Missing option for new version: -n <pathToNewVersionJar>");
+ }
+ }
+
+ private String getOptionWithArgument(String option, StringArrayEnumeration sae) {
+ if (sae.hasMoreElements()) {
+ String value = sae.nextElement();
+ if (value.startsWith("-")) {
+ throw new IllegalArgumentException(String.format("Missing argument for option %s.", option));
+ }
+ return value;
+ } else {
+ throw new IllegalArgumentException(String.format("Missing argument for option %s.", option));
+ }
+ }
+
+ private String listOfAccessModifiers() {
+ StringBuilder sb = new StringBuilder();
+ int i = 0;
+ for (AccessModifier am : AccessModifier.values()) {
+ if (i > 0) {
+ sb.append(",");
+ }
+ sb.append(am.toString());
+ i++;
+ }
+ return sb.toString();
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/cmp/ClassComparator.java b/japicmp/src/main/java/japicmp/cmp/ClassComparator.java
index b600b13..6e8693d 100644
--- a/japicmp/src/main/java/japicmp/cmp/ClassComparator.java
+++ b/japicmp/src/main/java/japicmp/cmp/ClassComparator.java
@@ -1,77 +1,77 @@
-package japicmp.cmp;
-
-import com.google.common.base.Optional;
-import japicmp.model.*;
-import japicmp.util.ModifierHelper;
-import japicmp.util.SignatureParser;
-import javassist.CtClass;
-import javassist.CtMethod;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class ClassComparator {
- private final JarArchiveComparatorOptions options;
-
- public ClassComparator(JarArchiveComparatorOptions options) {
- this.options = options;
- }
-
- public void compare(JApiClass jApiClass) {
- Map<String, CtMethod> oldMethodsMap = createMethodMap(jApiClass.getOldClass());
- Map<String, CtMethod> newMethodsMap = createMethodMap(jApiClass.getNewClass());
- sortMethodsIntoLists(oldMethodsMap, newMethodsMap, jApiClass);
- }
-
- private void sortMethodsIntoLists(Map<String, CtMethod> oldMethodsMap, Map<String, CtMethod> newMethodsMap, JApiClass jApiClass) {
- SignatureParser signatureParser = new SignatureParser();
- for (CtMethod ctMethod : oldMethodsMap.values()) {
- String longName = ctMethod.getLongName();
- signatureParser.parse(ctMethod.getSignature());
- CtMethod foundMethod = newMethodsMap.get(longName);
- if (foundMethod == null) {
- JApiMethod jApiMethod = new JApiMethod(ctMethod.getName(), JApiChangeStatus.REMOVED, Optional.of(ctMethod), Optional.<CtMethod>absent(), signatureParser.getReturnType(), Optional.of(ModifierHelper.translateToModifierLevel(ctMethod.getModifiers())), Optional.<AccessModifier>absent());
- addParametersToMethod(signatureParser, jApiMethod);
- jApiClass.addMethod(jApiMethod);
- if(jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
- jApiClass.setChangeStatus(JApiChangeStatus.MODIFIED);
- }
- } else {
- JApiMethod jApiMethod = new JApiMethod(ctMethod.getName(), JApiChangeStatus.UNCHANGED, Optional.of(ctMethod), Optional.of(foundMethod), signatureParser.getReturnType(), Optional.of(ModifierHelper.translateToModifierLevel(ctMethod.getModifiers())), Optional.of(ModifierHelper.translateToModifierLevel(foundMethod.getModifiers())));
- addParametersToMethod(signatureParser, jApiMethod);
- jApiClass.addMethod(jApiMethod);
- }
- }
- for (CtMethod ctMethod : newMethodsMap.values()) {
- String longName = ctMethod.getLongName();
- signatureParser.parse(ctMethod.getSignature());
- CtMethod foundMethod = oldMethodsMap.get(longName);
- if (foundMethod == null) {
- JApiMethod jApiMethod = new JApiMethod(ctMethod.getName(), JApiChangeStatus.NEW, Optional.<CtMethod>absent(), Optional.of(ctMethod), signatureParser.getReturnType(), Optional.<AccessModifier>absent(), Optional.of(ModifierHelper.translateToModifierLevel(ctMethod.getModifiers())));
- addParametersToMethod(signatureParser, jApiMethod);
- jApiClass.addMethod(jApiMethod);
- if(jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
- jApiClass.setChangeStatus(JApiChangeStatus.MODIFIED);
- }
- }
- }
- }
-
- private void addParametersToMethod(SignatureParser signatureParser, JApiMethod jApiMethod) {
- for (String param : signatureParser.getParameters()) {
- jApiMethod.addParameter(new JApiParameter(param));
- }
- }
-
- private Map<String, CtMethod> createMethodMap(Optional<CtClass> ctClass) {
- Map<String, CtMethod> methods = new HashMap<String, CtMethod>();
- if (ctClass.isPresent()) {
- for (CtMethod ctMethod : ctClass.get().getDeclaredMethods()) {
- if(ModifierHelper.matchesModifierLevel(ctMethod.getModifiers(), options.getModifierLevel())) {
- methods.put(ctMethod.getLongName(), ctMethod);
- }
- }
- }
- return methods;
- }
-}
+package japicmp.cmp;
+
+import com.google.common.base.Optional;
+import japicmp.model.*;
+import japicmp.util.ModifierHelper;
+import japicmp.util.SignatureParser;
+import javassist.CtClass;
+import javassist.CtMethod;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ClassComparator {
+ private final JarArchiveComparatorOptions options;
+
+ public ClassComparator(JarArchiveComparatorOptions options) {
+ this.options = options;
+ }
+
+ public void compare(JApiClass jApiClass) {
+ Map<String, CtMethod> oldMethodsMap = createMethodMap(jApiClass.getOldClass());
+ Map<String, CtMethod> newMethodsMap = createMethodMap(jApiClass.getNewClass());
+ sortMethodsIntoLists(oldMethodsMap, newMethodsMap, jApiClass);
+ }
+
+ private void sortMethodsIntoLists(Map<String, CtMethod> oldMethodsMap, Map<String, CtMethod> newMethodsMap, JApiClass jApiClass) {
+ SignatureParser signatureParser = new SignatureParser();
+ for (CtMethod ctMethod : oldMethodsMap.values()) {
+ String longName = ctMethod.getLongName();
+ signatureParser.parse(ctMethod.getSignature());
+ CtMethod foundMethod = newMethodsMap.get(longName);
+ if (foundMethod == null) {
+ JApiMethod jApiMethod = new JApiMethod(ctMethod.getName(), JApiChangeStatus.REMOVED, Optional.of(ctMethod), Optional.<CtMethod>absent(), signatureParser.getReturnType(), Optional.of(ModifierHelper.translateToModifierLevel(ctMethod.getModifiers())), Optional.<AccessModifier>absent());
+ addParametersToMethod(signatureParser, jApiMethod);
+ jApiClass.addMethod(jApiMethod);
+ if(jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
+ jApiClass.setChangeStatus(JApiChangeStatus.MODIFIED);
+ }
+ } else {
+ JApiMethod jApiMethod = new JApiMethod(ctMethod.getName(), JApiChangeStatus.UNCHANGED, Optional.of(ctMethod), Optional.of(foundMethod), signatureParser.getReturnType(), Optional.of(ModifierHelper.translateToModifierLevel(ctMethod.getModifiers())), Optional.of(ModifierHelper.translateToModifierLevel(foundMethod.getModifiers())));
+ addParametersToMethod(signatureParser, jApiMethod);
+ jApiClass.addMethod(jApiMethod);
+ }
+ }
+ for (CtMethod ctMethod : newMethodsMap.values()) {
+ String longName = ctMethod.getLongName();
+ signatureParser.parse(ctMethod.getSignature());
+ CtMethod foundMethod = oldMethodsMap.get(longName);
+ if (foundMethod == null) {
+ JApiMethod jApiMethod = new JApiMethod(ctMethod.getName(), JApiChangeStatus.NEW, Optional.<CtMethod>absent(), Optional.of(ctMethod), signatureParser.getReturnType(), Optional.<AccessModifier>absent(), Optional.of(ModifierHelper.translateToModifierLevel(ctMethod.getModifiers())));
+ addParametersToMethod(signatureParser, jApiMethod);
+ jApiClass.addMethod(jApiMethod);
+ if(jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
+ jApiClass.setChangeStatus(JApiChangeStatus.MODIFIED);
+ }
+ }
+ }
+ }
+
+ private void addParametersToMethod(SignatureParser signatureParser, JApiMethod jApiMethod) {
+ for (String param : signatureParser.getParameters()) {
+ jApiMethod.addParameter(new JApiParameter(param));
+ }
+ }
+
+ private Map<String, CtMethod> createMethodMap(Optional<CtClass> ctClass) {
+ Map<String, CtMethod> methods = new HashMap<String, CtMethod>();
+ if (ctClass.isPresent()) {
+ for (CtMethod ctMethod : ctClass.get().getDeclaredMethods()) {
+ if(ModifierHelper.matchesModifierLevel(ctMethod.getModifiers(), options.getModifierLevel())) {
+ methods.put(ctMethod.getLongName(), ctMethod);
+ }
+ }
+ }
+ return methods;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/cmp/ClassesComparator.java b/japicmp/src/main/java/japicmp/cmp/ClassesComparator.java
index bae4f86..188078f 100644
--- a/japicmp/src/main/java/japicmp/cmp/ClassesComparator.java
+++ b/japicmp/src/main/java/japicmp/cmp/ClassesComparator.java
@@ -1,65 +1,65 @@
-package japicmp.cmp;
-
-import com.google.common.base.Optional;
-import japicmp.model.AccessModifier;
-import japicmp.model.JApiChangeStatus;
-import japicmp.model.JApiClass;
-import japicmp.util.ModifierHelper;
-import javassist.CtClass;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-public class ClassesComparator {
- private List<JApiClass> classes = new LinkedList<JApiClass>();
-
- public void compare(List<CtClass> oldClassesArg, List<CtClass> newClassesArg) {
- classes = new LinkedList<JApiClass>();
- Map<String, CtClass> oldClassesMap = createClassMap(oldClassesArg);
- Map<String, CtClass> newClassesMap = createClassMap(newClassesArg);
- sortIntoLists(oldClassesMap, newClassesMap);
- }
-
- private void sortIntoLists(Map<String, CtClass> oldClassesMap, Map<String, CtClass> newClassesMap) {
- for(CtClass ctClass : oldClassesMap.values()) {
- CtClass foundClass = newClassesMap.get(ctClass.getName());
- if(foundClass == null) {
- classes.add(new JApiClass(ctClass.getName(), Optional.<CtClass>of(ctClass), Optional.<CtClass>absent(), JApiChangeStatus.REMOVED, getType(ctClass), Optional.of(ModifierHelper.translateToModifierLevel(ctClass.getModifiers())), Optional.<AccessModifier>absent()));
- } else {
- classes.add(new JApiClass(ctClass.getName(), Optional.<CtClass>of(ctClass), Optional.<CtClass>of(foundClass), JApiChangeStatus.UNCHANGED, getType(ctClass), Optional.of(ModifierHelper.translateToModifierLevel(ctClass.getModifiers())), Optional.of(ModifierHelper.translateToModifierLevel(foundClass.getModifiers()))));
- }
- }
- for(CtClass ctClass : newClassesMap.values()) {
- CtClass foundClass = oldClassesMap.get(ctClass.getName());
- if(foundClass == null) {
- classes.add(new JApiClass(ctClass.getName(), Optional.<CtClass>absent(), Optional.<CtClass>of(ctClass), JApiChangeStatus.NEW, getType(ctClass), Optional.<AccessModifier>absent(), Optional.of(ModifierHelper.translateToModifierLevel(ctClass.getModifiers()))));
- }
- }
- }
-
- private JApiClass.Type getType(CtClass ctClass) {
- if(ctClass.isAnnotation()) {
- return JApiClass.Type.ANNOTATION;
- } else if(ctClass.isEnum()) {
- return JApiClass.Type.ENUM;
- } else if(ctClass.isInterface()) {
- return JApiClass.Type.INTERFACE;
- } else {
- return JApiClass.Type.CLASS;
- }
- }
-
- private Map<String, CtClass> createClassMap(List<CtClass> oldClassesArg) {
- Map<String, CtClass> oldClassesMap = new HashMap<String, CtClass>();
- for(CtClass ctClass : oldClassesArg) {
- oldClassesMap.put(ctClass.getName(), ctClass);
- }
- return oldClassesMap;
- }
-
- public List<JApiClass> getClasses() {
- return classes;
- }
-}
+package japicmp.cmp;
+
+import com.google.common.base.Optional;
+import japicmp.model.AccessModifier;
+import japicmp.model.JApiChangeStatus;
+import japicmp.model.JApiClass;
+import japicmp.util.ModifierHelper;
+import javassist.CtClass;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+public class ClassesComparator {
+ private List<JApiClass> classes = new LinkedList<JApiClass>();
+
+ public void compare(List<CtClass> oldClassesArg, List<CtClass> newClassesArg) {
+ classes = new LinkedList<JApiClass>();
+ Map<String, CtClass> oldClassesMap = createClassMap(oldClassesArg);
+ Map<String, CtClass> newClassesMap = createClassMap(newClassesArg);
+ sortIntoLists(oldClassesMap, newClassesMap);
+ }
+
+ private void sortIntoLists(Map<String, CtClass> oldClassesMap, Map<String, CtClass> newClassesMap) {
+ for(CtClass ctClass : oldClassesMap.values()) {
+ CtClass foundClass = newClassesMap.get(ctClass.getName());
+ if(foundClass == null) {
+ classes.add(new JApiClass(ctClass.getName(), Optional.<CtClass>of(ctClass), Optional.<CtClass>absent(), JApiChangeStatus.REMOVED, getType(ctClass), Optional.of(ModifierHelper.translateToModifierLevel(ctClass.getModifiers())), Optional.<AccessModifier>absent()));
+ } else {
+ classes.add(new JApiClass(ctClass.getName(), Optional.<CtClass>of(ctClass), Optional.<CtClass>of(foundClass), JApiChangeStatus.UNCHANGED, getType(ctClass), Optional.of(ModifierHelper.translateToModifierLevel(ctClass.getModifiers())), Optional.of(ModifierHelper.translateToModifierLevel(foundClass.getModifiers()))));
+ }
+ }
+ for(CtClass ctClass : newClassesMap.values()) {
+ CtClass foundClass = oldClassesMap.get(ctClass.getName());
+ if(foundClass == null) {
+ classes.add(new JApiClass(ctClass.getName(), Optional.<CtClass>absent(), Optional.<CtClass>of(ctClass), JApiChangeStatus.NEW, getType(ctClass), Optional.<AccessModifier>absent(), Optional.of(ModifierHelper.translateToModifierLevel(ctClass.getModifiers()))));
+ }
+ }
+ }
+
+ private JApiClass.Type getType(CtClass ctClass) {
+ if(ctClass.isAnnotation()) {
+ return JApiClass.Type.ANNOTATION;
+ } else if(ctClass.isEnum()) {
+ return JApiClass.Type.ENUM;
+ } else if(ctClass.isInterface()) {
+ return JApiClass.Type.INTERFACE;
+ } else {
+ return JApiClass.Type.CLASS;
+ }
+ }
+
+ private Map<String, CtClass> createClassMap(List<CtClass> oldClassesArg) {
+ Map<String, CtClass> oldClassesMap = new HashMap<String, CtClass>();
+ for(CtClass ctClass : oldClassesArg) {
+ oldClassesMap.put(ctClass.getName(), ctClass);
+ }
+ return oldClassesMap;
+ }
+
+ public List<JApiClass> getClasses() {
+ return classes;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/cmp/JarArchiveComparator.java b/japicmp/src/main/java/japicmp/cmp/JarArchiveComparator.java
index 1ac2478..0149b75 100644
--- a/japicmp/src/main/java/japicmp/cmp/JarArchiveComparator.java
+++ b/japicmp/src/main/java/japicmp/cmp/JarArchiveComparator.java
@@ -1,111 +1,111 @@
-package japicmp.cmp;
-
-import japicmp.config.PackageFilter;
-import japicmp.model.JApiClass;
-import japicmp.util.ModifierHelper;
-import javassist.ClassPool;
-import javassist.CtClass;
-import org.apache.log4j.Logger;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-public class JarArchiveComparator {
- private static final Logger logger = Logger.getLogger(JarArchiveComparator.class);
- private JarArchiveComparatorOptions options;
-
- public JarArchiveComparator(JarArchiveComparatorOptions options) {
- this.options = options;
- }
-
- public List<JApiClass> compare(File oldArchive, File newArchive) {
- ClassPool classPool = new ClassPool();
- try {
- ClassesComparator classesComparator = compareClassLists(oldArchive, newArchive, classPool, options);
- List<JApiClass> classList = classesComparator.getClasses();
- compareClasses(classList);
- return classList;
- } catch (Exception e) {
- System.err.println(String.format("Processing jar files '%s' and '%s' failed: %s.", oldArchive.getAbsolutePath(), newArchive.getAbsolutePath(), e.getMessage()));
- return new LinkedList<JApiClass>();
- }
- }
-
- private void compareClasses(List<JApiClass> classList) {
- for (JApiClass jApiClass : classList) {
- ClassComparator classComparator = new ClassComparator(options);
- classComparator.compare(jApiClass);
- }
- }
-
- private ClassesComparator compareClassLists(File oldArchive, File newArchive, ClassPool classPool, JarArchiveComparatorOptions options) throws Exception {
- List<CtClass> oldClasses = createListOfCtClasses(oldArchive, classPool, options);
- List<CtClass> newClasses = createListOfCtClasses(newArchive, classPool, options);
- ClassesComparator classesComparator = new ClassesComparator();
- classesComparator.compare(oldClasses, newClasses);
- if (logger.isDebugEnabled()) {
- for (JApiClass jApiClass : classesComparator.getClasses()) {
- logger.debug(jApiClass);
- }
- }
- return classesComparator;
- }
-
- private List<CtClass> createListOfCtClasses(File archive, ClassPool classPool, JarArchiveComparatorOptions options) throws Exception {
- List<CtClass> classes = new LinkedList<CtClass>();
- JarFile oldJar = null;
- try {
- oldJar = new JarFile(archive);
- Enumeration<JarEntry> entryEnumeration = oldJar.entries();
- while (entryEnumeration.hasMoreElements()) {
- JarEntry jarEntry = entryEnumeration.nextElement();
- String name = jarEntry.getName();
- if (name.endsWith(".class")) {
- CtClass ctClass = null;
- try {
- ctClass = classPool.makeClass(oldJar.getInputStream(jarEntry));
- } catch (Exception e) {
- logger.error(String.format("Failed to load file from jar '%s' as class file: %s.", name, e.getMessage()));
- throw e;
- }
- if (ModifierHelper.matchesModifierLevel(ctClass.getModifiers(), options.getModifierLevel()) && packageMatches(options, ctClass)) {
- classes.add(ctClass);
- }
- if (logger.isDebugEnabled()) {
- logger.debug(String.format("Adding class '%s' with jar name '%s' to list.", ctClass.getName(), name));
- }
- } else {
- logger.debug(String.format("Skipping file '%s' because filename does not end with '.class'.", name));
- }
- }
- } finally {
- if (oldJar != null) {
- oldJar.close();
- }
- }
- return classes;
- }
-
- private boolean packageMatches(JarArchiveComparatorOptions options, CtClass ctClass) {
- String packageName = ctClass.getPackageName();
- for (PackageFilter packageFilter : options.getPackagesInclude()) {
- if (packageFilter.matches(packageName)) {
- return true;
- }
- }
- for (PackageFilter packageFilter : options.getPackagesExclude()) {
- if (packageFilter.matches(packageName)) {
- return false;
- }
- }
- int noInclude = options.getPackagesInclude().size();
- if (noInclude > 0) {
- return false;
- }
- return true;
- }
-}
+package japicmp.cmp;
+
+import japicmp.config.PackageFilter;
+import japicmp.model.JApiClass;
+import japicmp.util.ModifierHelper;
+import javassist.ClassPool;
+import javassist.CtClass;
+import org.apache.log4j.Logger;
+
+import java.io.File;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+public class JarArchiveComparator {
+ private static final Logger logger = Logger.getLogger(JarArchiveComparator.class);
+ private JarArchiveComparatorOptions options;
+
+ public JarArchiveComparator(JarArchiveComparatorOptions options) {
+ this.options = options;
+ }
+
+ public List<JApiClass> compare(File oldArchive, File newArchive) {
+ ClassPool classPool = new ClassPool();
+ try {
+ ClassesComparator classesComparator = compareClassLists(oldArchive, newArchive, classPool, options);
+ List<JApiClass> classList = classesComparator.getClasses();
+ compareClasses(classList);
+ return classList;
+ } catch (Exception e) {
+ System.err.println(String.format("Processing jar files '%s' and '%s' failed: %s.", oldArchive.getAbsolutePath(), newArchive.getAbsolutePath(), e.getMessage()));
+ return new LinkedList<JApiClass>();
+ }
+ }
+
+ private void compareClasses(List<JApiClass> classList) {
+ for (JApiClass jApiClass : classList) {
+ ClassComparator classComparator = new ClassComparator(options);
+ classComparator.compare(jApiClass);
+ }
+ }
+
+ private ClassesComparator compareClassLists(File oldArchive, File newArchive, ClassPool classPool, JarArchiveComparatorOptions options) throws Exception {
+ List<CtClass> oldClasses = createListOfCtClasses(oldArchive, classPool, options);
+ List<CtClass> newClasses = createListOfCtClasses(newArchive, classPool, options);
+ ClassesComparator classesComparator = new ClassesComparator();
+ classesComparator.compare(oldClasses, newClasses);
+ if (logger.isDebugEnabled()) {
+ for (JApiClass jApiClass : classesComparator.getClasses()) {
+ logger.debug(jApiClass);
+ }
+ }
+ return classesComparator;
+ }
+
+ private List<CtClass> createListOfCtClasses(File archive, ClassPool classPool, JarArchiveComparatorOptions options) throws Exception {
+ List<CtClass> classes = new LinkedList<CtClass>();
+ JarFile oldJar = null;
+ try {
+ oldJar = new JarFile(archive);
+ Enumeration<JarEntry> entryEnumeration = oldJar.entries();
+ while (entryEnumeration.hasMoreElements()) {
+ JarEntry jarEntry = entryEnumeration.nextElement();
+ String name = jarEntry.getName();
+ if (name.endsWith(".class")) {
+ CtClass ctClass = null;
+ try {
+ ctClass = classPool.makeClass(oldJar.getInputStream(jarEntry));
+ } catch (Exception e) {
+ logger.error(String.format("Failed to load file from jar '%s' as class file: %s.", name, e.getMessage()));
+ throw e;
+ }
+ if (ModifierHelper.matchesModifierLevel(ctClass.getModifiers(), options.getModifierLevel()) && packageMatches(options, ctClass)) {
+ classes.add(ctClass);
+ }
+ if (logger.isDebugEnabled()) {
+ logger.debug(String.format("Adding class '%s' with jar name '%s' to list.", ctClass.getName(), name));
+ }
+ } else {
+ logger.debug(String.format("Skipping file '%s' because filename does not end with '.class'.", name));
+ }
+ }
+ } finally {
+ if (oldJar != null) {
+ oldJar.close();
+ }
+ }
+ return classes;
+ }
+
+ private boolean packageMatches(JarArchiveComparatorOptions options, CtClass ctClass) {
+ String packageName = ctClass.getPackageName();
+ for (PackageFilter packageFilter : options.getPackagesInclude()) {
+ if (packageFilter.matches(packageName)) {
+ return true;
+ }
+ }
+ for (PackageFilter packageFilter : options.getPackagesExclude()) {
+ if (packageFilter.matches(packageName)) {
+ return false;
+ }
+ }
+ int noInclude = options.getPackagesInclude().size();
+ if (noInclude > 0) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/cmp/JarArchiveComparatorOptions.java b/japicmp/src/main/java/japicmp/cmp/JarArchiveComparatorOptions.java
index ff69634..e1d656a 100644
--- a/japicmp/src/main/java/japicmp/cmp/JarArchiveComparatorOptions.java
+++ b/japicmp/src/main/java/japicmp/cmp/JarArchiveComparatorOptions.java
@@ -1,29 +1,29 @@
-package japicmp.cmp;
-
-import japicmp.config.PackageFilter;
-import japicmp.model.AccessModifier;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class JarArchiveComparatorOptions {
- private List<PackageFilter> packagesInclude = new LinkedList<PackageFilter>();
- private List<PackageFilter> packagesExclude = new LinkedList<PackageFilter>();
- private AccessModifier modifierLevel = AccessModifier.PUBLIC;
-
- public List<PackageFilter> getPackagesExclude() {
- return packagesExclude;
- }
-
- public List<PackageFilter> getPackagesInclude() {
- return packagesInclude;
- }
-
- public AccessModifier getModifierLevel() {
- return modifierLevel;
- }
-
- public void setModifierLevel(AccessModifier modifierLevel) {
- this.modifierLevel = modifierLevel;
- }
-}
+package japicmp.cmp;
+
+import japicmp.config.PackageFilter;
+import japicmp.model.AccessModifier;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class JarArchiveComparatorOptions {
+ private List<PackageFilter> packagesInclude = new LinkedList<PackageFilter>();
+ private List<PackageFilter> packagesExclude = new LinkedList<PackageFilter>();
+ private AccessModifier modifierLevel = AccessModifier.PUBLIC;
+
+ public List<PackageFilter> getPackagesExclude() {
+ return packagesExclude;
+ }
+
+ public List<PackageFilter> getPackagesInclude() {
+ return packagesInclude;
+ }
+
+ public AccessModifier getModifierLevel() {
+ return modifierLevel;
+ }
+
+ public void setModifierLevel(AccessModifier modifierLevel) {
+ this.modifierLevel = modifierLevel;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/config/Options.java b/japicmp/src/main/java/japicmp/config/Options.java
index 09414e6..8cfc975 100644
--- a/japicmp/src/main/java/japicmp/config/Options.java
+++ b/japicmp/src/main/java/japicmp/config/Options.java
@@ -1,65 +1,65 @@
-package japicmp.config;
-
-import com.google.common.base.Optional;
-import japicmp.model.AccessModifier;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class Options {
- private String oldArchive;
- private String newArchive;
- private boolean outputOnlyModifications = false;
- private Optional<String> xmlOutputFile = Optional.<String>absent();
- private AccessModifier accessModifier = AccessModifier.PUBLIC;
- private List<PackageFilter> packagesInclude = new LinkedList<PackageFilter>();
- private List<PackageFilter> packagesExclude = new LinkedList<PackageFilter>();
-
- public String getNewArchive() {
- return newArchive;
- }
-
- public void setNewArchive(String newArchive) {
- this.newArchive = newArchive;
- }
-
- public String getOldArchive() {
- return oldArchive;
- }
-
- public void setOldArchive(String oldArchive) {
- this.oldArchive = oldArchive;
- }
-
- public boolean isOutputOnlyModifications() {
- return outputOnlyModifications;
- }
-
- public void setOutputOnlyModifications(boolean outputOnlyModifications) {
- this.outputOnlyModifications = outputOnlyModifications;
- }
-
- public Optional<String> getXmlOutputFile() {
- return xmlOutputFile;
- }
-
- public void setXmlOutputFile(Optional<String> xmlOutputFile) {
- this.xmlOutputFile = xmlOutputFile;
- }
-
- public void setAccessModifier(AccessModifier accessModifier) {
- this.accessModifier = accessModifier;
- }
-
- public AccessModifier getAccessModifier() {
- return accessModifier;
- }
-
- public List<PackageFilter> getPackagesInclude() {
- return packagesInclude;
- }
-
- public List<PackageFilter> getPackagesExclude() {
- return packagesExclude;
- }
-}
+package japicmp.config;
+
+import com.google.common.base.Optional;
+import japicmp.model.AccessModifier;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class Options {
+ private String oldArchive;
+ private String newArchive;
+ private boolean outputOnlyModifications = false;
+ private Optional<String> xmlOutputFile = Optional.<String>absent();
+ private AccessModifier accessModifier = AccessModifier.PUBLIC;
+ private List<PackageFilter> packagesInclude = new LinkedList<PackageFilter>();
+ private List<PackageFilter> packagesExclude = new LinkedList<PackageFilter>();
+
+ public String getNewArchive() {
+ return newArchive;
+ }
+
+ public void setNewArchive(String newArchive) {
+ this.newArchive = newArchive;
+ }
+
+ public String getOldArchive() {
+ return oldArchive;
+ }
+
+ public void setOldArchive(String oldArchive) {
+ this.oldArchive = oldArchive;
+ }
+
+ public boolean isOutputOnlyModifications() {
+ return outputOnlyModifications;
+ }
+
+ public void setOutputOnlyModifications(boolean outputOnlyModifications) {
+ this.outputOnlyModifications = outputOnlyModifications;
+ }
+
+ public Optional<String> getXmlOutputFile() {
+ return xmlOutputFile;
+ }
+
+ public void setXmlOutputFile(Optional<String> xmlOutputFile) {
+ this.xmlOutputFile = xmlOutputFile;
+ }
+
+ public void setAccessModifier(AccessModifier accessModifier) {
+ this.accessModifier = accessModifier;
+ }
+
+ public AccessModifier getAccessModifier() {
+ return accessModifier;
+ }
+
+ public List<PackageFilter> getPackagesInclude() {
+ return packagesInclude;
+ }
+
+ public List<PackageFilter> getPackagesExclude() {
+ return packagesExclude;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/config/PackageFilter.java b/japicmp/src/main/java/japicmp/config/PackageFilter.java
index add49b2..63e39d3 100644
--- a/japicmp/src/main/java/japicmp/config/PackageFilter.java
+++ b/japicmp/src/main/java/japicmp/config/PackageFilter.java
@@ -1,18 +1,18 @@
-package japicmp.config;
-
-import java.util.regex.Pattern;
-
-public class PackageFilter {
- private final Pattern pattern;
-
- public PackageFilter(String packageName) {
- String regEx = packageName.replace(".", "\\.");
- regEx = regEx.replace("*", ".*");
- regEx = regEx + "(\\.[^\\.]+)*";
- pattern = Pattern.compile(regEx);
- }
-
- public boolean matches(String str) {
- return pattern.matcher(str).matches();
- }
-}
+package japicmp.config;
+
+import java.util.regex.Pattern;
+
+public class PackageFilter {
+ private final Pattern pattern;
+
+ public PackageFilter(String packageName) {
+ String regEx = packageName.replace(".", "\\.");
+ regEx = regEx.replace("*", ".*");
+ regEx = regEx + "(\\.[^\\.]+)*";
+ pattern = Pattern.compile(regEx);
+ }
+
+ public boolean matches(String str) {
+ return pattern.matcher(str).matches();
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/exception/JApiCmpException.java b/japicmp/src/main/java/japicmp/exception/JApiCmpException.java
index 4bc8ae8..4041608 100644
--- a/japicmp/src/main/java/japicmp/exception/JApiCmpException.java
+++ b/japicmp/src/main/java/japicmp/exception/JApiCmpException.java
@@ -1,22 +1,22 @@
-package japicmp.exception;
-
-public class JApiCmpException extends RuntimeException {
- private final Reason reason;
-
- public JApiCmpException(Reason reason) {
- this.reason = reason;
- }
-
- public enum Reason {
- IllegalArgument, NormalTermination
- }
-
- public JApiCmpException(Reason reason, String msg) {
- super(msg);
- this.reason = reason;
- }
-
- public Reason getReason() {
- return reason;
- }
-}
+package japicmp.exception;
+
+public class JApiCmpException extends RuntimeException {
+ private final Reason reason;
+
+ public JApiCmpException(Reason reason) {
+ this.reason = reason;
+ }
+
+ public enum Reason {
+ IllegalArgument, NormalTermination
+ }
+
+ public JApiCmpException(Reason reason, String msg) {
+ super(msg);
+ this.reason = reason;
+ }
+
+ public Reason getReason() {
+ return reason;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/model/AccessModifier.java b/japicmp/src/main/java/japicmp/model/AccessModifier.java
index 0e7fc64..d9422f2 100644
--- a/japicmp/src/main/java/japicmp/model/AccessModifier.java
+++ b/japicmp/src/main/java/japicmp/model/AccessModifier.java
@@ -1,15 +1,15 @@
-package japicmp.model;
-
-public enum AccessModifier {
- PUBLIC(3), PACKAGE(2), PROTECTED(1), PRIVATE(0);
-
- private int level;
-
- AccessModifier(int level) {
- this.level = level;
- }
-
- public int getLevel() {
- return level;
- }
-}
+package japicmp.model;
+
+public enum AccessModifier {
+ PUBLIC(3), PACKAGE(2), PROTECTED(1), PRIVATE(0);
+
+ private int level;
+
+ AccessModifier(int level) {
+ this.level = level;
+ }
+
+ public int getLevel() {
+ return level;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/model/JApiChangeStatus.java b/japicmp/src/main/java/japicmp/model/JApiChangeStatus.java
index 8222e7c..7d031db 100644
--- a/japicmp/src/main/java/japicmp/model/JApiChangeStatus.java
+++ b/japicmp/src/main/java/japicmp/model/JApiChangeStatus.java
@@ -1,5 +1,5 @@
-package japicmp.model;
-
-public enum JApiChangeStatus {
- NEW, REMOVED, UNCHANGED, MODIFIED;
-}
+package japicmp.model;
+
+public enum JApiChangeStatus {
+ NEW, REMOVED, UNCHANGED, MODIFIED;
+}
diff --git a/japicmp/src/main/java/japicmp/model/JApiClass.java b/japicmp/src/main/java/japicmp/model/JApiClass.java
index 46c2eaf..2554a55 100644
--- a/japicmp/src/main/java/japicmp/model/JApiClass.java
+++ b/japicmp/src/main/java/japicmp/model/JApiClass.java
@@ -1,103 +1,103 @@
-package japicmp.model;
-
-import com.google.common.base.Optional;
-import javassist.CtClass;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import java.util.LinkedList;
-import java.util.List;
-
-public class JApiClass {
- private final String fullyQualifiedName;
- private final Optional<CtClass> oldClass;
- private final Optional<CtClass> newClass;
- private List<JApiMethod> methods = new LinkedList<JApiMethod>();
- private JApiChangeStatus changeStatus;
- private final Type type;
- private Optional<AccessModifier> accessModifierOld;
- private Optional<AccessModifier> accessModifierNew;
-
- public enum Type {
- ANNOTATION, INTERFACE, CLASS, ENUM
- }
-
- public JApiClass(String fullyQualifiedName, Optional<CtClass> oldClass, Optional<CtClass> newClass, JApiChangeStatus changeStatus, Type type, Optional<AccessModifier> oldModifierLevel, Optional<AccessModifier> newModifierLevel) {
- this.changeStatus = changeStatus;
- this.fullyQualifiedName = fullyQualifiedName;
- this.newClass = newClass;
- this.oldClass = oldClass;
- this.type = type;
- this.accessModifierOld = oldModifierLevel;
- this.accessModifierNew = newModifierLevel;
- }
-
- public void addMethod(JApiMethod jApiMethod) {
- methods.add(jApiMethod);
- }
-
- @XmlAttribute
- public JApiChangeStatus getChangeStatus() {
- return changeStatus;
- }
-
- @XmlAttribute
- public String getFullyQualifiedName() {
- return fullyQualifiedName;
- }
-
- @XmlTransient
- public Optional<CtClass> getNewClass() {
- return newClass;
- }
-
- @XmlTransient
- public Optional<CtClass> getOldClass() {
- return oldClass;
- }
-
- public void setChangeStatus(JApiChangeStatus changeStatus) {
- this.changeStatus = changeStatus;
- }
-
- @XmlElement(name = "method")
- public List<JApiMethod> getMethods() {
- return methods;
- }
-
- public void setMethods(List<JApiMethod> methods) {
- this.methods = methods;
- }
-
- @XmlAttribute
- public Type getType() {
- return type;
- }
-
- @XmlAttribute(name = "accessModifierNew")
- public String getAccessModifierNew() {
- if(this.accessModifierNew.isPresent()) {
- return this.accessModifierNew.get().toString();
- }
- return "n.a.";
- }
-
- @XmlAttribute(name = "accessModifierOld")
- public String getAccessModifierOld() {
- if(this.accessModifierOld.isPresent()) {
- return this.accessModifierOld.get().toString();
- }
- return "n.a.";
- }
-
- @Override
- public String toString() {
- return "JApiClass{" +
- "changeStatus=" + changeStatus +
- ", fullyQualifiedName='" + fullyQualifiedName + '\'' +
- ", oldClass=" + oldClass +
- ", newClass=" + newClass +
- '}';
- }
-}
+package japicmp.model;
+
+import com.google.common.base.Optional;
+import javassist.CtClass;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import java.util.LinkedList;
+import java.util.List;
+
+public class JApiClass {
+ private final String fullyQualifiedName;
+ private final Optional<CtClass> oldClass;
+ private final Optional<CtClass> newClass;
+ private List<JApiMethod> methods = new LinkedList<JApiMethod>();
+ private JApiChangeStatus changeStatus;
+ private final Type type;
+ private Optional<AccessModifier> accessModifierOld;
+ private Optional<AccessModifier> accessModifierNew;
+
+ public enum Type {
+ ANNOTATION, INTERFACE, CLASS, ENUM
+ }
+
+ public JApiClass(String fullyQualifiedName, Optional<CtClass> oldClass, Optional<CtClass> newClass, JApiChangeStatus changeStatus, Type type, Optional<AccessModifier> oldModifierLevel, Optional<AccessModifier> newModifierLevel) {
+ this.changeStatus = changeStatus;
+ this.fullyQualifiedName = fullyQualifiedName;
+ this.newClass = newClass;
+ this.oldClass = oldClass;
+ this.type = type;
+ this.accessModifierOld = oldModifierLevel;
+ this.accessModifierNew = newModifierLevel;
+ }
+
+ public void addMethod(JApiMethod jApiMethod) {
+ methods.add(jApiMethod);
+ }
+
+ @XmlAttribute
+ public JApiChangeStatus getChangeStatus() {
+ return changeStatus;
+ }
+
+ @XmlAttribute
+ public String getFullyQualifiedName() {
+ return fullyQualifiedName;
+ }
+
+ @XmlTransient
+ public Optional<CtClass> getNewClass() {
+ return newClass;
+ }
+
+ @XmlTransient
+ public Optional<CtClass> getOldClass() {
+ return oldClass;
+ }
+
+ public void setChangeStatus(JApiChangeStatus changeStatus) {
+ this.changeStatus = changeStatus;
+ }
+
+ @XmlElement(name = "method")
+ public List<JApiMethod> getMethods() {
+ return methods;
+ }
+
+ public void setMethods(List<JApiMethod> methods) {
+ this.methods = methods;
+ }
+
+ @XmlAttribute
+ public Type getType() {
+ return type;
+ }
+
+ @XmlAttribute(name = "accessModifierNew")
+ public String getAccessModifierNew() {
+ if(this.accessModifierNew.isPresent()) {
+ return this.accessModifierNew.get().toString();
+ }
+ return "n.a.";
+ }
+
+ @XmlAttribute(name = "accessModifierOld")
+ public String getAccessModifierOld() {
+ if(this.accessModifierOld.isPresent()) {
+ return this.accessModifierOld.get().toString();
+ }
+ return "n.a.";
+ }
+
+ @Override
+ public String toString() {
+ return "JApiClass{" +
+ "changeStatus=" + changeStatus +
+ ", fullyQualifiedName='" + fullyQualifiedName + '\'' +
+ ", oldClass=" + oldClass +
+ ", newClass=" + newClass +
+ '}';
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/model/JApiMethod.java b/japicmp/src/main/java/japicmp/model/JApiMethod.java
index eff5662..9b87b69 100644
--- a/japicmp/src/main/java/japicmp/model/JApiMethod.java
+++ b/japicmp/src/main/java/japicmp/model/JApiMethod.java
@@ -1,81 +1,81 @@
-package japicmp.model;
-
-import com.google.common.base.Optional;
-import javassist.CtMethod;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import java.util.LinkedList;
-import java.util.List;
-
-public class JApiMethod {
- private final String name;
- private final JApiChangeStatus changeStatus;
- private final Optional<CtMethod> oldMethod;
- private final Optional<CtMethod> newMethod;
- private final String returnType;
- private Optional<AccessModifier> accessModifierOld;
- private Optional<AccessModifier> accessModifierNew;
- private final List<JApiParameter> parameters = new LinkedList<JApiParameter>();
-
- public JApiMethod(String name, JApiChangeStatus changeStatus, Optional<CtMethod> oldClass, Optional<CtMethod> newClass, String returnType, Optional<AccessModifier> oldModifierLevel, Optional<AccessModifier> newModifierLevel) {
- this.name = name;
- this.changeStatus = changeStatus;
- this.oldMethod = oldClass;
- this.newMethod = newClass;
- this.returnType = returnType;
- this.accessModifierOld = oldModifierLevel;
- this.accessModifierNew = newModifierLevel;
- }
-
- @XmlAttribute
- public JApiChangeStatus getChangeStatus() {
- return changeStatus;
- }
-
- @XmlAttribute
- public String getName() {
- return name;
- }
-
- @XmlTransient
- public Optional<CtMethod> getNewMethod() {
- return newMethod;
- }
-
- @XmlTransient
- public Optional<CtMethod> getOldMethod() {
- return oldMethod;
- }
-
- @XmlAttribute
- public String getReturnType() {
- return returnType;
- }
-
- @XmlElement(name = "parameter")
- public List<JApiParameter> getParameters() {
- return parameters;
- }
-
- public void addParameter(JApiParameter jApiParameter) {
- parameters.add(jApiParameter);
- }
-
- @XmlAttribute(name = "accessModifierNew")
- public String getAccessModifierNew() {
- if(this.accessModifierNew.isPresent()) {
- return this.accessModifierNew.get().toString();
- }
- return "n.a.";
- }
-
- @XmlAttribute(name = "accessModifierOld")
- public String getAccessModifierOld() {
- if(this.accessModifierOld.isPresent()) {
- return this.accessModifierOld.get().toString();
- }
- return "n.a.";
- }
-}
+package japicmp.model;
+
+import com.google.common.base.Optional;
+import javassist.CtMethod;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import java.util.LinkedList;
+import java.util.List;
+
+public class JApiMethod {
+ private final String name;
+ private final JApiChangeStatus changeStatus;
+ private final Optional<CtMethod> oldMethod;
+ private final Optional<CtMethod> newMethod;
+ private final String returnType;
+ private Optional<AccessModifier> accessModifierOld;
+ private Optional<AccessModifier> accessModifierNew;
+ private final List<JApiParameter> parameters = new LinkedList<JApiParameter>();
+
+ public JApiMethod(String name, JApiChangeStatus changeStatus, Optional<CtMethod> oldClass, Optional<CtMethod> newClass, String returnType, Optional<AccessModifier> oldModifierLevel, Optional<AccessModifier> newModifierLevel) {
+ this.name = name;
+ this.changeStatus = changeStatus;
+ this.oldMethod = oldClass;
+ this.newMethod = newClass;
+ this.returnType = returnType;
+ this.accessModifierOld = oldModifierLevel;
+ this.accessModifierNew = newModifierLevel;
+ }
+
+ @XmlAttribute
+ public JApiChangeStatus getChangeStatus() {
+ return changeStatus;
+ }
+
+ @XmlAttribute
+ public String getName() {
+ return name;
+ }
+
+ @XmlTransient
+ public Optional<CtMethod> getNewMethod() {
+ return newMethod;
+ }
+
+ @XmlTransient
+ public Optional<CtMethod> getOldMethod() {
+ return oldMethod;
+ }
+
+ @XmlAttribute
+ public String getReturnType() {
+ return returnType;
+ }
+
+ @XmlElement(name = "parameter")
+ public List<JApiParameter> getParameters() {
+ return parameters;
+ }
+
+ public void addParameter(JApiParameter jApiParameter) {
+ parameters.add(jApiParameter);
+ }
+
+ @XmlAttribute(name = "accessModifierNew")
+ public String getAccessModifierNew() {
+ if(this.accessModifierNew.isPresent()) {
+ return this.accessModifierNew.get().toString();
+ }
+ return "n.a.";
+ }
+
+ @XmlAttribute(name = "accessModifierOld")
+ public String getAccessModifierOld() {
+ if(this.accessModifierOld.isPresent()) {
+ return this.accessModifierOld.get().toString();
+ }
+ return "n.a.";
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/model/JApiParameter.java b/japicmp/src/main/java/japicmp/model/JApiParameter.java
index 56f2a81..81f6914 100644
--- a/japicmp/src/main/java/japicmp/model/JApiParameter.java
+++ b/japicmp/src/main/java/japicmp/model/JApiParameter.java
@@ -1,16 +1,16 @@
-package japicmp.model;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-public class JApiParameter {
- private final String type;
-
- public JApiParameter(String type) {
- this.type = type;
- }
-
- @XmlAttribute
- public String getType() {
- return type;
- }
-}
+package japicmp.model;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+public class JApiParameter {
+ private final String type;
+
+ public JApiParameter(String type) {
+ this.type = type;
+ }
+
+ @XmlAttribute
+ public String getType() {
+ return type;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/output/OutputTransformer.java b/japicmp/src/main/java/japicmp/output/OutputTransformer.java
index 5b31b27..06d3c26 100644
--- a/japicmp/src/main/java/japicmp/output/OutputTransformer.java
+++ b/japicmp/src/main/java/japicmp/output/OutputTransformer.java
@@ -1,55 +1,55 @@
-package japicmp.output;
-
-import japicmp.model.JApiChangeStatus;
-import japicmp.model.JApiClass;
-import japicmp.model.JApiMethod;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-
-public class OutputTransformer {
-
- private OutputTransformer() {
-
- }
-
- public static void removeUnchanged(List<JApiClass> jApiClasses) {
- List<JApiClass> classesToRemove = new LinkedList<JApiClass>();
- for (JApiClass jApiClass : jApiClasses) {
- if (jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
- classesToRemove.add(jApiClass);
- } else {
- List<JApiMethod> methodsToRemove = new LinkedList<JApiMethod>();
- List<JApiMethod> methods = jApiClass.getMethods();
- for (JApiMethod jApiMethod : methods) {
- if (jApiMethod.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
- methodsToRemove.add(jApiMethod);
- }
- }
- for (JApiMethod jApiMethod : methodsToRemove) {
- methods.remove(jApiMethod);
- }
- }
- }
- for (JApiClass jApiClass : classesToRemove) {
- jApiClasses.remove(jApiClass);
- }
- }
-
- public static void sortClassesAndMethods(List<JApiClass> jApiClasses) {
- Collections.sort(jApiClasses, new Comparator<JApiClass>() {
- public int compare(JApiClass o1, JApiClass o2) {
- return o1.getFullyQualifiedName().compareToIgnoreCase(o2.getFullyQualifiedName());
- }
- });
- for(JApiClass jApiClass : jApiClasses) {
- Collections.sort(jApiClass.getMethods(), new Comparator<JApiMethod>() {
- public int compare(JApiMethod o1, JApiMethod o2) {
- return o1.getName().compareToIgnoreCase(o2.getName());
- }
- });
- }
- }
-}
+package japicmp.output;
+
+import japicmp.model.JApiChangeStatus;
+import japicmp.model.JApiClass;
+import japicmp.model.JApiMethod;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+
+public class OutputTransformer {
+
+ private OutputTransformer() {
+
+ }
+
+ public static void removeUnchanged(List<JApiClass> jApiClasses) {
+ List<JApiClass> classesToRemove = new LinkedList<JApiClass>();
+ for (JApiClass jApiClass : jApiClasses) {
+ if (jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
+ classesToRemove.add(jApiClass);
+ } else {
+ List<JApiMethod> methodsToRemove = new LinkedList<JApiMethod>();
+ List<JApiMethod> methods = jApiClass.getMethods();
+ for (JApiMethod jApiMethod : methods) {
+ if (jApiMethod.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
+ methodsToRemove.add(jApiMethod);
+ }
+ }
+ for (JApiMethod jApiMethod : methodsToRemove) {
+ methods.remove(jApiMethod);
+ }
+ }
+ }
+ for (JApiClass jApiClass : classesToRemove) {
+ jApiClasses.remove(jApiClass);
+ }
+ }
+
+ public static void sortClassesAndMethods(List<JApiClass> jApiClasses) {
+ Collections.sort(jApiClasses, new Comparator<JApiClass>() {
+ public int compare(JApiClass o1, JApiClass o2) {
+ return o1.getFullyQualifiedName().compareToIgnoreCase(o2.getFullyQualifiedName());
+ }
+ });
+ for(JApiClass jApiClass : jApiClasses) {
+ Collections.sort(jApiClass.getMethods(), new Comparator<JApiMethod>() {
+ public int compare(JApiMethod o1, JApiMethod o2) {
+ return o1.getName().compareToIgnoreCase(o2.getName());
+ }
+ });
+ }
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/output/stdout/StdoutOutputGenerator.java b/japicmp/src/main/java/japicmp/output/stdout/StdoutOutputGenerator.java
index b981804..253ee9a 100644
--- a/japicmp/src/main/java/japicmp/output/stdout/StdoutOutputGenerator.java
+++ b/japicmp/src/main/java/japicmp/output/stdout/StdoutOutputGenerator.java
@@ -1,71 +1,71 @@
-package japicmp.output.stdout;
-
-import japicmp.config.Options;
-import japicmp.model.JApiChangeStatus;
-import japicmp.model.JApiClass;
-import japicmp.model.JApiMethod;
-import japicmp.model.JApiParameter;
-import japicmp.output.OutputTransformer;
-
-import java.io.File;
-import java.util.List;
-
-public class StdoutOutputGenerator {
-
- public String generate(File oldArchive, File newArchive, List<JApiClass> jApiClasses, Options options) {
- if (options.isOutputOnlyModifications()) {
- OutputTransformer.removeUnchanged(jApiClasses);
- }
- StringBuilder sb = new StringBuilder();
- sb.append(String.format("Comparing %s with %s:%n", oldArchive.getAbsolutePath(), newArchive.getAbsolutePath()));
- for (JApiClass jApiClass : jApiClasses) {
- processClass(sb, jApiClass);
- processMethods(sb, jApiClass);
- }
- return sb.toString();
- }
-
- private void processMethods(StringBuilder sb, JApiClass jApiClass) {
- List<JApiMethod> methods = jApiClass.getMethods();
- for (JApiMethod jApiMethod : methods) {
- if (jApiMethod.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
- appendMethod(sb, "===", jApiMethod);
- } else if (jApiMethod.getChangeStatus() == JApiChangeStatus.NEW) {
- appendMethod(sb, "+++", jApiMethod);
- } else if (jApiMethod.getChangeStatus() == JApiChangeStatus.REMOVED) {
- appendMethod(sb, "---", jApiMethod);
- } else if (jApiMethod.getChangeStatus() == JApiChangeStatus.MODIFIED) {
- appendMethod(sb, "***", jApiMethod);
- }
- }
- }
-
- private void processClass(StringBuilder sb, JApiClass jApiClass) {
- if (jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
- appendClass(sb, "===", jApiClass);
- } else if (jApiClass.getChangeStatus() == JApiChangeStatus.NEW) {
- appendClass(sb, "+++", jApiClass);
- } else if (jApiClass.getChangeStatus() == JApiChangeStatus.REMOVED) {
- appendClass(sb, "---", jApiClass);
- } else if (jApiClass.getChangeStatus() == JApiChangeStatus.MODIFIED) {
- appendClass(sb, "***", jApiClass);
- }
- }
-
- private void appendMethod(StringBuilder sb, String signs, JApiMethod jApiMethod) {
- sb.append("\t" + signs + " " + jApiMethod.getChangeStatus() + " METHOD " + jApiMethod.getName() + "(");
- int paramCount = 0;
- for (JApiParameter jApiParameter : jApiMethod.getParameters()) {
- if (paramCount > 0) {
- sb.append(", ");
- }
- sb.append(jApiParameter.getType());
- paramCount++;
- }
- sb.append(")\n");
- }
-
- private void appendClass(StringBuilder sb, String signs, JApiClass jApiClass) {
- sb.append(signs + " " + jApiClass.getChangeStatus() + " " + jApiClass.getType() + " " + jApiClass.getFullyQualifiedName() + "\n");
- }
-}
+package japicmp.output.stdout;
+
+import japicmp.config.Options;
+import japicmp.model.JApiChangeStatus;
+import japicmp.model.JApiClass;
+import japicmp.model.JApiMethod;
+import japicmp.model.JApiParameter;
+import japicmp.output.OutputTransformer;
+
+import java.io.File;
+import java.util.List;
+
+public class StdoutOutputGenerator {
+
+ public String generate(File oldArchive, File newArchive, List<JApiClass> jApiClasses, Options options) {
+ if (options.isOutputOnlyModifications()) {
+ OutputTransformer.removeUnchanged(jApiClasses);
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append(String.format("Comparing %s with %s:%n", oldArchive.getAbsolutePath(), newArchive.getAbsolutePath()));
+ for (JApiClass jApiClass : jApiClasses) {
+ processClass(sb, jApiClass);
+ processMethods(sb, jApiClass);
+ }
+ return sb.toString();
+ }
+
+ private void processMethods(StringBuilder sb, JApiClass jApiClass) {
+ List<JApiMethod> methods = jApiClass.getMethods();
+ for (JApiMethod jApiMethod : methods) {
+ if (jApiMethod.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
+ appendMethod(sb, "===", jApiMethod);
+ } else if (jApiMethod.getChangeStatus() == JApiChangeStatus.NEW) {
+ appendMethod(sb, "+++", jApiMethod);
+ } else if (jApiMethod.getChangeStatus() == JApiChangeStatus.REMOVED) {
+ appendMethod(sb, "---", jApiMethod);
+ } else if (jApiMethod.getChangeStatus() == JApiChangeStatus.MODIFIED) {
+ appendMethod(sb, "***", jApiMethod);
+ }
+ }
+ }
+
+ private void processClass(StringBuilder sb, JApiClass jApiClass) {
+ if (jApiClass.getChangeStatus() == JApiChangeStatus.UNCHANGED) {
+ appendClass(sb, "===", jApiClass);
+ } else if (jApiClass.getChangeStatus() == JApiChangeStatus.NEW) {
+ appendClass(sb, "+++", jApiClass);
+ } else if (jApiClass.getChangeStatus() == JApiChangeStatus.REMOVED) {
+ appendClass(sb, "---", jApiClass);
+ } else if (jApiClass.getChangeStatus() == JApiChangeStatus.MODIFIED) {
+ appendClass(sb, "***", jApiClass);
+ }
+ }
+
+ private void appendMethod(StringBuilder sb, String signs, JApiMethod jApiMethod) {
+ sb.append("\t" + signs + " " + jApiMethod.getChangeStatus() + " METHOD " + jApiMethod.getName() + "(");
+ int paramCount = 0;
+ for (JApiParameter jApiParameter : jApiMethod.getParameters()) {
+ if (paramCount > 0) {
+ sb.append(", ");
+ }
+ sb.append(jApiParameter.getType());
+ paramCount++;
+ }
+ sb.append(")\n");
+ }
+
+ private void appendClass(StringBuilder sb, String signs, JApiClass jApiClass) {
+ sb.append(signs + " " + jApiClass.getChangeStatus() + " " + jApiClass.getType() + " " + jApiClass.getFullyQualifiedName() + "\n");
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/output/xml/XmlOutputGenerator.java b/japicmp/src/main/java/japicmp/output/xml/XmlOutputGenerator.java
index 939c6cb..de5b85d 100644
--- a/japicmp/src/main/java/japicmp/output/xml/XmlOutputGenerator.java
+++ b/japicmp/src/main/java/japicmp/output/xml/XmlOutputGenerator.java
@@ -1,24 +1,24 @@
-package japicmp.output.xml;
-
-import japicmp.config.Options;
-import japicmp.model.JApiClass;
-import japicmp.output.OutputTransformer;
-import japicmp.output.xml.model.JApiCmpXmlRoot;
-
-import javax.xml.bind.JAXB;
-import java.io.File;
-import java.util.List;
-
-public class XmlOutputGenerator {
-
- public void generate(File oldArchive, File newArchive, List<JApiClass> jApiClasses, Options options) {
- JApiCmpXmlRoot jApiCmpXmlRoot = new JApiCmpXmlRoot();
- jApiCmpXmlRoot.setOldJar(oldArchive.getAbsolutePath());
- jApiCmpXmlRoot.setNewJar(newArchive.getAbsolutePath());
- jApiCmpXmlRoot.setClasses(jApiClasses);
- if (options.isOutputOnlyModifications()) {
- OutputTransformer.removeUnchanged(jApiClasses);
- }
- JAXB.marshal(jApiCmpXmlRoot, new File(options.getXmlOutputFile().get()));
- }
-}
+package japicmp.output.xml;
+
+import japicmp.config.Options;
+import japicmp.model.JApiClass;
+import japicmp.output.OutputTransformer;
+import japicmp.output.xml.model.JApiCmpXmlRoot;
+
+import javax.xml.bind.JAXB;
+import java.io.File;
+import java.util.List;
+
+public class XmlOutputGenerator {
+
+ public void generate(File oldArchive, File newArchive, List<JApiClass> jApiClasses, Options options) {
+ JApiCmpXmlRoot jApiCmpXmlRoot = new JApiCmpXmlRoot();
+ jApiCmpXmlRoot.setOldJar(oldArchive.getAbsolutePath());
+ jApiCmpXmlRoot.setNewJar(newArchive.getAbsolutePath());
+ jApiCmpXmlRoot.setClasses(jApiClasses);
+ if (options.isOutputOnlyModifications()) {
+ OutputTransformer.removeUnchanged(jApiClasses);
+ }
+ JAXB.marshal(jApiCmpXmlRoot, new File(options.getXmlOutputFile().get()));
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/output/xml/model/JApiCmpXmlRoot.java b/japicmp/src/main/java/japicmp/output/xml/model/JApiCmpXmlRoot.java
index 77beafe..17319c9 100644
--- a/japicmp/src/main/java/japicmp/output/xml/model/JApiCmpXmlRoot.java
+++ b/japicmp/src/main/java/japicmp/output/xml/model/JApiCmpXmlRoot.java
@@ -1,43 +1,43 @@
-package japicmp.output.xml.model;
-
-import japicmp.model.JApiClass;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.LinkedList;
-import java.util.List;
-
-@XmlRootElement(name = "japicmp")
-public class JApiCmpXmlRoot {
- private String oldJar = "";
- private String newJar = "";
- private List<JApiClass> classes = new LinkedList<JApiClass>();
-
- @XmlElement(name = "class")
- public List<JApiClass> getClasses() {
- return classes;
- }
-
- public void setClasses(List<JApiClass> classes) {
- this.classes = classes;
- }
-
- @XmlAttribute
- public String getNewJar() {
- return newJar;
- }
-
- public void setNewJar(String newJar) {
- this.newJar = newJar;
- }
-
- @XmlAttribute
- public String getOldJar() {
- return oldJar;
- }
-
- public void setOldJar(String oldJar) {
- this.oldJar = oldJar;
- }
-}
+package japicmp.output.xml.model;
+
+import japicmp.model.JApiClass;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.LinkedList;
+import java.util.List;
+
+@XmlRootElement(name = "japicmp")
+public class JApiCmpXmlRoot {
+ private String oldJar = "";
+ private String newJar = "";
+ private List<JApiClass> classes = new LinkedList<JApiClass>();
+
+ @XmlElement(name = "class")
+ public List<JApiClass> getClasses() {
+ return classes;
+ }
+
+ public void setClasses(List<JApiClass> classes) {
+ this.classes = classes;
+ }
+
+ @XmlAttribute
+ public String getNewJar() {
+ return newJar;
+ }
+
+ public void setNewJar(String newJar) {
+ this.newJar = newJar;
+ }
+
+ @XmlAttribute
+ public String getOldJar() {
+ return oldJar;
+ }
+
+ public void setOldJar(String oldJar) {
+ this.oldJar = oldJar;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/util/ModifierHelper.java b/japicmp/src/main/java/japicmp/util/ModifierHelper.java
index d3f8e66..c23a01e 100644
--- a/japicmp/src/main/java/japicmp/util/ModifierHelper.java
+++ b/japicmp/src/main/java/japicmp/util/ModifierHelper.java
@@ -1,29 +1,29 @@
-package japicmp.util;
-
-import japicmp.model.AccessModifier;
-
-import java.lang.reflect.Modifier;
-
-public class ModifierHelper {
-
- private ModifierHelper() {
-
- }
-
- public static boolean matchesModifierLevel(int modifierOfElement, AccessModifier modifierLevel) {
- AccessModifier modifierLevelOfElement = translateToModifierLevel(modifierOfElement);
- return (modifierLevelOfElement.getLevel() >= modifierLevel.getLevel());
- }
-
- public static AccessModifier translateToModifierLevel(int modifier) {
- if(Modifier.isPublic(modifier)) {
- return AccessModifier.PUBLIC;
- } else if(Modifier.isProtected(modifier)) {
- return AccessModifier.PROTECTED;
- } else if(Modifier.isPrivate(modifier)) {
- return AccessModifier.PRIVATE;
- } else {
- return AccessModifier.PACKAGE;
- }
- }
-}
+package japicmp.util;
+
+import japicmp.model.AccessModifier;
+
+import java.lang.reflect.Modifier;
+
+public class ModifierHelper {
+
+ private ModifierHelper() {
+
+ }
+
+ public static boolean matchesModifierLevel(int modifierOfElement, AccessModifier modifierLevel) {
+ AccessModifier modifierLevelOfElement = translateToModifierLevel(modifierOfElement);
+ return (modifierLevelOfElement.getLevel() >= modifierLevel.getLevel());
+ }
+
+ public static AccessModifier translateToModifierLevel(int modifier) {
+ if(Modifier.isPublic(modifier)) {
+ return AccessModifier.PUBLIC;
+ } else if(Modifier.isProtected(modifier)) {
+ return AccessModifier.PROTECTED;
+ } else if(Modifier.isPrivate(modifier)) {
+ return AccessModifier.PRIVATE;
+ } else {
+ return AccessModifier.PACKAGE;
+ }
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/util/SignatureParser.java b/japicmp/src/main/java/japicmp/util/SignatureParser.java
index 9d4d96d..8ed253e 100644
--- a/japicmp/src/main/java/japicmp/util/SignatureParser.java
+++ b/japicmp/src/main/java/japicmp/util/SignatureParser.java
@@ -1,103 +1,103 @@
-package japicmp.util;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class SignatureParser {
- private List<String> parameters = new LinkedList<String>();
- private String returnType = "void";
-
- public void parse(String signature) {
- int parenthesisCloseIndex = signature.indexOf(')');
- if(parenthesisCloseIndex > -1) {
- parseParameters(signature, parenthesisCloseIndex);
- parseReturnValue(signature, parenthesisCloseIndex);
- }
- }
-
- private void parseReturnValue(String signature, int parenthesisCloseIndex) {
- String retValPart = signature.substring(parenthesisCloseIndex+1);
- List<String> retValTypes = parseTypes(retValPart);
- returnType = retValTypes.get(0);
- }
-
- private void parseParameters(String signature, int parenthesisCloseIndex) {
- String paramPart = signature.substring(1, parenthesisCloseIndex);
- List<String> paramTypes = parseTypes(paramPart);
- parameters.clear();
- parameters.addAll(paramTypes);
- }
-
- private List<String> parseTypes(String paramPart) {
- List<String> types = new LinkedList<String>();
- boolean arrayNotation = false;
- for(int i=0; i<paramPart.length(); i++) {
- char c = paramPart.charAt(i);
- String type = "void";
- switch(c) {
- case 'Z':
- type = "boolean";
- break;
- case 'B':
- type = "byte";
- break;
- case 'C':
- type = "char";
- break;
- case 'S':
- type = "short";
- break;
- case 'I':
- type = "int";
- break;
- case 'J':
- type = "long";
- break;
- case 'F':
- type = "float";
- break;
- case 'D':
- type = "double";
- break;
- case 'V':
- type = "void";
- break;
- case '[':
- arrayNotation = true;
- continue;
- case 'L':
- StringBuilder fqn = new StringBuilder();
- i++;
- while(i<paramPart.length()) {
- c = paramPart.charAt(i);
- if(c == ';') {
- break;
- } else if(c == '/') {
- fqn.append('.');
- } else {
- fqn.append(c);
- }
- i++;
- }
- type = fqn.toString();
- break;
- default:
- throw new IllegalStateException("Unknown type signature: '"+c+"'");
- }
- if(arrayNotation) {
- type += "[]";
- arrayNotation = false;
- }
- types.add(type);
- }
- return types;
- }
-
- public List<String> getParameters() {
- return parameters;
- }
-
- public String getReturnType() {
- return returnType;
- }
-}
+package japicmp.util;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class SignatureParser {
+ private List<String> parameters = new LinkedList<String>();
+ private String returnType = "void";
+
+ public void parse(String signature) {
+ int parenthesisCloseIndex = signature.indexOf(')');
+ if(parenthesisCloseIndex > -1) {
+ parseParameters(signature, parenthesisCloseIndex);
+ parseReturnValue(signature, parenthesisCloseIndex);
+ }
+ }
+
+ private void parseReturnValue(String signature, int parenthesisCloseIndex) {
+ String retValPart = signature.substring(parenthesisCloseIndex+1);
+ List<String> retValTypes = parseTypes(retValPart);
+ returnType = retValTypes.get(0);
+ }
+
+ private void parseParameters(String signature, int parenthesisCloseIndex) {
+ String paramPart = signature.substring(1, parenthesisCloseIndex);
+ List<String> paramTypes = parseTypes(paramPart);
+ parameters.clear();
+ parameters.addAll(paramTypes);
+ }
+
+ private List<String> parseTypes(String paramPart) {
+ List<String> types = new LinkedList<String>();
+ boolean arrayNotation = false;
+ for(int i=0; i<paramPart.length(); i++) {
+ char c = paramPart.charAt(i);
+ String type = "void";
+ switch(c) {
+ case 'Z':
+ type = "boolean";
+ break;
+ case 'B':
+ type = "byte";
+ break;
+ case 'C':
+ type = "char";
+ break;
+ case 'S':
+ type = "short";
+ break;
+ case 'I':
+ type = "int";
+ break;
+ case 'J':
+ type = "long";
+ break;
+ case 'F':
+ type = "float";
+ break;
+ case 'D':
+ type = "double";
+ break;
+ case 'V':
+ type = "void";
+ break;
+ case '[':
+ arrayNotation = true;
+ continue;
+ case 'L':
+ StringBuilder fqn = new StringBuilder();
+ i++;
+ while(i<paramPart.length()) {
+ c = paramPart.charAt(i);
+ if(c == ';') {
+ break;
+ } else if(c == '/') {
+ fqn.append('.');
+ } else {
+ fqn.append(c);
+ }
+ i++;
+ }
+ type = fqn.toString();
+ break;
+ default:
+ throw new IllegalStateException("Unknown type signature: '"+c+"'");
+ }
+ if(arrayNotation) {
+ type += "[]";
+ arrayNotation = false;
+ }
+ types.add(type);
+ }
+ return types;
+ }
+
+ public List<String> getParameters() {
+ return parameters;
+ }
+
+ public String getReturnType() {
+ return returnType;
+ }
+}
diff --git a/japicmp/src/main/java/japicmp/util/StringArrayEnumeration.java b/japicmp/src/main/java/japicmp/util/StringArrayEnumeration.java
index 19d84fd..0c476db 100644
--- a/japicmp/src/main/java/japicmp/util/StringArrayEnumeration.java
+++ b/japicmp/src/main/java/japicmp/util/StringArrayEnumeration.java
@@ -1,27 +1,27 @@
-package japicmp.util;
-
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-public class StringArrayEnumeration implements Enumeration<String> {
- private final String[] array;
- private int pos = 0;
-
- public StringArrayEnumeration(String[] array) {
- this.array = new String[array.length];
- System.arraycopy(array, 0, this.array, 0, array.length);
- }
-
- public boolean hasMoreElements() {
- return pos < array.length;
- }
-
- public String nextElement() {
- if(hasMoreElements()) {
- return array[pos++];
- } else {
- throw new NoSuchElementException();
- }
- }
-}
+package japicmp.util;
+
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+public class StringArrayEnumeration implements Enumeration<String> {
+ private final String[] array;
+ private int pos = 0;
+
+ public StringArrayEnumeration(String[] array) {
+ this.array = new String[array.length];
+ System.arraycopy(array, 0, this.array, 0, array.length);
+ }
+
+ public boolean hasMoreElements() {
+ return pos < array.length;
+ }
+
+ public String nextElement() {
+ if(hasMoreElements()) {
+ return array[pos++];
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+}
diff --git a/japicmp/src/main/resources/log4j.properties b/japicmp/src/main/resources/log4j.properties
index 393e087..d95e8fd 100644
--- a/japicmp/src/main/resources/log4j.properties
+++ b/japicmp/src/main/resources/log4j.properties
@@ -1,8 +1,8 @@
-# Root logger option
-log4j.rootLogger=INFO, stdout
-
-# Direct log messages to stdout
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+# Root logger option
+log4j.rootLogger=INFO, stdout
+
+# Direct log messages to stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/japicmp/src/test/java/japicmp/cli/CliParserTest.java b/japicmp/src/test/java/japicmp/cli/CliParserTest.java
index 8dafe7f..2b2a12c 100644
--- a/japicmp/src/test/java/japicmp/cli/CliParserTest.java
+++ b/japicmp/src/test/java/japicmp/cli/CliParserTest.java
@@ -1,40 +1,40 @@
-package japicmp.cli;
-
-import japicmp.config.Options;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class CliParserTest {
- private CliParser subject;
-
- @Before
- public void before() {
- subject = new CliParser();
- }
-
- @Test
- public void testAllOptions() {
- Options options = subject.parse(new String[]{"-n", "npath", "-o", "opath", "-m", "-x", "xpath"});
- assertThat(options.getXmlOutputFile().get(), is("xpath"));
- assertThat(options.getNewArchive(), is("npath"));
- assertThat(options.getOldArchive(), is("opath"));
- assertThat(options.isOutputOnlyModifications(), is(true));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testMissingArgumentForN() {
- subject.parse(new String[]{"-n", "-o", "opath"});
- }
-
- @Test
- public void testOnlyNAndO() {
- Options options = subject.parse(new String[]{"-n", "npath", "-o", "opath",});
- assertThat(options.getXmlOutputFile().isPresent(), is(false));
- assertThat(options.getNewArchive(), is("npath"));
- assertThat(options.getOldArchive(), is("opath"));
- assertThat(options.isOutputOnlyModifications(), is(false));
- }
-}
+package japicmp.cli;
+
+import japicmp.config.Options;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class CliParserTest {
+ private CliParser subject;
+
+ @Before
+ public void before() {
+ subject = new CliParser();
+ }
+
+ @Test
+ public void testAllOptions() {
+ Options options = subject.parse(new String[]{"-n", "npath", "-o", "opath", "-m", "-x", "xpath"});
+ assertThat(options.getXmlOutputFile().get(), is("xpath"));
+ assertThat(options.getNewArchive(), is("npath"));
+ assertThat(options.getOldArchive(), is("opath"));
+ assertThat(options.isOutputOnlyModifications(), is(true));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testMissingArgumentForN() {
+ subject.parse(new String[]{"-n", "-o", "opath"});
+ }
+
+ @Test
+ public void testOnlyNAndO() {
+ Options options = subject.parse(new String[]{"-n", "npath", "-o", "opath",});
+ assertThat(options.getXmlOutputFile().isPresent(), is(false));
+ assertThat(options.getNewArchive(), is("npath"));
+ assertThat(options.getOldArchive(), is("opath"));
+ assertThat(options.isOutputOnlyModifications(), is(false));
+ }
+}
diff --git a/japicmp/src/test/java/japicmp/cmp/PackageFilterTest.java b/japicmp/src/test/java/japicmp/cmp/PackageFilterTest.java
index 916bcb2..f40812f 100644
--- a/japicmp/src/test/java/japicmp/cmp/PackageFilterTest.java
+++ b/japicmp/src/test/java/japicmp/cmp/PackageFilterTest.java
@@ -1,45 +1,45 @@
-package japicmp.cmp;
-
-import japicmp.config.PackageFilter;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class PackageFilterTest {
-
- @Test
- public void testWithoutWildcard() {
- PackageFilter pf = new PackageFilter("de.test.package");
- assertThat(pf.matches("de.test.package"), is(true));
- assertThat(pf.matches("de.test.package.packageOne"), is(true));
- assertThat(pf.matches("de.test.package."), is(false));
- assertThat(pf.matches("de.test.packag"), is(false));
- assertThat(pf.matches("de.test"), is(false));
- }
-
- @Test
- public void testWithWildcardAfterDot() {
- PackageFilter pf = new PackageFilter("de.test.package.*");
- assertThat(pf.matches("de.test.package"), is(false));
- assertThat(pf.matches("de.test.package.packageOne"), is(true));
- assertThat(pf.matches("de.test.package.packageOne.p2"), is(true));
- }
-
- @Test
- public void testWithWildcardWithoutDot() {
- PackageFilter pf = new PackageFilter("de.test.package*");
- assertThat(pf.matches("de.test.package"), is(true));
- assertThat(pf.matches("de.test.package.packageOne"), is(true));
- assertThat(pf.matches("de.test.package.packageOne.p2"), is(true));
- }
-
- @Test
- public void testWithWildcardAndFollowingPackagename() {
- PackageFilter pf = new PackageFilter("de.test.package.*.test");
- assertThat(pf.matches("de.test.package"), is(false));
- assertThat(pf.matches("de.test.package.p.test"), is(true));
- assertThat(pf.matches("de.test.package.packageOne.test"), is(true));
- assertThat(pf.matches("de.test.package.packageOne.test2"), is(false));
- }
-}
+package japicmp.cmp;
+
+import japicmp.config.PackageFilter;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class PackageFilterTest {
+
+ @Test
+ public void testWithoutWildcard() {
+ PackageFilter pf = new PackageFilter("de.test.package");
+ assertThat(pf.matches("de.test.package"), is(true));
+ assertThat(pf.matches("de.test.package.packageOne"), is(true));
+ assertThat(pf.matches("de.test.package."), is(false));
+ assertThat(pf.matches("de.test.packag"), is(false));
+ assertThat(pf.matches("de.test"), is(false));
+ }
+
+ @Test
+ public void testWithWildcardAfterDot() {
+ PackageFilter pf = new PackageFilter("de.test.package.*");
+ assertThat(pf.matches("de.test.package"), is(false));
+ assertThat(pf.matches("de.test.package.packageOne"), is(true));
+ assertThat(pf.matches("de.test.package.packageOne.p2"), is(true));
+ }
+
+ @Test
+ public void testWithWildcardWithoutDot() {
+ PackageFilter pf = new PackageFilter("de.test.package*");
+ assertThat(pf.matches("de.test.package"), is(true));
+ assertThat(pf.matches("de.test.package.packageOne"), is(true));
+ assertThat(pf.matches("de.test.package.packageOne.p2"), is(true));
+ }
+
+ @Test
+ public void testWithWildcardAndFollowingPackagename() {
+ PackageFilter pf = new PackageFilter("de.test.package.*.test");
+ assertThat(pf.matches("de.test.package"), is(false));
+ assertThat(pf.matches("de.test.package.p.test"), is(true));
+ assertThat(pf.matches("de.test.package.packageOne.test"), is(true));
+ assertThat(pf.matches("de.test.package.packageOne.test2"), is(false));
+ }
+}
diff --git a/japicmp/src/test/java/japicmp/util/ModifierHelperTest.java b/japicmp/src/test/java/japicmp/util/ModifierHelperTest.java
index 6f666a2..fdff3cd 100644
--- a/japicmp/src/test/java/japicmp/util/ModifierHelperTest.java
+++ b/japicmp/src/test/java/japicmp/util/ModifierHelperTest.java
@@ -1,41 +1,41 @@
-package japicmp.util;
-
-import japicmp.model.AccessModifier;
-import javassist.Modifier;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class ModifierHelperTest {
-
- @Test
- public void publicToPublic() {
- assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPublic(0), AccessModifier.PUBLIC), is(true));
- }
-
- @Test
- public void publicToProtected() {
- assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPublic(0), AccessModifier.PROTECTED), is(true));
- }
-
- @Test
- public void publicToPrivate() {
- assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPublic(0), AccessModifier.PRIVATE), is(true));
- }
-
- @Test
- public void privateToPublic() {
- assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPrivate(0), AccessModifier.PUBLIC), is(false));
- }
-
- @Test
- public void privateToProtected() {
- assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPrivate(0), AccessModifier.PROTECTED), is(false));
- }
-
- @Test
- public void privateToPrivate() {
- assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPrivate(0), AccessModifier.PRIVATE), is(true));
- }
-}
+package japicmp.util;
+
+import japicmp.model.AccessModifier;
+import javassist.Modifier;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ModifierHelperTest {
+
+ @Test
+ public void publicToPublic() {
+ assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPublic(0), AccessModifier.PUBLIC), is(true));
+ }
+
+ @Test
+ public void publicToProtected() {
+ assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPublic(0), AccessModifier.PROTECTED), is(true));
+ }
+
+ @Test
+ public void publicToPrivate() {
+ assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPublic(0), AccessModifier.PRIVATE), is(true));
+ }
+
+ @Test
+ public void privateToPublic() {
+ assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPrivate(0), AccessModifier.PUBLIC), is(false));
+ }
+
+ @Test
+ public void privateToProtected() {
+ assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPrivate(0), AccessModifier.PROTECTED), is(false));
+ }
+
+ @Test
+ public void privateToPrivate() {
+ assertThat(ModifierHelper.matchesModifierLevel(Modifier.setPrivate(0), AccessModifier.PRIVATE), is(true));
+ }
+}
diff --git a/japicmp/src/test/java/japicmp/util/SignatureParserTest.java b/japicmp/src/test/java/japicmp/util/SignatureParserTest.java
index 183fd8a..74e923e 100644
--- a/japicmp/src/test/java/japicmp/util/SignatureParserTest.java
+++ b/japicmp/src/test/java/japicmp/util/SignatureParserTest.java
@@ -1,99 +1,99 @@
-package japicmp.util;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class SignatureParserTest {
- private SignatureParser subject;
-
- @Before
- public void before() throws Exception {
- subject = new SignatureParser();
- }
-
- @Test
- public void testNoParamsReturnsVoid() {
- subject.parse("()V");
- assertThat(subject.getReturnType(), is("void"));
- assertThat(subject.getParameters().size(), is(0));
- }
-
- @Test
- public void testTwoReferenceParamsReturnsReference() {
- subject.parse("(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ManagedClientConnection;");
- assertThat(subject.getReturnType(), is("org.apache.http.conn.ManagedClientConnection"));
- assertThat(subject.getParameters().size(), is(2));
- assertThat(subject.getParameters(), hasItem("org.apache.http.conn.routing.HttpRoute"));
- assertThat(subject.getParameters(), hasItem("java.lang.Object"));
- }
-
- @Test
- public void testOneReferenceOnePrimParamsReturnsVoid() {
- subject.parse("(JLjava/util/concurrent/TimeUnit;)V");
- assertThat(subject.getReturnType(), is("void"));
- assertThat(subject.getParameters().size(), is(2));
- assertThat(subject.getParameters(), hasItem("long"));
- assertThat(subject.getParameters(), hasItem("java.util.concurrent.TimeUnit"));
- }
-
- @Test
- public void testArrayTwoPrimParamsReturnsVoid() {
- subject.parse("([BII)V");
- assertThat(subject.getReturnType(), is("void"));
- assertThat(subject.getParameters().size(), is(3));
- assertThat(subject.getParameters(), hasItem("byte[]"));
- assertThat(subject.getParameters(), hasItem("int"));
- }
-
- @Test
- public void testArrayPrimParamReturnsVoid() {
- subject.parse("([B)V");
- assertThat(subject.getReturnType(), is("void"));
- assertThat(subject.getParameters().size(), is(1));
- assertThat(subject.getParameters(), hasItem("byte[]"));
- }
-
- @Test
- public void testArrayRefParamReturnsVoid() {
- subject.parse("([Lorg/apache/http/cookie/Cookie;)V");
- assertThat(subject.getReturnType(), is("void"));
- assertThat(subject.getParameters().size(), is(1));
- assertThat(subject.getParameters(), hasItem("org.apache.http.cookie.Cookie[]"));
- }
-
- @Test
- public void testOneReferenceParamsReturnsVoid() {
- subject.parse("(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V");
- assertThat(subject.getReturnType(), is("void"));
- assertThat(subject.getParameters().size(), is(1));
- assertThat(subject.getParameters(), hasItem("org.apache.http.impl.conn.tsccm.BasicPoolEntry"));
- }
-
- @Test
- public void testOneReferenceParamsReturnsOneReference() {
- subject.parse("(Ljava/util/List;)Ljava/util/List;");
- assertThat(subject.getReturnType(), is("java.util.List"));
- assertThat(subject.getParameters().size(), is(1));
- assertThat(subject.getParameters(), hasItem("java.util.List"));
- }
-
- @Test
- public void testNoParamsReturnsReference() {
- subject.parse("()Lorg/apache/http/conn/scheme/SchemeRegistry;");
- assertThat(subject.getReturnType(), is("org.apache.http.conn.scheme.SchemeRegistry"));
- assertThat(subject.getParameters().size(), is(0));
- }
-
- @Test
- public void testNoParamsReturnsI() {
- subject.parse("()I");
- assertThat(subject.getReturnType(), is("int"));
- assertThat(subject.getParameters().size(), is(0));
- }
-}
+package japicmp.util;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class SignatureParserTest {
+ private SignatureParser subject;
+
+ @Before
+ public void before() throws Exception {
+ subject = new SignatureParser();
+ }
+
+ @Test
+ public void testNoParamsReturnsVoid() {
+ subject.parse("()V");
+ assertThat(subject.getReturnType(), is("void"));
+ assertThat(subject.getParameters().size(), is(0));
+ }
+
+ @Test
+ public void testTwoReferenceParamsReturnsReference() {
+ subject.parse("(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ManagedClientConnection;");
+ assertThat(subject.getReturnType(), is("org.apache.http.conn.ManagedClientConnection"));
+ assertThat(subject.getParameters().size(), is(2));
+ assertThat(subject.getParameters(), hasItem("org.apache.http.conn.routing.HttpRoute"));
+ assertThat(subject.getParameters(), hasItem("java.lang.Object"));
+ }
+
+ @Test
+ public void testOneReferenceOnePrimParamsReturnsVoid() {
+ subject.parse("(JLjava/util/concurrent/TimeUnit;)V");
+ assertThat(subject.getReturnType(), is("void"));
+ assertThat(subject.getParameters().size(), is(2));
+ assertThat(subject.getParameters(), hasItem("long"));
+ assertThat(subject.getParameters(), hasItem("java.util.concurrent.TimeUnit"));
+ }
+
+ @Test
+ public void testArrayTwoPrimParamsReturnsVoid() {
+ subject.parse("([BII)V");
+ assertThat(subject.getReturnType(), is("void"));
+ assertThat(subject.getParameters().size(), is(3));
+ assertThat(subject.getParameters(), hasItem("byte[]"));
+ assertThat(subject.getParameters(), hasItem("int"));
+ }
+
+ @Test
+ public void testArrayPrimParamReturnsVoid() {
+ subject.parse("([B)V");
+ assertThat(subject.getReturnType(), is("void"));
+ assertThat(subject.getParameters().size(), is(1));
+ assertThat(subject.getParameters(), hasItem("byte[]"));
+ }
+
+ @Test
+ public void testArrayRefParamReturnsVoid() {
+ subject.parse("([Lorg/apache/http/cookie/Cookie;)V");
+ assertThat(subject.getReturnType(), is("void"));
+ assertThat(subject.getParameters().size(), is(1));
+ assertThat(subject.getParameters(), hasItem("org.apache.http.cookie.Cookie[]"));
+ }
+
+ @Test
+ public void testOneReferenceParamsReturnsVoid() {
+ subject.parse("(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V");
+ assertThat(subject.getReturnType(), is("void"));
+ assertThat(subject.getParameters().size(), is(1));
+ assertThat(subject.getParameters(), hasItem("org.apache.http.impl.conn.tsccm.BasicPoolEntry"));
+ }
+
+ @Test
+ public void testOneReferenceParamsReturnsOneReference() {
+ subject.parse("(Ljava/util/List;)Ljava/util/List;");
+ assertThat(subject.getReturnType(), is("java.util.List"));
+ assertThat(subject.getParameters().size(), is(1));
+ assertThat(subject.getParameters(), hasItem("java.util.List"));
+ }
+
+ @Test
+ public void testNoParamsReturnsReference() {
+ subject.parse("()Lorg/apache/http/conn/scheme/SchemeRegistry;");
+ assertThat(subject.getReturnType(), is("org.apache.http.conn.scheme.SchemeRegistry"));
+ assertThat(subject.getParameters().size(), is(0));
+ }
+
+ @Test
+ public void testNoParamsReturnsI() {
+ subject.parse("()I");
+ assertThat(subject.getReturnType(), is("int"));
+ assertThat(subject.getParameters().size(), is(0));
+ }
+}
diff --git a/japicmp/src/test/java/japicmp/util/StringArrayEnumerationTest.java b/japicmp/src/test/java/japicmp/util/StringArrayEnumerationTest.java
index 853d71e..df6035c 100644
--- a/japicmp/src/test/java/japicmp/util/StringArrayEnumerationTest.java
+++ b/japicmp/src/test/java/japicmp/util/StringArrayEnumerationTest.java
@@ -1,37 +1,37 @@
-package japicmp.util;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.NoSuchElementException;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class StringArrayEnumerationTest {
-
- @Test(expected = NoSuchElementException.class)
- public void testEmptyArray() {
- StringArrayEnumeration sae = new StringArrayEnumeration(new String[]{});
- assertThat(sae.hasMoreElements(), is(false));
- sae.nextElement();
- }
-
- @Test
- public void testOneElementArray() {
- StringArrayEnumeration sae = new StringArrayEnumeration(new String[]{"1"});
- assertThat(sae.hasMoreElements(), is(true));
- assertThat(sae.nextElement(), is("1"));
- assertThat(sae.hasMoreElements(), is(false));
- }
-
- @Test
- public void testTwoElementsArray() {
- StringArrayEnumeration sae = new StringArrayEnumeration(new String[]{"1","2"});
- assertThat(sae.hasMoreElements(), is(true));
- assertThat(sae.nextElement(), is("1"));
- assertThat(sae.hasMoreElements(), is(true));
- assertThat(sae.nextElement(), is("2"));
- assertThat(sae.hasMoreElements(), is(false));
- }
-}
+package japicmp.util;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.NoSuchElementException;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class StringArrayEnumerationTest {
+
+ @Test(expected = NoSuchElementException.class)
+ public void testEmptyArray() {
+ StringArrayEnumeration sae = new StringArrayEnumeration(new String[]{});
+ assertThat(sae.hasMoreElements(), is(false));
+ sae.nextElement();
+ }
+
+ @Test
+ public void testOneElementArray() {
+ StringArrayEnumeration sae = new StringArrayEnumeration(new String[]{"1"});
+ assertThat(sae.hasMoreElements(), is(true));
+ assertThat(sae.nextElement(), is("1"));
+ assertThat(sae.hasMoreElements(), is(false));
+ }
+
+ @Test
+ public void testTwoElementsArray() {
+ StringArrayEnumeration sae = new StringArrayEnumeration(new String[]{"1","2"});
+ assertThat(sae.hasMoreElements(), is(true));
+ assertThat(sae.nextElement(), is("1"));
+ assertThat(sae.hasMoreElements(), is(true));
+ assertThat(sae.nextElement(), is("2"));
+ assertThat(sae.hasMoreElements(), is(false));
+ }
+}
diff --git a/pom.xml b/pom.xml
index d7b722c..9406c2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,161 +1,161 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>japicmp</groupId>
- <artifactId>japicmp-base</artifactId>
- <version>0.0.3-SNAPSHOT</version>
- <packaging>pom</packaging>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <github.account>siom79</github.account>
- <cloudbees.account>siom79</cloudbees.account>
- </properties>
-
- <modules>
- <module>japicmp</module>
- <module>japicmp-testbase</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-release-plugin</artifactId>
- <version>2.4.1</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>2.9.1</version>
- <executions>
- <execution>
- <id>attach-javadocs</id>
- <goals>
- <goal>jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <version>2.2.1</version>
- <executions>
- <execution>
- <id>attach-sources</id>
- <goals>
- <goal>jar-no-fork</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <!-- explicitly define maven-deploy-plugin after other to force exec order -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.7</version>
- <executions>
- <execution>
- <id>deploy</id>
- <phase>deploy</phase>
- <goals>
- <goal>deploy</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- <extensions>
- <extension>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-webdav-jackrabbit</artifactId>
- <version>1.0-beta-7</version>
- </extension>
- </extensions>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <version>2.5.2</version>
- <configuration>
- <formats>
- <format>html</format>
- <format>xml</format>
- </formats>
- </configuration>
- <executions>
- <execution>
- <phase>verify</phase>
- <goals>
- <goal>clean</goal>
- <goal>cobertura</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
-
- <scm>
- <connection>scm:git:git://github.com/${github.account}/${project.groupId}.git</connection>
- <developerConnection>scm:git:git@github.com:${github.account}/${project.groupId}.git</developerConnection>
- <url>http://github.com/${github.account}/${project.groupId}/tree/master/</url>
- <tag>HEAD</tag>
- </scm>
-
- <distributionManagement>
- <repository>
- <id>cloudbees-public-release</id>
- <url>dav:https://repository-${cloudbees.account}.forge.cloudbees.com/release</url>
- </repository>
- <snapshotRepository>
- <id>cloudbees-public-snapshot</id>
- <url>dav:https://repository-${cloudbees.account}.forge.cloudbees.com/snapshot</url>
- </snapshotRepository>
- </distributionManagement>
-
- <repositories>
- <repository>
- <id>cloudbees-public-snapshot</id>
- <url>https://repository-${cloudbees.account}.forge.cloudbees.com/public-snapshot</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>cloudbees-public-release</id>
- <url>https://repository-${cloudbees.account}.forge.cloudbees.com/public-release</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>japicmp</groupId>
+ <artifactId>japicmp-base</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <github.account>siom79</github.account>
+ <cloudbees.account>siom79</cloudbees.account>
+ </properties>
+
+ <modules>
+ <module>japicmp</module>
+ <module>japicmp-testbase</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.11</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.1</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.4.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.9.1</version>
+ <executions>
+ <execution>
+ <id>attach-javadocs</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.2.1</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <!-- explicitly define maven-deploy-plugin after other to force exec order -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.7</version>
+ <executions>
+ <execution>
+ <id>deploy</id>
+ <phase>deploy</phase>
+ <goals>
+ <goal>deploy</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav-jackrabbit</artifactId>
+ <version>1.0-beta-7</version>
+ </extension>
+ </extensions>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ <version>2.5.2</version>
+ <configuration>
+ <formats>
+ <format>html</format>
+ <format>xml</format>
+ </formats>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>verify</phase>
+ <goals>
+ <goal>clean</goal>
+ <goal>cobertura</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <scm>
+ <connection>scm:git:git://github.com/${github.account}/${project.groupId}.git</connection>
+ <developerConnection>scm:git:git@github.com:${github.account}/${project.groupId}.git</developerConnection>
+ <url>http://github.com/${github.account}/${project.groupId}/tree/master/</url>
+ <tag>HEAD</tag>
+ </scm>
+
+ <distributionManagement>
+ <repository>
+ <id>cloudbees-public-release</id>
+ <url>dav:https://repository-${cloudbees.account}.forge.cloudbees.com/release</url>
+ </repository>
+ <snapshotRepository>
+ <id>cloudbees-public-snapshot</id>
+ <url>dav:https://repository-${cloudbees.account}.forge.cloudbees.com/snapshot</url>
+ </snapshotRepository>
+ </distributionManagement>
+
+ <repositories>
+ <repository>
+ <id>cloudbees-public-snapshot</id>
+ <url>https://repository-${cloudbees.account}.forge.cloudbees.com/public-snapshot</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>cloudbees-public-release</id>
+ <url>https://repository-${cloudbees.account}.forge.cloudbees.com/public-release</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
</project>
\ No newline at end of file
diff --git a/structure101.java.hsp b/structure101.java.hsp
new file mode 100644
index 0000000..a6615d5
--- /dev/null
+++ b/structure101.java.hsp
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<local-project language="java" version="4.0.5155" xml-version="3" flavor="j2se">
+ <property name="hide-externals" value="true" />
+ <property name="show-needs-to-compile" value="false" />
+ <property name="detail-mode" value="true" />
+ <property name="include-injected-dependency" value="true" />
+ <property name="project-type" value="maven" />
+ <property name="action-set-mod" value="10" />
+ <property name="hide-deprecated" value="false" />
+ <property name="parse-archive-in-archive" value="false" />
+ <classpath relativeto="D:\Programmierung\japicmp\github\japicmp">
+ <classpathentry kind="lib" path="japicmp-testbase\japicmp-test-v1\target\japicmp-test-v1-0.0.3-SNAPSHOT.jar" />
+ <classpathentry kind="lib" path="japicmp-testbase\japicmp-test\target\japicmp-test-0.0.3-SNAPSHOT.jar" />
+ <classpathentry kind="lib" path="japicmp\target\japicmp-0.0.3-SNAPSHOT.jar" />
+ <classpathentry kind="lib" path="japicmp-testbase\japicmp-test-v2\target\japicmp-test-v2-0.0.3-SNAPSHOT.jar" />
+ </classpath>
+ <pom-root-files>
+ <pom path="D:\Programmierung\japicmp\github\japicmp\pom.xml" />
+ </pom-root-files>
+ <transformations>
+ <transformation in="*" out="{jar}.*" />
+ </transformations>
+ <restructuring>
+ <set version="3" name="Model 1" hiview="Codemap" active="true" todo="false" list="0">
+ <hide>
+ <item-fqn fqn="japicmp-base.japicmp.japicmp.javassist" type="package">
+ <node name="japicmp-base" type="pom" />
+ <node name="japicmp" type="pom" />
+ <node name="japicmp" type="jar" />
+ <node name="javassist" type="package" />
+ </item-fqn>
+ </hide>
+ <hide>
+ <item-fqn fqn="japicmp-base.japicmp.japicmp.org" type="package">
+ <node name="japicmp-base" type="pom" />
+ <node name="japicmp" type="pom" />
+ <node name="japicmp" type="jar" />
+ <node name="org" type="package" />
+ </item-fqn>
+ </hide>
+ <hide>
+ <item-fqn fqn="japicmp-base.japicmp.japicmp.com" type="package">
+ <node name="japicmp-base" type="pom" />
+ <node name="japicmp" type="pom" />
+ <node name="japicmp" type="jar" />
+ <node name="com" type="package" />
+ </item-fqn>
+ </hide>
+ </set>
+ </restructuring>
+ <sourcepaths>
+ <pathentry type="file" path="D:\Programmierung\japicmp\github\japicmp\japicmp-testbase\japicmp-test-v1\src\main\java" />
+ <pathentry type="file" path="D:\Programmierung\japicmp\github\japicmp\japicmp\src\main\java" />
+ <pathentry type="file" path="D:\Programmierung\japicmp\github\japicmp\japicmp-testbase\japicmp-test-v2\src\main\java" />
+ </sourcepaths>
+ <grid-set sep="." version="4.0.5155">
+ <grid name="Diagram 2" enforce="true" locked="true" strict="false">
+ <row>
+ <cell name="japicmp" pattern="japicmp-base.japicmp.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp" pattern="japicmp-base.japicmp.japicmp.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp" pattern="japicmp-base.japicmp.japicmp.japicmp.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp" pattern="japicmp-base.japicmp.japicmp.japicmp.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="JApiCmp" pattern="japicmp-base.japicmp.japicmp.japicmp.JApiCmp" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <row>
+ <cell name="cli" pattern="japicmp-base.japicmp.japicmp.japicmp.cli.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="CliParser" pattern="japicmp-base.japicmp.japicmp.japicmp.cli.CliParser" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ <cell name="output" pattern="japicmp-base.japicmp.japicmp.japicmp.output.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="stdout" pattern="japicmp-base.japicmp.japicmp.japicmp.output.stdout.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="StdoutOutputGenerator" pattern="japicmp-base.japicmp.japicmp.japicmp.output.stdout.StdoutOutputGenerator" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ <cell name="xml" pattern="japicmp-base.japicmp.japicmp.japicmp.output.xml.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="xml" pattern="japicmp-base.japicmp.japicmp.japicmp.output.xml.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="XmlOutputGenerator" pattern="japicmp-base.japicmp.japicmp.japicmp.output.xml.XmlOutputGenerator" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <row>
+ <cell name="model" pattern="japicmp-base.japicmp.japicmp.japicmp.output.xml.model.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="JApiCmpXmlRoot" pattern="japicmp-base.japicmp.japicmp.japicmp.output.xml.model.JApiCmpXmlRoot" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <row>
+ <cell name="output" pattern="japicmp-base.japicmp.japicmp.japicmp.output.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="OutputTransformer" pattern="japicmp-base.japicmp.japicmp.japicmp.output.OutputTransformer" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <row>
+ <cell name="config" pattern="japicmp-base.japicmp.japicmp.japicmp.config.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="Options" pattern="japicmp-base.japicmp.japicmp.japicmp.config.Options" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <row>
+ <cell name="cmp" pattern="japicmp-base.japicmp.japicmp.japicmp.cmp.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="JarArchiveComparator" pattern="japicmp-base.japicmp.japicmp.japicmp.cmp.JarArchiveComparator" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ <row>
+ <cell name="ClassComparator" pattern="japicmp-base.japicmp.japicmp.japicmp.cmp.ClassComparator" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ <row>
+ <cell name="ClassesComparator" pattern="japicmp-base.japicmp.japicmp.japicmp.cmp.ClassesComparator" vexpanded="false" visibility="public" drill="false" />
+ <cell name="JarArchiveComparatorOptions" pattern="japicmp-base.japicmp.japicmp.japicmp.cmp.JarArchiveComparatorOptions" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ <row>
+ <cell name="AccessModifier" pattern="japicmp-base.japicmp.japicmp.japicmp.cmp.AccessModifier" vexpanded="false" visibility="public" drill="false" />
+ <cell name="PackageFilter" pattern="japicmp-base.japicmp.japicmp.japicmp.config.PackageFilter" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <row>
+ <cell name="exception" pattern="japicmp-base.japicmp.japicmp.japicmp.exception.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="JApiCmpException" pattern="japicmp-base.japicmp.japicmp.japicmp.exception.JApiCmpException" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ <cell name="model" pattern="japicmp-base.japicmp.japicmp.japicmp.model.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="JApiClass" pattern="japicmp-base.japicmp.japicmp.japicmp.model.JApiClass" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ <row>
+ <cell name="JApiMethod" pattern="japicmp-base.japicmp.japicmp.japicmp.model.JApiMethod" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ <row>
+ <cell name="JApiChangeStatus" pattern="japicmp-base.japicmp.japicmp.japicmp.model.JApiChangeStatus" vexpanded="false" visibility="public" drill="false" />
+ <cell name="JApiParameter" pattern="japicmp-base.japicmp.japicmp.japicmp.model.JApiParameter" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ <cell name="util" pattern="japicmp-base.japicmp.japicmp.japicmp.util.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="ModifierHelper" pattern="japicmp-base.japicmp.japicmp.japicmp.util.ModifierHelper" vexpanded="false" visibility="public" drill="false" />
+ <cell name="SignatureParser" pattern="japicmp-base.japicmp.japicmp.japicmp.util.SignatureParser" vexpanded="false" visibility="public" drill="false" />
+ <cell name="StringArrayEnumeration" pattern="japicmp-base.japicmp.japicmp.japicmp.util.StringArrayEnumeration" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ <cell name="japicmp-testbase" pattern="japicmp-base.japicmp-testbase.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp-test-v1" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp-test-v1" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="test" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="test" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="Modifier" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.Modifier" vexpanded="false" visibility="public" drill="false" />
+ <cell name="Removed" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.Removed" vexpanded="false" visibility="public" drill="false" />
+ <cell name="Unchanged" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.Unchanged" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ <cell name="packageOne" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.packageOne.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="PackageOne" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.packageOne.PackageOne" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ <cell name="packageTwo" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.packageTwo.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="PackageTwo" pattern="japicmp-base.japicmp-testbase.japicmp-test-v1.japicmp-test-v1.japicmp.test.packageTwo.PackageTwo" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ <cell name="japicmp-test-v2" pattern="japicmp-base.japicmp-testbase.japicmp-test-v2.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp-test-v2" pattern="japicmp-base.japicmp-testbase.japicmp-test-v2.japicmp-test-v2.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="japicmp" pattern="japicmp-base.japicmp-testbase.japicmp-test-v2.japicmp-test-v2.japicmp.*" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="test" pattern="japicmp-base.japicmp-testbase.japicmp-test-v2.japicmp-test-v2.japicmp.test.?" vexpanded="true" visibility="public" drill="false">
+ <grid>
+ <row>
+ <cell name="Added" pattern="japicmp-base.japicmp-testbase.japicmp-test-v2.japicmp-test-v2.japicmp.test.Added" vexpanded="false" visibility="public" drill="false" />
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ </grid>
+ </cell>
+ </row>
+ <description>Top-level breakout (depth=2147483647)</description>
+ </grid>
+ </grid-set>
+</local-project>
+