[Fb-contrib-commit] SF.net SVN: fb-contrib: [619] trunk/fb-contrib/samples
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2006-08-18 03:59:44
|
Revision: 619 Author: dbrosius Date: 2006-08-17 20:59:33 -0700 (Thu, 17 Aug 2006) ViewCVS: http://svn.sourceforge.net/fb-contrib/?rev=619&view=rev Log Message: ----------- Fix [ 1540989 ] UEC does not see EnumSet by checking real type, not static type Modified Paths: -------------- trunk/fb-contrib/samples/UEC_Sample.java trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java Modified: trunk/fb-contrib/samples/UEC_Sample.java =================================================================== --- trunk/fb-contrib/samples/UEC_Sample.java 2006-08-16 04:21:25 UTC (rev 618) +++ trunk/fb-contrib/samples/UEC_Sample.java 2006-08-18 03:59:33 UTC (rev 619) @@ -9,6 +9,7 @@ public class UEC_Sample { public enum Suite { Spades, Hearts, Clubs, Diamonds }; + public enum FalsePositive { A, B, C }; private Set<Suite> wildSuites = new HashSet<Suite>(); private EnumSet<Suite> eWildSuites = EnumSet.noneOf(Suite.class); @@ -40,4 +41,11 @@ return hand; } + + public void uecFP() + { + Set<FalsePositive> testSet = EnumSet.of(FalsePositive.A); + + testSet.add(FalsePositive.B); + } } Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java =================================================================== --- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java 2006-08-16 04:21:25 UTC (rev 618) +++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/UseEnumCollections.java 2006-08-18 03:59:33 UTC (rev 619) @@ -95,11 +95,11 @@ if (("java/util/Map".equals(clsName)) && ("put".equals(methodName)) && ("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;".equals(signature))) { - bug = isEnum(1) && alreadyReported(2); + bug = isEnum(1) && !isEnumCollection(1) && alreadyReported(2); } else if (("java/util/Set".equals(clsName)) && ("add".equals(methodName)) && ("(Ljava/lang/Object;)Z".equals(signature))) { - bug = isEnum(0) && alreadyReported(1); + bug = isEnum(0) && !isEnumCollection(1) && alreadyReported(1); } if (bug) { @@ -135,6 +135,22 @@ } /** + * returns whether the item at the stackpos location is an instance of an EnumSet or EnumMap + * + * @param stackPos the posotion on the opstack to check + * + * @return whether the class is an EnumSet or EnumMap + */ + private boolean isEnumCollection(int stackPos) { + if (stack.getStackDepth() <= stackPos) + return false; + + OpcodeStack.Item item = stack.getStackItem(stackPos); + String realClass = item.getSignature(); + return "Ljava/util/EnumSet;".equals(realClass) || "Ljava/util/EnumMap;".equals(realClass); + } + + /** * returns whether the collection has already been reported on * * @param stackPos the position on the opstack to check This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |