diff --git a/java-checks/src/main/java/org/sonar/java/checks/UppercaseSuffixesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/UppercaseSuffixesCheck.java index 69e481112cb..a4449ebd033 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/UppercaseSuffixesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/UppercaseSuffixesCheck.java @@ -20,19 +20,27 @@ package org.sonar.java.checks; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; + import org.sonar.check.Rule; +import org.sonar.check.RuleProperty; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.tree.LiteralTree; import org.sonar.plugins.java.api.tree.Tree; import java.util.List; -import java.util.Set; @Rule(key = "S818") public class UppercaseSuffixesCheck extends IssuableSubscriptionVisitor { - private static final Set LITERAL_SUFFIXES = ImmutableSet.of('f', 'd', 'l'); + @RuleProperty( + key = "checkOnlyLong", + description = "Set to \"true\" to ignore \"float\" and \"double\" declarations.", + defaultValue = "false") + public boolean checkOnlyLong = false; + + private static final char LONG = 'l'; + private static final char DOUBLE = 'd'; + private static final char FLOAT = 'f'; @Override public List nodesToVisit() { @@ -43,8 +51,17 @@ public List nodesToVisit() { public void visitNode(Tree tree) { String value = ((LiteralTree) tree).value(); char suffix = value.charAt(value.length() - 1); - if (LITERAL_SUFFIXES.contains(suffix)) { - reportIssue(tree, "Upper-case this literal \"" + suffix + "\" suffix."); + switch (suffix) { + case DOUBLE: + case FLOAT: + if (checkOnlyLong) { + return; + } + case LONG: + reportIssue(tree, "Upper-case this literal \"" + suffix + "\" suffix."); + break; + default: + // do nothing } } } diff --git a/java-checks/src/main/resources/org/sonar/l10n/java/rules/squid/S818_java.html b/java-checks/src/main/resources/org/sonar/l10n/java/rules/squid/S818_java.html index 9c004b015aa..bcfcf74406b 100644 --- a/java-checks/src/main/resources/org/sonar/l10n/java/rules/squid/S818_java.html +++ b/java-checks/src/main/resources/org/sonar/l10n/java/rules/squid/S818_java.html @@ -22,8 +22,3 @@

See

  • CERT DCL16-CPP - Use "L," not "l," to indicate a long value
  • -

    See Also

    -
      -
    • {rule:squid:S1129} - Long suffix "L" should be upper case -
    - diff --git a/java-checks/src/test/files/checks/UppercaseSuffixesCheckOnlyLong.java b/java-checks/src/test/files/checks/UppercaseSuffixesCheckOnlyLong.java new file mode 100644 index 00000000000..a7028e873b8 --- /dev/null +++ b/java-checks/src/test/files/checks/UppercaseSuffixesCheckOnlyLong.java @@ -0,0 +1,14 @@ +class A { + double f = 1.; + long long1 = 1l; // Noncompliant [[sc=16;ec=18]] {{Upper-case this literal "l" suffix.}} + float float1 = 1.0f; // Compliant + double double1 = 1.0d; // Compliant + + private void test () { + + long retVal = (bytes[0] & 0xFF); + for (int i = 1; i < Math.min(bytes.length, 8); i++) { + retVal |= (bytes[i] & 0xFFL) << (i * 8); + } + } +} diff --git a/java-checks/src/test/java/org/sonar/java/checks/UppercaseSuffixesCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/UppercaseSuffixesCheckTest.java index 28b4c5108cc..b47cfa0cfe6 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/UppercaseSuffixesCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/UppercaseSuffixesCheckTest.java @@ -29,4 +29,11 @@ public void test() { JavaCheckVerifier.verify("src/test/files/checks/UppercaseSuffixesCheck.java", new UppercaseSuffixesCheck()); } + @Test + public void test_only_long() { + UppercaseSuffixesCheck check = new UppercaseSuffixesCheck(); + check.checkOnlyLong = true; + JavaCheckVerifier.verify("src/test/files/checks/UppercaseSuffixesCheckOnlyLong.java", check); + } + }