0
votes

Sonar scanner throws null pointer exception while running the scanner. The error points out to the an enum. which implements a typical interface.

I remember running the scanner few months ago without any issues but this times it's different, any help is appreciated.

public enum ItsAnEnum implements SomeField<SomeEnumModuleType> {

public interface SomeField<T extends CodeEnum> extends NumericEnumWithLabel, CodeEnumWithLabel {

ERROR: Error during SonarQube Scanner execution
org.sonar.squidbridge.api.AnalysisException: SonarQube is unable to analyze file : 'C:\opt\workspace\project\src\main\package\ItsAnEnum.java'
        at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:93)
        at org.sonar.java.ast.JavaAstScanner.scan(JavaAstScanner.java:67)
        at org.sonar.java.JavaSquid.scanSources(JavaSquid.java:114)
        at org.sonar.java.JavaSquid.scan(JavaSquid.java:108)
        at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:87)
        at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
        at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:57)
        at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:49)
        at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:78)
        at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:182)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
        at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:247)
        at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:242)
        at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:232)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
        at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47)
        at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:86)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
        at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:115)
        at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:116)
        at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
        at com.sun.proxy.$Proxy0.execute(Unknown Source)
        at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
        at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
        at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:110)
        at org.sonarsource.scanner.cli.Main.execute(Main.java:74)
        at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Caused by: java.lang.NullPointerException
        at org.sonar.java.checks.PrivateFieldUsedLocallyCheck.containingClassOrMethod(PrivateFieldUsedLocallyCheck.java:125)
        at org.sonar.java.checks.PrivateFieldUsedLocallyCheck.usedInOneMethodOnly(PrivateFieldUsedLocallyCheck.java:105)
        at org.sonar.java.checks.PrivateFieldUsedLocallyCheck.checkPrivateField(PrivateFieldUsedLocallyCheck.java:78)
        at org.sonar.java.checks.PrivateFieldUsedLocallyCheck.lambda$visitNode$4(PrivateFieldUsedLocallyCheck.java:70)
        at org.sonar.java.checks.PrivateFieldUsedLocallyCheck$$Lambda$79/1947060963.accept(Unknown Source)
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
        at org.sonar.java.checks.PrivateFieldUsedLocallyCheck.visitNode(PrivateFieldUsedLocallyCheck.java:70)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:95)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:120)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:120)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:97)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.scanTree(SubscriptionVisitor.java:78)
        at org.sonar.java.ast.visitors.SubscriptionVisitor.scanFile(SubscriptionVisitor.java:64)
        at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:121)
        at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:84)
        ... 34 more
ERROR:
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

Added a little garbled code, I can assure there are no compilation issues.

package com.some.package;

import java.util.HashMap;
import java.util.Map;



public enum ModuleEnumField implements RouteSelField<SomeModuleType> {

    BUYER(1, "something", "something", SomeEnum.STRING, "", SomeEnum.ORDER),
    TERMS(2, "something", "something", SomeEnum.DETAIL_STRING, "", SomeEnum.ORDER)

    private int number;
    private String label;
    private SomeEnum type;
    private String extraInfo;
    private String moduleInfo;
    private SomeEnum moduleType;
    private String tableName;
    private String columnName;

    private ModuleEnumField(int number, String tableName, String columnName, SomeEnum type, String extraInfo, SomeModuleType moduleType) {
        this.number = number;
        this.tableName = tableName;
        this.columnName = columnName;
        this.label = tableName + "." + columnName;
        this.type = type;
        this.extraInfo = extraInfo;
        this.moduleInfo = moduleType.getLabel();
        this.moduleType = moduleType;
        ModuleEnumFieldMaps.numericMapping.put(number, this);
        ModuleEnumFieldMaps.codeMapping.put(label, this);
    }

    @Override
    public String getLabel() {
        return label;
    }

    @Override
    public int getNumber() {
        return number;
    }

    @Override
    public String getExtraInfo() {
        return extraInfo;
    }

    @Override
    public String getModuleInfo() {
        return moduleInfo;
    }

    @Override
    public SomeModuleType getModuleType() {
        return moduleType;
    }

    @Override
    public SomeEnum getFieldType() {
        return type;
    }


    @Override
    public String getCode() {
        return label;
    }


    public static ModuleEnumField getFieldByNumber(int number) {
        return ModuleEnumFieldMaps.numericMapping.get(number);
    }

    public static ModuleEnumField getFieldByCode(String code) {
        return ModuleEnumFieldMaps.codeMapping.get(code);
    }

    private static class ModuleEnumFieldMaps {
        private static Map<Integer, ModuleEnumField> numericMapping = new HashMap<Integer, ModuleEnumField>();
        private static Map<String, ModuleEnumField> codeMapping = new HashMap<String, ModuleEnumField>();
    }

    public String getTableName() {
        return tableName;
    }

    public String getColumnName() {
        return columnName;
    }

}

Included sonar project properties. # Required metadata sonar.projectKey=com.company sonar.projectName=project sonar.projectVersion=1.0

sonar.sources=src
sonar.java.binaries=target/classes

# java version used by source files:
sonar.java.source=1.8
1
What is the program code of this file? - Jeroen Heier
Can you please provide which version of SonarJava analyzer you are using to analyze the file? - Tibor Blenessy
I am using the java 8. - Vikram Palakurthi
@JeroenHeier - I have added the program code, I had to change it a bit to post it publicly (Just the names), thanks for looking at it. - Vikram Palakurthi
@TiborBlenessy - I am using Java8, Sonarqube-6.2 and Sonar-Scanner-2.8 with mssql server and running it locally my system. Thank you for looking at it. - Vikram Palakurthi

1 Answers

1
votes

To prevent searching for old bugs you should always use the SonarQube LTS version and the latest compatible plugin's and scanner for that version. Those items are regularly updated. See for example this compatibility page for SonarScanner for MSBuild and the plugin version matrix. You can use the links on the version matrix page to get the plugin details.