![](/img/trans.png)
[英]Unused method parameters should be removed (squid:S1172) false positive using lambda
[英]Eclipse SonarLint false positive “Unused assignments should be removed (java:S1854)”
我正在將 Eclipse 2020-03 (4.15.0) 與 Sonarlint 一起用於 Eclipse 5.1.0.17086 並且我得到,IMO,誤報 S1854 警告在下面的代碼中”(取自書中的“Java8 中的操作中的警告”)。 使用 Java OpenJDK 13.0.2。 這不是什么大事,因為我只是在研究 Java 8 技術。 我只是想了解為什么這些行被標記...
package nl.paul.forkjoin;
import java.util.concurrent.RecursiveTask;
public class ForkJoinSumCalculator extends RecursiveTask<Long> {
private static final long serialVersionUID = 1L;
private final long[] numbers;
private final int start;
private final int end;
public static final long THRESHOLD = 10_000;
public ForkJoinSumCalculator(long[] numbers) {
this(numbers, 0, numbers.length);
}
private ForkJoinSumCalculator(long[] numbers, int start, int end) {
this.numbers = numbers;
this.start = start;
this.end = end;
}
@Override
protected Long compute() {
int length = end - start; //SonarLint S1854 warning
if (length <= THRESHOLD) {
return computeSequentially();
}
ForkJoinSumCalculator leftTask = new ForkJoinSumCalculator(numbers, start, start + length / 2); //SonarLint S1854 warning
ForkJoinSumCalculator rightTask = new ForkJoinSumCalculator(numbers, start + length / 2, end); //SonarLint S1854 warning
leftTask.fork();
return leftTask.join() + rightTask.compute();
}
private long computeSequentially() {
long sum = 0;
for (int i = start; i < end; i++) {
sum += numbers[i];
}
return sum;
}
}
我在這里錯過了什么嗎? “length”、“leftTask”和“rightTask”都在代碼中多次使用...
上面的 class 用下面的 class 測試:
package nl.paul.forkjoin;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.LongStream;
public class ForkJoinTest {
public static void main(String[] args) {
System.out.println(new ForkJoinTest().doIt(10_000_000));
}
private long doIt(long n) {
long[] numbers = LongStream.rangeClosed(0, n).toArray();
long start = System.currentTimeMillis();
ForkJoinTask<Long> task = new ForkJoinSumCalculator(numbers);
long result = new ForkJoinPool().invoke(task);
long finish = System.currentTimeMillis();
System.out.println("Processing took " + (finish - start) + " msec.");
return result;
}
}
我對 Sonar 上的警告 S1854 進行了簡短調查,發現在 Github 和 Sonar 網站本身上創建了幾個問題,顯然它已在 2020 年 2 月修復。 檢查您的聲納是否是最新的,如果是,則錯誤可能尚未修復:(
我終於解決了這個問題,我被 sonarlint 論壇上的帖子設置在正確的軌道上( https://community.sonarsource.com/t/java-s2166-rule-not-working/22943/15 )。 My projects were working with Java 13 while my Windows cmd "Java -version" returned Java 1.8 as the running Java version. 這種不匹配(Eclipse 啟動 Java 1.8 和項目使用 Java 13)導致了 SonarLint FP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.