[Fb-contrib-commit] SF.net SVN: fb-contrib:[1821] trunk/fb-contrib
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2017-05-29 20:49:50
|
Revision: 1821
http://sourceforge.net/p/fb-contrib/code/1821
Author: dbrosius
Date: 2017-05-29 20:49:46 +0000 (Mon, 29 May 2017)
Log Message:
-----------
sync from github
Modified Paths:
--------------
trunk/fb-contrib/.classpath
trunk/fb-contrib/build.xml
trunk/fb-contrib/etc/bugrank.txt
trunk/fb-contrib/etc/findbugs.xml
trunk/fb-contrib/etc/findbugsplugin.xsd
trunk/fb-contrib/etc/messages.xml
trunk/fb-contrib/htdocs/index.shtml
trunk/fb-contrib/htdocs/repository.html
trunk/fb-contrib/pom.xml
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/collect/CollectStatistics.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/debug/Debug.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/DeletingWhileIterating.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/ImmatureClass.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OptionalIssues.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossibleConstantAllocationInLoop.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossiblyRedundantMethodCalls.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/StringifiedTypes.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UnnecessaryApiConversion.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseTryWithResources.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/BugType.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureBuilder.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureUtils.java
trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/Values.java
trunk/fb-contrib/src/samples/java/ex/IMC_Sample.java
trunk/fb-contrib/src/samples/java/ex/PCAIL_Sample.java
trunk/fb-contrib/src/samples/java/ex/PRMC_Sample.java
trunk/fb-contrib/src/samples/java/ex/SPP_Sample.java
trunk/fb-contrib/src/samples/java/ex/STT_Sample.java
trunk/fb-contrib/src/test/java/com/mebigfatguy/fbcontrib/utils/SignatureUtilsTest.java
Modified: trunk/fb-contrib/.classpath
===================================================================
--- trunk/fb-contrib/.classpath 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/.classpath 2017-05-29 20:49:46 UTC (rev 1821)
@@ -17,7 +17,7 @@
</classpathentry>
<classpathentry kind="lib" path="lib/findbugs-3.0.1.jar" sourcepath="lib/sources/findbugs-3.0.1-sources.jar"/>
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
- <classpathentry kind="lib" path="lib/javax.persistence-2.1.1.jar"/>
+ <classpathentry kind="lib" path="lib/javax.persistence-2.1.1.jar" sourcepath="/home/dave/.m2/repository/org/eclipse/persistence/javax.persistence/2.1.1/javax.persistence-2.1.1-sources.jar"/>
<classpathentry kind="lib" path="lib/mockito-all-2.0.2-beta.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/findbugs"/>
<classpathentry kind="lib" path="lib/threetenbp-1.3.2.jar"/>
Modified: trunk/fb-contrib/build.xml
===================================================================
--- trunk/fb-contrib/build.xml 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/build.xml 2017-05-29 20:49:46 UTC (rev 1821)
@@ -31,7 +31,7 @@
<property name="javac.debug" value="on" />
<property name="test_reports.dir" value="${target.dir}/reports/test"/>
- <property name="fb-contrib.version" value="7.0.1" />
+ <property name="fb-contrib.version" value="7.0.2" />
<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 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/etc/bugrank.txt 2017-05-29 20:49:46 UTC (rev 1821)
@@ -228,6 +228,7 @@
+0 BugPattern STB_STACKED_TRY_BLOCKS
+2 BugPattern STS_SPURIOUS_THREAD_STATES
+0 BugPattern STT_STRING_PARSING_A_FIELD
++0 BugPattern STT_TOSTRING_MAP_KEYING
+0 BugPattern STT_TOSTRING_STORED_IN_FIELD
+0 BugPattern SUA_SUSPICIOUS_UNINITIALIZED_ARRAY
+0 BugPattern SWCO_SUSPICIOUS_WAIT_ON_CONCURRENT_OBJECT
@@ -249,27 +250,27 @@
+0 BugPattern USBR_UNNECESSARY_STORE_BEFORE_RETURN
+0 BugPattern USFW_UNSYNCHRONIZED_SINGLETON_FIELD_WRITES
+0 BugPattern USS_USE_STRING_SPLIT
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_ACTUAL_CONSTANT
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_ASSERT_USED
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_BOOLEAN_ASSERT
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_INEXACT_DOUBLE
-+2 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_NOT_EQUALS
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_NOT_NULL
-+0 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_NULL
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_ACTUAL_CONSTANT
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_ASSERT_USED
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_BOOLEAN_ASSERT
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_IMPOSSIBLE_NULL
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_INEXACT_DOUBLE
++1 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_NO_ASSERT
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_EQUALS
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_NOT_EQUALS
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_NOT_NULL
++3 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USE_ASSERT_NULL
+1 BugPattern UTAO_JUNIT_ASSERTION_ODDITIES_USING_DEPRECATED
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_ACTUAL_CONSTANT
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_ASSERT_USED
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_BOOLEAN_ASSERT
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_IMPOSSIBLE_NULL
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_INEXACT_DOUBLE
-+2 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_NO_ASSERT
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_EQUALS
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_NOT_EQUALS
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_NOT_NULL
-+0 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_NULL
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_ACTUAL_CONSTANT
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_ASSERT_USED
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_BOOLEAN_ASSERT
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_IMPOSSIBLE_NULL
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_INEXACT_DOUBLE
++1 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_NO_ASSERT
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_EQUALS
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_NOT_EQUALS
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_NOT_NULL
++3 BugPattern UTAO_TESTNG_ASSERTION_ODDITIES_USE_ASSERT_NULL
+0 BugPattern UTA_USE_TO_ARRAY
+0 BugPattern UTWR_USE_TRY_WITH_RESOURCES
+0 BugPattern UVA_USE_VAR_ARGS
Modified: trunk/fb-contrib/etc/findbugs.xml
===================================================================
--- trunk/fb-contrib/etc/findbugs.xml 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/etc/findbugs.xml 2017-05-29 20:49:46 UTC (rev 1821)
@@ -20,7 +20,7 @@
<!-- Detectors -->
-<!-- COMMENT OUT FOR RELEASE
+<!-- COMMENT OUT FOR RELEASE
<Detector class="com.mebigfatguy.fbcontrib.debug.OCSDebugger" speed="fast"/>
@@ -30,7 +30,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" />
@@ -283,7 +283,7 @@
<Detector class="com.mebigfatguy.fbcontrib.detect.OverlyPermissiveMethod" speed="fast" reports="OPM_OVERLY_PERMISSIVE_METHOD" />
- <Detector class="com.mebigfatguy.fbcontrib.detect.StringifiedTypes" speed="fast" reports="STT_STRING_PARSING_A_FIELD,STT_TOSTRING_STORED_IN_FIELD" />
+ <Detector class="com.mebigfatguy.fbcontrib.detect.StringifiedTypes" speed="fast" reports="STT_STRING_PARSING_A_FIELD,STT_TOSTRING_STORED_IN_FIELD,STT_TOSTRING_MAP_KEYING" />
<Detector class="com.mebigfatguy.fbcontrib.detect.ImmatureClass" speed="moderate" reports="IMC_IMMATURE_CLASS_NO_EQUALS,IMC_IMMATURE_CLASS_NO_HASHCODE,IMC_IMMATURE_CLASS_NO_PACKAGE,IMC_IMMATURE_CLASS_NO_TOSTRING,IMC_IMMATURE_CLASS_IDE_GENERATED_PARAMETER_NAMES,IMC_IMMATURE_CLASS_PRINTSTACKTRACE,IMC_IMMATURE_CLASS_WRONG_FIELD_ORDER" />
@@ -311,13 +311,13 @@
<Detector class="com.mebigfatguy.fbcontrib.detect.OptionalIssues" speed="fast" reports="OI_OPTIONAL_ISSUES_USES_IMMEDIATE_EXECUTION,OI_OPTIONAL_ISSUES_USES_DELAYED_EXECUTION,OI_OPTIONAL_ISSUES_CHECKING_REFERENCE,OI_OPTIONAL_ISSUES_PRIMITIVE_VARIANT_PREFERRED"/>
- <Detector class="com.mebigfatguy.fbcontrib.detect.UnnecessaryApiConversion" speed="fast" reports="UAC_UNNECESSARY_API_CONVERSION_DATE_TO_INSTANT"/>
+ <Detector class="com.mebigfatguy.fbcontrib.detect.UnnecessaryApiConversion" speed="fast" reports="UAC_UNNECESSARY_API_CONVERSION_DATE_TO_INSTANT,UAC_UNNECESSARY_API_CONVERSION_FILE_TO_PATH"/>
<!-- COMMENT OUT FOR POINT RELEASE
<Detector class="com.mebigfatguy.fbcontrib.detect.UseTryWithResources" speed="fast" reports="UTWR_USE_TRY_WITH_RESOURCES"/>
- COMMENT OUT FOR POINT RELEASE -->
+ COMMENT OUT FOR POINT RELEASE -->
<!-- BugPattern -->
@@ -561,6 +561,7 @@
<BugPattern abbrev="OPM" type="OPM_OVERLY_PERMISSIVE_METHOD" category="STYLE" />
<BugPattern abbrev="STT" type="STT_STRING_PARSING_A_FIELD" category="STYLE" />
<BugPattern abbrev="STT" type="STT_TOSTRING_STORED_IN_FIELD" category="STYLE" />
+ <BugPattern abbrev="STT" type="STT_TOSTRING_MAP_KEYING" category="STYLE" />
<BugPattern abbrev="SLS" type="SLS_SUSPICIOUS_LOOP_SEARCH" category="CORRECTNESS" />
<BugPattern abbrev="CRF" type="CRF_CONFLATING_RESOURCES_AND_FILES" category="CORRECTNESS" />
<BugPattern abbrev="IMC" type="IMC_IMMATURE_CLASS_IDE_GENERATED_PARAMETER_NAMES" category="STYLE" />
@@ -584,7 +585,7 @@
<BugPattern abbrev="SEO" type="SEO_SUBOPTIMAL_EXPRESSION_ORDER" category="PERFORMANCE"/>
<BugPattern abbrev="IOI" type="IOI_DOUBLE_BUFFER_COPY" category="PERFORMANCE"/>
<BugPattern abbrev="IOI" type="IOI_COPY_WITH_READER" category="PERFORMANCE"/>
- <BugPattern abbrev="IOI" type="IOI_USE_OF_FILE_STREAM_CONSTRUCTORS"/>
+ <BugPattern abbrev="IOI" type="IOI_USE_OF_FILE_STREAM_CONSTRUCTORS" category="PERFORMANCE"/>
<BugPattern abbrev="DMC" type="DMC_DUBIOUS_MAP_COLLECTION" category="CORRECTNESS"/>
<BugPattern abbrev="BL" type="BL_BURYING_LOGIC" category="STYLE"/>
<BugPattern abbrev="WI" type="WI_DUPLICATE_WIRED_TYPES" category="CORRECTNESS"/>
Modified: trunk/fb-contrib/etc/findbugsplugin.xsd
===================================================================
--- trunk/fb-contrib/etc/findbugsplugin.xsd 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/etc/findbugsplugin.xsd 2017-05-29 20:49:46 UTC (rev 1821)
@@ -22,7 +22,7 @@
<xsd:simpleType name="IdentifierType">
<xsd:restriction base="xsd:string">
- <xsd:pattern value="[A-Za-z0-9_]*"/>
+ <xsd:pattern value="[A-Za-z0-9_]+"/>
</xsd:restriction>
</xsd:simpleType>
Modified: trunk/fb-contrib/etc/messages.xml
===================================================================
--- trunk/fb-contrib/etc/messages.xml 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/etc/messages.xml 2017-05-29 20:49:46 UTC (rev 1821)
@@ -5310,6 +5310,36 @@
</Details>
</BugPattern>
+ <BugPattern type="STT_TOSTRING_MAP_KEYING">
+ <ShortDescription>This method uses a concatenated String as a map key</ShortDescription>
+ <LongDescription>This method {1} uses a concatenated String as a map key</LongDescription>
+ <Details>
+ <![CDATA[
+ <p>This method builds a key for a map, using a StringBuilder, either implicitly or explicitly. This means the type
+ of the key is something more t han a String constant, it is a properly formatted String. However, there is no
+ type based verification that all uses of this key will follow this formatting. It is much better to use a proper, simple,
+ bean class that holds two (or more fields) so that it is clear what is expected for key use.
+ </p>
+ <p>
+ Example<br/>
+ instead of
+ {@code
+ V v = myMap.get(tableName + "-" + columnName);
+ }
+ use
+ {@code
+ V v = myMap.get(new ColumnSpec(tableName, columnName));
+ }
+ where ColumnSpec is a simple bean-like class of your creation. The advantages, are
+ <ul>
+ <li>The ColumnSpec fully describes what is expected, you need a tableName and columnName</li>
+ <li>There is no guessing by the programmer what the format is, was it tableName + "_" + columnName?</li>
+ </ul>
+ </p>
+ ]]>
+ </Details>
+ </BugPattern>
+
<BugPattern type="SLS_SUSPICIOUS_LOOP_SEARCH">
<ShortDescription>This method continues a loop after finding an equality condition</ShortDescription>
<LongDescription>This method {1} continues a loop after finding an equality condition</LongDescription>
Modified: trunk/fb-contrib/htdocs/index.shtml
===================================================================
--- trunk/fb-contrib/htdocs/index.shtml 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/htdocs/index.shtml 2017-05-29 20:49:46 UTC (rev 1821)
@@ -68,7 +68,7 @@
</li>
</ul>
</p>
- <p style="font-weight: bold;">The latest version of fb-contrib is 7.0.1 available for download
+ <p style="font-weight: bold;">The latest version of fb-contrib is 7.0.2 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
Modified: trunk/fb-contrib/htdocs/repository.html
===================================================================
--- trunk/fb-contrib/htdocs/repository.html 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/htdocs/repository.html 2017-05-29 20:49:46 UTC (rev 1821)
@@ -22,7 +22,7 @@
<table style="margin-left: 40px; background-color: #A0A0FF; padding: 20px; border-width: 1px; border-style: outset; border-color: #000000;">
<tr><td><b>GroupId:</b></td><td>com.mebigfatguy.fb-contrib</td></tr>
<tr><td><b>ArtifactId:</b></td><td>fb-contrib</td></tr>
- <tr><td><b>Version:</b></td><td>7.0.1</td></tr>
+ <tr><td><b>Version:</b></td><td>7.0.2</td></tr>
</table>
</div>
Modified: trunk/fb-contrib/pom.xml
===================================================================
--- trunk/fb-contrib/pom.xml 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/pom.xml 2017-05-29 20:49:46 UTC (rev 1821)
@@ -8,7 +8,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.mebigfatguy.fb-contrib</groupId>
<artifactId>fb-contrib</artifactId>
- <version>7.0.1</version>
+ <version>7.0.2</version>
<prerequisites>
<maven>2.2.1</maven>
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/collect/CollectStatistics.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/collect/CollectStatistics.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/collect/CollectStatistics.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -71,6 +71,8 @@
* @param bugReporter
* unused, but required by reflection contract
*/
+ // required for reflection
+ @SuppressWarnings("PMD.UnusedFormalParameter")
public CollectStatistics(BugReporter bugReporter) {
Statistics.getStatistics().clear();
}
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/debug/Debug.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/debug/Debug.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/debug/Debug.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -20,11 +20,12 @@
package com.mebigfatguy.fbcontrib.debug;
import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
public final class Debug {
@@ -33,7 +34,7 @@
static {
try {
out = new PrintStream(
- new BufferedOutputStream(new FileOutputStream(new File(System.getProperty("java.io.tmpdir"), "fb-contrib.txt").getPath(), true)), false,
+ new BufferedOutputStream(Files.newOutputStream(Paths.get(System.getProperty("java.io.tmpdir"), "fb-contrib.txt"), StandardOpenOption.APPEND)), false,
StandardCharsets.UTF_8.name());
out.println("===== fb-contrib console =====");
} catch (IOException e) {
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/DeletingWhileIterating.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/DeletingWhileIterating.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/DeletingWhileIterating.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -446,23 +446,24 @@
}
Comparable<?> groupElement = getGroupElement(itm);
- if (groupElement != null) {
- int numGroups = collectionGroups.size();
- for (int i = 0; i < numGroups; i++) {
- GroupPair groupPair = collectionGroups.get(i);
- if (groupPair.containsMember(groupElement)) {
- return i;
- }
+ if (groupElement == null) {
+ return -1;
+ }
+ int numGroups = collectionGroups.size();
+ for (int i = 0; i < numGroups; i++) {
+ GroupPair groupPair = collectionGroups.get(i);
+ if (groupPair.containsMember(groupElement)) {
+ return i;
}
+ }
- if (addIfNotFound) {
- GroupPair groupPair = new GroupPair(groupElement, itm.getSignature());
- collectionGroups.add(groupPair);
- return collectionGroups.size() - 1;
- }
+ if (!addIfNotFound) {
+ return -1;
}
- return -1;
+ GroupPair groupPair = new GroupPair(groupElement, itm.getSignature());
+ collectionGroups.add(groupPair);
+ return collectionGroups.size() - 1;
}
private void removeFromCollectionGroup(OpcodeStack.Item itm) {
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/ImmatureClass.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/ImmatureClass.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/ImmatureClass.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -42,6 +42,7 @@
private BugReporter bugReporter;
private FieldStatus fieldStatus = FieldStatus.NONE;
+ private boolean classIsJPAEntity;
public ImmatureClass(BugReporter reporter) {
bugReporter = reporter;
@@ -66,6 +67,11 @@
try {
boolean clsHasRuntimeAnnotation = classHasRuntimeVisibleAnnotation(cls);
+ if (clsHasRuntimeAnnotation) {
+ classIsJPAEntity = classIsJPAEntity(cls);
+ } else {
+ classIsJPAEntity = false;
+ }
HEStatus heStatus = HEStatus.UNKNOWN;
checkIDEGeneratedParmNames(cls);
@@ -76,7 +82,7 @@
boolean fieldHasRuntimeAnnotation = fieldHasRuntimeVisibleAnnotation(f);
if (!fieldHasRuntimeAnnotation) {
/* only report one of these, so as not to flood the report */
- if (!hasMethodInHierarchy(cls, Values.TOSTRING, SignatureBuilder.SIG_VOID_TO_STRING)) {
+ if (!classIsJPAEntity && !hasMethodInHierarchy(cls, Values.TOSTRING, SignatureBuilder.SIG_VOID_TO_STRING)) {
bugReporter.reportBug(new BugInstance(this, BugType.IMC_IMMATURE_CLASS_NO_TOSTRING.name(), LOW_PRIORITY).addClass(cls));
heStatus = HEStatus.NOT_NEEDED;
break;
@@ -206,6 +212,26 @@
}
/**
+ * returns whether this class is a JPA Entity, as such it shouldn't really have a toString()
+ *
+ * @param cls
+ * the class to check
+ * @return if the class is a jpa entity
+ */
+ private static boolean classIsJPAEntity(JavaClass cls) {
+ AnnotationEntry[] annotations = cls.getAnnotationEntries();
+ if (annotations != null) {
+ for (AnnotationEntry annotation : annotations) {
+ if ("Ljavax/persistence/Entity;".equals(annotation.getAnnotationType())) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
* looks to see the field has a runtime visible annotation, if it does it might be autowired or some other mechanism attached that makes them less
* interesting for a toString call.
*
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OptionalIssues.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OptionalIssues.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OptionalIssues.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -261,6 +261,10 @@
if (invokeCount == 1) {
FQMethod method = activeStackOps.getLast().getMethod();
+ if (method == null) {
+ return false;
+ }
+
if ("valueOf".equals(method.getMethodName()) && method.getClassName().startsWith("java/lang/")) {
return true;
}
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/OverlyPermissiveMethod.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -376,7 +376,9 @@
}
}
} else {
- throw new RuntimeException("Incompatible bcel version");
+ throw new RuntimeException(
+ "Incompatible bcel version, apparently bcel has been upgraded to not use 'Unknown' for 'BootstrapMethods', but uses: "
+ + a.getName());
}
return null;
}
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossibleConstantAllocationInLoop.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossibleConstantAllocationInLoop.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossibleConstantAllocationInLoop.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -62,6 +62,7 @@
private Map<Integer, Integer> storedAllocations;
private int nextAllocationNumber;
private List<SwitchInfo> switchInfos;
+ private int nextTernaryTarget;
public PossibleConstantAllocationInLoop(BugReporter bugReporter) {
this.bugReporter = bugReporter;
@@ -89,6 +90,7 @@
allocations.clear();
storedAllocations.clear();
nextAllocationNumber = 1;
+ nextTernaryTarget = -1;
super.visitCode(obj);
for (AllocationInfo info : allocations.values()) {
@@ -106,9 +108,30 @@
Integer sawAllocationNumber = null;
try {
+ if ((nextTernaryTarget == getPC()) && (stack.getStackDepth() > 0)) {
+ OpcodeStack.Item itm = stack.getStackItem(0);
+ sawAllocationNumber = (Integer) itm.getUserValue();
+ sawAllocation = sawAllocationNumber != null;
+ nextTernaryTarget = -1;
+ }
+
stack.precomputation(this);
+ if ((sawAllocation) && (stack.getStackDepth() > 0)) {
+ OpcodeStack.Item itm = stack.getStackItem(0);
+ itm.setUserValue(sawAllocationNumber);
+ sawAllocationNumber = null;
+ sawAllocation = false;
+ }
+
switch (seen) {
+ case GOTO:
+ case GOTO_W:
+ if ((getBranchOffset() > 0) && (stack.getStackDepth() > 0)) {
+ // ternary
+ nextTernaryTarget = getBranchTarget();
+ }
+ // $FALL-THROUGH$
case IFEQ:
case IFNE:
case IFLT:
@@ -125,8 +148,7 @@
case IF_ACMPNE:
case IFNULL:
case IFNONNULL:
- case GOTO:
- case GOTO_W:
+
processBranch();
break;
@@ -144,6 +166,7 @@
case INVOKEINTERFACE:
case INVOKEVIRTUAL:
case INVOKESTATIC:
+ case INVOKEDYNAMIC:
String signature = getSigConstantOperand();
int numParameters = SignatureUtils.getNumParameters(signature);
if (stack.getStackDepth() >= numParameters) {
@@ -154,7 +177,7 @@
allocations.remove(allocation);
}
}
- if (((seen == INVOKEINTERFACE) || (seen == INVOKEVIRTUAL) || (seen == INVOKESPECIAL))
+ if (((seen == INVOKEINTERFACE) || (seen == INVOKEVIRTUAL) || (seen == INVOKESPECIAL) || (seen == INVOKEDYNAMIC))
// ignore possible method chaining
&& (stack.getStackDepth() > numParameters)) {
OpcodeStack.Item item = stack.getStackItem(numParameters);
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossiblyRedundantMethodCalls.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossiblyRedundantMethodCalls.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/PossiblyRedundantMethodCalls.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -34,9 +34,11 @@
import com.mebigfatguy.fbcontrib.collect.MethodInfo;
import com.mebigfatguy.fbcontrib.collect.Statistics;
import com.mebigfatguy.fbcontrib.utils.BugType;
+import com.mebigfatguy.fbcontrib.utils.FQMethod;
import com.mebigfatguy.fbcontrib.utils.RegisterUtils;
import com.mebigfatguy.fbcontrib.utils.SignatureUtils;
import com.mebigfatguy.fbcontrib.utils.ToString;
+import com.mebigfatguy.fbcontrib.utils.UnmodifiableSet;
import com.mebigfatguy.fbcontrib.utils.Values;
import edu.umd.cs.findbugs.BugInstance;
@@ -151,6 +153,27 @@
}
}
+ private static final Set<FQMethod> commonMethods = UnmodifiableSet.create(
+ // @formatter:off
+ new FQMethod("java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;"),
+ new FQMethod("java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;"),
+ new FQMethod("java/lang/Character", "valueOf", "(C)Ljava/lang/Character;"),
+ new FQMethod("java/lang/Short", "valueOf", "(S)Ljava/lang/Short;"),
+ new FQMethod("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;"),
+ new FQMethod("java/lang/Long", "valueOf", "(J)Ljava/lang/Long;"),
+ new FQMethod("java/lang/Float", "valueOf", "(F)Ljava/lang/Float;"),
+ new FQMethod("java/lang/Double", "valueOf", "(D)Ljava/lang/Double;"),
+ new FQMethod("java/lang/Boolean", "booleanValue", "()Z"),
+ new FQMethod("java/lang/Byte", "byteValue", "()B"),
+ new FQMethod("java/lang/Character", "charValue", "()C"),
+ new FQMethod("java/lang/Short", "shortValue", "()S"),
+ new FQMethod("java/lang/Integer", "intValue", "()I"),
+ new FQMethod("java/lang/Long", "longValue", "()J"),
+ new FQMethod("java/lang/Float", "floatValue", "()F"),
+ new FQMethod("java/lang/Double", "doubleValue", "()D")
+ // @formatter:on
+ );
+
private final BugReporter bugReporter;
private OpcodeStack stack = null;
private Map<Integer, MethodCall> localMethodCalls = null;
@@ -347,7 +370,8 @@
if (mc != null) {
if (!signature.endsWith(Values.SIG_VOID) && methodName.equals(mc.getName()) && signature.equals(mc.getSignature())
- && !isRiskyName(className, methodName)) {
+ && !isRiskyName(className, methodName)
+ && !commonMethods.contains(new FQMethod(getClassConstantOperand(), methodName, signature))) {
Object[] parms = mc.getParms();
if (Arrays.equals(parms, parmConstants)) {
int ln = getLineNumber(pc);
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/SillynessPotPourri.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -972,7 +972,7 @@
Object o = item.getConstant();
if (o instanceof Integer) {
int parm = ((Integer) o).intValue();
- if ((parm > 32) && (parm < 127) && (parm != 64) && ((parm % 10) != 0) && ((parm % 5) != 0)) {
+ if ((parm > 32) && (parm < 127) && (parm != 64) && (parm != 48) && ((parm % 5) != 0)) {
bugReporter.reportBug(new BugInstance(this, BugType.SPP_NO_CHAR_SB_CTOR.name(), LOW_PRIORITY).addClass(this).addMethod(this)
.addSourceLine(this));
}
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/StringifiedTypes.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/StringifiedTypes.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/StringifiedTypes.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -37,6 +37,7 @@
import edu.umd.cs.findbugs.OpcodeStack;
import edu.umd.cs.findbugs.OpcodeStack.CustomUserValue;
import edu.umd.cs.findbugs.ba.ClassContext;
+import edu.umd.cs.findbugs.ba.XMethod;
/**
* looks for string fields that appear to be built with parsing or calling toString() on another object, or from objects that are fields.
@@ -88,6 +89,8 @@
}
private static final String FROM_FIELD = "FROM_FIELD";
+ private static final FQMethod MAP_PUT = new FQMethod(Values.SLASHED_JAVA_UTIL_MAP, "put", SignatureBuilder.SIG_TWO_OBJECTS_TO_OBJECT);
+
private BugReporter bugReporter;
private OpcodeStack stack;
private BitSet toStringStringBuilders;
@@ -190,7 +193,16 @@
if (checkParms != null) {
OpcodeStack.Item item = stack.getStackItem(numParameters);
if (item.getXField() == null) {
- checkParms = null;
+ if (MAP_PUT.equals(cm)) {
+ OpcodeStack.Item itm = stack.getStackItem(1);
+ XMethod xm = itm.getReturnValueOf();
+ if (xm != null) {
+ if (Values.DOTTED_JAVA_LANG_STRINGBUILDER.equals(xm.getClassName())) {
+ bugReporter.reportBug(new BugInstance(this, BugType.STT_TOSTRING_MAP_KEYING.name(), NORMAL_PRIORITY).addClass(this)
+ .addMethod(this).addSourceLine(this));
+ }
+ }
+ }
} else {
for (int parm : checkParms) {
if ((parm >= 0) && Values.TOSTRING.equals(stack.getStackItem(parm).getUserValue())) {
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UnnecessaryApiConversion.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UnnecessaryApiConversion.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UnnecessaryApiConversion.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -90,6 +90,9 @@
}
}
break;
+
+ default:
+ break;
}
} finally {
stack.sawOpcode(this, seen);
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -223,11 +223,7 @@
// If the cls implements any interface, it's possible the collection
// is based on that interface, so ignore
- if (cls.getInterfaces().length == 0) {
- return true;
- }
-
- return false;
+ return cls.getInterfaces().length == 0;
}
/**
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseTryWithResources.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseTryWithResources.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/detect/UseTryWithResources.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -59,6 +59,7 @@
private int lastNullCheckedReg;
private int bugPC;
private int closePC;
+ private int suppressedPC;
private State state;
public UseTryWithResources(BugReporter bugReporter) {
@@ -105,12 +106,23 @@
lastNullCheckedReg = -1;
bugPC = -1;
closePC = -1;
+ suppressedPC = -1;
super.visitCode(obj);
+
+ if ((closePC >= 0) && (suppressedPC < 0)) {
+ bugReporter.reportBug(new BugInstance(this, BugType.UTWR_USE_TRY_WITH_RESOURCES.name(), NORMAL_PRIORITY).addClass(this).addMethod(this)
+ .addSourceLine(this, bugPC));
+ }
}
}
@Override
public void sawOpcode(int seen) {
+
+ if (suppressedPC >= 0) {
+ return;
+ }
+
try {
int pc = getPC();
Iterator<TryBlock> it = finallyBlocks.values().iterator();
@@ -127,13 +139,6 @@
}
}
- if ((closePC >= 0) && (closePC <= pc)) {
- bugReporter.reportBug(new BugInstance(this, BugType.UTWR_USE_TRY_WITH_RESOURCES.name(), NORMAL_PRIORITY).addClass(this).addMethod(this)
- .addSourceLine(this, bugPC));
- closePC = -1;
- bugPC = -1;
- }
-
if (OpcodeUtils.isAStore(seen)) {
regStoredPCs.put(Integer.valueOf(getRegisterOperand()), Integer.valueOf(pc));
}
@@ -169,11 +174,12 @@
lastNullCheckedReg = -1;
}
- if ((((bugPC >= 0) && (seen == INVOKEVIRTUAL)) || (seen == INVOKEINTERFACE)) && "addSuppressed".equals(getNameConstantOperand())
+ if ((bugPC >= 0) && ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) && "addSuppressed".equals(getNameConstantOperand())
&& SignatureBuilder.SIG_THROWABLE_TO_VOID.equals(getSigConstantOperand())
&& Repository.lookupClass(getClassConstantOperand()).instanceOf(throwableClass)) {
closePC = -1;
bugPC = -1;
+ suppressedPC = getPC();
}
}
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/BugType.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/BugType.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/BugType.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -266,6 +266,7 @@
STB_STACKED_TRY_BLOCKS,
STS_SPURIOUS_THREAD_STATES,
STT_STRING_PARSING_A_FIELD,
+ STT_TOSTRING_MAP_KEYING,
STT_TOSTRING_STORED_IN_FIELD,
SUA_SUSPICIOUS_UNINITIALIZED_ARRAY,
SWCO_SUSPICIOUS_WAIT_ON_CONCURRENT_OBJECT,
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureBuilder.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureBuilder.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureBuilder.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -122,7 +122,7 @@
public SignatureBuilder withReturnType(String type) {
if ((type == null) || (type.length() == 0)) {
- throw new IllegalArgumentException("Missing return type; did you mean 'withoutReturnType'?");
+ throw new IllegalArgumentException("Missing return type; did you mean 'withoutReturnType'? -- " + this);
}
returnType = SignatureUtils.classToSignature(type);
return this;
@@ -130,7 +130,7 @@
public SignatureBuilder withReturnType(Class<?> type) {
if (type == null) {
- throw new IllegalArgumentException("Missing return type; did you mean 'withoutReturnType'?");
+ throw new IllegalArgumentException("Missing return type; did you mean 'withoutReturnType'? -- " + this);
}
return withReturnType(type.getName());
}
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureUtils.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureUtils.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/SignatureUtils.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -208,6 +208,7 @@
i = semiPos;
} else if (isWonkyEclipseSignature(methodSignature, i)) {
sigStart++;
+ continue;
} else {
parmSignature = methodSignature.substring(sigStart, i + 1);
slotIndexToParms.put(Integer.valueOf(slot), parmSignature);
@@ -244,9 +245,7 @@
int semiPos = methodSignature.indexOf(Values.SIG_QUALIFIED_CLASS_SUFFIX_CHAR, i + 1);
parmSignatures.add(methodSignature.substring(sigStart, semiPos + 1));
i = semiPos;
- } else if (isWonkyEclipseSignature(methodSignature, i)) {
- sigStart++;
- } else {
+ } else if (!isWonkyEclipseSignature(methodSignature, i)) {
parmSignatures.add(methodSignature.substring(sigStart, i + 1));
}
sigStart = i + 1;
Modified: trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/Values.java
===================================================================
--- trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/Values.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/main/java/com/mebigfatguy/fbcontrib/utils/Values.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -75,6 +75,8 @@
public static final String DOTTED_JAVA_LANG_ERROR = "java.lang.Error";
@DottedClassName
public static final String DOTTED_JAVA_LANG_INTEGER = "java.lang.Integer";
+ @DottedClassName
+ public static final String DOTTED_JAVA_LANG_STRINGBUILDER = "java.lang.StringBuilder";
@SlashedClassName
public static final String SLASHED_JAVA_LANG_OBJECT = "java/lang/Object";
Modified: trunk/fb-contrib/src/samples/java/ex/IMC_Sample.java
===================================================================
--- trunk/fb-contrib/src/samples/java/ex/IMC_Sample.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/samples/java/ex/IMC_Sample.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -9,6 +9,8 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import javax.persistence.Entity;
+
import org.junit.Assert;
import org.junit.Test;
import org.objectweb.asm.AnnotationVisitor;
@@ -64,6 +66,12 @@
}
}
+@Entity
+class FPIMCEntity {
+ private int id;
+ private String name;
+}
+
class MyVisitor extends AnnotationVisitor {
String name;
Modified: trunk/fb-contrib/src/samples/java/ex/PCAIL_Sample.java
===================================================================
--- trunk/fb-contrib/src/samples/java/ex/PCAIL_Sample.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/samples/java/ex/PCAIL_Sample.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -1,8 +1,11 @@
package ex;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Deque;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
@@ -154,6 +157,16 @@
fooList.add(foo);
}
}
+
+ public void fpLambdaWithTernary(Deque<String> stack, Map<String, List<String>> details) {
+ while (!stack.isEmpty()) {
+ String s = stack.pop();
+ List<String> detail = details.get(s);
+ detail = detail != null ? detail : new ArrayList<String>();
+ Collections.reverse(detail);
+ detail.forEach(stack::push);
+ }
+ }
private PCAIL_Sample builder() {
return this;
Modified: trunk/fb-contrib/src/samples/java/ex/PRMC_Sample.java
===================================================================
--- trunk/fb-contrib/src/samples/java/ex/PRMC_Sample.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/samples/java/ex/PRMC_Sample.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -1,4 +1,5 @@
package ex;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -140,7 +141,7 @@
System.out.println(foo.toString());
}
}
-
+
public void fpWithGenericReturn() {
Set<String> s = ImmutableSet.of();
Set<Integer> i = ImmutableSet.of();
@@ -150,6 +151,17 @@
throw new RuntimeException("kaboom!");
}
+ public void fpIgnoreCommonBoxing(Integer i) {
+ setTwo(i, i);
+ setTwo(3.1, 3.1);
+ }
+
+ public void setTwo(int i, int j) {
+ }
+
+ public void setTwo(Double d, Double e) {
+ }
+
public void setValue(int i) {
}
Modified: trunk/fb-contrib/src/samples/java/ex/SPP_Sample.java
===================================================================
--- trunk/fb-contrib/src/samples/java/ex/SPP_Sample.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/samples/java/ex/SPP_Sample.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -1,4 +1,5 @@
package ex;
+
import java.io.Serializable;
import java.lang.reflect.Array;
import java.math.BigDecimal;
@@ -31,6 +32,7 @@
private static final double e = 2.72;
public static final String FALSE_POSITIVE = "INTERN_OK_HERE".intern();
private static final String LIT = "lit";
+ private static final int BIG_SIZE = 48;
static enum Flap {
Smack, Jack
@@ -435,6 +437,10 @@
sqlQuery.setString(1, name + "%");
}
}
+
+ public void fpIssue199SBWithNum() {
+ StringBuilder sb = new StringBuilder(BIG_SIZE);
+ }
}
interface FPInterfaceWithSerialVer extends Serializable {
Modified: trunk/fb-contrib/src/samples/java/ex/STT_Sample.java
===================================================================
--- trunk/fb-contrib/src/samples/java/ex/STT_Sample.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/samples/java/ex/STT_Sample.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -1,4 +1,5 @@
package ex;
+
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -36,6 +37,12 @@
return s.substring(0, colonPos);
}
+ public Map<String, String> testLocalMapKeyedByStringifiedType(String a, String b) {
+ Map<String, String> s = new HashMap<>();
+ s.put(a + b, b + a);
+ return s;
+ }
+
public void fpTestToStringToFieldSB(String s) {
val = s + "wow";
}
Modified: trunk/fb-contrib/src/test/java/com/mebigfatguy/fbcontrib/utils/SignatureUtilsTest.java
===================================================================
--- trunk/fb-contrib/src/test/java/com/mebigfatguy/fbcontrib/utils/SignatureUtilsTest.java 2017-04-22 21:28:01 UTC (rev 1820)
+++ trunk/fb-contrib/src/test/java/com/mebigfatguy/fbcontrib/utils/SignatureUtilsTest.java 2017-05-29 20:49:46 UTC (rev 1821)
@@ -75,11 +75,24 @@
}
@Test
+ public void shouldGetParameterSlotsAndSignaturesForWonkyEclipseMethod() {
+ Map<Integer, String> expected = new HashMap<>(2);
+ expected.put(0, "I");
+ expected.put(1, "Ljava/util/List;");
+ assertEquals(SignatureUtils.getParameterSlotAndSignatures(true, "add(I!+Ljava/util/List;)Ljava/lang/Object;"), expected);
+ }
+
+ @Test
public void shouldGetParameterSignatures() {
assertEquals(SignatureUtils.getParameterSignatures("add(ILjava/lang/Object;)Ljava/lang/Object;"), Arrays.asList("I", "Ljava/lang/Object;"));
}
@Test
+ public void shouldGetParameterSignaturesWithWonkyEclipseMethod() {
+ assertEquals(SignatureUtils.getParameterSignatures("add(I!+Ljava/util/List;)Ljava/lang/Object;"), Arrays.asList("I", "Ljava/util/List;"));
+ }
+
+ @Test
public void shouldCountParameterSignatures() {
assertEquals(SignatureUtils.getNumParameters("add(ILjava/lang/Object;)Ljava/lang/Object;"), 2);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|