SteamWar/SpigotCore
Archiviert
13
0

Add versionDependantCall, See #144 BauSystem #80

Manuell gemergt
Lixfel hat 11 Commits von VersionDependantCalls nach master 2020-12-25 23:10:54 +01:00 zusammengeführt
3 geänderte Dateien mit 11 neuen und 38 gelöschten Zeilen
Nur Änderungen aus Commit e01a72a42b werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -1,25 +0,0 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.core;
@FunctionalInterface
public interface ExceptionlessCallable<T> {
T call();
}

Datei anzeigen

@ -21,25 +21,27 @@
package de.steamwar.core;
import java.util.concurrent.Callable;
public class VersionedCallable<T> {
private ExceptionlessCallable<T> exceptionlessCallable;
private Callable<T> callable;
private int minVersion;
public VersionedCallable(ExceptionlessCallable<T> exceptionlessCallable, int minVersion) {
this.exceptionlessCallable = exceptionlessCallable;
public VersionedCallable(Callable<T> callable, int minVersion) {
this.callable = callable;
this.minVersion = minVersion;
}
Review

Besser wäre es, einfach die minimale (kleinste) Version, für die dieser Versionsabhängige Code zuständig ist, zu speichern. Dann müssen die Versionsabhängigen Schnipsel zwar immer in absteigender Reihenfolge kommen, aber meistens ist ja die höchste Version die meistbenötigste.

Besser wäre es, einfach die minimale (kleinste) Version, für die dieser Versionsabhängige Code zuständig ist, zu speichern. Dann müssen die Versionsabhängigen Schnipsel zwar immer in absteigender Reihenfolge kommen, aber meistens ist ja die höchste Version die meistbenötigste.
Review

Dann ist auch bei X Werten immer klar, was aufgerufen werden muss.

Dann ist auch bei X Werten immer klar, was aufgerufen werden muss.
public T call() {
return exceptionlessCallable.call();
}
public static <T> T call(VersionedCallable<T>... versionedCallables) {
for (int i = versionedCallables.length - 1; i >= 0; i--) {
VersionedCallable<T> versionedCallable = versionedCallables[i];
Review

Könnte man auch einfach in call umbenennen, weil es ist ja schon durch den Klassennamen klar, dass es versionsabhängig ist.

Könnte man auch einfach in call umbenennen, weil es ist ja schon durch den Klassennamen klar, dass es versionsabhängig ist.
if (Core.getVersion() >= versionedCallable.minVersion) {
Review

Du musst die version nicht zwischenspeichern, Core.getVersion() ist kostenlos.

Du musst die version nicht zwischenspeichern, Core.getVersion() ist kostenlos.
return versionedCallable.call();
try {
Review

Kann man nicht einfach einen reverse-iterator verwenden? Wäre wesentlich sauberer

Kann man nicht einfach einen reverse-iterator verwenden? Wäre wesentlich sauberer
Review

Ich glaube nicht so ganz

Ich glaube nicht so ganz
Review

Außerdem wäre ein Reverse-Iterator wieder ein Objekt mehr. Ich glaube die einfache Schleife reicht da.

Außerdem wäre ein Reverse-Iterator wieder ein Objekt mehr. Ich glaube die einfache Schleife reicht da.
return versionedCallable.callable.call();
} catch (Exception e) {
Review

Kein überprüfen auf i == 0 hier!

Kein überprüfen auf i == 0 hier!
Review

Wenn ich dies nicht mache, können NullPointerExceptions fliegen!

Wenn ich dies nicht mache, können NullPointerExceptions fliegen!
Review

Bitte erstmal weiterlesen! Ja! Wenn hier nichts zutrifft, ist das ein Fehler!

Bitte erstmal weiterlesen! Ja! Wenn hier nichts zutrifft, ist das ein Fehler!
Review

Habe ich ja jetzt schon behoben!

Habe ich ja jetzt schon behoben!
throw new RuntimeException("Could not run version dependant code", e);
}
}
}
Review

Wird nie aufgerufen & gefällt mir nicht. Wenn diese Zeile erreicht wird, ist das ein Fehler und sollte auch entsprechend geworfen werden (als Programmierer, also Silent fehler, z.B. SecurityException)

Wird nie aufgerufen & gefällt mir nicht. Wenn diese Zeile erreicht wird, ist das ein Fehler und sollte auch entsprechend geworfen werden (als Programmierer, also Silent fehler, z.B. SecurityException)
throw new SecurityException();

Datei anzeigen

@ -31,15 +31,11 @@ public class VersionedRunnable {
this.minVersion = minVersion;
}
public void run() {
runnable.run();
}
public static void call(VersionedRunnable... versionedRunnables) {
for (int i = versionedRunnables.length - 1; i >= 0; i--) {
VersionedRunnable versionedRunnable = versionedRunnables[i];
if (Core.getVersion() >= versionedRunnable.minVersion) {
versionedRunnable.run();
versionedRunnable.runnable.run();
return;
}
Review

Siehe VersionedCallable.

Siehe VersionedCallable.
}