【问题标题】:How do I fix this error shown by Sonarlint?如何修复 Sonarlint 显示的此错误?
【发布时间】:2016-03-16 17:57:43
【问题描述】:

我的代码的精简版看起来像这样

package com.funbluebits.test;

import static java.io.File.separator;
import static java.nio.file.Files.lines;
import static java.nio.file.Paths.get;

import java.io.*;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;

public class SonarLintExample {

    public static void main(String[] args) {

        SonarLintExample sle = new SonarLintExample();
        try {
            sle.handleInputFile("hello.txt");
            sle.handleInputFile("");
            sle.handleInputFile("myfile.pgp");
        }
        catch (Exception e) {

        }
    }

    public String handleInputFile(final String filePath) throws Exception {
        MarketAndProvider marketAndProvider = null;
        try {
            marketAndProvider = extractMarketAndProvider(filePath);

            if (filePath.contains(".pgp") || filePath.contains(".gpg"))
                return "encrypted";
            else {
                throw new Exception("Can only process encrypted files ");
            }

        } catch (Exception e) {
            if (marketAndProvider == null) {
                marketAndProvider = new MarketAndProvider("defaultMarket", "defaultProvider");
            }
            // real code does other stuff here too.
            throw new Exception(e);
        }
    }

    private MarketAndProvider extractMarketAndProvider(String filePath) {
        if (StringUtils.isEmpty(filePath))
        {
            return null;
        }
        int pos = filePath.indexOf(',');
        String market = filePath.substring(0,  pos);
        String provider = filePath.substring(pos+1);
        return new MarketAndProvider(market, provider);

    }

    public class MarketAndProvider {
        private final String market;
        private final String provider;

        public MarketAndProvider(String market, String provider) {
            this.market = market;
            this.provider = provider;
        }

        public String getMarket() {
            return market;
        }

        public String getProvider() {
            return provider;
        }
    }
}

Sonarlint (v1.3.1) 在检查实例是否为空的行中抱怨“更改此条件,使其不会总是评估为“假””。似乎假设 try 块中没有任何内容被执行,因此它将为空。但是,将“instance”设置为 null 或值时,代码到达这一点是有效的。

我应该怎么做才能解决这个问题?它是 Sonarlint 中的错误吗?我并不是特别想关闭规则 - 即使可以,我也不知道该怎么做。

已编辑:我已将代码修改为可编译的示例。它是从真实代码中删除的,因此会引发许多其他我不担心的 SonarLint 错误。尤其是没有使用marketAndProvider!

谢谢

【问题讨论】:

  • 能否请您编辑代码以便编译和重现问题?目前,关闭规则是不可能的,但很快就会在 SonarLint 2.0 中关闭(通过将其连接到 SonarQube 服务器)。
  • 显示行为的新示例代码。 SonarLint 错误发生在 handleInputFile 的 catch 子句中,但此时 marketAndProvider 可能为 null 或不为 null。感谢您的快速帮助。

标签: eclipse sonarlint


【解决方案1】:

这是符号执行引擎的一个已知错误,影响 Java 插件 3.10 版,SonarLint 1.3.1 本身使用该插件。该问题与以下 JIRA 票证有关:SONARJAVA-1538

该问题将在 Java 插件的 3.12 版本中修复,即将发布,并将包含在下一版本的 SonarLint 中。

因此,您的代码中没有什么需要修复的,这非常好。问题出在分析仪方面。

【讨论】:

  • 谢谢你的回答,我会等待下一个版本。
猜你喜欢
  • 2022-07-12
  • 2013-09-13
  • 1970-01-01
  • 2020-02-22
  • 2014-03-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多