Uploaded image for project: 'Rules Repository'
  1. Rules Repository
  2. RSPEC-3777

Very long Strings should be loaded as resources

    XMLWordPrintable

    Details

    • Type: Code Smell Detection
    • Status: Active
    • Resolution: Unresolved
    • Labels:
    • Message:
      Refactor this code to load this text as an external resource.
    • Highlighting:
      Hide

      The StringBuilder instance.

      Show
      The StringBuilder instance.
    • Default Severity:
      Major
    • Impact:
      Low
    • Likelihood:
      High
    • Targeted languages:
      Java
    • Remediation Function:
      Constant/Issue
    • Constant Cost:
      30min
    • Analysis Scope:
      Main Sources, Test Sources

      Description

      It is not uncommon, for instance when dealing with SQL requests, to have repeated calls to StringBuilder.append() to create a long (sometimes really long) String that will be then passed to the appropriate subsystem (e.g. jdbc.Statement()). This is very undesirable because it makes it more difficult to read, and maintain, the statement in the String due to overlapping syntaxes.
      It is highly recommended to address such a case with an external text file loaded as a resource.

      Noncompliant Code Example

      sb = new StringBuilder()
          		.append("SELECT CASE ")
          		.append("WHEN year = 'FR' THEN 'FR'")
          		.append("WHEN year = 'SO' THEN 'SO'")
          		.append("WHEN year = 'JR' THEN 'JR'")
          		.append("WHEN year = 'SR' THEN 'SR'")
          		.append("ELSE 'No Year Data' END AS year_group,")
          		.append("COUNT(1) AS count")
          		.append("FROM benn.college_football_players")
          		.append("GROUP BY CASE WHEN year = 'FR' THEN 'FR'")
          		.append("WHEN year = 'SO' THEN 'SO'")
          		.append("WHEN year = 'JR' THEN 'JR'")
          		.append("WHEN year = 'SR' THEN 'SR'")
          		.append("ELSE 'No Year Data' END");
      
      

      Compliant solution

      InputStream inputStream = this.getClass().getResourceAsStream("MySQLRequest.txt");
      

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            jeanchristophe.collet Jean-Christophe Collet (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated: