[Fb-contrib-commit] SF.net SVN: fb-contrib:[1779] trunk/fb-contrib
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2015-05-31 15:00:00
|
Revision: 1779
http://sourceforge.net/p/fb-contrib/code/1779
Author: dbrosius
Date: 2015-05-31 14:59:57 +0000 (Sun, 31 May 2015)
Log Message:
-----------
sync from github
Modified Paths:
--------------
trunk/fb-contrib/build.xml
trunk/fb-contrib/etc/bugrank.txt
trunk/fb-contrib/etc/findbugs.xml
trunk/fb-contrib/etc/messages.xml
trunk/fb-contrib/htdocs/index.shtml
trunk/fb-contrib/pom.xml
trunk/fb-contrib/samples/CD_Sample.java
trunk/fb-contrib/samples/JAO_Sample.java
trunk/fb-contrib/samples/OPM_Sample.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BogusExceptionDeclaration.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/CircularDependencies.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ClassEnvy.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ContraVariantArrayAssignment.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/JUnitAssertionOddities.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/MissingMethodsDetector.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/WriteOnlyCollection.java
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/utils/BugType.java
Modified: trunk/fb-contrib/build.xml
===================================================================
--- trunk/fb-contrib/build.xml 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/build.xml 2015-05-31 14:59:57 UTC (rev 1779)
@@ -18,7 +18,7 @@
<property name="javac.deprecation" value="on" />
<property name="javac.debug" value="on" />
- <property name="fb-contrib.version" value="6.1.0" />
+ <property name="fb-contrib.version" value="6.2.0" />
<property name="sonatype.dir" value="${user.home}/.fb-contrib-${fb-contrib.version}-sonatype" />
Modified: trunk/fb-contrib/etc/bugrank.txt
===================================================================
--- trunk/fb-contrib/etc/bugrank.txt 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/etc/bugrank.txt 2015-05-31 14:59:57 UTC (rev 1779)
@@ -73,6 +73,7 @@
+0 BugPattern JAO_JUNIT_ASSERTION_ODDITIES_BOOLEAN_ASSERT
+0 BugPattern JAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL
+0 BugPattern JAO_JUNIT_ASSERTION_ODDITIES_INEXACT_DOUBLE
++2 BugPattern JAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT
+0 BugPattern JAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS
+0 BugPattern JVR_JDBC_VENDOR_RELIANCE
+0 BugPattern LEST_LOST_EXCEPTION_STACK_TRACE
Modified: trunk/fb-contrib/etc/findbugs.xml
===================================================================
--- trunk/fb-contrib/etc/findbugs.xml 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/etc/findbugs.xml 2015-05-31 14:59:57 UTC (rev 1779)
@@ -20,7 +20,7 @@
<!-- Detectors -->
-<!-- COMMENT OUT FOR RELEASE -->
+<!-- COMMENT OUT FOR RELEASE
<Detector class="com.mebigfatguy.fbcontrib.debug.OCSDebugger" speed="fast"/>
@@ -34,7 +34,7 @@
<Detector class="com.mebigfatguy.fbcontrib.detect.BloatedAssignmentScope" speed="fast" reports="BAS_BLOATED_ASSIGNMENT_SCOPE" hidden="true" />
-<!-- COMMENT OUT FOR RELEASE -->
+ COMMENT OUT FOR RELEASE -->
<Detector class="com.mebigfatguy.fbcontrib.collect.CollectStatistics" speed="fast" reports="" hidden="true" />
@@ -172,7 +172,7 @@
<Detector class="com.mebigfatguy.fbcontrib.detect.ConfusingFunctionSemantics" speed="fast" reports="CFS_CONFUSING_FUNCTION_SEMANTICS" />
<Detector class="com.mebigfatguy.fbcontrib.detect.JUnitAssertionOddities" speed="fast"
- reports="JAO_JUNIT_ASSERTION_ODDITIES_ACTUAL_CONSTANT,JAO_JUNIT_ASSERTION_ODDITIES_INEXACT_DOUBLE,JAO_JUNIT_ASSERTION_ODDITIES_BOOLEAN_ASSERT,JAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL,JAO_JUNIT_ASSERTION_ODDITIES_ASSERT_USED,JAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS" />
+ reports="JAO_JUNIT_ASSERTION_ODDITIES_ACTUAL_CONSTANT,JAO_JUNIT_ASSERTION_ODDITIES_INEXACT_DOUBLE,JAO_JUNIT_ASSERTION_ODDITIES_BOOLEAN_ASSERT,JAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL,JAO_JUNIT_ASSERTION_ODDITIES_ASSERT_USED,JAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS,JAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT" />
<Detector class="com.mebigfatguy.fbcontrib.detect.SuspiciousCloneAlgorithm" speed="fast" reports="SCA_SUSPICIOUS_CLONE_ALGORITHM" />
@@ -277,21 +277,21 @@
<Detector class="com.mebigfatguy.fbcontrib.detect.ConflictingTimeUnits" speed="fast" reports="CTU_CONFLICTING_TIME_UNITS" />
- <!-- COMMENT OUT FOR POINT RELEASE -->
-
<Detector class="com.mebigfatguy.fbcontrib.detect.CharsetIssues" speed="fast" reports="CSI_CHAR_SET_ISSUES_USE_STANDARD_CHARSET,CSI_CHAR_SET_ISSUES_UNKNOWN_ENCODING,CSI_CHAR_SET_ISSUES_USE_STANDARD_CHARSET_NAME" />
<Detector class="com.mebigfatguy.fbcontrib.detect.ContainsBasedConditional" speed="fast" reports="CBC_CONTAINS_BASED_CONDITIONAL" />
-
+
+ <Detector class="com.mebigfatguy.fbcontrib.detect.SuspiciousLoopSearch" speed="fast" reports="SLS_SUSPICIOUS_LOOP_SEARCH" />
+
+ <Detector class="com.mebigfatguy.fbcontrib.detect.ConflatingResourcesAndFiles" speed="fast" reports="CRF_CONFLATING_RESOURCES_AND_FILES" />
+
+ <!-- COMMENT OUT FOR POINT RELEASE
+
<Detector class="com.mebigfatguy.fbcontrib.detect.OverlyPermissiveMethod" speed="fast" reports="OPM_OVERLY_PERMISSIVE_METHOD" />
- <Detector class="com.mebigfatguy.fbcontrib.detect.ClassImpersonatingString" speed="fast" reports="CIS_STRING_PARSING_A_FIELD,CIS_TOSTRING_STORED_IN_FIELD" />
+ <Detector class="com.mebigfatguy.fbcontrib.detect.ClassImpersonatingString" speed="fast" reports="CIS_STRING_PARSING_A_FIELD,CIS_TOSTRING_STORED_IN_FIELD" />
- <Detector class="com.mebigfatguy.fbcontrib.detect.SuspiciousLoopSearch" speed="fast" reports="SLS_SUSPICIOUS_LOOP_SEARCH" />
-
- <Detector class="com.mebigfatguy.fbcontrib.detect.ConflatingResourcesAndFiles" speed="fast" reports="CRF_CONFLATING_RESOURCES_AND_FILES" />
-
- <!-- COMMENT OUT FOR POINT RELEASE -->
+ COMMENT OUT FOR POINT RELEASE -->
<!-- BugPattern -->
@@ -399,8 +399,8 @@
<BugPattern abbrev="SPP" type="SPP_NON_USEFUL_TOSTRING" category="STYLE" />
<BugPattern abbrev="SPP" type="SPP_TOSTRING_ON_STRING" category="CORRECTNESS" />
<BugPattern abbrev="SPP" type="SPP_EQUALS_ON_STRING_BUILDER" category="CORRECTNESS" />
- <BugPattern abbrev="SPP" type="SPP_CONVERSION_OF_STRING_LITERAL" category="CORRECTNESS" experimental="true" />
- <BugPattern abbrev="SPP" type="SPP_STATIC_FORMAT_STRING" category="CORRECTNESS" experimental="true" />
+ <BugPattern abbrev="SPP" type="SPP_CONVERSION_OF_STRING_LITERAL" category="CORRECTNESS" />
+ <BugPattern abbrev="SPP" type="SPP_STATIC_FORMAT_STRING" category="CORRECTNESS" />
<BugPattern abbrev="BAS" type="BAS_BLOATED_ASSIGNMENT_SCOPE" category="PERFORMANCE" />
<BugPattern abbrev="SCII" type="SCII_SPOILED_CHILD_INTERFACE_IMPLEMENTOR" category="STYLE" />
<BugPattern abbrev="DWI" type="DWI_DELETING_WHILE_ITERATING" category="CORRECTNESS" />
@@ -422,6 +422,7 @@
<BugPattern abbrev="JAO" type="JAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL" category="CORRECTNESS" />
<BugPattern abbrev="JAO" type="JAO_JUNIT_ASSERTION_ODDITIES_ASSERT_USED" category="CORRECTNESS" />
<BugPattern abbrev="JAO" type="JAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS" category="CORRECTNESS" />
+ <BugPattern abbrev="JAO" type="JAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT" category="CORRECTNESS" />
<BugPattern abbrev="SCA" type="SCA_SUSPICIOUS_CLONE_ALGORITHM" category="CORRECTNESS" />
<BugPattern abbrev="WEM" type="WEM_WEAK_EXCEPTION_MESSAGING" category="STYLE" />
<BugPattern abbrev="SCSS" type="SCSS_SUSPICIOUS_CLUSTERED_SESSION_SUPPORT" category="CORRECTNESS" />
@@ -507,14 +508,14 @@
<BugPattern abbrev="HCP" type="HCP_HTTP_REQUEST_RESOURCES_NOT_FREED_LOCAL" category="CORRECTNESS"/>
<BugPattern abbrev="HCP" type="HCP_HTTP_REQUEST_RESOURCES_NOT_FREED_FIELD" category="CORRECTNESS"/>
<BugPattern abbrev="CTU" type="CTU_CONFLICTING_TIME_UNITS" category="CORRECTNESS" />
- <BugPattern abbrev="CSI" type="CSI_CHAR_SET_ISSUES_USE_STANDARD_CHARSET" category="CORRECTNESS" experimental="true"/>
- <BugPattern abbrev="CSI" type="CSI_CHAR_SET_ISSUES_USE_STANDARD_CHARSET_NAME" category="CORRECTNESS" experimental="true"/>
- <BugPattern abbrev="CSI" type="CSI_CHAR_SET_ISSUES_UNKNOWN_ENCODING" category="CORRECTNESS" experimental="true"/>
- <BugPattern abbrev="CBC" type="CBC_CONTAINS_BASED_CONDITIONAL" category="STYLE" experimental="true"/>
+ <BugPattern abbrev="CSI" type="CSI_CHAR_SET_ISSUES_USE_STANDARD_CHARSET" category="CORRECTNESS"/>
+ <BugPattern abbrev="CSI" type="CSI_CHAR_SET_ISSUES_USE_STANDARD_CHARSET_NAME" category="CORRECTNESS"/>
+ <BugPattern abbrev="CSI" type="CSI_CHAR_SET_ISSUES_UNKNOWN_ENCODING" category="CORRECTNESS"/>
+ <BugPattern abbrev="CBC" type="CBC_CONTAINS_BASED_CONDITIONAL" category="STYLE"/>
<BugPattern abbrev="OPM" type="OPM_OVERLY_PERMISSIVE_METHOD" category="STYLE" experimental="true" />
<BugPattern abbrev="CIS" type="CIS_STRING_PARSING_A_FIELD" category="STYLE" experimental="true" />
<BugPattern abbrev="CIS" type="CIS_TOSTRING_STORED_IN_FIELD" category="STYLE" experimental="true" />
- <BugPattern abbrev="SLS" type="SLS_SUSPICIOUS_LOOP_SEARCH" category="CORRECTNESS" experimental="true" />
- <BugPattern abbrev="CRF" type="CRF_CONFLATING_RESOURCES_AND_FILES" category="CORRECTNESS" experimental="true" />
+ <BugPattern abbrev="SLS" type="SLS_SUSPICIOUS_LOOP_SEARCH" category="CORRECTNESS" />
+ <BugPattern abbrev="CRF" type="CRF_CONFLATING_RESOURCES_AND_FILES" category="CORRECTNESS" />
</FindbugsPlugin>
Modified: trunk/fb-contrib/etc/messages.xml
===================================================================
--- trunk/fb-contrib/etc/messages.xml 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/etc/messages.xml 2015-05-31 14:59:57 UTC (rev 1779)
@@ -3500,6 +3500,19 @@
]]>
</Details>
</BugPattern>
+
+ <BugPattern type="JAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT">
+ <ShortDescription>Method appears to have no assertions</ShortDescription>
+ <LongDescription>Method {1} appears to have no assertions</LongDescription>
+ <Details>
+ <![CDATA[
+ <p>This JUnit test method has no assertions. While a unit test could still be valid if it relies on whether
+ or not an exception is thrown, it is usually a sign of a weak test if there are no assertions. It is also
+ possible that assertions occur in a called method that is not seen by this detector, but this makes the logic of
+ this test more difficult to reason about.</p>
+ ]]>
+ </Details>
+ </BugPattern>
<BugPattern type="SCA_SUSPICIOUS_CLONE_ALGORITHM">
<ShortDescription>Clone method stores a new value to member field of source object</ShortDescription>
Modified: trunk/fb-contrib/htdocs/index.shtml
===================================================================
--- trunk/fb-contrib/htdocs/index.shtml 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/htdocs/index.shtml 2015-05-31 14:59:57 UTC (rev 1779)
@@ -68,7 +68,7 @@
</li>
</ul>
</p>
- <p style="font-weight: bold;">The latest version of fb-contrib is 6.0.1 available for download
+ <p style="font-weight: bold;">The latest version of fb-contrib is 6.2.0 available for download
<a href="http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22fb-contrib%22">here</a>.</p>
<p style="font-weight: bold;">This version requires FindBugs 3.0.1 or better</p>
<p style="font-weight: bold;">Please note that active development for this project is now done on
@@ -77,22 +77,15 @@
</div>
<hr/>
- <img id="git_image" src="flip2.gif" onClick="toggleBlock('git', 'git_image');" align="top"/>
+ <img id="git_image" src="flip1.gif" onClick="toggleBlock('git', 'git_image');" align="top"/>
Detectors added in git<br/>
- <div id="git" style="display:block;">
+ <div id="git" style="display:none;">
<ul>
<li><b>[STB] Stacked Try Blocks</b><br/>
Looks for two or more try catch blocks that are consecutive and catch the
same kind of exception, and throw the same exception always. These blocks can
be coalesced into one.
</li>
- <li><b>[CSI] Charset Issues</b><br/>
- Looks for issues related to manually specified charsets by using string literals.
- </li>
- <li><b>[CBC] Contains based Conditional</b><br/>
- Looks for complex if expressions made up of multiple conditions joined by OR, whereit is much cleaner
- to build a static set of the possible values, and use the contains method on that set.
- </li>
<li><b>[OPM] Overly Permissive Method</b><br/>
Looks for methods that are declared more permissively than the code is using. For instance, declaring
a method public, when it could just be declared private.
@@ -101,7 +94,21 @@
Looks for string fields that appear to be built with parsing or calling
toString() on another object, or from objects that are fields.
</li>
- <li><b>[SLS] Suspicious Loop Search</b><br/>
+ </ul>
+ </div>
+ <hr/>
+ <img id="v6_2_0_image" src="flip2.gif" onClick="toggleBlock('v6_2_0', 'v6_2_0_image');" align="top"/>
+ Detectors added in v6.2.0<br/>
+ <div id="v6_2_0" style="display:block;">
+ <ul>
+ <li><b>[CSI] Charset Issues</b><br/>
+ Looks for issues related to manually specified charsets by using string literals.
+ </li>
+ <li><b>[CBC] Contains based Conditional</b><br/>
+ Looks for complex if expressions made up of multiple conditions joined by OR, whereit is much cleaner
+ to build a static set of the possible values, and use the contains method on that set.
+ </li>
+ <li><b>[SLS] Suspicious Loop Search</b><br/>
Looks for loops where an equality check is made and a variable is set because of it.
It would seem once the item is found, the loop can be terminated, but is not.
</li>
@@ -110,14 +117,13 @@
In the case of classpath URIs, this may work if the classpath is resolving to a folder, but will
fall for jar files.
</li>
- </ul>
- </div>
-
+ </ul>
+ </div>
<hr/>
-
<img id="v6_0_0_image" src="flip1.gif" onClick="toggleBlock('v6_0_0', 'v6_0_0_image');" align="top"/>
Detectors added in v6.0.0<br/>
<div id="v6_0_0" style="display:none;">
+ <ul>
<li><b>[PSC] Presize Collections</b><br/>
Looks for methods that create and populate collections, and while knowing
the end size of those collections, does not pre allocate the collection
Modified: trunk/fb-contrib/pom.xml
===================================================================
--- trunk/fb-contrib/pom.xml 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/pom.xml 2015-05-31 14:59:57 UTC (rev 1779)
@@ -8,8 +8,12 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.mebigfatguy.fb-contrib</groupId>
<artifactId>fb-contrib</artifactId>
- <version>6.1.0</version>
-
+ <version>6.2.0</version>
+
+ <prerequisites>
+ <maven>2.2.1</maven>
+ </prerequisites>
+
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
@@ -20,7 +24,7 @@
<description>An auxiliary findbugs.sourceforge.net plugin for java bug detectors that fall outside the narrow scope of detectors to be packaged with the product itself.</description>
<url>http://fb-contrib.mebigfatguy.com</url>
<inceptionYear>2005</inceptionYear>
-
+
<developers>
<developer>
<id>dbrosius</id>
@@ -62,6 +66,10 @@
<contributor>
<name>Philippe Arteau</name>
</contributor>
+ <contributor>
+ <name>Thrawn</name>
+ <email>she...@ya...</email>
+ </contributor>
</contributors>
<licenses>
@@ -70,13 +78,13 @@
<url>http://www.gnu.org/licenses/lgpl.txt</url>
</license>
</licenses>
-
+
<scm>
- <connection>scm:svn:https://fb-contrib.svn.sourceforge.net/svnroot/fb-contrib/trunk/</connection>
- <developerConnection>scm:svn:https://fb-contrib.svn.sourceforge.net/svnroot/fb-contrib/trunk/</developerConnection>
- <url>http://fb-contrib.svn.sourceforge.net/viewvc/fb-contrib/trunk/</url>
+ <connection>scm:git:https://github.com/mebigfatguy/fb-contrib/</connection>
+ <developerConnection>scm:git:https://github.com/mebigfatguy/fb-contrib/</developerConnection>
+ <url>https://github.com/mebigfatguy/fb-contrib/</url>
</scm>
-
+
<mailingLists>
<mailingList>
<name>fb-contrib-commit</name>
@@ -85,7 +93,7 @@
<post>fb-...@li...</post>
<archive>http://sourceforge.net/mailarchive/forum.php?forum_name=fb-contrib-commit</archive>
</mailingList>
-
+
<mailingList>
<name>fb-contrib-discuss</name>
<subscribe>https://lists.sourceforge.net/mailman/listinfo/fb-contrib-discuss</subscribe>
@@ -94,17 +102,18 @@
<archive>http://sourceforge.net/mailarchive/forum.php?forum_name=fb-contrib-discuss</archive>
</mailingList>
</mailingLists>
-
+
<issueManagement>
- <system>SourceForge.net Tracker</system>
- <url>http://sourceforge.net/tracker/?group_id=147536</url>
+ <system>GitHub</system>
+ <url>https://github.com/mebigfatguy/fb-contrib/issues/</url>
</issueManagement>
-
+
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <maven.build.timestamp.format>E MMM d hh:mm:ss yyyy XX</maven.build.timestamp.format>
</properties>
-
+
<dependencies>
<dependency>
<groupId>com.google.code.findbugs</groupId>
@@ -117,13 +126,13 @@
<artifactId>bcel-findbugs</artifactId>
<version>6.0</version>
<scope>provided</scope>
- </dependency>
+ </dependency>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>annotations</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
- </dependency>
+ </dependency>
</dependencies>
<build>
@@ -132,6 +141,7 @@
<resource>
<directory>${basedir}</directory>
<includes>
+ <include>plugin.xml</include>
<include>license.txt</include>
</includes>
</resource>
@@ -149,67 +159,109 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
- <version>2.3</version>
+ <version>2.5</version>
</plugin>
<plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>buildnumber-maven-plugin</artifactId>
+ <version>1.3</version>
+ </plugin>
+
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>2.1</version>
+ <version>3.1</version>
+ <configuration>
+ <compilerArgument>-Xlint</compilerArgument>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
- <version>2.5</version>
+ <version>2.8.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
- <version>2.3</version>
+ <version>2.5.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
- <version>2.3</version>
+ <version>2.5</version>
+ <configuration>
+ <archive>
+ <manifestEntries>
+ <fb-contrib-version>${project.version}</fb-contrib-version>
+ <Main-Class>com.mebigfatguy.fbcontrib.FBContrib</Main-Class>
+ <git-revision>${scmBranch} ${buildNumber} ${maven.build.timestamp}</git-revision>
+ <Eclipse-RegisterBuddy>edu.umd.cs.findbugs.plugin.eclipse</Eclipse-RegisterBuddy>
+ <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
+ <Bundle-Name>fb-contrib plugin</Bundle-Name>
+ <Bundle-SymbolicName>fb-contrib; singleton:=true</Bundle-SymbolicName>
+ <Bundle-Version>${project.version}</Bundle-Version>
+ <Bundle-ClassPath>.</Bundle-ClassPath>
+ <Bundle-Vendor>FB-Contrib Project</Bundle-Vendor>
+ <Require-Bundle>edu.umd.cs.findbugs.plugin.eclipse</Require-Bundle>
+ <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
+ <Export-Package>com.mebigfatguy.fbcontrib.collect, com.mebigfatguy.fbcontrib.detect, com.mebigfatguy.fbcontrib.debug</Export-Package>
+ <Import-Package>edu.umd.cs.findbugs, edu.umd.cs.findbugs.ba, edu.umd.cs.findbugs.bcel, edu.umd.cs.findbugs.visitclass, org.apache.bcel, org.apache.bcel.classfile, org.apache.bcel.generic</Import-Package>
+ </manifestEntries>
+ </archive>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
- <version>2.1.2</version>
+ <version>2.7</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
- <version>2.4.1</version>
+ <version>2.6</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
- <version>2.0.1</version>
+ <version>3.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
- <version>2.1.1</version>
+ <version>2.2.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.4.3</version>
+ <version>2.17</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>buildnumber-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>create</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
Modified: trunk/fb-contrib/samples/CD_Sample.java
===================================================================
--- trunk/fb-contrib/samples/CD_Sample.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/samples/CD_Sample.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -22,3 +22,21 @@
cds.toString();
}
}
+
+class Mammooth {
+ private int x;
+
+ static class Builder {
+ private int x;
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public Mammooth build() {
+ Mammooth m = new Mammooth();
+ m.x = x;
+ return m;
+ }
+ }
+}
Modified: trunk/fb-contrib/samples/JAO_Sample.java
===================================================================
--- trunk/fb-contrib/samples/JAO_Sample.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/samples/JAO_Sample.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -1,7 +1,8 @@
+import junit.framework.TestCase;
+
import org.junit.Assert;
+import org.junit.Test;
-import junit.framework.TestCase;
-
public class JAO_Sample extends TestCase {
public void testExactDoubles(double d1, double d2) {
@@ -40,3 +41,18 @@
}
}
+
+class New {
+ @Test
+ public void nada() {
+ }
+
+ @Test
+ public void aha() {
+ check("hello", "world");
+ }
+
+ private void check(String a, String b) {
+ Assert.assertEquals(a, b);
+ }
+}
Modified: trunk/fb-contrib/samples/OPM_Sample.java
===================================================================
--- trunk/fb-contrib/samples/OPM_Sample.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/samples/OPM_Sample.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -1,3 +1,5 @@
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -22,16 +24,27 @@
List<String> l = getFoo(new ArrayList<String>());
}
+ @Override
public List<String> getFoo(List<String> l) {
return l;
}
public void fpUncalledDontReport() {
+ fpHasRTAnnotation();
}
+ @RT
+ public void fpHasRTAnnotation() {
+ }
+
}
abstract class OPMSuper {
public abstract List<String> getFoo(List<String> l);
}
+
+@Retention(RetentionPolicy.RUNTIME)
+@interface RT {
+
+}
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -298,6 +298,7 @@
rootScopeBlock.addChild(sb);
} else {
sb.pushUpLoadStores();
+ sb.setStart(pc);
}
} else {
sb = new ScopeBlock(pc, target);
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BogusExceptionDeclaration.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BogusExceptionDeclaration.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BogusExceptionDeclaration.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -69,6 +69,7 @@
private OpcodeStack stack;
private Set<String> declaredCheckedExceptions;
private boolean classIsFinal;
+ private boolean classIsAnonymous;
public BogusExceptionDeclaration(BugReporter bugReporter) {
this.bugReporter = bugReporter;
@@ -87,7 +88,9 @@
if ((runtimeExceptionClass != null) && (exceptionClass != null)) {
stack = new OpcodeStack();
declaredCheckedExceptions = new HashSet<String>(6);
- classIsFinal = classContext.getJavaClass().isFinal();
+ JavaClass cls = classContext.getJavaClass();
+ classIsFinal = cls.isFinal();
+ classIsAnonymous = cls.isAnonymous();
super.visitClassContext(classContext);
}
} finally {
@@ -107,9 +110,14 @@
declaredCheckedExceptions.clear();
stack.resetForMethodEntry(this);
Method method = getMethod();
+
+ if (method.isSynthetic()) {
+ return;
+ }
+
ExceptionTable et = method.getExceptionTable();
if (et != null) {
- if (classIsFinal || method.isStatic() || method.isPrivate() || method.isFinal() || ((Values.CONSTRUCTOR.equals(method.getName()) && !isAnonymousInnerCtor(method, getThisClass())))) {
+ if (classIsFinal || classIsAnonymous || method.isStatic() || method.isPrivate() || method.isFinal() || ((Values.CONSTRUCTOR.equals(method.getName()) && !isAnonymousInnerCtor(method, getThisClass())))) {
String[] exNames = et.getExceptionNames();
for (String exName : exNames) {
try {
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/CircularDependencies.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/CircularDependencies.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/CircularDependencies.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -78,6 +78,9 @@
if (refClsName.startsWith(clsName) && (clsName.indexOf('$') >= 0))
return;
+
+ if (isStaticChild(clsName, refClsName) || isStaticChild(refClsName, clsName))
+ return;
Set<String> dependencies = dependencyGraph.get(clsName);
if (dependencies == null) {
@@ -117,6 +120,15 @@
dependencyGraph.clear();
}
+ private boolean isStaticChild(String child, String parent) {
+ if (!child.startsWith(parent)) {
+ return false;
+ }
+
+ String extra = child.substring(parent.length());
+ return ((extra.charAt(0) == '.') && (extra.indexOf('.', 1) < 0));
+ }
+
private void removeDependencyLeaves() {
boolean changed = true;
while (changed) {
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ClassEnvy.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ClassEnvy.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ClassEnvy.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -56,6 +56,13 @@
ignorableInterfaces.add("java.lang.Cloneable");
ignorableInterfaces.add("java.lang.Comparable");
}
+
+ private static final Comparator<Map.Entry<String, Set<Integer>>> ACCESS_COUNT_COMPARATOR = new Comparator<Map.Entry<String, Set<Integer>>>() {
+ @Override
+ public int compare(final Map.Entry<String, Set<Integer>> entry1, final Map.Entry<String, Set<Integer>> entry2) {
+ return entry2.getValue().size() - entry1.getValue().size();
+ }
+ };
private final BugReporter bugReporter;
private OpcodeStack stack;
@@ -138,12 +145,7 @@
if (clsAccessCount.size() > 0) {
Map.Entry<String, Set<Integer>>[]envies = clsAccessCount.entrySet().toArray(new Map.Entry[clsAccessCount.size()]);
- Arrays.sort(envies, new Comparator<Map.Entry<String, Set<Integer>>>() {
- @Override
- public int compare(final Map.Entry<String, Set<Integer>> entry1, final Map.Entry<String, Set<Integer>> entry2) {
- return entry2.getValue().size() - entry1.getValue().size();
- }
- });
+ Arrays.sort(envies, ACCESS_COUNT_COMPARATOR);
Map.Entry<String, Set<Integer>> bestEnvyEntry = envies[0];
int bestEnvyCount = bestEnvyEntry.getValue().size();
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ContraVariantArrayAssignment.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ContraVariantArrayAssignment.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/ContraVariantArrayAssignment.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -1,6 +1,6 @@
/*
* fb-contrib - Auxiliary detectors for Java programs
- * Copyright (C) 2012 Bhaskar Maddala
+ * Copyright (C) 2012-2015 Bhaskar Maddala
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/JUnitAssertionOddities.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/JUnitAssertionOddities.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/JUnitAssertionOddities.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -20,15 +20,9 @@
import org.apache.bcel.Repository;
import org.apache.bcel.classfile.AnnotationEntry;
-import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.Code;
-import org.apache.bcel.classfile.Constant;
-import org.apache.bcel.classfile.ConstantPool;
-import org.apache.bcel.classfile.ConstantUtf8;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
-import org.apache.bcel.classfile.RuntimeVisibleAnnotations;
-import org.apache.bcel.classfile.Unknown;
import org.apache.bcel.generic.Type;
import com.mebigfatguy.fbcontrib.utils.BugType;
@@ -47,7 +41,6 @@
{
private enum State {SAW_NOTHING, SAW_IF_ICMPNE, SAW_ICONST_1, SAW_GOTO, SAW_ICONST_0, SAW_EQUALS};
- private static final String RUNTIME_VISIBLE_ANNOTATIONS = "RuntimeVisibleAnnotations";
private static final String TESTCASE_CLASS = "junit.framework.TestCase";
private static final String TEST_CLASS = "org.junit.Test";
private static final String TEST_ANNOTATION_SIGNATURE = "Lorg/junit/Test;";
@@ -57,9 +50,12 @@
private BugReporter bugReporter;
private JavaClass testCaseClass;
private JavaClass testAnnotationClass;
+ private JavaClass cls;
private OpcodeStack stack;
private boolean isTestCaseDerived;
private boolean isAnnotationCapable;
+ private String clsName;
+ private boolean sawAssert;
private State state;
/**
@@ -89,7 +85,8 @@
@Override
public void visitClassContext(ClassContext classContext) {
try {
- JavaClass cls = classContext.getJavaClass();
+ cls = classContext.getJavaClass();
+ clsName = cls.getClassName().replace('.', '/');
isTestCaseDerived = ((testCaseClass != null) && cls.instanceOf(testCaseClass));
isAnnotationCapable = (cls.getMajor() >= 5) && (testAnnotationClass != null);
if (isTestCaseDerived || isAnnotationCapable) {
@@ -109,36 +106,12 @@
boolean isTestMethod = isTestCaseDerived && m.getName().startsWith("test");
if (!isTestMethod && isAnnotationCapable) {
- Attribute[] atts = m.getAttributes();
- for (Attribute att : atts) {
- ConstantPool cp = att.getConstantPool();
- Constant c = cp.getConstant(att.getNameIndex());
- if (c instanceof ConstantUtf8) {
- String name = ((ConstantUtf8) c).getBytes();
- if (RUNTIME_VISIBLE_ANNOTATIONS.equals(name)) {
- if (att instanceof Unknown) {
- Unknown unAtt = (Unknown)att;
- byte[] bytes = unAtt.getBytes();
- int constantPoolIndex = bytes[3] & 0x000000FF;
- c = cp.getConstant(constantPoolIndex);
- if (c instanceof ConstantUtf8) {
- name = ((ConstantUtf8) c).getBytes();
- if (TEST_ANNOTATION_SIGNATURE.equals(name)) {
- isTestMethod = true;
- break;
- }
- }
- } else if (att instanceof RuntimeVisibleAnnotations) {
- RuntimeVisibleAnnotations rva = (RuntimeVisibleAnnotations) att;
-
- AnnotationEntry[] entries = rva.getAnnotationEntries();
- for (AnnotationEntry entry : entries) {
- if (TEST_ANNOTATION_SIGNATURE.equals(entry.getAnnotationType())) {
- isTestMethod = true;
- break;
- }
- }
- }
+ AnnotationEntry[] annotations = m.getAnnotationEntries();
+ if (annotations != null) {
+ for (AnnotationEntry annotation : annotations) {
+ if (annotation.isRuntimeVisible() && TEST_ANNOTATION_SIGNATURE.equals(annotation.getAnnotationType())) {
+ isTestMethod = true;
+ break;
}
}
}
@@ -147,7 +120,14 @@
if (isTestMethod) {
stack.resetForMethodEntry(this);
state = State.SAW_NOTHING;
+ sawAssert = false;
super.visitCode(obj);
+
+// if (!sawAssert) {
+// bugReporter.reportBug(new BugInstance(this, BugType.JAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT.name(), LOW_PRIORITY)
+// .addClass(this)
+// .addMethod(this));
+// }
}
}
@@ -161,6 +141,7 @@
if (seen == INVOKESTATIC) {
String clsName = getClassConstantOperand();
if (OLD_ASSERT_CLASS.equals(clsName) || NEW_ASSERT_CLASS.equals(clsName)) {
+ sawAssert = true;
String methodName = getNameConstantOperand();
if ("assertEquals".equals(methodName)) {
String signature = getSigConstantOperand();
@@ -231,6 +212,7 @@
.addClass(this)
.addMethod(this)
.addSourceLine(this));
+ sawAssert = true;
}
}
}
@@ -269,13 +251,22 @@
state = State.SAW_NOTHING;
break;
}
-
- if (seen == INVOKEVIRTUAL) {
- String methodName = getNameConstantOperand();
- String sig = getSigConstantOperand();
- if ("equals".equals(methodName) && "(Ljava/lang/Object;)Z".equals(sig)) {
- state = State.SAW_EQUALS;
- }
+
+ if ((seen == INVOKEVIRTUAL) || (seen == INVOKESTATIC) || (seen == INVOKESPECIAL)) {
+ String lcName = getNameConstantOperand().toLowerCase();
+ if (seen == INVOKEVIRTUAL) {
+ String sig = getSigConstantOperand();
+ if ("equals".equals(lcName) && "(Ljava/lang/Object;)Z".equals(sig)) {
+ state = State.SAW_EQUALS;
+ }
+ }
+
+ //assume that if you call a method in the unit test class, or call a method with assert of verify in them
+ //it's possibly doing asserts for you. Yes this is a hack
+
+ if (clsName.equals(getClassConstantOperand()) || lcName.contains("assert") || lcName.contains("verify")) {
+ sawAssert = true;
+ }
}
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/MissingMethodsDetector.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/MissingMethodsDetector.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/MissingMethodsDetector.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -385,6 +385,8 @@
/**
* informs the missing method detector that a field should no longer be considered special
+ *
+ * @param name the name of the field
*/
protected void clearSpecialField(String name) {
fieldSpecialObjects.remove(name);
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -23,6 +23,7 @@
import org.apache.bcel.Constants;
import org.apache.bcel.Repository;
+import org.apache.bcel.classfile.AnnotationEntry;
import org.apache.bcel.classfile.Code;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.classfile.Method;
@@ -84,8 +85,10 @@
@Override
public void visitCode(Code obj) {
- stack.resetForMethodEntry(this);
- super.visitCode(obj);
+ if (!hasRuntimeAnnotations(getMethod())) {
+ stack.resetForMethodEntry(this);
+ super.visitCode(obj);
+ }
}
@Override
@@ -140,6 +143,19 @@
}
}
+ private boolean hasRuntimeAnnotations(Method obj) {
+ AnnotationEntry[] annotations = obj.getAnnotationEntries();
+ if (annotations != null) {
+ for (AnnotationEntry entry : annotations) {
+ if (entry.isRuntimeVisible()) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
/**
* checks to see if an instance method is called on the 'this' object
* @param sig the signature of the method called to find the called-on object
@@ -175,11 +191,11 @@
StatisticsKey key = entry.getKey();
- if (isOverlyPermissive(declaredAccess, mi)) {
+ if (isOverlyPermissive(declaredAccess)) {
try {
if (!isDerived(Repository.lookupClass(key.getClassName()), key)) {
- BugInstance bi = new BugInstance(this, BugType.OPM_OVERLY_PERMISSIVE_METHOD.name(), NORMAL_PRIORITY)
+ BugInstance bi = new BugInstance(this, BugType.OPM_OVERLY_PERMISSIVE_METHOD.name(), LOW_PRIORITY)
.addClass(key.getClassName())
.addMethod(key.getClassName(), key.getMethodName(), key.getSignature(), (declaredAccess & Constants.ACC_STATIC) != 0);
@@ -195,12 +211,11 @@
}
}
- private static boolean isOverlyPermissive(int declaredAccess, MethodInfo mi) {
+ private static boolean isOverlyPermissive(int declaredAccess) {
if ((declaredAccess & Constants.ACC_PUBLIC) != 0) {
return true;
}
- //TODO: add more permission checks
return false;
}
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -1031,12 +1031,12 @@
do
{
for (Method m : cls.getMethods()) {
- if (m.getName().equals("toString") && m.getSignature().equals("()Ljava/lang/String;")) {
+ if ("toString".equals(m.getName()) && "()Ljava/lang/String;".equals(m.getSignature())) {
return true;
}
}
cls = cls.getSuperClass();
- } while (!cls.getClassName().equals("java.lang.Object"));
+ } while (!"java.lang.Object".equals(cls.getClassName()));
return false;
}
}
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/WriteOnlyCollection.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/WriteOnlyCollection.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/WriteOnlyCollection.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -51,7 +51,6 @@
import java.util.concurrent.LinkedBlockingDeque;
import org.apache.bcel.classfile.Method;
-import org.apache.bcel.generic.Type;
import com.mebigfatguy.fbcontrib.utils.BugType;
import com.mebigfatguy.fbcontrib.utils.SignatureUtils;
@@ -148,7 +147,6 @@
*/
@Override
public void visitMethod(Method obj) {
- Type[] parms = Type.getArgumentTypes(obj.getSignature());
firstLocalRegister = SignatureUtils.getFirstRegisterSlot(obj);
super.visitMethod(obj);
}
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/utils/BugType.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/utils/BugType.java 2015-05-26 03:14:28 UTC (rev 1778)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/utils/BugType.java 2015-05-31 14:59:57 UTC (rev 1779)
@@ -106,6 +106,7 @@
JAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL,
JAO_JUNIT_ASSERTION_ODDITIES_INEXACT_DOUBLE,
JAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS,
+ JAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT,
JVR_JDBC_VENDOR_RELIANCE,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|