Урезанная версия моего кода выглядит примерно так
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 ничего не выполняется, поэтому он будет нулевым. Но это допустимо для кода, чтобы достичь этой точки, когда для «экземпляра» установлено либо значение null, либо значение.
Что мне делать, чтобы исправить это? Это ошибка в Sonarlint? Отключать правило особо не хочется - да и не знаю как, даже если бы смог.
Отредактировано: я изменил код, чтобы он был компилируемым примером. Он вырезан из реального кода и поэтому выдает ряд других ошибок SonarLint, о которых я здесь не беспокоюсь. Тем более, что marketAndProvider не используется!
Спасибо