From c0823bb903dddcaf65d0dd1e3cc6e0900bd3f6fd Mon Sep 17 00:00:00 2001 From: Ali-RS Date: Mon, 3 Dec 2018 12:35:02 +0330 Subject: [PATCH 1/2] Added a getState() method that will optionally fail on state misses. --- .../src/main/java/com/jme3/app/state/BaseAppState.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jme3-core/src/main/java/com/jme3/app/state/BaseAppState.java b/jme3-core/src/main/java/com/jme3/app/state/BaseAppState.java index a8a80f19e..cee045355 100644 --- a/jme3-core/src/main/java/com/jme3/app/state/BaseAppState.java +++ b/jme3-core/src/main/java/com/jme3/app/state/BaseAppState.java @@ -142,7 +142,11 @@ public abstract class BaseAppState implements AppState { } public final T getState( Class type ) { - return getStateManager().getState(type); + return getState( type, false ); + } + + public final T getState( Class type, boolean failOnMiss ) { + return getStateManager().getState( type, failOnMiss ); } @Override From a61813ebd86e01f168efc09a51d1db0a0f4c8cc9 Mon Sep 17 00:00:00 2001 From: Ali-RS Date: Mon, 3 Dec 2018 12:47:01 +0330 Subject: [PATCH 2/2] Added AppStateManager.getState(class, failOnMiss) that can optionally throw an exception if the state does not exist. --- .../java/com/jme3/app/state/AppStateManager.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/jme3-core/src/main/java/com/jme3/app/state/AppStateManager.java b/jme3-core/src/main/java/com/jme3/app/state/AppStateManager.java index 177fcb22f..df7eeb4b2 100644 --- a/jme3-core/src/main/java/com/jme3/app/state/AppStateManager.java +++ b/jme3-core/src/main/java/com/jme3/app/state/AppStateManager.java @@ -210,6 +210,18 @@ public class AppStateManager { * @return First attached state that is an instance of stateClass */ public T getState(Class stateClass){ + return getState(stateClass, false); + } + + /** + * Returns the first state that is an instance of subclass of the specified class. + * @param + * @param stateClass + * @param failOnMiss + * @return First attached state that is an instance of stateClass. If failOnMiss is true + * then an IllegalArgumentException is thrown if the state is not attached. + */ + public T getState(Class stateClass, boolean failOnMiss){ synchronized (states){ AppState[] array = getStates(); for (AppState state : array) { @@ -229,6 +241,10 @@ public class AppStateManager { } } } + + if(failOnMiss) { + throw new IllegalArgumentException("State not found for:" + stateClass); + } return null; }