Fixe SonarQube Reliability-Issues S2789, S3077 und S2184
S2789 (32 Stellen): null-Checks auf Optional-Feldern entfernt bzw. durch Objects.requireNonNullElse(field, Optional.empty()) ersetzt. Die zuvor defensive Behandlung von null-Optionals erfolgt jetzt ueber den Bibliotheksaufruf, sodass das Verhalten unveraendert bleibt, aber die direkte Null-Pruefung gegen Optional entfaellt. S3077 (5 Stellen): volatile-Felder mit Objekt-Referenzen durch AtomicReference ersetzt (ScheduledExecutorServiceSchedulerAdapter, BootstrapRunner.guiApplicationRunContext, PdfPreviewPane.currentDocument/ currentRenderer/currentSourceFile, SingleInstanceGuard.socket). Die PdfPreviewPane-Felder werden auf JavaFX- bzw. Worker-Thread genutzt; AtomicReference bietet hier konsistente atomare Publikation ohne Verhaltensaenderung. S2184 (3 Stellen): Integer-Division SECONDARY_SPACING / 2 durch SECONDARY_SPACING / 2.0 ersetzt, damit das Insets-Argument als double ohne implizite Truncierung berechnet wird.
This commit is contained in:
+4
-5
@@ -54,7 +54,7 @@ public class ScheduledExecutorServiceSchedulerAdapter implements SchedulerPort {
|
||||
*/
|
||||
final AtomicReference<BatchRunTrigger> currentTrigger = new AtomicReference<>();
|
||||
|
||||
private volatile ScheduledExecutorService executor;
|
||||
private final AtomicReference<ScheduledExecutorService> executor = new AtomicReference<>();
|
||||
|
||||
/**
|
||||
* Erstellt einen neuen Adapter.
|
||||
@@ -85,7 +85,7 @@ public class ScheduledExecutorServiceSchedulerAdapter implements SchedulerPort {
|
||||
public void startScheduler(SchedulerConfig config, BatchRunTrigger trigger) {
|
||||
Objects.requireNonNull(config, "config darf nicht null sein");
|
||||
Objects.requireNonNull(trigger, "trigger darf nicht null sein");
|
||||
if (executor != null) {
|
||||
if (executor.get() != null) {
|
||||
logger.debug("Scheduler ist bereits aktiv – Start-Aufruf wird ignoriert.");
|
||||
return;
|
||||
}
|
||||
@@ -105,7 +105,7 @@ public class ScheduledExecutorServiceSchedulerAdapter implements SchedulerPort {
|
||||
0L,
|
||||
config.intervalSeconds(),
|
||||
TimeUnit.SECONDS);
|
||||
executor = newExecutor;
|
||||
executor.set(newExecutor);
|
||||
logger.info("Scheduler gestartet. Intervall: {} Sekunden.", config.intervalSeconds());
|
||||
}
|
||||
|
||||
@@ -118,12 +118,11 @@ public class ScheduledExecutorServiceSchedulerAdapter implements SchedulerPort {
|
||||
*/
|
||||
@Override
|
||||
public void stopScheduler() {
|
||||
ScheduledExecutorService localExecutor = executor;
|
||||
ScheduledExecutorService localExecutor = executor.getAndSet(null);
|
||||
if (localExecutor == null) {
|
||||
logger.debug("Scheduler ist bereits gestoppt – Stop-Aufruf wird ignoriert.");
|
||||
return;
|
||||
}
|
||||
executor = null;
|
||||
currentTrigger.set(null);
|
||||
localExecutor.shutdown();
|
||||
logger.info("Scheduler angehalten.");
|
||||
|
||||
Reference in New Issue
Block a user