如何修复 Sonarlint 显示的此错误?
How do I fix this error shown by Sonarlint?
我的代码的简化版本看起来像这样
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) 在检查实例是否为空的行抱怨 "Change this condition so that it does not always evaluate to "false""。似乎假设 try 块中的任何内容都未执行,因此它将为空。但是代码到达这一点是有效的 'instance' 被设置为 null 或一个值。
我应该怎么做才能解决这个问题?它是 Sonarlint 中的错误吗?我不是特别想关闭规则 - 即使我可以也不知道该怎么做。
已编辑:我已将代码修改为可编译示例。它是从真实代码中删减的,因此会抛出许多我在这里并不担心的其他 SonarLint 错误。尤其是没有使用marketAndProvider!
谢谢
这是影响 SonarLint 1.3.1 使用的 Java 插件 3.10 版的符号执行引擎的已知错误。该问题与以下 JIRA 票证相关:SONARJAVA-1538
该问题将在即将发布的 Java 插件的 3.12 版中修复,并将包含在下一版本的 SonarLint 中。
因此您的代码中没有任何需要修复的地方,这非常好。问题出在分析器方面。
我的代码的简化版本看起来像这样
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) 在检查实例是否为空的行抱怨 "Change this condition so that it does not always evaluate to "false""。似乎假设 try 块中的任何内容都未执行,因此它将为空。但是代码到达这一点是有效的 'instance' 被设置为 null 或一个值。
我应该怎么做才能解决这个问题?它是 Sonarlint 中的错误吗?我不是特别想关闭规则 - 即使我可以也不知道该怎么做。
已编辑:我已将代码修改为可编译示例。它是从真实代码中删减的,因此会抛出许多我在这里并不担心的其他 SonarLint 错误。尤其是没有使用marketAndProvider!
谢谢
这是影响 SonarLint 1.3.1 使用的 Java 插件 3.10 版的符号执行引擎的已知错误。该问题与以下 JIRA 票证相关:SONARJAVA-1538
该问题将在即将发布的 Java 插件的 3.12 版中修复,并将包含在下一版本的 SonarLint 中。
因此您的代码中没有任何需要修复的地方,这非常好。问题出在分析器方面。