Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Analysis fails with InputMismatchException after Sonar and Checkstyle Update #533

Open
CarstenNeumannHB opened this issue Oct 24, 2024 · 4 comments

Comments

@CarstenNeumannHB
Copy link

Sonar version: 10.7 (was 10.4)
Checkstyle sonar plugin version: 10.17.0 (was 10.12.5)

Hi,

since we upgraded Sonar and Checkstyle an exception occurs while performing the checkstyle analysis:

Console output:

[INFO] ------------- Run sensors on project
[INFO] Sensor CheckstyleSensor [checkstyle]
[INFO] Checkstyle output report: C:\Runners\gitlab-builds\06\censored\cpq-veterans-aggregator\target\sonar\checkstyle-result.xml
[INFO] Checkstyle configuration: C:\Runners\gitlab-builds\06\censored\cpq-veterans-aggregator\target\sonar\checkstyle.xml
[INFO] Checkstyle charset: windows-1252
line 30:34 token recognition error at: ''ä'
[INFO] Time spent writing ucfgs 0ms

Error message:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar (default-cli) on project cpq-veterans-aggregator: Can not execute Checkstyle: Exception was thrown while processing C:\Runners\gitlab-builds\06\censored\util\sort\comparator\AbstractPipelineComparator.java: IllegalStateException occurred while parsing file C:\Runners\gitlab-builds\06\censored\util\sort\comparator\AbstractPipelineComparator.java. 28:39: mismatched input '(' expecting ';': InputMismatchException -> [Help 1]
[ERROR]

With Checkstyle the analysis on this file can be performed:

PS C:\Tools\checkstyle> java -jar '-Duser.language=en -Duser.country=US' .\checkstyle-10.17.0-all.jar -c /sun_checks.xml .\AbstractPipelineComparator.java
Starting audit...
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:1: Missing package-info.java file. [JavadocPackage]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:13: Line is longer than 80 characters (found 82). [LineLength]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:14: Line has trailing spaces. [RegexpSingleline]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:15:5: Missing a Javadoc comment. [MissingJavadocMethod]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:16: Line has trailing spaces. [RegexpSingleline]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:18: Line has trailing spaces. [RegexpSingleline]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:23: Line has trailing spaces. [RegexpSingleline]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:25: Line has trailing spaces. [RegexpSingleline]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:27:5: Class 'AbstractPipelineComparator' looks like designed for extension (can be subclassed), but the method 'prepairForCompare' does not have javadoc that explains how to do that safely. If class is not designed for extension consider making the class 'AbstractPipelineComparator' final or making the method 'prepairForCompare' static/final/abstract/empty, or adding allowed annotation for the method. [DesignForExtension]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:27:40: Parameter o should be final. [FinalParameters]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:29: Line has trailing spaces. [RegexpSingleline]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:30:38: ',' is not followed by whitespace. [WhitespaceAfter]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:31:38: ',' is not followed by whitespace. [WhitespaceAfter]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:32:38: ',' is not followed by whitespace. [WhitespaceAfter]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:33:38: ',' is not followed by whitespace. [WhitespaceAfter]
[ERROR] C:\Tools\checkstyle.\AbstractPipelineComparator.java:35: Line has trailing spaces. [RegexpSingleline]
Audit done.
Checkstyle ends with 16 errors.

This is the affected file:

/*
 * AbstractPipelineComparator.java
 *
 * Created on 16. Juni 2004, 14:15
 */

package com.censored.util.sort.comparator;

/**
 *
 * @author  censored
 */
public abstract class AbstractPipelineComparator implements java.util.Comparator {
    
    public abstract int compare(Object o1, Object o2);
    
    /*
     * Ersetzt in einem String (falls vorhanden) 
     * alle Umlaute (ä,ö,ü) durch (a,o,u),
     * 'ß' durch s und alle Zeichen in Kleinbuchstaben.
     * Dies ermöglicht eine genaue Sortierung eines
     * Strings.
     * 
     * @param Object o
     * @return ersetzter String 
     */
    protected String prepairForCompare(Object o) {
        String prepair = String.valueOf(o);
        prepair = prepair.toLowerCase();        
        prepair = prepair.replace('ä','a');
        prepair = prepair.replace('ö','o');
        prepair = prepair.replace('ü','u');
        prepair = prepair.replace('ß','s');
        return prepair;
    }    
}

As you can see, it contains several German umlauts. The highlighted console output as well mentions one of them.
With former versions of SonarQube and Checkstyle-Plugin this file didn't cause any problems and it hasn't been changed since.

Thanks!

Regards,
Carsten

@muhlba91
Copy link
Contributor

the output ([INFO] Checkstyle charset: windows-1252) shows that Checkstyle uses the windows-1252 charset. this charset doesn't contain these special characters, so Checkstyle cannot interpret them correctly.

i don't think this is related to the Checkstyle upgrade. SQ (scanners) usually use the system encoding unless SQ was configured to use a specific encoding (e.g., UTF-8).

@muhlba91
Copy link
Contributor

muhlba91 commented Oct 28, 2024

fyi, i have copied your code using SQ 10.7 (containerized) and analysis runs through smoothly.
additionally, you can try running the CS cli using your configuration to see if this is an issue caused by CS itself.

@CarstenNeumannHB
Copy link
Author

Hi,

sorry for the late reply. We run our analysis on a Windows system, not containerized, maybe this makes a difference.
Do we have to explicitly provide the right charset somehow?
The analysis with CS itself runs fine, as you can see in my first post.

Thanks!

@rnveach
Copy link
Member

rnveach commented Nov 20, 2024

The latest checkstyle uses utf 8 by default unless an override is sent to it (by configuration file or by setting directly).

I don't know sonar, but the windows charset output looks it comes from sonar inside CheckstyleConfiguration where it gets the value from fileSystem.encoding. That is sonar's api (not native file system). Sonar says it's the project's charset, so maybe look at the project settings or global project settings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants