From eaaca6b90fd7705f94070e066e624f169e2d6349 Mon Sep 17 00:00:00 2001 From: "J. Neugebauer" Date: Sun, 11 Dec 2022 13:33:19 +0100 Subject: [PATCH] Validator Methods erwarten nun einen Parameter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Methoden in `Validator` erwarten nun als zweiten Parameter den Namen des Parameters, der geprüft wird. Dadurch sollen die Methoden hilfreicher werden, indem geneuere Fehlermeldungen generiert werden können. --- .../java/schule/ngb/zm/Zeichenfenster.java | 2 +- .../java/schule/ngb/zm/anim/Animation.java | 4 +- .../schule/ngb/zm/anim/AnimationFacade.java | 2 +- .../java/schule/ngb/zm/anim/Animations.java | 4 +- src/main/java/schule/ngb/zm/media/Music.java | 2 +- src/main/java/schule/ngb/zm/media/Sound.java | 2 +- src/main/java/schule/ngb/zm/util/Log.java | 2 +- .../java/schule/ngb/zm/util/Validator.java | 71 ++++++++----------- .../ngb/zm/util/events/EventDispatcher.java | 8 +-- .../schule/ngb/zm/util/io/FontLoader.java | 2 +- 10 files changed, 45 insertions(+), 54 deletions(-) diff --git a/src/main/java/schule/ngb/zm/Zeichenfenster.java b/src/main/java/schule/ngb/zm/Zeichenfenster.java index 2e6fb87..87a44a0 100644 --- a/src/main/java/schule/ngb/zm/Zeichenfenster.java +++ b/src/main/java/schule/ngb/zm/Zeichenfenster.java @@ -156,7 +156,7 @@ public class Zeichenfenster extends JFrame { * @param displayDevice Das Anzeigegerät für das Fenster. */ public Zeichenfenster( Zeichenleinwand canvas, String title, GraphicsDevice displayDevice ) { - super(Validator.requireNotNull(displayDevice).getDefaultConfiguration()); + super(Validator.requireNotNull(displayDevice, "displayDevice").getDefaultConfiguration()); this.displayDevice = displayDevice; Validator.requireNotNull(canvas, "Every Zeichenfenster needs a Zeichenleinwand, but got ."); diff --git a/src/main/java/schule/ngb/zm/anim/Animation.java b/src/main/java/schule/ngb/zm/anim/Animation.java index 100b656..8a01557 100644 --- a/src/main/java/schule/ngb/zm/anim/Animation.java +++ b/src/main/java/schule/ngb/zm/anim/Animation.java @@ -24,7 +24,7 @@ public abstract class Animation extends Constants implements Updatable { public Animation( DoubleUnaryOperator easing ) { this.runtime = Constants.DEFAULT_ANIM_RUNTIME; - this.easing = Validator.requireNotNull(easing); + this.easing = Validator.requireNotNull(easing, "easing"); } public Animation( int runtime ) { @@ -34,7 +34,7 @@ public abstract class Animation extends Constants implements Updatable { public Animation( int runtime, DoubleUnaryOperator easing ) { this.runtime = runtime; - this.easing = Validator.requireNotNull(easing); + this.easing = Validator.requireNotNull(easing, "easing"); } public int getRuntime() { diff --git a/src/main/java/schule/ngb/zm/anim/AnimationFacade.java b/src/main/java/schule/ngb/zm/anim/AnimationFacade.java index 1a0ca6c..3bc8aa7 100644 --- a/src/main/java/schule/ngb/zm/anim/AnimationFacade.java +++ b/src/main/java/schule/ngb/zm/anim/AnimationFacade.java @@ -10,7 +10,7 @@ public class AnimationFacade extends Animation { public AnimationFacade( Animation anim, int runtime, DoubleUnaryOperator easing ) { super(runtime, easing); - this.anim = Validator.requireNotNull(anim); + this.anim = Validator.requireNotNull(anim, "anim"); } @Override diff --git a/src/main/java/schule/ngb/zm/anim/Animations.java b/src/main/java/schule/ngb/zm/anim/Animations.java index b5b37e8..6f1137a 100644 --- a/src/main/java/schule/ngb/zm/anim/Animations.java +++ b/src/main/java/schule/ngb/zm/anim/Animations.java @@ -123,8 +123,8 @@ public class Animations { } public static final Future animateProperty( T target, final double from, final double to, int runtime, DoubleUnaryOperator easing, DoubleConsumer propSetter ) { - Validator.requireNotNull(target); - Validator.requireNotNull(propSetter); + Validator.requireNotNull(target, "target"); + Validator.requireNotNull(propSetter, "propSetter"); return play(target, runtime, easing, ( e ) -> propSetter.accept(Constants.interpolate(from, to, e))); } diff --git a/src/main/java/schule/ngb/zm/media/Music.java b/src/main/java/schule/ngb/zm/media/Music.java index 266b499..8536747 100644 --- a/src/main/java/schule/ngb/zm/media/Music.java +++ b/src/main/java/schule/ngb/zm/media/Music.java @@ -84,7 +84,7 @@ public class Music implements Audio { * @see ResourceStreamProvider#getResourceURL(String) */ public Music( String audioSource ) { - Validator.requireNotNull(audioSource); + Validator.requireNotNull(audioSource, "audioSource"); this.audioSource = audioSource; } diff --git a/src/main/java/schule/ngb/zm/media/Sound.java b/src/main/java/schule/ngb/zm/media/Sound.java index b7f093f..2ee0f95 100644 --- a/src/main/java/schule/ngb/zm/media/Sound.java +++ b/src/main/java/schule/ngb/zm/media/Sound.java @@ -76,7 +76,7 @@ public class Sound implements Audio { * @see ResourceStreamProvider#getResourceURL(String) */ public Sound( String source ) { - Validator.requireNotNull(source); + Validator.requireNotNull(source, "source"); this.audioSource = source; } diff --git a/src/main/java/schule/ngb/zm/util/Log.java b/src/main/java/schule/ngb/zm/util/Log.java index 5b4346d..da467df 100644 --- a/src/main/java/schule/ngb/zm/util/Log.java +++ b/src/main/java/schule/ngb/zm/util/Log.java @@ -77,7 +77,7 @@ public final class Log { * mindestens herabgesenkt werden sollen. */ public static void enableGlobalLevel( Level level ) { - int lvl = Validator.requireNotNull(level).intValue(); + int lvl = Validator.requireNotNull(level, "level").intValue(); ensureRootLoggerInitialized(); // Decrease level of root level ConsoleHandlers for output diff --git a/src/main/java/schule/ngb/zm/util/Validator.java b/src/main/java/schule/ngb/zm/util/Validator.java index b018275..5c6d159 100644 --- a/src/main/java/schule/ngb/zm/util/Validator.java +++ b/src/main/java/schule/ngb/zm/util/Validator.java @@ -6,35 +6,55 @@ import java.util.function.Supplier; /** * Statische Methoden, um Methodenparameter auf Gültigkeit zu prüfen. */ -@SuppressWarnings( "UnusedReturnValue" ) +@SuppressWarnings( {"unused", "UnusedReturnValue"} ) public class Validator { - public static final T requireNotNull( T obj ) { - return Objects.requireNonNull(obj); + public static final T requireNotNull( T obj, CharSequence paramName ) { + return requireNotNull(obj, () -> "Parameter <%s> may not be null.".format(paramName.toString())); } - public static final T requireNotNull( T obj, CharSequence msg ) { - return Objects.requireNonNull(obj, msg::toString); + public static final T requireNotNull( T obj, CharSequence paramName, CharSequence msg ) { + return requireNotNull(obj, () -> msg.toString().format(paramName.toString())); } public static final T requireNotNull( T obj, Supplier msg ) { - return Objects.requireNonNull(obj, msg); + if( obj == null ) { + throw new NullPointerException(msg == null ? "Parameter may nut be null." : msg.get()); + } + return obj; } - public static final String requireNotEmpty( String str ) { - return requireNotEmpty(str, (Supplier) null); + public static final String requireNotEmpty( String str, CharSequence paramName ) { + return requireNotEmpty(str, () -> String.format("Parameter <%s> may not be empty string (<%s> provided)", paramName, str)); } - public static final String requireNotEmpty( String str, CharSequence msg ) { - return requireNotEmpty(str, msg::toString); + public static final String requireNotEmpty( String str, CharSequence paramName, CharSequence msg ) { + return requireNotEmpty(str, () -> msg.toString().format(paramName.toString())); } public static final String requireNotEmpty( String str, Supplier msg ) { - if( str.isEmpty() ) + if( str.isEmpty() ) { throw new IllegalArgumentException(msg == null ? String.format("Parameter may not be empty string (<%s> provided)", str) : msg.get()); + } return str; } + public static final T[] requireNotEmpty( T[] arr, CharSequence paramName ) { + return requireNotEmpty(arr, () -> String.format("Parameter <%s> may not be empty", paramName)); + } + + public static final T[] requireNotEmpty( T[] arr, CharSequence paramName, CharSequence msg ) { + return requireNotEmpty(arr, () -> msg.toString().format(paramName.toString())); + } + + public static final T[] requireNotEmpty( T[] arr, Supplier msg ) { + if( arr.length == 0 ) + throw new IllegalArgumentException(msg == null ? "Parameter array may not be empty" : msg.get()); + return arr; + } + + + public static final int requirePositive( int i ) { return requirePositive(i, (Supplier) null); } @@ -139,21 +159,6 @@ public class Validator { } */ - - public static final T[] requireNotEmpty( T[] arr ) { - return requireNotEmpty(arr, (Supplier) null); - } - - public static final T[] requireNotEmpty( T[] arr, CharSequence msg ) { - return requireNotEmpty(arr, msg::toString); - } - - public static final T[] requireNotEmpty( T[] arr, Supplier msg ) { - if( arr.length == 0 ) - throw new IllegalArgumentException(msg == null ? "Parameter array may not be empty" : msg.get()); - return arr; - } - public static final T[] requireSize( T[] arr, int size ) { return requireSize(arr, size, (Supplier) null); } @@ -168,20 +173,6 @@ public class Validator { return arr; } - public static final T[] requireValid( T[] arr ) { - return requireValid(arr, (Supplier) null); - } - - public static final T[] requireValid( T[] arr, CharSequence msg ) { - return requireValid(arr, msg::toString); - } - - public static final T[] requireValid( T[] arr, Supplier msg ) { - if( arr == null || arr.length > 0 ) - throw new IllegalArgumentException(msg == null ? "Parameter array may not be null or empty" : msg.get()); - return arr; - } - private Validator() { } diff --git a/src/main/java/schule/ngb/zm/util/events/EventDispatcher.java b/src/main/java/schule/ngb/zm/util/events/EventDispatcher.java index 16a710c..d80434d 100644 --- a/src/main/java/schule/ngb/zm/util/events/EventDispatcher.java +++ b/src/main/java/schule/ngb/zm/util/events/EventDispatcher.java @@ -76,8 +76,8 @@ public class EventDispatcher> { } public void registerEventType( String eventKey, BiConsumer dispatcher ) { - Validator.requireNotNull(eventKey); - Validator.requireNotNull(dispatcher); + Validator.requireNotNull(eventKey, "eventKey"); + Validator.requireNotNull(dispatcher, "dispatcher"); if( !eventRegistered(eventKey) ) { eventRegistry.put(eventKey, dispatcher); @@ -102,8 +102,8 @@ public class EventDispatcher> { } public void dispatchEvent( String eventKey, final E event ) { - Validator.requireNotNull(eventKey); - Validator.requireNotNull(event); + Validator.requireNotNull(eventKey, "eventKey"); + Validator.requireNotNull(event, "event"); if( eventRegistered(eventKey) ) { final BiConsumer dispatcher = eventRegistry.get(eventKey); diff --git a/src/main/java/schule/ngb/zm/util/io/FontLoader.java b/src/main/java/schule/ngb/zm/util/io/FontLoader.java index 3a6bfde..122edc6 100644 --- a/src/main/java/schule/ngb/zm/util/io/FontLoader.java +++ b/src/main/java/schule/ngb/zm/util/io/FontLoader.java @@ -53,7 +53,7 @@ public class FontLoader { } public static Font loadFont( String name, String source ) { - Validator.requireNotNull(source,"Font source may not be null"); + Validator.requireNotNull(source, "Font source may not be null"); Validator.requireNotEmpty(source, "Font source may not be empty."); if( fontCache.containsKey(name) ) {