12
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
Besitzer
Keine Beschreibung angegeben.
Lixfel hat 2020-12-24 13:37:13 +01:00 Änderungen angefragt
@ -51,3 +50,1 @@
} else {
BungeeReceiver_9.playpling(player);
}
Core.versionDependantCall(new VersionedRunnable(() -> BungeeReceiver_8.playPling(player), 8),
Besitzer

Das finde ich nicht so gut, dass du hier immer 2 (bzw. 4) Wegwerfobjekte erstellst. Der GC freut sich...

Das finde ich nicht so gut, dass du hier immer 2 (bzw. 4) Wegwerfobjekte erstellst. Der GC freut sich...
@ -85,0 +105,4 @@
}
}
public static void versionDependantCall(Runnable v8, Runnable v9, Runnable v10, Runnable v12, Runnable v14, Runnable v15) {
Besitzer

Ne, nicht auf Argumentanzahl aufbauen, welche Version aufgerufen werden soll, bitte entfernen.

Ne, nicht auf Argumentanzahl aufbauen, welche Version aufgerufen werden soll, bitte entfernen.
@ -85,0 +106,4 @@
}
public static void versionDependantCall(Runnable v8, Runnable v9, Runnable v10, Runnable v12, Runnable v14, Runnable v15) {
switch (Core.getVersion()) {
Besitzer

Das ist nicht wirklich generalisiert...

Das ist nicht wirklich generalisiert...
@ -85,0 +160,4 @@
return versionedCallable1.call();
}
return versionedCallable2.call();
}
Besitzer

Das gefällt mir hier alles noch ganz und gar nicht, dass es hier X verschiedene varianten zum Aufruf gibt. Wenn, dann möchte ich Aufrufsvarianten mit z.B. VersionedRunnable... sehen, was dann für x verschiedene Versionen funktioniert, sonst haben wir bei verschiedensten Versionen die lustigsten Probleme.

Auch finde ich, dass das nicht in den Core gehört, sondern wenn in eine eigene Klasse (oder die passenden Funktionen einfach direkt jeweils in VersionedCallable und VersionedRunnable

Das gefällt mir hier alles noch ganz und gar nicht, dass es hier X verschiedene varianten zum Aufruf gibt. Wenn, dann möchte ich Aufrufsvarianten mit z.B. VersionedRunnable... sehen, was dann für x verschiedene Versionen funktioniert, sonst haben wir bei verschiedensten Versionen die lustigsten Probleme. Auch finde ich, dass das nicht in den Core gehört, sondern wenn in eine eigene Klasse (oder die passenden Funktionen einfach direkt jeweils in VersionedCallable und VersionedRunnable
@ -0,0 +20,4 @@
package de.steamwar.core;
@FunctionalInterface
public interface ExceptionlessCallable<T> {
Besitzer

Der Name ist absolut irreführend und die Klasse nicht notwendig, da es da garantiert schon ein passendes Interface aus vanilla java gibt.

Der Name ist absolut irreführend und die Klasse nicht notwendig, da es da garantiert schon ein passendes Interface aus vanilla java gibt.
Autor
Besitzer

Es gibt eine Callable, jedoch hat die das Problem, dass bei dem call() auch eine Exception geworfen werden kann, bzw so steht es an der Methoden Signatur, und deswegen habe ich dies gemacht.

Es gibt eine Callable, jedoch hat die das Problem, dass bei dem call() auch eine Exception geworfen werden kann, bzw so steht es an der Methoden Signatur, und deswegen habe ich dies gemacht.
Besitzer

Der Fehler soll nicht irgendwo verschluckt werden.

Der Fehler soll nicht irgendwo verschluckt werden.
Besitzer

Da dieses Interface eigentlich nie außerhalb benötigt wird, kannst du das doch auch inlinen in VersionedCallable (und in VersionedRunnable dann eine entsprechende Parallelklasse aufmachen)

Da dieses Interface eigentlich nie außerhalb benötigt wird, kannst du das doch auch inlinen in VersionedCallable (und in VersionedRunnable dann eine entsprechende Parallelklasse aufmachen)
@ -0,0 +31,4 @@
public VersionedCallable(ExceptionlessCallable<T> exceptionlessCallable, int... versions) {
this.exceptionlessCallable = exceptionlessCallable;
for (int version : versions) this.versions.add(version);
Besitzer

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.
Besitzer

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

Dann ist auch bei X Werten immer klar, was aufgerufen werden muss.
@ -21,6 +21,7 @@ package de.steamwar.sql;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import de.steamwar.core.Core;
import de.steamwar.core.VersionedCallable;
Besitzer

Bitte aktiviere mal in deine IDE, dass Unused Imports automatisch aufgeräumt werden.

Bitte aktiviere mal in deine IDE, dass Unused Imports automatisch aufgeräumt werden.
Autor
Besitzer

Habe ich kriegt er aber manchmal selber nicht hin

Habe ich kriegt er aber manchmal selber nicht hin
Autor
Besitzer

Was hälst du jetzt davon, geht es mehr in die gewünschte Richtung?

Was hälst du jetzt davon, geht es mehr in die gewünschte Richtung?
Lixfel hat 2020-12-24 14:38:46 +01:00 Änderungen angefragt
@ -82,4 +82,5 @@ public class Core extends JavaPlugin{
private static void setInstance(Core instance) {
Core.instance = instance;
}
Besitzer

Echt tolle nötige Newline!

Echt tolle nötige Newline!
@ -0,0 +35,4 @@
return exceptionlessCallable.call();
}
public static <T> T versionDependantCall(VersionedCallable<T>... versionedCallables) {
Besitzer

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.
@ -0,0 +36,4 @@
}
public static <T> T versionDependantCall(VersionedCallable<T>... versionedCallables) {
int version = Core.getVersion();
Besitzer

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

Du musst die version nicht zwischenspeichern, Core.getVersion() ist kostenlos.
@ -0,0 +37,4 @@
public static <T> T versionDependantCall(VersionedCallable<T>... versionedCallables) {
int version = Core.getVersion();
for (int i = versionedCallables.length - 1; i >= 0; i--) {
Besitzer

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

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

Ich glaube nicht so ganz

Ich glaube nicht so ganz
Autor
Besitzer

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.
@ -0,0 +39,4 @@
int version = Core.getVersion();
for (int i = versionedCallables.length - 1; i >= 0; i--) {
VersionedCallable<T> versionedCallable = versionedCallables[i];
if (version >= versionedCallable.minVersion || i == 0) {
Besitzer

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

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

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

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

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

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

Habe ich ja jetzt schon behoben!

Habe ich ja jetzt schon behoben!
@ -0,0 +43,4 @@
return versionedCallable.call();
}
}
return null;
Besitzer

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)
@ -0,0 +37,4 @@
public static void versionDependantCall(VersionedRunnable... versionedRunnables) {
int version = Core.getVersion();
for (int i = versionedRunnables.length - 1; i >= 0; i--) {
Besitzer

Siehe VersionedCallable.

Siehe VersionedCallable.
Autor
Besitzer

Sollte nun wieder etwas näher an deine Vorstellung rankommen

Sollte nun wieder etwas näher an deine Vorstellung rankommen
Lixfel hat die Änderungen 2020-12-25 21:04:32 +01:00 genehmigt
Autor
Besitzer

Willst du es mergen oder wie soll ich das mir überlegen?

Willst du es mergen oder wie soll ich das mir überlegen?
Lixfel hat diesen Pull-Request 2020-12-25 23:10:54 +01:00 geschlossen
Lixfel löschte die Branch VersionDependantCalls 2020-12-25 23:12:21 +01:00
Anmelden, um an der Diskussion teilzunehmen.
Keine Beschreibung angegeben.